用Isabelle中的归纳法证明~pvq形式的定理
我有一个叫做反馈的函数,它计算3的幂 反馈(t)=3^t 我想证明这一点 如果t>5,则反馈(t)>200 使用归纳法用Isabelle中的归纳法证明~pvq形式的定理,isabelle,Isabelle,我有一个叫做反馈的函数,它计算3的幂 反馈(t)=3^t 我想证明这一点 如果t>5,则反馈(t)>200 使用归纳法 lemma th2: "¬(t>5) ∨ ((feedback t) > 200)" (is "?H(t)" is "?P(t)∨?Q(t)" is "(?P(t))∨(?F(t) > 200)") proof(induct t) case 0 show "?P 0 ∨ ?Q 0" by simp next assume a:" ?F(t)
lemma th2: "¬(t>5) ∨ ((feedback t) > 200)" (is "?H(t)" is "?P(t)∨?Q(t)" is "(?P(t))∨(?F(t) > 200)")
proof(induct t)
case 0 show "?P 0 ∨ ?Q 0" by simp
next
assume a:" ?F(t) > 200"
assume d: "?P(t) = False"
have b: "?F (Suc(t)) ≥ ?F(t)" by simp
from b and a have c: "?F(Suc(t)) > 200" by simp
from c have e: "?Q(Suc(t))" by simp
from d have f:"?P(Suc(t)) = False" by simp
from f and e have g: "?P(Suc(t))∨?Q(Suc(t))" by simp
from a and d and g have h: "?P(t)∨?Q(t) ⟹ ?P(Suc(t))∨?Q(Suc(t))" by simp
from a and d have "?H(Suc(t))" by simp
qed
首先我要证明这一点
- 反馈(t+1)>=反馈(t)
- 然后假设反馈(t)>200,那么反馈(t+1)>200
- 假设t>5
- 这意味着(t+1)>5
- 而且((t+1)>5)V(反馈(t+1)>200)是真的
- 因此,如果P(t)为真,那么P(t+1)为真
但这是行不通的。我不知道问题出在哪里。首先,在Isar中,你不能简单地假设任意的事情。或者更确切地说,你可以做到这一点,但在你做到这一点之后,你将无法展示你的目标。Isar允许你假设的事情是相当严格的;在您的情况下,它是
-5
我建议使用case
命令,它为您假定了正确的事情。然后,您可以对该析取进行区分,然后对是否t=5进行区分:
lemma th2: "¬(t>5) ∨ ((feedback t) > 200)"
proof (induct t)
case 0
show ?case by simp
next
case (Suc t)
thus ?case
proof
assume "¬t > 5"
moreover have "feedback 6 = 729" by code_simp
-- ‹"simp add: eval_nat_numeral" would also work›
ultimately show ?thesis
by (cases "t = 5") auto
next
assume "feedback t > 200"
thus ?thesis by simp
qed
qed
或者,更简洁地说:
lemma th2: "¬(t>5) ∨ ((feedback t) > 200)"
proof (induct t)
case (Suc t)
moreover have "feedback 6 = 729" by code_simp
ultimately show ?case by (cases "t = 5") auto
qed simp_all
如果你的反馈函数实际上是单调的,我建议你首先证明这一点,然后证明就不会那么乏味了。一个明显的问题是,如果你想3^t
,为什么不直接写3^t
。3^t只是一个占位符。一旦我能证明这一点,我将用复变函数代替。
lemma th2: "¬(t>5) ∨ ((feedback t) > 200)"
proof (induct t)
case (Suc t)
moreover have "feedback 6 = 729" by code_simp
ultimately show ?case by (cases "t = 5") auto
qed simp_all