Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Isabelle/HOL中的目标定义和关键词_Isabelle - Fatal编程技术网

Isabelle/HOL中的目标定义和关键词

Isabelle/HOL中的目标定义和关键词,isabelle,Isabelle,我正在努力了解伊莎贝尔的数学是如何建立起来的。无论出于何种原因,所有教程/手册都隐藏了许多基本类型的实现细节,例如自然数、整数、有理数和实数是如何构造的。在查看src/HOL目录和检查.thy文件时,我遇到了如下代码块: keywords "print_quotmapsQ3" "print_quotientsQ3" "print_quotconsts" :: diag and "quotient_type" :: thy_goal_defn and "/" and "quotient

我正在努力了解伊莎贝尔的数学是如何建立起来的。无论出于何种原因,所有教程/手册都隐藏了许多基本类型的实现细节,例如自然数、整数、有理数和实数是如何构造的。在查看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”“::你的目标定义或关键词“数据类型”::你的定义分别适用于有证据和无证据的理论级定义。”(第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或的人的最终用户体验的一部分