在Isabelle中引入类型缩写
我知道如何在Isabelle中使用“术语缩写”,但我能用同样的方式使用“类型缩写”吗 我可以使用 缩写“foo==True” 此后,输出中所有出现的在Isabelle中引入类型缩写,isabelle,Isabelle,我知道如何在Isabelle中使用“术语缩写”,但我能用同样的方式使用“类型缩写”吗 我可以使用 缩写“foo==True” 此后,输出中所有出现的True将打印为foo。例如,命令 术语“True”⟶ 假“ 输出“foo⟶ False“。我想定义一个具有相同行为的“类型缩写”。我知道type\u同义词命令,但是当我键入 type_同义词baz=“int list” 然后,在将来的输出中,int list的出现不会像我希望的那样被baz所取代。如果它还没有以某种形式存在,我认为当定义的右侧
True
将打印为foo
。例如,命令
术语“True”⟶ 假“
输出“foo⟶ False“
。我想定义一个具有相同行为的“类型缩写”。我知道type\u同义词
命令,但是当我键入
type_同义词baz=“int list”
然后,在将来的输出中,
int list
的出现不会像我希望的那样被baz
所取代。如果它还没有以某种形式存在,我认为当定义的右侧相当笨拙时,type\u缩写
命令可能非常方便。您可以为类型声明语法翻译,就像在引入缩写
之前对术语所做的一样。例如,以下内容使Isabelle可以将字符列表
打印为字符串
。更多此类示例可在中的Isabelle分布中找到
翻译
(输入)“string”我认为没有好的解决方案。一般来说,不清楚何时您真的想用缩写替换类型。当然,术语也是如此(但术语歧义的发生频率较低)。例如,在研究无限序列的理论时,我认为用缩写'a seq
表示nat=>'a
是个好主意。但是,是否确实要替换此类型的所有引用?我不。考虑<代码> NT::“list=>一个SEQ < /代码>。@克里斯MM,好点,我猜<代码> >一个SEQ < /代码>应保持<代码> Type同义词< /> >而不是<代码> Type缩写< /代码>。作为一个反例,我想我总是更喜欢看string
而不是char list
。顺便说一句,我知道的一个可能的解决方法是引入构造函数,例如datatype baz=baz“int list”
。然后可以用Baz
标记术语,使Isabelle将类型打印为Baz
类型,而不是int list
。
translations
(type) "string" <= (type) "char list"