Isabelle 在《伊莎贝尔》中,尖括号和双星号是什么意思?

Isabelle 在《伊莎贝尔》中,尖括号和双星号是什么意思?,isabelle,theorem-proving,formal-verification,isar,Isabelle,Theorem Proving,Formal Verification,Isar,我在试着理解,有些语法我不懂。我没有在教程中看到它们,包括与Isabelle 2017发行版捆绑在一起的两个版本,“Isabelle/HOL中的编程和证明”和“Isabelle/Isar参考手册”。事实上,这些都是符号,再加上伊莎贝尔的用户群非常小,这意味着答案很难在谷歌上找到 第一个是高尖括号⟨⟩,第二个是双星号***,在输出控制台中显示为∧*(与ASCII^明显不同) 这是一个例子 尖括号似乎总是围绕着一个命题。三元组函数的定义意味着(a**b**c**d)类型为状态元素集⇒ bool,其中

我在试着理解,有些语法我不懂。我没有在教程中看到它们,包括与Isabelle 2017发行版捆绑在一起的两个版本,“Isabelle/HOL中的编程和证明”和“Isabelle/Isar参考手册”。事实上,这些都是符号,再加上伊莎贝尔的用户群非常小,这意味着答案很难在谷歌上找到

第一个是高尖括号
,第二个是双星号
***
,在输出控制台中显示为
∧*(与ASCII
^
明显不同)

这是一个例子

尖括号似乎总是围绕着一个命题。
三元组
函数的定义意味着
(a**b**c**d)
类型为
状态元素集⇒ bool
,其中
状态元素
只是一组构造函数的结合

datatype state_element =
    StackHeightElm "nat"
  | StackElm "nat * w256" ... (* 20 lines like this *)

这两种语法是否相关?
(a**b**c**d)
怎么可能是一个函数?为什么它可以有不同数量的东西由星星分隔?这是自定义语法吗?谜团比比皆是。

伊莎贝尔提供了丰富的机制来定义自己的符号。因此,当一个人检查别人写的理论时,经常会遇到不熟悉的语法

使用Isabelle/jEdit,您可以按Ctrl键(Mac的Cmd键),然后单击语法和名称跳转到它们的定义站点(参见本手册的3.5)

在有些地方,这可能不起作用。然后,您可以尝试在理论文本中键入
print_syntax
,这将输出当前内部语法配置的所有规则(参见的8.4.4)。希望你至少可以通过这个来找出一些符号来自哪个理论。人们应该假设,仁慈的理论作者会避免破坏超链接功能的语法设置


对于这里的特定问题,
**
是和
⟨ _ ⟩
糖是纯的吗?
来源于as。

这是分离逻辑还是什么?然后,
**
可能是“分离连词”的特定于库的符号,如果您在Isabelle/jEdit中打开定义,您可以按Ctrl键并单击syntax以查看它来自何处。在您的示例中,
**
似乎是为中的
sep_conj
定义的特殊语法。在这里,您还可以找到缩写
pred_K::“'b⇒ 'A.⇒ 'b“(”⟨⟨_⟩⟩") “在哪里”⟨⟨F⟩⟩ ≡ λs.f“
。这些是你遇到的括号吗?很好!你想把它写下来作为答案吗?@BenKeks我在看单尖括号,我最终在这里找到了它的定义,尽管我无法使用该语法的控件单击。
datatype state_element =
    StackHeightElm "nat"
  | StackElm "nat * w256" ... (* 20 lines like this *)