2017-02-03 3 views
1

Я создал запись для группы. Теперь я хотел бы построить группу с n элементами (например, 10 элементов), указав таблицу групповой умножения.Как ввести n различных символов в Coq

Моя проблема в том, что мне нужны n символов, которые будут служить в качестве основного набора для моей группы. Мне понадобится Кок, чтобы знать, что эти n элементов различны.

До сих пор я понял

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

, который работает при п = 2. Я не знаю, как масштабировать это для многих элементов, не создавая какой-то уродливый код.

Я бы предположил, что есть лучший способ создать такой набор, но я не смог его найти.

ответ

4

Wild догадка, но, возможно, что-то вроде:

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. 
+0

Возможно, вам понадобится некорректность доказательства (что всегда верно в отношении предложения nat), чтобы рассуждать с такими зависимыми типами. – Vinz

+4

Очень похожий подход заключается в использовании типа 'Fin.t', определенного в стандартной библиотеке ([' Coq.Vectors.Fin'] (https://coq.inria.fr/library/Coq.Vectors.Fin. html)): «fin n» - удобный способ представления \ 1 .. n \ ". –

+0

Я согласен с использованием типа Fin или mathcomp 'I_n будет лучшим вариантом, поскольку вся поддержка уже здесь. Я не был уверен в этом вопросе, поэтому я попробовал наивный подход;) – Vinz

2

Для Inductive определения, вы получите неравенства между конструкторами бесплатно:

Inductive ground_set : Type := A : ground_set | B : ground_set. 

Lemma diff: A <> B. 
Proof. 
    discriminate. 
Qed. 
+0

Хорошо, что работа для части отличия. как насчет создания основного набора некоторого целого размера, намного большего, чем 2? – tomjerry7

1

Действительно, лучше всего использовать подход, изложенный Vinz , Использование некоторых библиотек поможет, например, в mathcomp, который специализируется на рассуждениях о конечных группах, вы можете создать тип с n отдельными элементами, просто написав 'I_n, и вы получите бесплатно многие свойства, такие как конечность.

Смежные вопросы