【发布时间】:2016-02-09 10:47:24
【问题描述】:
我有一个由三个构造函数构建的归纳集:
Inductive MF : Set :=
| D : MF
| cn : MF -> MF -> MF
| dn : Z -> MF -> MF.
我想以某种方式定义一个新的归纳集 B,使得 B 是 MF 的子集,仅包含从 D 和 dn 获得的元素。此外,如果需要,B 中的所有内容都应解释为 MF 类型。
我尝试先定义 B,然后定义 MF,如下所示:
Inductive B : Set :=
| D : B
| dn : Z -> B -> B.
Inductive MF : Set :=
| m : B -> MF
| cn : MF -> MF -> MF
| Dn : Z -> MF -> MF.
Axiom m_inj : forall (a b : B), m a = m b -> a = b.
Coercion m : B >-> MF.
Axiom dnDn : forall (a : B)(i : Z), (m (dn i a)) = (Dn i (m a)).
这里的问题是我必须构造函数(dn 和 Dn),它们应该可以与 B 中的元素互换。这给我在进一步的开发中带来了很多问题,我必须不断添加 Axioms 以获得预期的行为。
【问题讨论】:
标签: coq