aboutsummaryrefslogtreecommitdiff
path: root/coqprime/Coqprime/FGroup.v
diff options
context:
space:
mode:
Diffstat (limited to 'coqprime/Coqprime/FGroup.v')
-rw-r--r--coqprime/Coqprime/FGroup.v123
1 files changed, 0 insertions, 123 deletions
diff --git a/coqprime/Coqprime/FGroup.v b/coqprime/Coqprime/FGroup.v
deleted file mode 100644
index ee18761ab..000000000
--- a/coqprime/Coqprime/FGroup.v
+++ /dev/null
@@ -1,123 +0,0 @@
-
-(*************************************************************)
-(* This file is distributed under the terms of the *)
-(* GNU Lesser General Public License Version 2.1 *)
-(*************************************************************)
-(* Benjamin.Gregoire@inria.fr Laurent.Thery@inria.fr *)
-(*************************************************************)
-
-(**********************************************************************
- FGroup.v
-
- Defintion and properties of finite groups
-
- Definition: FGroup
- **********************************************************************)
-Require Import List.
-Require Import UList.
-Require Import Tactic.
-Require Import ZArith.
-
-Open Scope Z_scope.
-
-Set Implicit Arguments.
-
-(**************************************
- A finite group is defined for an operation op
- it has a support (s)
- op operates inside the group (internal)
- op is associative (assoc)
- it has an element (e) that is neutral (e_is_zero_l e_is_zero_r)
- it has an inverse operator (i)
- the inverse operates inside the group (i_internal)
- it gives an inverse (i_is_inverse_l is_is_inverse_r)
- **************************************)
-
-Record FGroup (A: Set) (op: A -> A -> A): Set := mkGroup
- {s : (list A);
- unique_s: ulist s;
- internal: forall a b, In a s -> In b s -> In (op a b) s;
- assoc: forall a b c, In a s -> In b s -> In c s -> op a (op b c) = op (op a b) c;
- e: A;
- e_in_s: In e s;
- e_is_zero_l: forall a, In a s -> op e a = a;
- e_is_zero_r: forall a, In a s -> op a e = a;
- i: A -> A;
- i_internal: forall a, In a s -> In (i a) s;
- i_is_inverse_l: forall a, (In a s) -> op (i a) a = e;
- i_is_inverse_r: forall a, (In a s) -> op a (i a) = e
-}.
-
-(**************************************
- The order of a group is the lengh of the support
- **************************************)
-
-Definition g_order (A: Set) (op: A -> A -> A) (g: FGroup op) := Z_of_nat (length g.(s)).
-
-Unset Implicit Arguments.
-
-Hint Resolve unique_s internal e_in_s e_is_zero_l e_is_zero_r i_internal
- i_is_inverse_l i_is_inverse_r assoc.
-
-
-Section FGroup.
-
-Variable A: Set.
-Variable op: A -> A -> A.
-
-(**************************************
- Some properties of a finite group
- **************************************)
-
-Theorem g_cancel_l: forall (g : FGroup op), forall a b c, In a g.(s) -> In b g.(s) -> In c g.(s) -> op a b = op a c -> b = c.
-intros g a b c H1 H2 H3 H4; apply trans_equal with (op g.(e) b); sauto.
-replace (g.(e)) with (op (g.(i) a) a); sauto.
-apply trans_equal with (op (i g a) (op a b)); sauto.
-apply sym_equal; apply assoc with g; auto.
-rewrite H4.
-apply trans_equal with (op (op (i g a) a) c); sauto.
-apply assoc with g; auto.
-replace (op (g.(i) a) a) with g.(e); sauto.
-Qed.
-
-Theorem g_cancel_r: forall (g : FGroup op), forall a b c, In a g.(s) -> In b g.(s) -> In c g.(s) -> op b a = op c a -> b = c.
-intros g a b c H1 H2 H3 H4; apply trans_equal with (op b g.(e)); sauto.
-replace (g.(e)) with (op a (g.(i) a)); sauto.
-apply trans_equal with (op (op b a) (i g a)); sauto.
-apply assoc with g; auto.
-rewrite H4.
-apply trans_equal with (op c (op a (i g a))); sauto.
-apply sym_equal; apply assoc with g; sauto.
-replace (op a (g.(i) a)) with g.(e); sauto.
-Qed.
-
-Theorem e_unique: forall (g : FGroup op), forall e1, In e1 g.(s) -> (forall a, In a g.(s) -> op e1 a = a) -> e1 = g.(e).
-intros g e1 He1 H2.
-apply trans_equal with (op e1 g.(e)); sauto.
-Qed.
-
-Theorem inv_op: forall (g: FGroup op) a b, In a g.(s) -> In b g.(s) -> g.(i) (op a b) = op (g.(i) b) (g.(i) a).
-intros g a1 b1 H1 H2; apply g_cancel_l with (g := g) (a := op a1 b1); sauto.
-repeat rewrite g.(assoc); sauto.
-apply trans_equal with g.(e); sauto.
-rewrite <- g.(assoc) with (a := a1); sauto.
-rewrite g.(i_is_inverse_r); sauto.
-rewrite g.(e_is_zero_r); sauto.
-Qed.
-
-Theorem i_e: forall (g: FGroup op), g.(i) g.(e) = g.(e).
-intro g; apply g_cancel_l with (g:= g) (a := g.(e)); sauto.
-apply trans_equal with g.(e); sauto.
-Qed.
-
-(**************************************
- A group has at least one element
- **************************************)
-
-Theorem g_order_pos: forall g: FGroup op, 0 < g_order g.
-intro g; generalize g.(e_in_s); unfold g_order; case g.(s); simpl; auto with zarith.
-Qed.
-
-
-
-End FGroup.