在 Isabelle 中用 'induct' 证明时如何使用基本情况假设
How to use the base case assumption when proving with 'induct' in Isabelle
假设我要证明假设“n ≥ m
”(均为自然数)的定理,并且我对 n
应用归纳法。在基本情况下,假设是“n = 0
”。有了这两个,我们可以得出结论,在基本情况下,“m = 0
”。
但是,我在使用语句“n = 0
”时遇到了问题:
lemma foo:
assumes "(n::nat) ≥ (m::nat)"
shows ...
proof (induct n)
case 0
have "m = 0" using <I don't know what to put here> assms by simp
...
qed
我试过 using "n = 0"
,但它似乎是一个“Undefined fact
”。我也尝试将其添加为假设,但无济于事。尽管如此,很明显,在分析基本情况时,这是一个隐含的假设。
那么,如何在我的证明中直接使用基本案例的假设?
当您调用 induct
时,您需要成为归纳的一部分的任何假设都需要成为证明状态的一部分。特别是,这应该是包含您所做归纳的所有假设(即在您的情况下包含 n
的所有假设)。
因此,您应该在 proof
之前执行 using assms
。然后 0 ≥ m
将在基本情况下以名称 "0.prems"
提供给您(或者只是 0
用于所有这些加上归纳假设,在这种情况下不存在) .
假设我要证明假设“n ≥ m
”(均为自然数)的定理,并且我对 n
应用归纳法。在基本情况下,假设是“n = 0
”。有了这两个,我们可以得出结论,在基本情况下,“m = 0
”。
但是,我在使用语句“n = 0
”时遇到了问题:
lemma foo:
assumes "(n::nat) ≥ (m::nat)"
shows ...
proof (induct n)
case 0
have "m = 0" using <I don't know what to put here> assms by simp
...
qed
我试过 using "n = 0"
,但它似乎是一个“Undefined fact
”。我也尝试将其添加为假设,但无济于事。尽管如此,很明显,在分析基本情况时,这是一个隐含的假设。
那么,如何在我的证明中直接使用基本案例的假设?
当您调用 induct
时,您需要成为归纳的一部分的任何假设都需要成为证明状态的一部分。特别是,这应该是包含您所做归纳的所有假设(即在您的情况下包含 n
的所有假设)。
因此,您应该在 proof
之前执行 using assms
。然后 0 ≥ m
将在基本情况下以名称 "0.prems"
提供给您(或者只是 0
用于所有这些加上归纳假设,在这种情况下不存在) .