lean2/tests/lean/run/blast_discr_tree_bug.lean

18 lines
578 B
Text

open subtype nat
constant f : Π (a : nat), {b : nat | b > a} → nat
definition f_flat (a : nat) (b : nat) (p : b > a) : nat :=
f a (tag b p)
definition greater [reducible] (a : nat) := {b : nat | b > a}
set_option blast.recursion.structure true
definition f_flat_def [simp] (a : nat) (b : nat) (p : b > a) : f a (tag b p) = f_flat a b p :=
rfl
definition has_property_tag [simp] {A : Type} {p : A → Prop} (a : A) (h : p a) : has_property (tag a h) = h :=
rfl
lemma to_f_flat : ∀ (a : nat) (b : greater a), f a b = f_flat a (elt_of b) (has_property b) :=
by rec_simp