数列の中間値定理2
いわゆる one line proof です.
lemma "(f::nat⇒real) 0 < 0 ==> ∃n. 0 ≦ f n ==> ∃n. f n < 0 ∧ 0 ≦ f (Suc n)" by (metis nat_induct [of "%n. f n < 0"] not_le)
参照している定理は
thm nat_induct [of "%n. f n < 0"] not_le
f 0 < 0 ⟹ (⋀n. f n < 0 ⟹ f (Suc n) < 0) ⟹ f ?n < 0
(¬ ?x ≤ ?y) = (?y < ?x)
の2つですが,Z3 は not_le を知っているので
lemma "(f::nat⇒real) 0 < 0 ==> ∃n. 0 ≦ f n ==> ∃n. f n < 0 ∧ 0 ≦ f (Suc n)" by (smt nat_induct [of "%n. f n < 0"])
とも出来ます.