这个 Isabelle 证明是否需要归纳法?
Is induction required in this Isabelle proof?
我正在尝试证明生成器函数会产生某些仍然非常简单的模式。
pattern_0_1
生成交替的 0 和 1 列表。我已经成功证明对于任何长度大于 0 的列表,第一项为零。但是,应用相同的技术未能证明第二个元素始终为 1。我的猜测是这里根本不需要归纳法。对于完成第二个引理的正确方法,我将不胜感激。
fun pattern_0_1 :: "nat ⇒ nat ⇒ nat list" where
"pattern_0_1 0 item = []" |
"pattern_0_1 len item = item # (pattern_0_1 (len - 1) (if item = 0 then 1 else 0))"
lemma item_0_is_0 : "lng ≥ 1 ⟹ pattern_0_1 lng 0 ! 0 = 0"
apply(induction lng)
apply(simp)
by auto
lemma item_1_is_1 : "lng ≥ 2 ⟹ pattern_0_1 lng 0 ! 1 = 1"
apply(induction lng)
apply(simp)
sorry
不需要归纳法(它会是,你会展示一些关于所有偶数或所有奇数位置的信息)。在这里,案例分析就足够了,所以你得到案例0、1和> = 2。所以,你的证明可以通过
完成
apply(cases lng; cases "lng - 1"; auto)
其中第一个 cases
将是 0 或 >= 1,第二个 cases
将区分 1 和 >= 2。
我正在尝试证明生成器函数会产生某些仍然非常简单的模式。
pattern_0_1
生成交替的 0 和 1 列表。我已经成功证明对于任何长度大于 0 的列表,第一项为零。但是,应用相同的技术未能证明第二个元素始终为 1。我的猜测是这里根本不需要归纳法。对于完成第二个引理的正确方法,我将不胜感激。
fun pattern_0_1 :: "nat ⇒ nat ⇒ nat list" where
"pattern_0_1 0 item = []" |
"pattern_0_1 len item = item # (pattern_0_1 (len - 1) (if item = 0 then 1 else 0))"
lemma item_0_is_0 : "lng ≥ 1 ⟹ pattern_0_1 lng 0 ! 0 = 0"
apply(induction lng)
apply(simp)
by auto
lemma item_1_is_1 : "lng ≥ 2 ⟹ pattern_0_1 lng 0 ! 1 = 1"
apply(induction lng)
apply(simp)
sorry
不需要归纳法(它会是,你会展示一些关于所有偶数或所有奇数位置的信息)。在这里,案例分析就足够了,所以你得到案例0、1和> = 2。所以,你的证明可以通过
完成apply(cases lng; cases "lng - 1"; auto)
其中第一个 cases
将是 0 或 >= 1,第二个 cases
将区分 1 和 >= 2。