Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
Notation"[ predI _ & _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ predU _ & _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ predD _ & _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ predC _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ preim _ of _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"_ + _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ - _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ <= _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ < _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ >= _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ > _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ <= _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ < _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ <= _ < _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ < _ < _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ * _" was already used in scope nat_scope.
[notation-overridden,parsing]
New coercion path [GRing.subring_closedM;
GRing.smulr_closedN] : GRing.subring_closed >-> GRing.oppr_closed is ambiguous with existing
[GRing.subring_closedB; GRing.zmod_closedN] : GRing.subring_closed >-> GRing.oppr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.subring_closed_semi;
GRing.semiring_closedM] : GRing.subring_closed >-> GRing.mulr_closed is ambiguous with existing
[GRing.subring_closedM; GRing.smulr_closedM] : GRing.subring_closed >-> GRing.mulr_closed.
New coercion path [GRing.subring_closed_semi;
GRing.semiring_closedD] : GRing.subring_closed >-> GRing.addr_closed is ambiguous with existing
[GRing.subring_closedB; GRing.zmod_closedD] : GRing.subring_closed >-> GRing.addr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.sdivr_closed_div;
GRing.divr_closedM] : GRing.sdivr_closed >-> GRing.mulr_closed is ambiguous with existing
[GRing.sdivr_closedM; GRing.smulr_closedM] : GRing.sdivr_closed >-> GRing.mulr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.subalg_closedBM;
GRing.subring_closedB] : GRing.subalg_closed >-> GRing.zmod_closed is ambiguous with existing
[GRing.subalg_closedZ; GRing.submod_closedB] : GRing.subalg_closed >-> GRing.zmod_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.divring_closed_div;
GRing.sdivr_closedM] : GRing.divring_closed >-> GRing.smulr_closed is ambiguous with existing
[GRing.divring_closedBM; GRing.subring_closedM] : GRing.divring_closed >-> GRing.smulr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.divalg_closedBdiv;
GRing.divring_closedBM] : GRing.divalg_closed >-> GRing.subring_closed is ambiguous with existing
[GRing.divalg_closedZ; GRing.subalg_closedBM] : GRing.divalg_closed >-> GRing.subring_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.Pred.subring_smul;
GRing.Pred.smul_mul] : GRing.Pred.subring >-> GRing.Pred.mul is ambiguous with existing
[GRing.Pred.subring_semi; GRing.Pred.semiring_mul] : GRing.Pred.subring >-> GRing.Pred.mul.
[ambiguous-paths,typechecker]
From mathcomp
Require Import matrix mxalgebra vector falgebra ssrnum algC algnum.From mathcomp
Require Import fieldext.From mathcomp Require Import vector.(* From mathcomp Require classfun. *)Set Implicit Arguments.Unset Strict Implicit.Unset Printing Implicit Defensive.LocalOpen Scope ring_scope.Import GRing.Theory Num.Theory.Reserved Notation"'[ u , v ]"
(at level2, format"'[hv' ''[' u , '/ ' v ] ']'").Reserved Notation"'[ u , v ]_ M"
(at level2, format"'[hv' ''[' u , '/ ' v ]_ M ']'").Reserved Notation"'[ u ]_ M" (at level2, format"''[' u ]_ M").Reserved Notation"'[ u ]" (at level2, format"''[' u ]").Reserved Notation"u '``_' i"
(at level3, i at level2, left associativity, format"u '``_' i").Reserved Notation"A ^_|_" (at level8, format"A ^_|_").Reserved Notation"A _|_ B" (at level69, format"A _|_ B").Reserved Notation"eps_theta .-sesqui" (at level2, format"eps_theta .-sesqui").Notation"u '``_' i" := (u (GRing.zero (Zp_zmodType O)) i) : ring_scope.Notation"''e_' i" := (delta_mx 0 i)
(format"''e_' i", at level3) : ring_scope.LocalNotation"M ^ phi" := (map_mx phi M).LocalNotation"M ^t phi" := (map_mx phi (M ^T)) (phi at level30, at level30).StructurerevopXYZ (f : Y -> X -> Z) := RevOp {
fun_of_revop :> X -> Y -> Z;
_ : forallx, f x =1 fun_of_revop^~ x
}.
R, S: ringType m, n: nat M: 'M_(m, n) g, f: R -> S
f =1 g -> M ^ f = M ^ g
2
bymove=> eq_fg; apply/matrixP=> i j; rewrite !mxE.Qed.
R: ringType 6 7
M ^ id = M
c
byapply/matrixP=> i j; rewrite !mxE.Qed.
f 6 7 f: R -> R
f =1 id -> M ^ f = M
13
bymove=> /eq_map_mx->; rewrite map_mx_id.Qed.ModuleBilinear.SectionClassDef.Variables (R : ringType) (UU' : lmodType R) (V : zmodType) (ss' : R -> V -> V).Implicit TypephUU'V : phant (U -> U' -> V).Local CoercionGRing.Scale.op : GRing.Scale.law >-> Funclass.Definitionaxiom (f : U -> U' -> V) (s_law : GRing.Scale.law s) (eqs : s = s_law)
(s'_law : GRing.Scale.law s') (eqs' : s' = s'_law) :=
((forallu', GRing.Linear.axiom (f^~ u') eqs)
* (forallu, GRing.Linear.axiom (f u) eqs'))%type.Recordclass_of (f : U -> U' -> V) : Prop := Class {
basel : forallu', GRing.Linear.class_of s (f^~ u');
baser : forallu, GRing.Linear.class_of s' (f u)
}.
f U, U': lmodType R V: zmodType s, s': R -> V -> V f: U -> U' -> V s_law: GRing.Scale.law s s'_law: GRing.Scale.law s' Ds: s = s_law Ds': s' = s'_law
axiom f Ds Ds' -> class_of f
1a
bypose coa := GRing.Linear.class_of_axiom; move=> [/(_ _) /coa ? /(_ _) /coa].Qed.StructuremapphUU'V := Pack {apply; _ : class_of apply}.Local Coercionapply : map >-> Funclass.Definitionclass (phUU'V : _) (cF : map phUU'V) :=
let: Pack _ c as cF' := cF return class_of cF' in c.Canonicaladditiver phU'V phUU'V (u : U) cF := GRing.Additive.Pack phU'V
(baser (@class phUU'V cF) u).Canonicallinearr phU'V phUU'V (u : U) cF := GRing.Linear.Pack phU'V
(baser (@class phUU'V cF) u).(* Fact applyr_key : unit. Proof. exact. Qed. *)Definitionapplyr_headt (f : U -> U' -> V) uv := let: tt := t in f v u.Notationapplyr := (@applyr_head tt).Canonicaladditivel phUV phUU'V (u' : U') (cF : map _) :=
@GRing.Additive.Pack _ _ phUV (applyr cF u') (basel (@class phUU'V cF) u').Canonicallinearl phUV phUU'V (u' : U') (cF : map _) :=
@GRing.Linear.Pack _ _ _ _ phUV (applyr cF u') (basel (@class phUU'V cF) u').Definitionpack (phUV : phant (U -> V)) (phU'V : phant (U' -> V))
(revf : U' -> U -> V) (rf : revop revf) f (g : U -> U' -> V) of (g = fun_of_revop rf) :=
fun (bFl : U' -> GRing.Linear.map s phUV) flcof (forallu', revf u' = bFl u') &
(forallu', phant_id (GRing.Linear.class (bFl u')) (flc u')) =>
fun (bFr : U -> GRing.Linear.map s' phU'V) frcof (forallu, g u = bFr u) &
(forallu, phant_id (GRing.Linear.class (bFr u)) (frc u)) =>
@Pack (Phant _) f (Classflcfrc).(* (* Support for right-to-left rewriting with the generic linearZ rule. *) *)(* Notation mapUV := (map (Phant (U -> U' -> V))). *)(* Definition map_class := mapUV. *)(* Definition map_at (a : R) := mapUV. *)(* Structure map_for a s_a := MapFor {map_for_map : mapUV; _ : s a = s_a}. *)(* Definition unify_map_at a (f : map_at a) := MapFor f (erefl (s a)). *)(* Structure wrapped := Wrap {unwrap : mapUV}. *)(* Definition wrap (f : map_class) := Wrap f. *)EndClassDef.ModuleExports.Delimit Scope linear_ring_scope with linR.Notationbilinear_for s s' f := (axiom f (erefl s) (erefl s')).Notationbilinear f := (bilinear_for *:%R *:%R f).Notationbiscalar f := (bilinear_for *%R *%R f).Notationbilmorphism_for s s' f := (class_of s s' f).Notationbilmorphism f := (bilmorphism_for *:%R *:%R f).
class_of_axiom does not respect the uniform
inheritance condition
[uniform-inheritance,typechecker]
Coercionbaser : bilmorphism_for >-> Funclass.Coercionapply : map >-> Funclass.Notation"{ 'bilinear' fUV | s & s' }" := (map s s' (Phant fUV))
(at level0, format"{ 'bilinear' fUV | s & s' }") : ring_scope.Notation"{ 'bilinear' fUV | s }" := (map s.1 s.2 (Phant fUV))
(at level0, format"{ 'bilinear' fUV | s }") : ring_scope.Notation"{ 'bilinear' fUV }" := {bilinear fUV | *:%R & *:%R}
(at level0, format"{ 'bilinear' fUV }") : ring_scope.Notation"{ 'biscalar' U }" := {bilinear U -> U -> _ | *%R & *%R}
(at level0, format"{ 'biscalar' U }") : ring_scope.Notation"[ 'bilinear' 'of' f 'as' g ]" :=
(@pack _ _ _ _ _ _ _ _ _ _ f g erefl _ _
(fun=> erefl) (fun=> idfun) _ _ (fun=> erefl) (fun=> idfun)).Notation"[ 'bilinear' 'of' f ]" := [bilinear of f as f]
(at level0, format"[ 'bilinear' 'of' f ]") : form_scope.
additiver does not respect the uniform inheritance
condition [uniform-inheritance,typechecker]
New coercion path [additiver; GRing.Additive.apply] : map >-> Funclassis ambiguous with existing
[apply] : map >-> Funclass.
[ambiguous-paths,typechecker]
linearr does not respect the uniform inheritance
condition [uniform-inheritance,typechecker]
New coercion path [linearr; GRing.Linear.additive] : map >-> GRing.Additive.map is ambiguous with existing
[additiver] : map >-> GRing.Additive.map.
[ambiguous-paths,typechecker]
Ignoring canonical projection to applyby
GRing.Additive.applyin additiver: redundant with
additiver [redundant-canonical-projection,typechecker]
Ignoring canonical projection to applyby
GRing.Linear.applyin linearr: redundant with linearr
[redundant-canonical-projection,typechecker]
Ignoring canonical projection to applyr_head by
GRing.Additive.applyin additivel: redundant with
additivel [redundant-canonical-projection,typechecker]
Ignoring canonical projection to applyr_head by
GRing.Linear.applyin linearl: redundant with linearl
[redundant-canonical-projection,typechecker]
New coercion path [Bilinear.additiver;
GRing.Additive.apply] : Bilinear.map >-> Funclassis ambiguous with existing
[Bilinear.apply] : Bilinear.map >-> Funclass.
[ambiguous-paths,typechecker]
New coercion path [Bilinear.linearr;
GRing.Linear.additive] : Bilinear.map >-> GRing.Additive.map is ambiguous with existing
[Bilinear.additiver] : Bilinear.map >-> GRing.Additive.map.
[ambiguous-paths,typechecker]
SectionBilinearTheory.VariableR : ringType.SectionGenericProperties.Variables (UU' : lmodType R) (V : zmodType) (s : R -> V -> V) (s' : R -> V -> V).Variablef : {bilinear U -> U' -> V | s & s'}.
f 1d 1e 1f f: {bilinear U -> U' -> V | s & s'} z: U
f z 0 = 0
30
byrewrite raddf0.Qed.
32
{morph f z : x / - x >-> - x}
38
exact: raddfN.Qed.
32
{morph f z : x y / x + y >-> x + y}
3d
exact: raddfD.Qed.
32
{morph f z : x y / x - y >-> x - y}
42
exact: raddfB.Qed.
f 1d 1e 1f 33 34 n: nat
{morph f z : x / x *+ n >-> x *+ n}
47
exact: raddfMn.Qed.
49
{morph f z : x / x *- n >-> x *- n}
4e
exact: raddfMNn.Qed.
f 1d 1e 1f 33 34 I: Type r: seq I P: pred I E: I -> U'
f z (\sum_(i <- r | P i) E i) =
\sum_(i <- r | P i) f z (E i)
53
exact: raddf_sum.Qed.
32
scalable_for s' (f z)
5d
exact: linearZ_LR.Qed.
f 1d 1e 1f 33 34 a: R
{morph f z : u v / a *: u + v >-> s' a u + v}
62
exact: linearP.Qed.
f 1d 1e 1f 33 x: U'
applyr f x =1 f^~ x
69
by [].Qed.
f 1d 1e 1f 33 z: U'
f 0 z = 0
70
byrewrite -applyrE raddf0.Qed.
72
{morph f^~ z : x / - x >-> - x}
77
bymove=> ?; rewrite -applyrE raddfN.Qed.
72
{morph f^~ z : x y / x + y >-> x + y}
7c
bymove=> ??; rewrite -applyrE raddfD.Qed.
72
{morph f^~ z : x y / x - y >-> x - y}
81
bymove=> ??; rewrite -applyrE raddfB.Qed.
f 1d 1e 1f 33 73 4a
{morph f^~ z : x / x *+ n >-> x *+ n}
86
bymove=> ?; rewrite -applyrE raddfMn.Qed.
88
{morph f^~ z : x / x *- n >-> x *- n}
8c
bymove=> ?; rewrite -applyrE raddfMNn.Qed.
f 1d 1e 1f 33 73 56 57 58 E: I -> U
f (\sum_(i <- r | P i) E i) z =
\sum_(i <- r | P i) f (E i) z
91
byrewrite -applyrE raddf_sum.Qed.
72
scalable_for s (f^~ z)
98
bymove=> ??; rewrite -applyrE linearZ_LR.Qed.
f 1d 1e 1f 33 73 65
{morph f^~ z : u v / a *: u + v >-> s a u + v}
9d
bymove=> ??; rewrite -applyrE linearP.Qed.EndGenericProperties.SectionBidirectionalLinearZ.Variables (U : lmodType R) (V : zmodType) (s : R -> V -> V).Variables (S : ringType) (h : S -> V -> V) (h_law : GRing.Scale.law h).(* Lemma linearZr z c a (h_c := GRing.Scale.op h_law c) (f : GRing.Linear.map_for U s a h_c) u : *)(* f z (a *: u) = h_c (GRing.Linear.wrap (f z) u). *)(* Proof. by rewrite linearZ_LR; case: f => f /= ->. Qed. *)EndBidirectionalLinearZ.EndBilinearTheory.Canonicalrev_mulmx (R : ringType) m n p := @RevOp _ _ _ (@mulmxr R m n p)
(@mulmx R m n p) (fun__ => erefl).Canonicalmulmx_bilinear (R : comRingType) m n p := [bilinear of @mulmx R m n p].(* Section classfun. *)(* Import mathcomp.character.classfun. *)(* Canonical rev_cfdot (gT : finGroupType) (B : {set gT}) := *)(* @RevOp _ _ _ (@cfdotr_head gT B tt) *)(* (@cfdot gT B) (fun _ _ => erefl). *)(* Section Cfdot. *)(* Variables (gT : finGroupType) (G : {group gT}). *)(* Lemma cfdot_is_linear xi : linear_for (@conjC _ \; *%R) (cfdot xi : 'CF(G) -> algC^o). *)(* Proof. *)(* move=> /= a phi psi; rewrite cfdotC -cfdotrE linearD linearZ /=. *)(* by rewrite !['[_, xi]]cfdotC rmorphD rmorphM !conjCK. *)(* Qed. *)(* Canonical cfdot_additive xi := Additive (cfdot_is_linear xi). *)(* Canonical cfdot_linear xi := Linear (cfdot_is_linear xi). *)(* End Cfdot. *)(* Canonical cfdot_bilinear (gT : finGroupType) (B : {group gT}) := *)(* [bilinear of @cfdot gT B]. *)(* End classfun. *)SectionBilinearForms.Variables (R : fieldType) (theta : {rmorphism R -> R}).Variables (n : nat) (M : 'M[R]_n).Implicit Types (ab : R) (uv : 'rV[R]_n) (NPQ : 'M[R]_n).Definitionformuv := (u *m M *m (v ^t theta)) 00.LocalNotation"''[' u , v ]" := (form u%R v%R) : ring_scope.LocalNotation"''[' u ]" := '[u, u] : ring_scope.