如何在Coq

时间:2017-02-03 08:46:42

标签: coq

我为小组制作了一张唱片。现在我想通过指定组乘法表来构建一个包含n个元素的组(例如10个元素)。

我的问题是我需要n个符号作为我的小组的地面集。我需要Coq知道这些n个元素都是不同的。

到目前为止,我已经想过了

Inductive ground_set : Type :=  A : ground_set | B : ground_set.
Axiom diff: A<>B.

适用于n = 2。我不知道如何将其扩展到许多元素,而不会创建一些丑陋的代码。

我猜想有更好的方法来生成这样的一组,但我找不到任何。

3 个答案:

答案 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个不同元素的类型,并且您将免费获得许多库属性,例如有限性。