This PR fixes a bug in the equality-resolution procedure used by `grind`. The procedure now performs a topological sort so that every simplified theorem declaration is emitted **before** any place where it is referenced. Previously, applying equality resolution to ```lean h : ∀ x, p x a → ∀ y, p y b → x ≠ y ``` in the example ```lean example (p : Nat → Nat → Prop) (a b c : Nat) (h : ∀ x, p x a → ∀ y, p y b → x ≠ y) (h₁ : p c a) (h₂ : p c b) : False := by grind ``` caused `grind` to produce the incorrect term ```lean p ?y a → ∀ y, p y b → False ``` The patch eliminates this error, and the following correct simplified theorem is generated ```lean ∀ y, p y a → p y b → False ``` |
||
|---|---|---|
| .. | ||
| experiments | ||
| field_normalization.lean | ||
| grind_local_namespace.lean | ||
| grind_lrat_internal_error.lean | ||
| grind_palindrome.lean | ||
| lrat_mvar.lean | ||
| module_normalization.lean | ||
| module_relations.lean | ||
| ordered_modules.lean | ||
| README.md | ||
| ring_normalization.lean | ||
| sublist.lean | ||
Aspirational test cases for grind
These are not expected to work yet; we're collecting examples that we'd like to make work!