.
.
-
Inductive mxsum_spec n :
∀ m,
'M[F]_(m, n) → nat → Prop :=
+
Inductive mxsum_spec n :
∀ m,
'M[F]_(m, n) → nat → Prop :=
|
TrivialMxsum m A
- : @
mxsum_spec n m A (
\rank A)
+ : @
mxsum_spec n m A (
\rank A)
|
ProperMxsum m1 m2 T1 T2 r1 r2 of
@
mxsum_spec n m1 T1 r1 & @
mxsum_spec n m2 T2 r2
- :
mxsum_spec (
T1 + T2)%
MS (
r1 + r2)%
N.
+ :
mxsum_spec (
T1 + T2)%
MS (
r1 + r2)%
N.
Structure mxsum_expr m n :=
Mxsum {
-
mxsum_val :>
wrapped 'M_(m, n);
-
mxsum_rank :
wrapped nat;
-
_ :
mxsum_spec (
unwrap mxsum_val) (
unwrap mxsum_rank)
+
mxsum_val :>
wrapped 'M_(m, n);
+
mxsum_rank :
wrapped nat;
+
_ :
mxsum_spec (
unwrap mxsum_val) (
unwrap mxsum_rank)
}.
Canonical trivial_mxsum m n A :=
- @
Mxsum m n (
Wrap A) (
Wrap (
\rank A)) (
TrivialMxsum A).
+ @
Mxsum m n (
Wrap A) (
Wrap (
\rank A)) (
TrivialMxsum A).
Structure proper_mxsum_expr n :=
ProperMxsumExpr {
-
proper_mxsum_val :>
'M_n;
-
proper_mxsum_rank :
nat;
+
proper_mxsum_val :>
'M_n;
+
proper_mxsum_rank :
nat;
_ :
mxsum_spec proper_mxsum_val proper_mxsum_rank
}.
@@ -1324,70 +1336,70 @@
Canonical sum_mxsum n (
S :
proper_mxsum_expr n) :=
- @
Mxsum n n (
wrap (
S : 'M_n)) (
wrap (
proper_mxsum_rank S)) (
proper_mxsumP S).
+ @
Mxsum n n (
wrap (
S : 'M_n)) (
wrap (
proper_mxsum_rank S)) (
proper_mxsumP S).
Section Binary.
-
Variable (
m1 m2 n :
nat) (
S1 :
mxsum_expr m1 n) (
S2 :
mxsum_expr m2 n).
+
Variable (
m1 m2 n :
nat) (
S1 :
mxsum_expr m1 n) (
S2 :
mxsum_expr m2 n).
Fact binary_mxsum_proof :
-
mxsum_spec (
unwrap S1 + unwrap S2)
- (
unwrap (
mxsum_rank S1)
+ unwrap (
mxsum_rank S2)).
+
mxsum_spec (
unwrap S1 + unwrap S2)
+ (
unwrap (
mxsum_rank S1)
+ unwrap (
mxsum_rank S2)).
Canonical binary_mxsum_expr :=
ProperMxsumExpr binary_mxsum_proof.
End Binary.
Section Nary.
-
Context J (
r :
seq J) (
P :
pred J)
n (
S_ :
J → mxsum_expr n n).
+
Context J (
r :
seq J) (
P :
pred J)
n (
S_ :
J → mxsum_expr n n).
Fact nary_mxsum_proof :
-
mxsum_spec (
\sum_(j <- r | P j) unwrap (
S_ j))
- (
\sum_(j <- r | P j) unwrap (
mxsum_rank (
S_ j))).
+
mxsum_spec (
\sum_(j <- r | P j) unwrap (
S_ j))
+ (
\sum_(j <- r | P j) unwrap (
mxsum_rank (
S_ j))).
Canonical nary_mxsum_expr :=
ProperMxsumExpr nary_mxsum_proof.
End Nary.
-
Definition mxdirect_def m n T of phantom 'M_(m, n) (
unwrap (
mxsum_val T)) :=
-
\rank (unwrap T) == unwrap (
mxsum_rank T).
+
Definition mxdirect_def m n T of phantom 'M_(m, n) (
unwrap (
mxsum_val T)) :=
+
\rank (unwrap T) == unwrap (
mxsum_rank T).
End SumExpr.
-
Notation mxdirect A := (
mxdirect_def (
Phantom 'M_(_,_) A%
MS)).
+
Notation mxdirect A := (
mxdirect_def (
Phantom 'M_(_,_) A%
MS)).
Lemma mxdirectP n (
S :
proper_mxsum_expr n) :
-
reflect (
\rank S = proper_mxsum_rank S) (
mxdirect S).
+
reflect (
\rank S = proper_mxsum_rank S) (
mxdirect S).
-
Lemma mxdirect_trivial m n A :
mxdirect (
unwrap (@
trivial_mxsum m n A)).
+
Lemma mxdirect_trivial m n A :
mxdirect (
unwrap (@
trivial_mxsum m n A)).
Lemma mxrank_sum_leqif m n (
S :
mxsum_expr m n) :
-
\rank (unwrap S) ≤ unwrap (
mxsum_rank S)
?= iff mxdirect (
unwrap S).
+
\rank (unwrap S) ≤ unwrap (
mxsum_rank S)
?= iff mxdirect (
unwrap S).
Lemma mxdirectE m n (
S :
mxsum_expr m n) :
-
mxdirect (
unwrap S)
= (\rank (unwrap S) == unwrap (
mxsum_rank S)
).
+
mxdirect (
unwrap S)
= (\rank (unwrap S) == unwrap (
mxsum_rank S)
).
Lemma mxdirectEgeq m n (
S :
mxsum_expr m n) :
-
mxdirect (
unwrap S)
= (\rank (unwrap S) ≥ unwrap (
mxsum_rank S)
).
+
mxdirect (
unwrap S)
= (\rank (unwrap S) ≥ unwrap (
mxsum_rank S)
).
Section BinaryDirect.
-
Variables m1 m2 n :
nat.
+
Variables m1 m2 n :
nat.
Lemma mxdirect_addsE (
S1 :
mxsum_expr m1 n) (
S2 :
mxsum_expr m2 n) :
-
mxdirect (
unwrap S1 + unwrap S2)
-
= [&& mxdirect (
unwrap S1)
, mxdirect (
unwrap S2)
-
& unwrap S1 :&: unwrap S2 == 0
]%
MS.
+
mxdirect (
unwrap S1 + unwrap S2)
+
= [&& mxdirect (
unwrap S1)
, mxdirect (
unwrap S2)
+
& unwrap S1 :&: unwrap S2 == 0
]%
MS.
-
Lemma mxdirect_addsP (
A :
'M_(m1, n)) (
B :
'M_(m2, n)) :
-
reflect (
A :&: B = 0)%
MS (
mxdirect (
A + B)).
+
Lemma mxdirect_addsP (
A :
'M_(m1, n)) (
B :
'M_(m2, n)) :
+
reflect (
A :&: B = 0)%
MS (
mxdirect (
A + B)).
End BinaryDirect.
@@ -1396,26 +1408,26 @@
Section NaryDirect.
-
Variables (
P :
pred I) (
n :
nat).
+
Variables (
P :
pred I) (
n :
nat).
-
Let TIsum A_ i := (
A_ i :&: (\sum_(j | P j && (j != i)) A_ j) = 0
:> 'M_n)%
MS.
+
Let TIsum A_ i := (
A_ i :&: (\sum_(j | P j && (j != i)) A_ j) = 0
:> 'M_n)%
MS.
-
Let mxdirect_sums_recP (
S_ :
I → mxsum_expr n n) :
-
reflect (
∀ i,
P i → mxdirect (
unwrap (
S_ i))
∧ TIsum (
unwrap \o S_)
i)
- (
mxdirect (
\sum_(i | P i) (unwrap (
S_ i)
))).
+
Let mxdirect_sums_recP (
S_ :
I → mxsum_expr n n) :
+
reflect (
∀ i,
P i → mxdirect (
unwrap (
S_ i))
∧ TIsum (
unwrap \o S_)
i)
+ (
mxdirect (
\sum_(i | P i) (unwrap (
S_ i)
))).
-
Lemma mxdirect_sumsP (
A_ :
I → 'M_n) :
-
reflect (
∀ i,
P i → A_ i :&: (\sum_(j | P j && (j != i)) A_ j) = 0)%
MS
- (
mxdirect (
\sum_(i | P i) A_ i)).
+
Lemma mxdirect_sumsP (
A_ :
I → 'M_n) :
+
reflect (
∀ i,
P i → A_ i :&: (\sum_(j | P j && (j != i)) A_ j) = 0)%
MS
+ (
mxdirect (
\sum_(i | P i) A_ i)).
-
Lemma mxdirect_sumsE (
S_ :
I → mxsum_expr n n) (
xunwrap :=
unwrap) :
-
reflect (
and (
∀ i,
P i → mxdirect (
unwrap (
S_ i)))
- (
mxdirect (
\sum_(i | P i) (xunwrap (
S_ i)
))))
- (
mxdirect (
\sum_(i | P i) (unwrap (
S_ i)
))).
+
Lemma mxdirect_sumsE (
S_ :
I → mxsum_expr n n) (
xunwrap :=
unwrap) :
+
reflect (
and (
∀ i,
P i → mxdirect (
unwrap (
S_ i)))
+ (
mxdirect (
\sum_(i | P i) (xunwrap (
S_ i)
))))
+ (
mxdirect (
\sum_(i | P i) (unwrap (
S_ i)
))).
End NaryDirect.
@@ -1424,17 +1436,17 @@
Section SubDaddsmx.
-
Variables m m1 m2 n :
nat.
-
Variables (
A :
'M[F]_(m, n)) (
B1 :
'M[F]_(m1, n)) (
B2 :
'M[F]_(m2, n)).
+
Variables m m1 m2 n :
nat.
+
Variables (
A :
'M[F]_(m, n)) (
B1 :
'M[F]_(m1, n)) (
B2 :
'M[F]_(m2, n)).
-
CoInductive sub_daddsmx_spec :
Prop :=
-
SubDaddsmxSpec A1 A2 of (
A1 ≤ B1)%
MS & (
A2 ≤ B2)%
MS &
A = A1 + A2
- &
∀ C1 C2, (
C1 ≤ B1)%
MS → (
C2 ≤ B2)%
MS →
-
A = C1 + C2 → C1 = A1 ∧ C2 = A2.
+
Variant sub_daddsmx_spec :
Prop :=
+
SubDaddsmxSpec A1 A2 of (
A1 ≤ B1)%
MS & (
A2 ≤ B2)%
MS &
A = A1 + A2
+ &
∀ C1 C2, (
C1 ≤ B1)%
MS → (
C2 ≤ B2)%
MS →
+
A = C1 + C2 → C1 = A1 ∧ C2 = A2.
-
Lemma sub_daddsmx : (
B1 :&: B2 = 0)%
MS → (
A ≤ B1 + B2)%
MS → sub_daddsmx_spec.
+
Lemma sub_daddsmx : (
B1 :&: B2 = 0)%
MS → (
A ≤ B1 + B2)%
MS → sub_daddsmx_spec.
End SubDaddsmx.
@@ -1443,18 +1455,18 @@
Section SubDsumsmx.
-
Variables (
P :
pred I) (
m n :
nat) (
A :
'M[F]_(m, n)) (
B :
I → 'M[F]_n).
+
Variables (
P :
pred I) (
m n :
nat) (
A :
'M[F]_(m, n)) (
B :
I → 'M[F]_n).
-
CoInductive sub_dsumsmx_spec :
Prop :=
-
SubDsumsmxSpec A_ of ∀ i,
P i → (
A_ i ≤ B i)%
MS
- &
A = \sum_(i | P i) A_ i
- &
∀ C, (
∀ i,
P i → C i ≤ B i)%
MS →
-
A = \sum_(i | P i) C i → {in SimplPred P, C =1 A_}.
+
Variant sub_dsumsmx_spec :
Prop :=
+
SubDsumsmxSpec A_ of ∀ i,
P i → (
A_ i ≤ B i)%
MS
+ &
A = \sum_(i | P i) A_ i
+ &
∀ C, (
∀ i,
P i → C i ≤ B i)%
MS →
+
A = \sum_(i | P i) C i → {in SimplPred P, C =1 A_}.
Lemma sub_dsumsmx :
-
mxdirect (
\sum_(i | P i) B i)
→ (
A ≤ \sum_(i | P i) B i)%
MS →
+
mxdirect (
\sum_(i | P i) B i)
→ (
A ≤ \sum_(i | P i) B i)%
MS →
sub_dsumsmx_spec.
@@ -1464,23 +1476,23 @@
Section Eigenspace.
-
Variables (
n :
nat) (
g :
'M_n).
+
Variables (
n :
nat) (
g :
'M_n).
-
Definition eigenspace a :=
kermx (
g - a%:M).
-
Definition eigenvalue :
pred F :=
fun a ⇒
eigenspace a != 0.
+
Definition eigenspace a :=
kermx (
g - a%:M).
+
Definition eigenvalue :
pred F :=
fun a ⇒
eigenspace a != 0.
-
Lemma eigenspaceP a m (
W :
'M_(m, n)) :
-
reflect (
W ×m g = a *: W) (
W ≤ eigenspace a)%
MS.
+
Lemma eigenspaceP a m (
W :
'M_(m, n)) :
+
reflect (
W ×m g = a *: W) (
W ≤ eigenspace a)%
MS.
Lemma eigenvalueP a :
-
reflect (
exists2 v : 'rV_n, v ×m g = a *: v & v != 0) (
eigenvalue a).
+
reflect (
exists2 v : 'rV_n, v ×m g = a *: v & v != 0) (
eigenvalue a).
-
Lemma mxdirect_sum_eigenspace (
P :
pred I)
a_ :
-
{in P &, injective a_} → mxdirect (
\sum_(i | P i) eigenspace (
a_ i)).
+
Lemma mxdirect_sum_eigenspace (
P :
pred I)
a_ :
+
{in P &, injective a_} → mxdirect (
\sum_(i | P i) eigenspace (
a_ i)).
End Eigenspace.
@@ -1489,84 +1501,84 @@
End RowSpaceTheory.
-
Hint Resolve submx_refl.
-
-
-
Notation "\rank A" := (
mxrank A) :
nat_scope.
-
Notation "<< A >>" := (
genmx A) :
matrix_set_scope.
-
Notation "A ^C" := (
complmx A) :
matrix_set_scope.
-
Notation "A <= B" := (
submx A B) :
matrix_set_scope.
-
Notation "A < B" := (
ltmx A B) :
matrix_set_scope.
-
Notation "A <= B <= C" := (
(submx A B) && (submx B C)) :
matrix_set_scope.
-
Notation "A < B <= C" := (
ltmx A B && submx B C) :
matrix_set_scope.
-
Notation "A <= B < C" := (
submx A B && ltmx B C) :
matrix_set_scope.
-
Notation "A < B < C" := (
ltmx A B && ltmx B C) :
matrix_set_scope.
-
Notation "A == B" := (
(submx A B) && (submx B A)) :
matrix_set_scope.
-
Notation "A :=: B" := (
eqmx A B) :
matrix_set_scope.
-
Notation "A + B" := (
addsmx A B) :
matrix_set_scope.
-
Notation "A :&: B" := (
capmx A B) :
matrix_set_scope.
-
Notation "A :\: B" := (
diffmx A B) :
matrix_set_scope.
-
Notation mxdirect S := (
mxdirect_def (
Phantom 'M_(_,_) S%
MS)).
-
-
-
Notation "\sum_ ( i <- r | P ) B" :=
- (
\big[addsmx/0%
R]_(i <- r | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( i <- r ) B" :=
- (
\big[addsmx/0%
R]_(i <- r) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( m <= i < n | P ) B" :=
- (
\big[addsmx/0%
R]_(m ≤ i < n | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( m <= i < n ) B" :=
- (
\big[addsmx/0%
R]_(m ≤ i < n) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( i | P ) B" :=
- (
\big[addsmx/0%
R]_(i | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ i B" :=
- (
\big[addsmx/0%
R]_i B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( i : t | P ) B" :=
- (
\big[addsmx/0%
R]_(i : t | P%
B) B%
MS) (
only parsing) :
matrix_set_scope.
-
Notation "\sum_ ( i : t ) B" :=
- (
\big[addsmx/0%
R]_(i : t) B%
MS) (
only parsing) :
matrix_set_scope.
-
Notation "\sum_ ( i < n | P ) B" :=
- (
\big[addsmx/0%
R]_(i < n | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( i < n ) B" :=
- (
\big[addsmx/0%
R]_(i < n) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( i 'in' A | P ) B" :=
- (
\big[addsmx/0%
R]_(i in A | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\sum_ ( i 'in' A ) B" :=
- (
\big[addsmx/0%
R]_(i in A) B%
MS) :
matrix_set_scope.
-
-
-
Notation "\bigcap_ ( i <- r | P ) B" :=
- (
\big[capmx/1
%:M]_(i <- r | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( i <- r ) B" :=
- (
\big[capmx/1
%:M]_(i <- r) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( m <= i < n | P ) B" :=
- (
\big[capmx/1
%:M]_(m ≤ i < n | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( m <= i < n ) B" :=
- (
\big[capmx/1
%:M]_(m ≤ i < n) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( i | P ) B" :=
- (
\big[capmx/1
%:M]_(i | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ i B" :=
- (
\big[capmx/1
%:M]_i B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( i : t | P ) B" :=
- (
\big[capmx/1
%:M]_(i : t | P%
B) B%
MS) (
only parsing) :
matrix_set_scope.
-
Notation "\bigcap_ ( i : t ) B" :=
- (
\big[capmx/1
%:M]_(i : t) B%
MS) (
only parsing) :
matrix_set_scope.
-
Notation "\bigcap_ ( i < n | P ) B" :=
- (
\big[capmx/1
%:M]_(i < n | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( i < n ) B" :=
- (
\big[capmx/1
%:M]_(i < n) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( i 'in' A | P ) B" :=
- (
\big[capmx/1
%:M]_(i in A | P%
B) B%
MS) :
matrix_set_scope.
-
Notation "\bigcap_ ( i 'in' A ) B" :=
- (
\big[capmx/1
%:M]_(i in A) B%
MS) :
matrix_set_scope.
+
Hint Resolve submx_refl :
core.
+
+
+
Notation "\rank A" := (
mxrank A) :
nat_scope.
+
Notation "<< A >>" := (
genmx A) :
matrix_set_scope.
+
Notation "A ^C" := (
complmx A) :
matrix_set_scope.
+
Notation "A <= B" := (
submx A B) :
matrix_set_scope.
+
Notation "A < B" := (
ltmx A B) :
matrix_set_scope.
+
Notation "A <= B <= C" := (
(submx A B) && (submx B C)) :
matrix_set_scope.
+
Notation "A < B <= C" := (
ltmx A B && submx B C) :
matrix_set_scope.
+
Notation "A <= B < C" := (
submx A B && ltmx B C) :
matrix_set_scope.
+
Notation "A < B < C" := (
ltmx A B && ltmx B C) :
matrix_set_scope.
+
Notation "A == B" := (
(submx A B) && (submx B A)) :
matrix_set_scope.
+
Notation "A :=: B" := (
eqmx A B) :
matrix_set_scope.
+
Notation "A + B" := (
addsmx A B) :
matrix_set_scope.
+
Notation "A :&: B" := (
capmx A B) :
matrix_set_scope.
+
Notation "A :\: B" := (
diffmx A B) :
matrix_set_scope.
+
Notation mxdirect S := (
mxdirect_def (
Phantom 'M_(_,_) S%
MS)).
+
+
+
Notation "\sum_ ( i <- r | P ) B" :=
+ (
\big[addsmx/0%
R]_(i <- r | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( i <- r ) B" :=
+ (
\big[addsmx/0%
R]_(i <- r) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( m <= i < n | P ) B" :=
+ (
\big[addsmx/0%
R]_(m ≤ i < n | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( m <= i < n ) B" :=
+ (
\big[addsmx/0%
R]_(m ≤ i < n) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( i | P ) B" :=
+ (
\big[addsmx/0%
R]_(i | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ i B" :=
+ (
\big[addsmx/0%
R]_i B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( i : t | P ) B" :=
+ (
\big[addsmx/0%
R]_(i : t | P%
B) B%
MS) (
only parsing) :
matrix_set_scope.
+
Notation "\sum_ ( i : t ) B" :=
+ (
\big[addsmx/0%
R]_(i : t) B%
MS) (
only parsing) :
matrix_set_scope.
+
Notation "\sum_ ( i < n | P ) B" :=
+ (
\big[addsmx/0%
R]_(i < n | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( i < n ) B" :=
+ (
\big[addsmx/0%
R]_(i < n) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( i 'in' A | P ) B" :=
+ (
\big[addsmx/0%
R]_(i in A | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\sum_ ( i 'in' A ) B" :=
+ (
\big[addsmx/0%
R]_(i in A) B%
MS) :
matrix_set_scope.
+
+
+
Notation "\bigcap_ ( i <- r | P ) B" :=
+ (
\big[capmx/1
%:M]_(i <- r | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( i <- r ) B" :=
+ (
\big[capmx/1
%:M]_(i <- r) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( m <= i < n | P ) B" :=
+ (
\big[capmx/1
%:M]_(m ≤ i < n | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( m <= i < n ) B" :=
+ (
\big[capmx/1
%:M]_(m ≤ i < n) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( i | P ) B" :=
+ (
\big[capmx/1
%:M]_(i | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ i B" :=
+ (
\big[capmx/1
%:M]_i B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( i : t | P ) B" :=
+ (
\big[capmx/1
%:M]_(i : t | P%
B) B%
MS) (
only parsing) :
matrix_set_scope.
+
Notation "\bigcap_ ( i : t ) B" :=
+ (
\big[capmx/1
%:M]_(i : t) B%
MS) (
only parsing) :
matrix_set_scope.
+
Notation "\bigcap_ ( i < n | P ) B" :=
+ (
\big[capmx/1
%:M]_(i < n | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( i < n ) B" :=
+ (
\big[capmx/1
%:M]_(i < n) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( i 'in' A | P ) B" :=
+ (
\big[capmx/1
%:M]_(i in A | P%
B) B%
MS) :
matrix_set_scope.
+
Notation "\bigcap_ ( i 'in' A ) B" :=
+ (
\big[capmx/1
%:M]_(i in A) B%
MS) :
matrix_set_scope.
Section DirectSums.
-
Variables (
F :
fieldType) (
I :
finType) (
P :
pred I).
+
Variables (
F :
fieldType) (
I :
finType) (
P :
pred I).
-
Lemma mxdirect_delta n f :
{in P &, injective f} →
-
mxdirect (
\sum_(i | P i) <<delta_mx 0 (
f i)
: 'rV[F]_n>>).
+
Lemma mxdirect_delta n f :
{in P &, injective f} →
+
mxdirect (
\sum_(i | P i) <<delta_mx 0 (
f i)
: 'rV[F]_n>>).
End DirectSums.
@@ -1578,8 +1590,8 @@
Variable F :
finFieldType.
-
Lemma card_GL n :
n > 0
→
-
#|'GL_n[F]| = (
#|F| ^ 'C(n, 2
) × \prod_(1
≤ i < n.+1) (#|F| ^ i - 1
))%
N.
+
Lemma card_GL n :
n > 0
→
+
#|'GL_n[F]| = (
#|F| ^ 'C(n, 2
) × \prod_(1
≤ i < n.+1) (#|F| ^ i - 1
))%
N.
@@ -1589,20 +1601,20 @@
row-space theory, but directly performs the LUP decomposition.