如何让Isabelle应用基础数学规则完成树计数定理证明
Isabelle证明问题解决方案
类型错误原因
你在编写引理时使用了(x:nat)的写法,Isabelle中单冒号:是集合隶属运算符,变量类型标注必须使用双冒号::。系统会将你写的x:nat误解析为x ∈ nat,但nat是类型而非集合,所以触发了类型不匹配报错。
如果要自定义该引理,正确写法如下,不过这个规则已经内置在标准算术库中,不需要自行定义:
lemma double_add: "(x::nat) + x = 2 * x" by simp
定理证明最优方案
你的证明在auto步骤后剩余的是纯自然数算术等价目标,直接调用内置算术自动证明方法arith即可完成证明,修改后的定理代码:
theorem tree_count: "nodes (explode h l) = 2^h + 2^h * (nodes l) - 1" apply(induction h arbitrary: l) apply(auto simp add: numeral_eq_Suc) apply(arith) done
也可以将代数化简规则加入simp集,一步完成:
theorem tree_count: "nodes (explode h l) = 2^h + 2^h * (nodes l) - 1" apply(induction h arbitrary: l) apply(auto simp add: numeral_eq_Suc algebra_simps) done
内容的提问来源于stack exchange,提问作者waldelb
相关产品推荐
相关产品推荐

