37 lines
1.1 KiB
Text
37 lines
1.1 KiB
Text
open tactic
|
|
|
|
constant f (n : nat) : n ≥ 0 → nat
|
|
|
|
axiom foo1 (n : nat) : n ≥ 0
|
|
axiom foo2 (n : nat) : n ≥ 0
|
|
axiom foo3 (n : nat) : n ≥ 0
|
|
|
|
-- by default we dont canonize proofs
|
|
example (a b : nat) (H : f a (foo1 a) = f a (foo2 a)) : true :=
|
|
by do
|
|
s ← simp_lemmas.mk_default,
|
|
get_local `H >>= infer_type >>= s^.dsimplify >>= trace,
|
|
constructor
|
|
|
|
constant x1 : nat -- update the environment to force defeq_canonize cache to be reset
|
|
|
|
example (a b : nat) (H : f a (foo1 a) = f a (foo2 a)) : true :=
|
|
by do
|
|
s ← simp_lemmas.mk_default,
|
|
get_local `H >>= infer_type >>= s^.dsimplify >>= trace,
|
|
constructor
|
|
|
|
constant x2 : nat -- update the environment to force defeq_canonize cache to be reset
|
|
|
|
example (a b : nat) (H : f a (id (id (id (foo1 a)))) = f a (foo2 a)) : true :=
|
|
by do
|
|
s ← simp_lemmas.mk_default,
|
|
get_local `H >>= infer_type >>= s^.dsimplify >>= trace,
|
|
constructor
|
|
|
|
-- Example that does not work
|
|
example (a b : nat) (H : (λ x, f x (id (id (id (foo1 x))))) = (λ x, f x (foo2 x))) : true :=
|
|
by do
|
|
s ← simp_lemmas.mk_default,
|
|
get_local `H >>= infer_type >>= s^.dsimplify >>= trace,
|
|
constructor
|