Types 什么是Isabelle/HOL亚型?哪些Isar命令生成子类型?

Types 什么是Isabelle/HOL亚型?哪些Isar命令生成子类型?,types,subtype,isabelle,type-theory,isar,Types,Subtype,Isabelle,Type Theory,Isar,我想知道伊莎贝尔/荷尔的亚型。在我对最后一个SO问题的部分回答中,我解释了为什么这对我很重要: 基本上,我只有一种类型,所以如果我可以通过子类型利用HOL类型的强大功能,这可能对我很有用 我在Isabelle文档、网络和Isabelle邮件列表中进行了搜索。“subtype”一词虽然使用不多,但似乎在Isabelle的词汇表中并不是一个非常重要的部分 在某种程度上,我只是想知道如何正确使用“subtype”这个词。我不想在《伊莎贝尔》中将某个东西称为子类型,而这不是子类型 根据维基,子类型是特

我想知道伊莎贝尔/荷尔的亚型。在我对最后一个SO问题的部分回答中,我解释了为什么这对我很重要:

基本上,我只有一种类型,所以如果我可以通过子类型利用HOL类型的强大功能,这可能对我很有用

我在Isabelle文档、网络和Isabelle邮件列表中进行了搜索。“subtype”一词虽然使用不多,但似乎在Isabelle的词汇表中并不是一个非常重要的部分

在某种程度上,我只是想知道如何正确使用“subtype”这个词。我不想在《伊莎贝尔》中将某个东西称为子类型,而这不是子类型

根据维基,子类型是特定于语言的:

重要的最后一部分;请来命令 有人能给我一个创建Isar子类型的Isar命令列表吗?我正在调查
typedef
,如上面链接的问题所述。我倾向于称之为子类型,但在解释命令时不使用“subtype”


如果有其他方法来创建Isabelle/HOL子类型,我想知道。

Isabelle/HOL没有可替代性意义上的子类型。这意味着,如果您需要类型为
a
的值,则必须提供类型为
a
的值-您无法使用不同的类型
b
。特别是,Isabelle没有子类型的概念,其中子类型的值满足一些附加属性

有一些方法可以模拟子类型的某些方面,这就是使用子类型概念的地方:

  • 类型参数的替换有时允许您创建子类型的假象。
    record
    软件包使用它来扩展记录,这样就可以使用扩展记录
    q
    代替非扩展记录
    r
    。在内部,
    q
    的附加字段被填充到
    r
    记录类型泛化的附加类型参数中。从技术上讲,不存在亚型多态性;因此,扩展记录的顺序很重要

  • typedef
    引入了一个新类型
    t
    ,其类型范围是某些现有HOL类型
    a
    的值的非空子集。有时,这被称为
    t
    ,是
    a
    的一个子类型,但您没有获得可替代性。如果要将
    t
    的值用作
    a
    中的一个值,则必须明确提到嵌入态射
    Rep\u t
    。无论是使用
    typedef
    还是通过其他方式定义类型,任何内射函数都可以用作强制

  • 中描述的强制子类型使Isabelle自动推断并插入此类强制。这只适用于类型和子类型都是不带参数的类型构造函数的情况。 使用
    declare[[concurvation\u enabled]]
    启用强制子类型,并使用
    declare[[concurvation Rep]]
    注册强制功能。 因此,您不必自己插入嵌入函数


  • Andreas,另一个例子,我对我需要什么和想要什么有一个模糊的想法,开发人员很久以前就已经以成熟的形式考虑并实现了这个想法。第12.4节使用“强制分型”一词。“Subtype”可以专门定义在Isabelle/HOL中的用法。。。当一个词在文档中使用,但从未定义,并且具有非标准含义时,我可以旋转我的轮子。。。但删掉最后两句话。我现在明白了“强制打字”说明了一切,甚至在维基上也提到了这一点;我的意识提高了@拉尔斯,谢谢你把“写”解释为“插入”。