【发布时间】:2025-12-04 12:55:01
【问题描述】:
我是 Isabelle/HOL 的新手(虽然不是 HOL),所以我决定通过出色的 "prog-prove" tutorial 中的示例开始学习。
我遇到了一个与上下文无关的语法问题(第 43 页的练习 3.5)。在这个问题中,你会得到两个上下文无关的语法:
S → ε | aSb | SS
T → ε | TaTb
你被要求证明他们描述的是同一种语言。证明 T 中的元素位于 S 所描述的语言中很容易,但我正在努力寻找另一个方向。特别是,我想证明 T 描述的语言在连接下是封闭的。
这是一个非正式的证明:假设 u 和 v 位于语言中。然后我们要证明uv 存在于语言中。继续对v 的长度进行归纳。如果length v = 0 那么v 是空字符串,uv = u 就完成了。否则,请查看 T 的产生式规则。显然v 不是空字符串,因此对于语言中的某些w, x,它必须是waxb 的形式。由于w 比v 短,(强)归纳表明uw 必须位于语言中。现在使用第二个生产规则。
这个证明似乎很复杂,所以我怀疑它不是 prog-prove 的作者所想的。所以我有两个问题:
练习的作者希望您使用什么(非正式或正式)证明?
(技术性更强)我如何在 Isabelle/HOL 中表达我上面的非正式证明?
到目前为止,我的尝试/摇摆是从以下开始的:
lemma T_mult: "cfT u ==> cfT v ==> cfT (u @ v)"
apply (induction "length v")
apply (auto)
apply (induction v rule: cfT.induct)
第二次感应申请失败,但我认为这是因为我要求伊莎贝尔做错事......
【问题讨论】:
标签: context-free-grammar isabelle