The OmegaM state monad. #
We keep track of the linear atoms (up to defeq) that have been encountered so far, and also generate new facts as new atoms are recorded.
The main functions are:
atoms : OmegaM (List Expr)which returns the atoms recorded so farlookup (e : Expr) : OmegaM (Nat × Option (HashSet Expr))which checks if anExprhas already been recorded as an atom, and records it.lookupreturn the index inatomsfor thisExpr. TheOption (HashSet Expr)return value isnoneis the expression has been previously recorded, and otherwise contains new facts that should be added to theomegaproblem.- for each new atom
aof the form((x : Nat) : Int), the fact that0 ≤ a - for each new atom
aof the formx / k, forka positive numeral, the facts thatk * a ≤ x < k * a + k - for each new atom of the form
((a - b : Nat) : Int), the fact:b ≤ a ∧ ((a - b : Nat) : Int) = a - b ∨ a < b ∧ ((a - b : Nat) : Int) = 0 - for each new atom of the form
min a b, the factsmin a b ≤ aandmin a b ≤ b(and similarly formax) - for each new atom of the form
if P then a else b, the disjunction:(P ∧ (if P then a else b) = a) ∨ (¬ P ∧ (if P then a else b) = b)TheOmegaMmonad also keeps an internal cache of visited expressions (not necessarily atoms, but arbitrary subexpressions of one side of a linear relation) to reduce duplication. The cache mapsExprs to pairs consisting of aLinearCombo, and proof that the expression is equal to the evaluation of theLinearComboat the atoms.
- for each new atom
Context for the OmegaM monad, containing the user configurable options.
- cfg : Meta.Omega.OmegaConfig
User configurable options for
omega.
Instances For
The internal state for the OmegaM monad, recording previously encountered atoms.
- atoms : Std.HashMap Expr Nat
The atoms up-to-defeq encountered so far.
Instances For
Cache of expressions that have been visited, and their reflection as a linear combination.
Equations
Instances For
The OmegaM monad maintains two pieces of state:
- the linear atoms discovered while processing hypotheses
- a cache mapping subexpressions of one side of a linear inequality to
LinearCombos (and a proof that theLinearComboevaluates at the atoms to the original expression).
Equations
Instances For
Run a computation in the OmegaM monad, starting with no recorded atoms.
Equations
Instances For
Retrieve the user-specified configuration options.
Equations
Instances For
Retrieve the list of atoms.
Equations
Instances For
Return the Expr representing the list of atoms.
Equations
Instances For
Return the Expr representing the list of atoms as a Coeffs.
Equations
Instances For
If groundNat? e = some n, then e is definitionally equal to OfNat.ofNat n.
If groundInt? e = some i,
then e is definitionally equal to the standard expression for i.
Construct the term with type hint (Eq.refl a : a = b)
Equations
Instances For
Analyzes a newly recorded atom, returning a collection of interesting facts about it that should be added to the context.
Equations
Instances For
Look up an expression in the atoms, recording it if it has not previously appeared.
Return its index, and, if it is new, a collection of interesting facts about the atom.
- for each new atom
aof the form((x : Nat) : Int), the fact that0 ≤ a - for each new atom
aof the formx / k, forka positive numeral, the facts thatk * a ≤ x < k * a + k - for each new atom of the form
((a - b : Nat) : Int), the fact:b ≤ a ∧ ((a - b : Nat) : Int) = a - b ∨ a < b ∧ ((a - b : Nat) : Int) = 0