This PR fixes `grind` to support dot notation on declarations in the lemma list. When using `grind only [foo.le]` where `foo.le` is dot notation applying `LT.lt.le` to a theorem `foo`, grind previously failed with "Unknown constant `foo.le`" because it tried to look up `foo.le` as a constant name rather than elaborating it as a term. The fix adds a fallback in `processParam`: when constant lookup fails, it now falls back to `processTermParam` which elaborates the identifier as a term. This allows dot notation expressions like `log_two_lt_d9.le` to work correctly. Closes #11690 🤖 Prepared with Claude Code --------- Co-authored-by: Claude <noreply@anthropic.com>
26 lines
640 B
Text
26 lines
640 B
Text
/-!
|
||
# Test for issue #11690: grind should support dot notation on declarations
|
||
|
||
When using `grind only [foo.le]` where `foo.le` is dot notation applying
|
||
`LT.lt.le` to a theorem `foo`, grind should elaborate it as a term rather
|
||
than failing with "Unknown constant `foo.le`".
|
||
-/
|
||
|
||
class Preorder (α : Type) extends LE α, LT α where
|
||
|
||
theorem le_of_lt [Preorder α] {a b : α} (hab : a < b) : a ≤ b := sorry
|
||
|
||
variable [Preorder α]
|
||
|
||
def LT.lt.le := @le_of_lt
|
||
|
||
axiom α : Type
|
||
axiom a : α
|
||
axiom b : α
|
||
axiom bar : a < b
|
||
|
||
example : a ≤ b := bar.le -- works (term elaboration)
|
||
|
||
#guard_msgs in
|
||
example : a ≤ b := by
|
||
grind only [bar.le]
|