我正在尝试理解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)
怎么可能是一个函数?为什么会有不同数量的事物被星星划定?这是自定义定义的语法吗?谜团比比皆是。
答案 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#L108中sep_conj
的语法糖,⟨ _ ⟩
是https://github.com/pirapira/eth-isabelle/blob/master/Hoare/Hoare.thy#L257中pure
的糖,为Alex found out。