伊莎贝尔非常简单的引理

时间:2016-11-30 19:13:05

标签: isabelle

我刚刚开始与伊莎贝尔的第一步,但是,作为新的定理证明和证明助理,我有点迷失。我主要对功能分析或代数的应用程序感兴趣我查看了文档,我试图用自己的语言环境来实现自己的例子,但我遇到了一些非常基本的问题。我的代码是

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是否有可能输出类似于本科数学教科书中的证据。

1 个答案:

答案 0 :(得分:1)

当我使用Isabelle / jEdit(Isabelle2016)尝试您的代码时,我收到错误消息

  

无法应用证明方法⌂:
  目标(1个子目标):
  1. b x(a x c)= b x a x c

这告诉我们无法将给定规则(assocm)应用于当前子目标。原因是rule试图统一assocm(这是整个引理)与当前子目标的结论。如果它会成功,它会用你所应用的引理的假设取代当前的子目标,但在你的例子中它并没有成功。

有两种方法:

1)你可以用交换的左手边和右手边重述你的引理。那么你当前的证明就可以了(很简单,因为它与assocm相同)。

2)或者,如果你真的只是想用等于"替换等于,你不应该使用rule而是使用simpauto。 E.g。

apply (simp add: assocm)

或者分两个步骤

unfolding assocm
by (rule HOL.refl)

首先用右侧替换assocm的左侧,最后通过相等的反身性来证明。

回答您的第二个问题:无法将某些任意证据自动转换为类似于本科教科书的内容。但是,绝对有可能 - 给予足够的努力并正确设置自动工具,例如simpblastauto - 以这样的方式编写您的证明(在 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)