我刚刚开始与伊莎贝尔的第一步,但是,作为新的定理证明和证明助理,我有点迷失。我主要对功能分析或代数的应用程序感兴趣我查看了文档,我试图用自己的语言环境来实现自己的例子,但我遇到了一些非常基本的问题。我的代码是
theory MyTheory
imports Main
begin
locale semigroup_mult =
fixes f :: "'a ⇒ 'a ⇒ 'a" (infixl "x" 70)
and e :: 'a ("e")
assumes assocm : "a x b x c = a x (b x c)"
and right_neutralm : "(a x e) = a"
and left_neutralm : "(e x a) = a"
begin
lemma assoc_general: "b x (a x c) = (b x a) x c"
apply (rule assocm)
done
end
end
这只是一步证明,但我不能让Isabelle工作......如果我删除了应用行,它说它无法完成证明,而apply命令会给出错误
在“证明”模式下非法应用证明命令
我做错了什么?任何帮助,将不胜感激。例如,使用“show ... by”语法和“apply”语法,“proof ... qed”和“done”之间的区别。
第二个问题是Isabelle是否有可能输出类似于本科数学教科书中的证据。
答案 0 :(得分:1)
当我使用Isabelle / jEdit(Isabelle2016)尝试您的代码时,我收到错误消息
无法应用证明方法⌂:
目标(1个子目标):
1. b x(a x c)= b x a x c
这告诉我们无法将给定规则(assocm
)应用于当前子目标。原因是rule
试图统一assocm
(这是整个引理)与当前子目标的结论。如果它会成功,它会用你所应用的引理的假设取代当前的子目标,但在你的例子中它并没有成功。
有两种方法:
1)你可以用交换的左手边和右手边重述你的引理。那么你当前的证明就可以了(很简单,因为它与assocm
相同)。
2)或者,如果你真的只是想用等于"替换等于,你不应该使用rule
而是使用simp
或auto
。 E.g。
apply (simp add: assocm)
或者分两个步骤
unfolding assocm
by (rule HOL.refl)
首先用右侧替换assocm
的左侧,最后通过相等的反身性来证明。
回答您的第二个问题:无法将某些任意证据自动转换为类似于本科教科书的内容。但是,绝对有可能 - 给予足够的努力并正确设置自动工具,例如simp
,blast
和auto
- 以这样的方式编写您的证明(在 Isar 语法的范围)。例如,以下示例显示了一些 Isar 功能,使证明更具人性化:
lemma "(b x e) x e x (a x c) = b x a x c"
proof -
have "b x e = b" by (rule right_neutralm)
then have "(b x e) x e x (a x c) = b x (a x c)" by simp
also have "... = b x a x c" by (rule assocm [symmetric])
finally show ?thesis .
qed
然而,更常见的是采用更多自动校样:
lemma "(b x e) x e x (a x c) = b x a x c"
by (simp add: right_neutralm assocm)