如何将假设传递给语言环境的解释
How to pass assumptions to interpretation of locale
我想在语言环境解释所需的证明中使用我的结构的一些属性
举个例子,假设我定义了谓词P并证明了一些引理(add
是一个封闭的二元运算,add
是结合性的并且存在zero
中性元素)关于对满足谓词 P
的元素的 add
操作
然后我想将我的元素集解释为一个结构
满足一些语言环境,例如monoid
interpretation "{s . P s}" :: monoid "(add)" "(zero)"
unfolding
monoid_def
using
add_is_associative
zero_is_neutral
但是为了证明我的目标,我无法获得所有元素
实际上满足谓词 P
我只剩下一个通用目标
例如 add zero a = a
我已经为我的集合中的元素证明了这一点。
如何在我的目标中强制所有元素满足谓词 P
?
我将尝试对您的问题发表评论。如果您发现我的评论不足以回答您的问题,请随时在评论中提出更多问题。
首先,我想提一下,在 Isabelle 的标准文档中有一个很好的关于语言环境和语言环境解释的教程。文档的名称是 "Tutorial to Locales and Locale Interpretation"(作者:Clemens Ballarin)。该文档还包含一些有用的参考资料。
学习教程和参考资料后,查看文档中的第 5.7 节可能也会有用 "The Isabelle/Isar Reference Manual"。
I would like to use some properties of my structure in the proof
required by a locale interpretation
参考手册中对语言环境解释的描述指出
Locales may be instantiated, and the resulting instantiated
declarations added to the current context. This requires proof (of the
instantiated specification) and is called locale interpretation.
当您使用一组适当陈述的参数调用命令 interpretation
时,命令执行的目标仅取决于参数。您提供的证明已履行目标的证明不会对'resulting instantiated declarations'产生任何影响。因此,从技术上讲,您是否使用您明确提到的函数的属性来证明解释并不重要。
I would like to interpret then the set of my elements as a structure
that satisfy some locale, e.g. monoid
:
interpretation "{s . P s}" :: monoid "(add)" "(zero)"
如果您查看参考手册(第 5.7.3 节)中命令 interpretation
的说明,您会发现该命令采用 'locale expression' 作为其输入参数。 'locale expression' 在参考手册的第 5.7.1 节中有描述。在这里,我对语言环境表达式进行了显着简化(不完整)的描述:
qualifier : name pos_insts
字段 'qualifier' 是可选的,字段 'name' 是为您尝试解释的语言环境名称保留的。因此,您在问题中提供的表达式 "{s . P s}" :: monoid "(add)" "(zero)"
不是有效的语言环境表达式。我只能猜测您打算使用单冒号而不是双冒号 ::
,即 "{s . P s}" : monoid "(add)" "(zero)"
,我将根据这个假设继续回答。
在您提供的示例中,'qualifier' 是 "{s . P s}"
,'name' 是 monoid
,'pos_insts' 实际上是术语在名称后指定。
返回文档您还会找到字段的描述 'qualifier':
Instances have an optional qualifier which applies to names in
declarations
...
Qualifiers only affect name spaces; they play no role in
determining whether one locale instance subsumes another.
因此,您指定的限定符 "{s . P s}"
只能对声明的名称产生影响。它不会影响命令执行的目标及其输出。
interpretation "{s . P s}" : monoid "(add)" "(zero)"
回到你的例子,如果你指的是理论HOL-Groups
中的语言环境monoid
,那么,如果你研究它的规范以及语言环境的规范semigroup
,您将能够推断出语言环境 monoid
有两个与之关联的参数:f
和 z
。没有其他参数,与语言环境关联的幺半群的 'carrier set' 由给定类型的所有项组成。
locale monoid = semigroup +
fixes z :: 'a ("❙1")
assumes left_neutral [simp]: "❙1 ❙* a = a"
assumes right_neutral [simp]: "a ❙* ❙1 = a"
总而言之,理论 HOL-Groups
中的语言环境 monoid
不适合表示显式载体集上的幺半群,该载体集是给定类型项的真子集。
对于您的应用程序,您将需要使用表示显式载体集上的幺半群的语言环境,例如,理论 HOL-Algebra.Group
中的语言环境 monoid
。您可以在理论 HOL-Algebra.IntRing
中看到其解释的示例。
更新
应评论中问题作者的要求,我提供了一个从理论 HOL-Algebra.Group
:
解释语言环境 monoid
的例子
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
我想在语言环境解释所需的证明中使用我的结构的一些属性
举个例子,假设我定义了谓词P并证明了一些引理(add
是一个封闭的二元运算,add
是结合性的并且存在zero
中性元素)关于对满足谓词 P
add
操作
然后我想将我的元素集解释为一个结构
满足一些语言环境,例如monoid
interpretation "{s . P s}" :: monoid "(add)" "(zero)"
unfolding
monoid_def
using
add_is_associative
zero_is_neutral
但是为了证明我的目标,我无法获得所有元素
实际上满足谓词 P
我只剩下一个通用目标
例如 add zero a = a
我已经为我的集合中的元素证明了这一点。
如何在我的目标中强制所有元素满足谓词 P
?
我将尝试对您的问题发表评论。如果您发现我的评论不足以回答您的问题,请随时在评论中提出更多问题。
首先,我想提一下,在 Isabelle 的标准文档中有一个很好的关于语言环境和语言环境解释的教程。文档的名称是 "Tutorial to Locales and Locale Interpretation"(作者:Clemens Ballarin)。该文档还包含一些有用的参考资料。
学习教程和参考资料后,查看文档中的第 5.7 节可能也会有用 "The Isabelle/Isar Reference Manual"。
I would like to use some properties of my structure in the proof required by a locale interpretation
参考手册中对语言环境解释的描述指出
Locales may be instantiated, and the resulting instantiated declarations added to the current context. This requires proof (of the instantiated specification) and is called locale interpretation.
当您使用一组适当陈述的参数调用命令 interpretation
时,命令执行的目标仅取决于参数。您提供的证明已履行目标的证明不会对'resulting instantiated declarations'产生任何影响。因此,从技术上讲,您是否使用您明确提到的函数的属性来证明解释并不重要。
I would like to interpret then the set of my elements as a structure that satisfy some locale, e.g.
monoid
:interpretation "{s . P s}" :: monoid "(add)" "(zero)"
如果您查看参考手册(第 5.7.3 节)中命令 interpretation
的说明,您会发现该命令采用 'locale expression' 作为其输入参数。 'locale expression' 在参考手册的第 5.7.1 节中有描述。在这里,我对语言环境表达式进行了显着简化(不完整)的描述:
qualifier : name pos_insts
字段 'qualifier' 是可选的,字段 'name' 是为您尝试解释的语言环境名称保留的。因此,您在问题中提供的表达式 "{s . P s}" :: monoid "(add)" "(zero)"
不是有效的语言环境表达式。我只能猜测您打算使用单冒号而不是双冒号 ::
,即 "{s . P s}" : monoid "(add)" "(zero)"
,我将根据这个假设继续回答。
在您提供的示例中,'qualifier' 是 "{s . P s}"
,'name' 是 monoid
,'pos_insts' 实际上是术语在名称后指定。
返回文档您还会找到字段的描述 'qualifier':
Instances have an optional qualifier which applies to names in declarations
...
Qualifiers only affect name spaces; they play no role in determining whether one locale instance subsumes another.
因此,您指定的限定符 "{s . P s}"
只能对声明的名称产生影响。它不会影响命令执行的目标及其输出。
interpretation "{s . P s}" : monoid "(add)" "(zero)"
回到你的例子,如果你指的是理论HOL-Groups
中的语言环境monoid
,那么,如果你研究它的规范以及语言环境的规范semigroup
,您将能够推断出语言环境 monoid
有两个与之关联的参数:f
和 z
。没有其他参数,与语言环境关联的幺半群的 'carrier set' 由给定类型的所有项组成。
locale monoid = semigroup +
fixes z :: 'a ("❙1")
assumes left_neutral [simp]: "❙1 ❙* a = a"
assumes right_neutral [simp]: "a ❙* ❙1 = a"
总而言之,理论 HOL-Groups
中的语言环境 monoid
不适合表示显式载体集上的幺半群,该载体集是给定类型项的真子集。
对于您的应用程序,您将需要使用表示显式载体集上的幺半群的语言环境,例如,理论 HOL-Algebra.Group
中的语言环境 monoid
。您可以在理论 HOL-Algebra.IntRing
中看到其解释的示例。
更新
应评论中问题作者的要求,我提供了一个从理论 HOL-Algebra.Group
:
monoid
的例子
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