54f2c0f254
The motivation is to reduce the number of instances generated by ematching. For example, given inv_inv: forall a, (a⁻¹)⁻¹ = a the new heuristic uses ((a⁻¹)⁻¹) as the pattern. This matches the intuition that inv_inv should be used a simplification rule. The default pattern inference procedure would use (a⁻¹). This is bad because it generates an infinite chain of instances whenever there is a term (a⁻¹) in the proof state. By using (a⁻¹), we get (a⁻¹)⁻¹ = a Now that we have (a⁻¹)⁻¹, we can match again and generate ((a⁻¹)⁻¹)⁻¹ = a⁻¹ and so on
7 lines
207 B
Text
7 lines
207 B
Text
constants {A : Type.{1}} (P : A → Prop) (Q : A → Prop)
|
|
definition H [forward] : ∀ a, (: P a :) → Exists Q := sorry
|
|
|
|
set_option blast.strategy "ematch"
|
|
|
|
example (a : A) : P a → Exists Q :=
|
|
by blast
|