我正试图更好地了解Isabelle如何构建数学。无论出于何种原因,所有教程/手册都隐藏了许多基本类型的实现细节,例如如何构造自然数,整数,有理数和实数。在查看src / HOL目录并检查.thy文件时,我遇到了如下代码块:
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” :: thy_goal_defn或关键字“ datatype” :: thy_defn分别用于有或没有证明的理论级定义。” (第91页)
这提出了一个问题,我无法弄清楚是什么理论水平的定义。
答案 0 :(得分:3)
Isabelle的表面语言Isar可在多个维度上扩展。特别是,您通常在日常形式化中使用的很大一部分关键字是在用户空间中定义的。这使Isar与其他固定语法的其他编程语言脱颖而出。
大致来说,伊莎贝尔(Isabelle)中的理论文件包括两部分:
内容解析分为两个阶段:
typedef
时在理论上定义了类型。可以根据显示命令的上下文对命令进行分类。顶级命令只能出现在理论的顶级上。其他命令可以在本地上下文中自由嵌套。其他命令不会修改理论,而只会打印诊断输出(diag
)。 Isabelle中的理论处理在例如并行执行理论。
您提到的示例thy_goal_defn
是一个关键字,它为理论添加了一些定义,并且也进入了证明模式,因为quotient_type
需要一些有关定义格式正确的证明。