我试图在Isabelle中证明一个定理,我陷入了这一步:
theorem exists_prime_factor: " (n > Suc 0) ⟶ (∃xs::nat list. prod_list xs = n ∧ all_prime xs)"
proof (induct n rule: less_induct)
case (less k)
assume HI: "⋀y::nat. (y < k ⟹ Suc 0 < y ⟶ (∃xs. prod_list xs = y ∧ all_prime xs))"
then show ?case
proof -
show "(Suc 0 < k) ⟶ (∃xs. prod_list xs = k ∧ all_prime xs)"
proof -
assume "Suc 0 < k" then show "(∃xs. prod_list xs = k ∧ all_prime xs)" sorry
在最后一个目标中,我需要证明一个含义。像往常一样,我假设前提并试图显示结论。但是,当我写下最后一行时,我得到了#34;无法优化任何待定目标&#34;。是因为我之前申请的归纳原理吗?因为没有那个归纳,我能像往常一样使用暗示引入规则(假设前提然后显示结论)。
有没有人知道可能会发生什么?
非常感谢。
答案 0 :(得分:3)
&#34;问题&#34;确实与proof -
有关。该声明打开了一个新的subproof,没有对目标应用任何证明方法。如果您在没有proof
的情况下编写-
,则会隐式应用证明方法rule
,这可以解决这种情况。
proof rule
选择最直接的规则来应用于您的目标。在这种情况下,这将等同于proof (rule impI)
,因为您要证明的对象级别语句的格式为"a --> b"
。 impI
是暗示的引入规则。它允许您将表单"a --> b"
的对象级含义提升为元逻辑"a" ==> "b"
。
您需要使用"a" ==> "b"
形式的目标继续assume "a" [...] show "b"
形式的子证明。