【问题标题】:Failed to refine any pending goal未能优化任何待定目标
【发布时间】:2023-10-18 08:29:01
【问题描述】:

我试图在 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

在最后一个目标中,我需要证明一个含义。像往常一样,我假设前提并尝试显示结论。但是,当我写最后一行时,我得到“未能完善任何未决目标”。是因为我之前应用的归纳原理吗?因为没有这种归纳,我可以像往常一样使用蕴涵引入规则(假设前提然后显示结论)。

有人知道会发生什么吗?

非常感谢。

【问题讨论】:

  • 跟“证明-”行有关系吗?伊莎贝尔的“-”是什么意思?
  • proof 总是将初始证明方法应用于目标。只是写proof 应用了一些默认的证明方法(我认为它被称为default)。如果你想让proof什么都不做,你可以提供证明方法-,它只是将链式事实添加到本地假设中,而不做任何其他事情。

标签: proof isabelle


【解决方案1】:

“问题”确实与proof - 有关。该语句打开一个新的子证明,而不对目标应用任何证明方法。如果你写proof 没有-,证明方法rule 将被隐式应用,这在这种情况下可以解决问题。

proof rule 选择最直接的规则来应用于您的目标。在这种情况下,这将等价于proof (rule impI),因为您要证明的对象级语句的形式为"a --&gt; b"impI 是蕴涵的引入规则。它允许您将"a --&gt; b" 形式的对象级含义提升为元逻辑"a" ==&gt; "b"

您的目标需要采用 "a" ==&gt; "b" 的形式才能继续使用 assume "a" [...] show "b" 形式的子证明。

【讨论】: