Isabelle/HOL中的目标定义和关键词
我正在努力了解伊莎贝尔的数学是如何建立起来的。无论出于何种原因,所有教程/手册都隐藏了许多基本类型的实现细节,例如自然数、整数、有理数和实数是如何构造的。在查看src/HOL目录和检查.thy文件时,我遇到了如下代码块:Isabelle/HOL中的目标定义和关键词,isabelle,Isabelle,我正在努力了解伊莎贝尔的数学是如何建立起来的。无论出于何种原因,所有教程/手册都隐藏了许多基本类型的实现细节,例如自然数、整数、有理数和实数是如何构造的。在查看src/HOL目录和检查.thy文件时,我遇到了如下代码块: keywords "print_quotmapsQ3" "print_quotientsQ3" "print_quotconsts" :: diag and "quotient_type" :: thy_goal_defn and "/" and "quotient
keywords
"print_quotmapsQ3" "print_quotientsQ3" "print_quotconsts" :: diag and
"quotient_type" :: thy_goal_defn and "/" and
"quotient_definition" :: thy_goal_defn
begin
在商中。此处使用关键字,以便以后您可以将类型定义为:
quotient_type rat = "int * int" / partial: "ratrel"
以及其他相关定义。我还没有弄清楚“关键字”功能是如何工作的。代码中没有特别明显的内容,我能找到的唯一文档是Isabelle/Isar参考手册,其中编写了以下内容:
“关键字规范声明了外部语法(第3章),该语法稍后将在该理论中介绍(在最终用户应用程序中很少见)。需要指定Isar命令语言的次要关键字和主要关键字,以使验证文件的解析正常工作。命令关键字需要根据其在正式文本中的结构角色进行分类。示例可在Isabelle/HOL源中看到,例如关键字“typedef”“::你的目标定义或关键词“数据类型”::你的定义分别适用于有证据和无证据的理论级定义。”(第91页)
这就提出了一个问题,即什么是理论层面的定义,我还没有弄清楚。Isabelle的表面语言Isar可以在多个维度上扩展。特别是,在日常形式化中通常使用的大量关键字都是在用户空间中定义的。这使Isar与许多其他程序不同语法是固定的 粗略地说,《伊莎贝尔》中的理论文件由两部分组成:
typedef
时,实际在理论中定义类型diag
).Isabelle中的理论处理在并行执行理论时会考虑到这一点
你提到的例子,
thy_goal\u defn
,是一个为理论添加了一些定义的关键词,也进入了证明模式,因为商类型
需要一些关于定义良好性的证明。伊莎贝尔的表面语言Isar可以在多个维度上扩展通常在日常形式化中使用的大量关键字都是在用户空间中定义的,这使得Isar与许多语法固定的其他编程语言不同
粗略地说,《伊莎贝尔》中的理论文件由两部分组成:
typedef
时,实际在理论中定义类型diag
).Isabelle中的理论处理在并行执行理论时会考虑到这一点
你提到的例子,
thy_goal\u defn
,是一个为理论添加了一些定义的关键词,也进入了证明模式,因为商类型
需要一些关于定义良好性的证明。我仍然有点困惑于“商类型”“在商数.thy.中再也没有提到过。在仔细查看了.thy文件之后,似乎所有的实现细节都隐藏在商数.thy.中调用的.ML文件中,我对ML不太熟悉,因此这些文件对我来说相当难读懂,但当您编写类似于:'quot_type rat=“int*int”的内容时/partial:“ratrel””,这是ML文件的一部分,他们尝试使用商数.thy中开发的理论自动定义并尝试证明“rat”的基本属性。对ML文件有何评论?还使用ML文件引入新的关键字,这些关键字被认为是使用Isabelle/HOL或的人的最终用户体验的一部分