thy_goal_defn和Isabelle / HOL中的关键字

时间:2019-09-29 01:46:18

标签: isabelle

我正试图更好地了解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页)

这提出了一个问题,我无法弄清楚是什么理论水平的定义。

1 个答案:

答案 0 :(得分:3)

Isabelle的表面语言Isar可在多个维度上扩展。特别是,您通常在日常形式化中使用的很大一部分关键字是在用户空间中定义的。这使Isar与其他固定语法的其他编程语言脱颖而出。

大致来说,伊莎贝尔(Isabelle)中的理论文件包括两部分:

  1. 标题,可以静态解析,即无需运行任何自定义代码。
  2. 内容,例如逻辑定义(类型,常量等)和证明都可以是模式。

内容解析分为两个阶段:

  1. 首先,正在分析命令结构。这可以通过查看存在的所有关键字的表(在标题中声明的关键字)来完成。关键字有多种不同类型(如手册中指出的那样)。命令关键字在理论上开始了一个新的原子块。 (因此,理论内容可以看作是一系列命令。)
  2. 第二,使用声明了相应关键字的人指定的自定义解析代码来解析命令本身。这将执行任何操作,例如实际上在遇到关键字typedef时在理论上定义了类型。

可以根据显示命令的上下文对命令进行分类。顶级命令只能出现在理论的顶级上。其他命令可以在本地上下文中自由嵌套。其他命令不会修改理论,而只会打印诊断输出(diag)。 Isabelle中的理论处理在例如并行执行理论。

您提到的示例thy_goal_defn是一个关键字,它为理论添加了一些定义,并且也进入了证明模式,因为quotient_type需要一些有关定义格式正确的证明。