lean2/tests/lean/run/541a.lean

26 lines
879 B
Text
Raw Normal View History

import data.list data.nat
open nat list eq.ops
theorem nat.le_of_eq {x y : } (H : x = y) : x ≤ y := H ▸ !le.refl
section
variable {Q : Type}
definition f : list Q → -- default if l is empty, else max l
| [] := 0
| (h :: t) := f t + 1
theorem f_foo : ∀{l : list Q}, ∀{q : Q}, q ∈ l → f l ≥ 1
| [] := take q, assume Hq, absurd Hq !not_mem_nil
| [h] := take q, assume Hq, nat.le_of_eq !rfl
| (h :: (h' :: t)) := take q, assume Hq,
have Hor : q = h q ∈ (h' :: t), from iff.mp !mem_cons_iff Hq,
have H : f (h' :: t) ≥ 1, from f_foo (mem_cons h' t),
have H1 : 1 + 1 ≤ f (h' :: t) + 1, from nat.add_le_add_right H 1,
calc
f (h :: h' :: t) = f (h' :: t) + 1 : rfl
... ≥ 1 + 1 : H1
... = 1 : sorry
end