在Isabelle中引入类型缩写

时间:2014-05-25 06:59:28

标签: isabelle

我知道如何在Isabelle中制作“术语缩写”,但我可以制作行为方式相同的“缩写”吗?

我可以使用

定义“术语缩写”
abbreviation "foo == True"

此后,输出中True的所有外观都将打印为foo。例如,命令

term "True ⟶ False"

输出"foo ⟶ False"。我想定义一个具有相同行为的“类型缩写”。我知道type_synonym命令,但是当我输入

type_synonym baz = "int list"

然后在未来的输出中出现int list 而不是替换为baz,正如我希望的那样。如果它还没有以某种形式存在,我认为当定义的右侧相当笨拙时,type_abbreviation命令可能非常方便。

1 个答案:

答案 0 :(得分:2)

您可以声明类型的语法翻译,就像在引入abbreviation之前必须为术语完成一样。例如,以下内容使Isabelle精美打印char liststring。更多这类例子可以在MicroJava中的Isabelle分布中找到。

translations
  (type) "string" <= (type) "char list"

命令translations适用于类型缩写,其中每个类型变量在每一侧恰好出现一次。如果右侧有多次出现类型变量,则必须在ML中编写解析转换。有关此示例,请参阅AFP中的JinjaThreads(搜索print_translation)。