# Expr library

This library is aimed at replacing the use of eqlib in QEDb. The design goals are as follows:

- Design easier expression data structure (array instead of tree).
- Adopt expression parsing and LaTeX printing code from eqlib.
- Create codecs that are compatible with the array and binary codec from eqlib.
- Avoid the use of a Subs class as much as possible using plain functions.
- Add more flexible manipulation and comparison methods that are targeted at the use cases of QEDb.

The reason to reimplement this part of the QEDb project from scratch is to ensure high code quality and avoid the accumulation of obscure features. When eqlib was designed many of the current design choices of QEDb were still unknown.

## Structure

The library has three parts: the core functions, the interface functions, and the lemma functions. The core functions focus only on expression manipulation in general and do not implement any higher level system. The interface functions contain the expression parser, text generator (printer), and binary codec. The lemma functions implement a higher level system for building proofs (lemmas) using the algorithms implemented in this library.

## Renaming

Some entity names have changed with respect to eqlib in order to improve readability:

- Generic functions are now called
*patterns* - Substitutions are now called
*transforms* - Rules are now called
*formulas* - Steps are now called
*rewrites* - Proofs are now called
*lemmas*

## Libraries

- expr
- Expression manipulation core library [...]
- expr.test.testenv