用Isabelle中的归纳法证明~pvq形式的定理

用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)

我有一个叫做反馈的函数,它计算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) > 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