8 types type-theory subtype isabelle isar
我想知道Isabelle/HOL亚型.我解释一下为什么在我对上一个SO问题的部分回答中对我来说很重要:
基本上,我只有一种类型,所以如果我可以通过子类型利用HOL类型的力量,它可能对我有用.
我已经在Isabelle文档,Web和Isabelle邮件列表中进行了搜索.使用"子类型"这个词虽然不多,但它似乎并不是伊莎贝尔词汇中非常重要的一部分.
部分地,我只想知道如何正确使用"子类型"这个词.我不想在Isabelle中调用一个不属于子类型的子类型.
根据Wiki,子类型是特定于语言的:
https://en.wikipedia.org/wiki/Subtyping
有人能给我一个创建Isar子类型的Isar命令列表吗?我正在调查typedef,正如上面提到的问题所解释的那样.我倾向于称之为子类型,但isar-ref.pdf在解释命令时不使用"子类型".
如果有其他方法可以创建Isabelle/HOL亚型,我想知道.
And*_*ler 10
Isabelle/HOL在可替代性方面没有亚型.这意味着如果你需要一个类型的值a,那么你必须提供一个类型的值a- 你不能与另一种类型相处b.特别是,Isabelle没有子类型的概念,其中子类型的值满足一些额外的属性.
有一些方法可以模拟子类型的某些方面,这就是使用概念子类型的地方:
类型参数的替换允许您有时创建子类型的错觉.该record包使用这个扩展记录,例如,人们可以使用扩展记录q代替非扩展记录的r.在内部,其他字段q被填充到r记录类型的泛化的附加类型参数中.从技术上讲,没有子类型多态性发生; 因此,延长记录的顺序很重要.
typedef引入了一种新类型,t其类型Universe是某些现有HOL类型值的非空子集a.有时,这被称为t子类型a,但您没有可替代性.你总是要明确提及嵌入射Rep_t时要使用的值t作为一个a.无论您是使用typedef其他方式还是通过其他方式定义您的类型,任何内射函数都可以作为这样的强制.
Isabelle参考手册(第12.4节)中描述的强制性子类型使Isabelle推断并自动插入此类强制.这只适用于类型和子类型都是没有参数的类型构造函数.使用declare [[coercion_enabled]]启用强制分型,并与注册您的强制功能declare [[coercion Rep_t]].因此,您不必自己插入嵌入函数.