我为小组制作了一张唱片。现在我想通过指定组乘法表来构建一个包含n个元素的组(例如10个元素)。
我的问题是我需要n个符号作为我的小组的地面集。我需要Coq知道这些n个元素都是不同的。
到目前为止,我已经想过了
Inductive ground_set : Type := A : ground_set | B : ground_set.
Axiom diff: A<>B.
适用于n = 2。我不知道如何将其扩展到许多元素,而不会创建一些丑陋的代码。
我猜想有更好的方法来生成这样的一组,但我找不到任何。
答案 0 :(得分:4)
疯狂的猜测,但也许是这样的:
Inductive ground_set (limit: nat): Set :=
| Elem : forall n, n < limit -> ground_set limit.
Lemma ground_set_discr (limit:nat): forall n p (hn: n < limit) (hp: p < limit),
n <> p -> Elem _ n hn <> Elem _ p hp.
Proof.
intros n p hn hp hdiff h.
inversion h; subst; clear h.
now apply hdiff.
Qed.
答案 1 :(得分:2)
对于Inductive
定义,构造函数之间的不等式是免费的:
Inductive ground_set : Type := A : ground_set | B : ground_set.
Lemma diff: A <> B.
Proof.
discriminate.
Qed.
答案 2 :(得分:1)
确实最好的方法是使用Vinz概述的方法。例如,使用某些库有助于mathcomp,它专门用于推理有限群,只需编写n
就可以创建一个具有'I_n
个不同元素的类型,并且您将免费获得许多库属性,例如有限性。