在Isabelle中,尖括号和双星号是什么意思?

时间:2018-07-21 00:38:00

标签: isabelle theorem-proving formal-verification isar

我正在尝试理解some Isabelle code,并且有些语法我不理解。我没有在教程中看到它们,包括与Isabelle2017发行版捆绑在一起的两个“ Isabelle / HOL中的编程和证明”和“ Isabelle / Isar参考手册”。它们是符号,再加上Isabelle的用户群很小,这一事实意味着答案非常难以用Google搜索。

第一个是大括号 ,第二个是双星号**,在输出控制台中呈现为∧*(与ASCII ^

这里是example;

lemma pre_fifth_pure [simp]:
  "triple net failures (a ** b ** c ** d ** ⟨ P ⟩) cod post =
   (P ⟶ triple net failures (a ** b ** c ** d) cod post)"

尖括号似乎总是围绕着一个命题。 triple函数的定义意味着(a ** b ** c ** d)的类型为state_element set ⇒ bool,其中state_element只是一堆构造函数的结合;

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

这两个语法是否相关? (a ** b ** c ** d)怎么可能是一个函数?为什么会有不同数量的事物被星星划定?这是自定义定义的语法吗?谜团比比皆是。

1 个答案:

答案 0 :(得分:1)

Isabelle具有丰富的机制来定义自己的符号。因此,当人们检查他人编写的理论时,经常会遇到不熟悉的语法。

使用 Isabelle / jEdit ,您可以按 Ctrl (对于Mac,为 Cmd ),然后单击语法和名称以跳至其定义站点(参见Isabelle/jEdit Manual的3.5)。

有零星的instances可能不起作用。然后,您可以尝试在理论文本中键入print_syntax,这将输出当前内部语法配置的所有规则(参见Isabelle/Isar Reference Manual的8.4.4)。希望您至少可以由此推测出某种符号来自哪个理论。应该假设仁慈的理论作者将避免使用破坏超链接功能的语法设置。

对于此处的特定问题,**https://github.com/pirapira/eth-isabelle/blob/master/sep_algebra/Separation_Algebra.thy#L108sep_conj的语法糖,⟨ _ ⟩https://github.com/pirapira/eth-isabelle/blob/master/Hoare/Hoare.thy#L257pure的糖,为Alex found out