我知道如何在Isabelle中制作“术语缩写”,但我可以制作行为方式相同的“缩写”吗?
我可以使用
定义“术语缩写”abbreviation "foo == True"
此后,输出中True
的所有外观都将打印为foo
。例如,命令
term "True ⟶ False"
输出"foo ⟶ False"
。我想定义一个具有相同行为的“类型缩写”。我知道type_synonym
命令,但是当我输入
type_synonym baz = "int list"
然后在未来的输出中出现int list
而不是替换为baz
,正如我希望的那样。如果它还没有以某种形式存在,我认为当定义的右侧相当笨拙时,type_abbreviation
命令可能非常方便。
答案 0 :(得分:2)
您可以声明类型的语法翻译,就像在引入abbreviation
之前必须为术语完成一样。例如,以下内容使Isabelle精美打印char list
为string
。更多这类例子可以在MicroJava中的Isabelle分布中找到。
translations
(type) "string" <= (type) "char list"
命令translations
适用于类型缩写,其中每个类型变量在每一侧恰好出现一次。如果右侧有多次出现类型变量,则必须在ML中编写解析转换。有关此示例,请参阅AFP中的JinjaThreads(搜索print_translation
)。