【发布时间】:2019-03-02 18:14:42
【问题描述】:
给定一个生成相同项目列表的函数,我希望证明生成的列表在所有位置都包含给定的自然数,与列表长度无关。
fun pattern_n :: "nat ⇒ nat ⇒ nat list" where
"pattern_n _ 0 = []" |
"pattern_n n lng = n # (pattern_n n (lng - 1))"
lemma pattern_n_1: "lng > 0 ∧ pos ≥ 0 ∧ pos < lng ∧ n ≥ 0 ⟹ (pattern_n n lng ! pos) = n"
很明显,证明应该基于对生成列表长度的归纳,但 pos 似乎也是一个归纳变量候选者。对于如何继续进行此证明,我将不胜感激。
【问题讨论】:
-
到目前为止您尝试过什么?什么不起作用/你被困在哪里?尝试按照您认为正确的方式应用归纳法。会发生什么?
-
ThreeFx,我尝试通过 apply(induction lng absolute: n) 和 apply(simp) 对 lng 进行归纳,之后 Isabelle 仍然需要对归纳步骤进行证明。对于像 pattern_n 这样的简单函数,还可以添加哪些知识来证明归纳步骤?我唯一的想法是项目位置也应该用作归纳变量。