* Leon is organized similarly to a compiler with a concept of [[leon.Pipeline]]
* and [[leon.LeonPhase]]. The main phases of Leon are implemented in subpackages, with
* an overview of the role of each of them below.
*
* The definition of the Pure Scala AST is in [[leon.purescala]]. Most of the other packages
* are articulated around the definitions of these ASTs. The [[leon.xlang]] provides extensions
* to the Pure Scala AST, but most of the other packages will ignore these extensions and
* assume a Pure Scala only AST.
*
* - [[leon.codegen]] provides bytecode generator for Leon programs. Enable the conversion of a [[leon.purescala.Definitions.Program]] to JVM bytecode.
*
* - [[leon.datagen]] provides a generator of expressions (trees), based on vanuatoo.
*
* - [[leon.evaluators]] implements different evaluators for Leon programs in Pure Scala.
*
* - [[leon.frontends]] provides the different front-ends to Leon. Currently it only implements a scalac integration, but it could potentially support other language.
*
* - [[leon.purescala]] defines the core AST for Pure Scala. Also provides useful tree manipulation methods.
*
* - [[leon.repair]] implements the Repair module of Leon.
*
* - [[leon.solvers]] provides an interface and implementations to solvers for Pure Scala expressions. The solvers are typically wrappers around SMT solvers, with some additional algorithms to handle recursive function invocations.
*
* - [[leon.synthesis]] implements the Synthesis module of Leon.
*
* - [[leon.termination]] implements the termination checker of Leon.
*
* - [[leon.utils]]
*
* - [[leon.verification]] implements the verification module of Leon.
*
* - [[leon.xlang]] provides extensions to Pure Scala. In particular, it introduces some expressions to represent imperative programs. Also provides the code to map such programs to Pure Scala equivalent ones.
* == Structure ==
*
* The package is organized in the following subpackages:
*
* [[inox.ast]]: Provides definitions for expressions, types and definitions,
* as well as operations on them
* [[inox.datagen]]: Generators/enumerators for Inox expressions
* [[inox.evaluators]]: Evaluators of Inox expressions
* [[inox.solvers]]: Interfaces to SMT-solvers
* [[inox.transformers]]: Tree transformations for Inox expressions