在Isabelle中引入类型缩写

在Isabelle中引入类型缩写,isabelle,Isabelle,我知道如何在Isabelle中使用“术语缩写”,但我能用同样的方式使用“类型缩写”吗 我可以使用 缩写“foo==True” 此后,输出中所有出现的True将打印为foo。例如,命令 术语“True”⟶ 假“ 输出“foo⟶ False“。我想定义一个具有相同行为的“类型缩写”。我知道type\u同义词命令,但是当我键入 type_同义词baz=“int list” 然后,在将来的输出中,int list的出现不会像我希望的那样被baz所取代。如果它还没有以某种形式存在,我认为当定义的右侧

我知道如何在Isabelle中使用“术语缩写”,但我能用同样的方式使用“类型缩写”吗

我可以使用

缩写“foo==True” 此后,输出中所有出现的
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"