如何将假设传递给语言环境

时间:2019-05-30 09:12:46

标签: isabelle isar

我想在语言环境解释所需的证明中使用结构的某些属性

作为示例,假设我定义了谓词P并证明了一些引理(add是封闭的二进制运算,add是关联的,并且存在zero中性元素)对满足谓词add的元素进行P操作

然后我想将我的元素集解释为一个结构 满足某些语言环境,例如monoid

interpretation "{s . P s}" :: monoid "(add)" "(zero)"
unfolding
  monoid_def
using
  add_is_associative
  zero_is_neutral

但是以我的证明为目标,我无法获得所有要素 实际上满足了谓词P,而我却有了一个通用的目标 例如add zero a = a,我已经为集合中的元素证明了这一点。

如何在我的目标中强制所有元素都满足谓词P

1 个答案:

答案 0 :(得分:1)

我将尝试就您的问题发表评论。如果您发现我的评论不足以回答您的问题,请随时在评论中提出其他问题。


首先,我想提一下,Isabelle的标准文档中有一个关于语言环境和语言环境解释的很好的教程。该文档的名称是“语言环境和语言环境教程”(作者Clemens Ballarin)。该文档还包含一些有用的参考。

研究完本教程和参考资料后,阅读文档“ The Isabelle / Isar参考手册”中的5.7节也可能会很有用。


  

我想在证明中使用我的结构的某些属性   语言环境解释所需的

参考手册中对语言环境解释的描述指出

  

可以实例化语言环境,并实例化结果   声明添加到当前上下文。这需要证明   实例化规范),称为区域设置解释

当您使用一组适当说明的参数调用命令interpretation时,该命令实现的目标仅取决于参数。您提供的用于证明已实现目标的证明将不会对“结果实例化声明”产生影响。因此,从技术上讲,是否使用您明确提到的函数的属性来证明其解释都没有关系。


  

我想将我的元素集解释为结构   满足某些语言环境的要求,例如monoid    interpretation "{s . P s}" :: monoid "(add)" "(zero)"

如果您查看参考手册(第5.7.3节)中命令interpretation的规范,您将意识到该命令将其作为“输入语言环境参数”。参考手册的5.7.1节中描述了“语言环境表达式”。在这里,我对语言环境表达式进行了显着简化(不完整)的描述:

qualifier : name pos_insts

“ qualifier”字段是可选的,而“ name”字段则保留为您要解释的语言环境的名称。因此,您在问题中提供的表达式"{s . P s}" :: monoid "(add)" "(zero)"不是有效的语言环境表达式。我只能猜测您是要使用单个冒号而不是双冒号::,即"{s . P s}" : monoid "(add)" "(zero)",而我将根据此假设进行回答。

在您提供的示例中,“限定词”为"{s . P s}",“名称”为monoid,而“ pos_insts”实际上是名称后指定的术语。

返回文档,您还将找到“ qualifier”字段的描述:

  

实例具有一个可选的限定符,适用于以下名称   声明

     

...

     

限定符仅影响名称空间;他们在   确定一个语言环境实例是否包含另一个语言环境实例。

因此,您指定的限定词"{s . P s}"仅对声明的名称有效。它不会影响命令及其输出所实现的目标。


  

interpretation "{s . P s}" : monoid "(add)" "(zero)"

回到您的示例,如果您从理论monoid引用语言环境HOL-Groups,那么,如果您研究其规范以及语言环境semigroup的规范,您将将能够推断出语言环境monoid具有与其关联的两个参数:fz。没有其他参数,并且与区域设置关联的monoid的“载体集”由给定类型的所有术语组成。

locale monoid = semigroup +
  fixes z :: 'a ("❙1")
  assumes left_neutral [simp]: "❙1 ❙* a = a"
  assumes right_neutral [simp]: "a ❙* ❙1 = a"

总而言之,理论monoid的语言环境HOL-Groups不适合在显式载体集上表示单义半词,后者是给定类型的项的适当子集。

对于您的应用程序,您将需要使用表示在显式载体集上的一个等分体的语言环境,例如,根据理论monoid的语言环境HOL-Algebra.Group。您可以在理论HOL-Algebra.IntRing中看到其解释的示例。


更新

在评论中提出问题的作者之后,我提供了一个根据理论monoid解释语言环境HOL-Algebra.Group的示例:

theory SO_Question
  imports "HOL-Algebra.Group"

begin

abbreviation even_monoid :: "int monoid" ("⇩2") where 
  "even_monoid ≡ ⦇carrier = {x. x mod 2 = 0}, mult = (+), one = 0::int⦈"

interpretation even_monoid: monoid ⇩2
  by unfold_locales auto+

end