aboutsummaryrefslogtreecommitdiff
path: root/mathcomp/attic/galgebra.v
diff options
context:
space:
mode:
Diffstat (limited to 'mathcomp/attic/galgebra.v')
-rw-r--r--mathcomp/attic/galgebra.v231
1 files changed, 0 insertions, 231 deletions
diff --git a/mathcomp/attic/galgebra.v b/mathcomp/attic/galgebra.v
deleted file mode 100644
index 16bbe1e..0000000
--- a/mathcomp/attic/galgebra.v
+++ /dev/null
@@ -1,231 +0,0 @@
-(* (c) Copyright 2006-2016 Microsoft Corporation and Inria. *)
-(* Distributed under the terms of CeCILL-B. *)
-Require Import mathcomp.ssreflect.ssreflect.
-From mathcomp
-Require Import ssrbool ssrfun eqtype ssrnat seq choice fintype finfun.
-From mathcomp
-Require Import bigop finset ssralg fingroup zmodp matrix vector falgebra.
-
-(*****************************************************************************)
-(* * Finite Group as an algebra *)
-(* (galg F gT) == the algebra generated by gT on F *)
-(*****************************************************************************)
-
-Set Implicit Arguments.
-Unset Strict Implicit.
-Unset Printing Implicit Defensive.
-
-Reserved Notation "g %:FG"
- (at level 2, left associativity, format "g %:FG").
-
-Local Open Scope ring_scope.
-Import GRing.Theory.
-
-Section GroupAlgebraDef.
-Variables (F : fieldType) (gT : finGroupType).
-
-Inductive galg : predArgType := GAlg of {ffun gT -> F}.
-
-Definition galg_val A := let: GAlg f := A in f.
-
-Canonical galg_subType := Eval hnf in [newType for galg_val].
-Definition galg_eqMixin := Eval hnf in [eqMixin of galg by <:].
-Canonical galg_eqType := Eval hnf in EqType galg galg_eqMixin.
-Definition galg_choiceMixin := [choiceMixin of galg by <:].
-Canonical galg_choiceType := Eval hnf in ChoiceType galg galg_choiceMixin.
-
-Definition fun_of_galg A (i : gT) := galg_val A i.
-
-Coercion fun_of_galg : galg >-> Funclass.
-
-Lemma galgE : forall f, GAlg (finfun f) =1 f.
-Proof. by move=> f i; rewrite /fun_of_galg ffunE. Qed.
-
-Definition injG (g : gT) := GAlg ([ffun k => (k == g)%:R]).
-Local Notation "g %:FG" := (injG g).
-
-Implicit Types v: galg.
-
-Definition g0 := GAlg 0.
-Definition g1 := 1%g %:FG.
-Definition opprg v := GAlg (-galg_val v).
-Definition addrg v1 v2 := GAlg (galg_val v1 + galg_val v2).
-Definition mulvg a v := GAlg ([ffun k => a * galg_val v k]).
-Definition mulrg v1 v2 :=
- GAlg ([ffun g => \sum_(k : gT) (v1 k) * (v2 ((k^-1) * g)%g)]).
-
-Lemma addrgA : associative addrg.
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> ?; rewrite !ffunE addrA.
-Qed.
-Lemma addrgC : commutative addrg.
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> ?; rewrite !ffunE addrC.
-Qed.
-Lemma addr0g : left_id g0 addrg.
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> ?; rewrite !ffunE add0r.
-Qed.
-Lemma addrNg : left_inverse g0 opprg addrg.
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> ?; rewrite !ffunE addNr.
-Qed.
-
-(* abelian group structure *)
-Definition gAlgZmodMixin := ZmodMixin addrgA addrgC addr0g addrNg.
-Canonical Structure gAlgZmodType :=
- Eval hnf in ZmodType galg gAlgZmodMixin.
-
-Lemma GAlg_morph : {morph GAlg: x y / x + y}.
-Proof. by move=> f1 f2; apply/eqP. Qed.
-
-Lemma mulvgA : forall a b v, mulvg a (mulvg b v) = mulvg (a * b) v.
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> g; rewrite !ffunE mulrA.
-Qed.
-
-Lemma mulvg1 : forall v, mulvg 1 v = v.
-Proof. by move=> v; apply: val_inj; apply/ffunP=> g; rewrite ffunE mul1r. Qed.
-
-Lemma mulvg_addr : forall a u v, mulvg a (u + v) = (mulvg a u) + (mulvg a v).
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> g; rewrite !ffunE mulrDr.
-Qed.
-
-Lemma mulvg_addl : forall u a b, mulvg (a + b) u = (mulvg a u) + (mulvg b u).
-Proof.
-by move=> *; apply: val_inj; apply/ffunP=> g; rewrite !ffunE mulrDl.
-Qed.
-
-Definition gAlgLmodMixin := LmodMixin mulvgA mulvg1 mulvg_addr mulvg_addl.
-Canonical gAlgLmodType := Eval hnf in LmodType F galg gAlgLmodMixin.
-
-Lemma sum_fgE : forall I r (P : pred I) (E : I -> galg) i,
- (\sum_(k <- r | P k) E k) i = \sum_(k <- r | P k) E k i.
-Proof.
-move=> I r P E i.
-by apply: (big_morph (fun A : galg => A i)) => [A B|]; rewrite galgE.
-Qed.
-
-Lemma mulrgA : associative mulrg.
-Proof.
-move=> x y z; apply: val_inj; apply/ffunP=> g; rewrite !ffunE; symmetry.
-rewrite (eq_bigr (fun k => \sum_i x i * (y (i^-1 * k)%g * z (k^-1 * g)%g)))
- => [| *]; last by rewrite galgE big_distrl; apply: eq_bigr => *; rewrite mulrA.
-rewrite exchange_big /=.
-transitivity (\sum_j x j * \sum_i y (j^-1 * i)%g * z (i^-1 * g)%g).
- by apply: eq_bigr => i _; rewrite big_distrr /=.
-apply: eq_bigr => i _; rewrite galgE (reindex (fun j => (i * j)%g)); last first.
- by exists [eta mulg i^-1] => /= j _; rewrite mulgA 1?mulgV 1?mulVg mul1g.
-by congr (_ * _); apply: eq_bigr => *; rewrite mulgA mulVg mul1g invMg mulgA.
-Qed.
-
-Lemma mulr1g : left_id g1 mulrg.
-Proof.
-move=> x; apply: val_inj; apply/ffunP=> g.
-rewrite ffunE (bigD1 1%g) //= galgE eqxx invg1.
-by rewrite mul1g mul1r big1 1?addr0 // => i Hi; rewrite galgE (negbTE Hi) mul0r.
-Qed.
-
-Lemma mulrg1 : right_id g1 mulrg.
-Proof.
-move=> x; apply: val_inj; apply/ffunP=> g.
-rewrite ffunE (bigD1 g) //= galgE mulVg eqxx mulr1.
-by rewrite big1 1?addr0 // => i Hi; rewrite galgE -eq_mulVg1 (negbTE Hi) mulr0.
-Qed.
-
-Lemma mulrg_addl : left_distributive mulrg addrg.
-Proof.
-move=> x y z; apply: val_inj; apply/ffunP=> g; rewrite !ffunE -big_split /=.
-by apply: eq_bigr => i _; rewrite galgE mulrDl.
-Qed.
-
-Lemma mulrg_addr : right_distributive mulrg addrg.
-Proof.
-move=> x y z; apply: val_inj; apply/ffunP=> g; rewrite !ffunE -big_split /=.
-by apply: eq_bigr => i _; rewrite galgE mulrDr.
-Qed.
-
-Lemma nong0g1 : g1 != 0 :> galg.
-Proof.
-apply/eqP; case.
-move/ffunP; move/(_ 1%g); rewrite !ffunE eqxx.
-by move/eqP; rewrite oner_eq0.
-Qed.
-
-Definition gAlgRingMixin :=
- RingMixin mulrgA mulr1g mulrg1 mulrg_addl mulrg_addr nong0g1.
-Canonical gAlgRingType := Eval hnf in RingType galg gAlgRingMixin.
-
-Implicit Types x y : galg.
-
-Lemma mulg_mulvl : forall a x y, a *: (x * y) = (a *: x) * y.
-Proof.
-move=> a x y; apply: val_inj; apply/ffunP=> g.
-rewrite !ffunE big_distrr /=.
-by apply: eq_bigr => i _; rewrite mulrA galgE.
-Qed.
-
-Lemma mulg_mulvr : forall a x y, a *: (x * y) = x * (a *: y).
-Proof.
-move=> a x y; apply: val_inj; apply/ffunP=> g.
-rewrite !ffunE big_distrr /=.
-by apply: eq_bigr => i _; rewrite galgE mulrCA.
-Qed.
-
-Canonical gAlgLalgType := Eval hnf in LalgType F galg mulg_mulvl.
-Canonical gAlgAlgType := Eval hnf in AlgType F galg mulg_mulvr.
-
-Lemma injGM : forall g h, (g * h)%g %:FG = (g %:FG) * (h %:FG).
-Proof.
-move=> g h; apply: val_inj; apply/ffunP=> k.
-rewrite !ffunE (bigD1 g) //= !galgE eqxx mul1r.
-rewrite big1 1?addr0 => [| i Hi]; last by rewrite !galgE (negbTE Hi) mul0r.
-by rewrite -(inj_eq (mulgI (g^-1)%g)) mulgA mulVg mul1g.
-Qed.
-
-Fact gAlg_iso_vect : Vector.axiom #|gT| galg.
-Proof.
-exists (fun x => \row_(i < #|gT|) x (enum_val i)) => [k x y | ].
- by apply/rowP=> i; rewrite !mxE !galgE !ffunE.
-exists (fun x : 'rV[F]_#|gT| => GAlg ([ffun k => (x 0 (enum_rank k))])) => x.
- by apply: val_inj; apply/ffunP=> i; rewrite ffunE mxE enum_rankK.
-by apply/rowP=> i; rewrite // !mxE galgE enum_valK.
-Qed.
-
-Definition galg_vectMixin := VectMixin gAlg_iso_vect.
-Canonical galg_vectType := VectType F galg galg_vectMixin.
-
-Canonical galg_unitRingType := FalgUnitRingType galg.
-Canonical galg_unitAlgFType := [unitAlgType F of galg].
-Canonical gAlgAlgFType := [FalgType F of galg].
-
-
-Variable G : {group gT}.
-
-Definition gvspace: {vspace galg} := (\sum_(g in G) <[g%:FG]>)%VS.
-
-Fact gspace_subproof : has_algid gvspace && (gvspace * gvspace <= gvspace)%VS.
-Proof.
-apply/andP; split.
- apply: has_algid1.
- rewrite /gvspace (bigD1 (1)%g) //=.
- apply: subv_trans (addvSl _ _).
- by apply/vlineP; exists 1; rewrite scale1r.
-apply/prodvP=> u v Hu Hv.
-case/memv_sumP: Hu => u_ Hu ->; rewrite big_distrl /=.
-apply: memv_suml=> i Hi.
-case/memv_sumP: Hv => v_ Hv ->; rewrite big_distrr /=.
-apply: memv_suml=> j Hj.
-rewrite /gvspace (bigD1 (i*j)%g) /=; last by apply: groupM.
-apply: subv_trans (addvSl _ _).
-case/vlineP: (Hu _ Hi)=> k ->; case/vlineP: (Hv _ Hj)=> l ->.
-apply/vlineP; exists (k * l).
-by rewrite -scalerAl -scalerAr scalerA injGM.
-Qed.
-
-Definition gaspace : {aspace galg} := ASpace gspace_subproof.
-
-End GroupAlgebraDef.
-
-Notation " g %:FG " := (injG _ g).