22 lines
645 B
Text
22 lines
645 B
Text
|
open nat subtype
|
||
|
|
||
|
definition f (x : nat) (y : {n : nat | n > x}) : nat :=
|
||
|
x + elt_of y
|
||
|
|
||
|
definition f_flat (x : nat) (y : nat) (H : y > x) : nat :=
|
||
|
f x (tag y H)
|
||
|
|
||
|
lemma f_flat_simp [forward] (x : nat) (y : nat) (H : y > x) : f x (tag y H) = f_flat x y H :=
|
||
|
rfl
|
||
|
|
||
|
set_option trace.simplifier true
|
||
|
set_option trace.blast true
|
||
|
set_option blast.strategy "ematch"
|
||
|
|
||
|
example (a b c d : nat) (Ha : c > a) (Hb : d > b) : a = b → c = d → f a (tag c Ha) = f b (tag d Hb) :=
|
||
|
by blast
|
||
|
|
||
|
example (h : nat → nat) (a b c d : nat) (Ha : h c > h a) (Hb : h d > h b)
|
||
|
: h a = h b → c = d → f (h a) (tag (h c) Ha) = f (h b) (tag (h d) Hb) :=
|
||
|
by blast
|