This PR adds an API for building symbolic simulation engines and verification condition generators that leverage `grind`. The API wraps `Sym` operations to work with `grind`'s `Goal` type, enabling lightweight symbolic execution while carrying `grind` state for discharge steps. New operations on `Goal`: - `mkGoal`: create a `Goal` from an `MVarId` - `introN`, `intros`: introduce binders - `apply`: apply backward rules - `simp`, `simpIgnoringNoProgress`: simplify using `Sym.Simp` - `internalize`, `internalizeAll`: add hypotheses to the E-graph - `grind`: attempt to close the goal using `grind` - `assumption`: close by matching a hypothesis A new test demonstrates the API on a stateful program with conditionals, using `grind` to discharge arithmetic side conditions. |
||
|---|---|---|
| .. | ||
| add_sub_cancel.lean | ||
| meta_simp_1.lean | ||
| meta_simp_2.lean | ||
| meta_simp_4.lean | ||
| shallow_add_sub_cancel.lean | ||
| shallow_add_sub_cancel_grind.lean | ||
| simp_1.lean | ||
| simp_2.lean | ||
| simp_3.lean | ||
| simp_4.lean | ||