子集参数
我有一个参数集:
Parameter Q:Set.
现在我想定义另一个参数,它是Q的一个子集。类似于:
Parameter F: subset Q.
我该如何定义?我想我可以稍后将限制添加为公理,但似乎更自然地直接在F的类型中表达它。
没有找到相关结果
已邀请:
1 个回复
董碘奴星
中的物体视为数学集是错误的。
是一种数据类型,与编程语言中的类型相同(除了Coq的类型非常强大)。 Coq没有子类型¹。如果两种类型
和
是不同的,则就数学模型而言它们是不相交的。 通常的方法是将
声明为完全相关的集合,并声明从
到ѭ5的规范注入。除了显而易见之外,您还需要指定该注入的任何有趣属性。
最后一行宣布从
到ѭ5强制。这使得您可以在上下文所需的类型
处放置类型为
的对象。类型推理引擎将调用
。你需要偶尔明确写出强制,因为类型推理引擎虽然非常好,但并不完美(完美在数学上是不可能的)。 Coq参考手册中有一章有关强制的内容;你应该至少浏览它。 另一种方法是用扩展属性定义你的子集,即在集合(类型)decla5ѭ上声明一个谓词
,并从
定义
。
是规范,即弱和类型,即由对象和所述对象具有某种属性的证据组成的对。
是e等价于
(这是语法糖
)。你必须决定你喜欢短形式还是长形式(你需要保持一致)。使用弱金额时,
白话通常很有用。 ¹ 模块语言中有子类型,但这与此无关。并且强制假冒了很多用途的子类型,但它们并不是真实的东西。