  Library learning compresses a given corpus of programs by extracting common
structure from the corpus into reusable library functions. Prior work on
library learning suffers from two limitations that prevent it from scaling to
larger, more complex inputs. First, it explores too many candidate library
functions that are not useful for compression. Second, it is not robust to
syntactic variation in the input.
  We propose library learning modulo theory (LLMT), a new library learning
algorithm that additionally takes as input an equational theory for a given
problem domain. LLMT uses e-graphs and equality saturation to compactly
represent the space of programs equivalent modulo the theory, and uses a novel
e-graph anti-unification technique to find common patterns in the corpus more
directly and efficiently.
  We implemented LLMT in a tool named BABBLE. Our evaluation shows that BABBLE
achieves better compression orders of magnitude faster than the state of the
art. We also provide a qualitative evaluation showing that BABBLE learns
reusable functions on inputs previously out of reach for library learning.

Programming Languages