lean4-htt/tests/lean/run/grind_10233.lean
Leonardo de Moura c15ee8a9f0
fix: universe polymorphic E-matching (#10239)
This PR fixes the E-matching procedure for theorems that contain
universe parameters not referenced by any regular parameter. This kind
of theorem seldom happens in practice, but we do have instances in the
standard library. Example:
```
@[simp, grind =] theorem Std.Do.SPred.down_pure {φ : Prop} : (⌜φ⌝ : SPred []).down = φ := rfl
```

closes #10233
2025-09-03 22:14:58 +00:00

28 lines
760 B
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Std.Tactic.Do
open Std.Do
/-!
Test for performing E-matching on theorems that contain universe parameters
not referenced by any regular parameter.
-/
example (c : (SPred.pure False : SPred []).down) : False := by
grind
opaque foo {α : Type u} {β : Type v} (a : α) (b : β) : Nat
@[grind] theorem fooEq (a : Nat) :
foo.{0, v} (β := List (Sort v)) a [] = foo.{0, w} (β := List (Sort w)) a [] :=
sorry
example
(_ : foo 1 ([] : List (Sort v)) = 1)
(_ : foo 2 ([] : List (Sort w)) ≠ foo 2 ([] : List (Sort w')))
(_ : foo 3 ([] : List (Sort u)) = 3)
: False := by
grind
opaque boo (x : False) : Prop
theorem aux (_ : foo 2 ([] : List (Sort w)) ≠ foo 2 ([] : List (Sort w'))) (_ : boo (by grind)) : True := by
grind