let D be non empty set ; for d being Element of D
for M1, M2 being Matrix of D
for M being Matrix of Sum (Len <*M1,M2*>), Sum (Width <*M1,M2*>),D holds
( M = block_diagonal <*M1,M2*>,d iff for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) ) )
let d be Element of D; for M1, M2 being Matrix of D
for M being Matrix of Sum (Len <*M1,M2*>), Sum (Width <*M1,M2*>),D holds
( M = block_diagonal <*M1,M2*>,d iff for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) ) )
let M1, M2 be Matrix of D; for M being Matrix of Sum (Len <*M1,M2*>), Sum (Width <*M1,M2*>),D holds
( M = block_diagonal <*M1,M2*>,d iff for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) ) )
let M be Matrix of Sum (Len <*M1,M2*>), Sum (Width <*M1,M2*>),D; ( M = block_diagonal <*M1,M2*>,d iff for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) ) )
set F1 = <*M1*>;
set F2 = <*M2*>;
set F12 = <*M1,M2*>;
set B = block_diagonal <*M1,M2*>,d;
set L1 = len M1;
set L2 = len M2;
set W1 = width M1;
set W2 = width M2;
A1:
Sum <*(width M1)*> = width M1
by RVSUM_1:103;
len (block_diagonal <*M1,M2*>,d) = Sum (Len <*M1,M2*>)
by Def5;
then A2:
len (block_diagonal <*M1,M2*>,d) = (len M1) + (len M2)
by Th16;
A3:
len <*M1,M2*> = len (Len <*M1,M2*>)
by FINSEQ_1:def 18;
A4:
(Len <*M1,M2*>) | 0 = <*> REAL
;
A5:
(Width <*M1,M2*>) | 0 = <*> REAL
;
A6:
1 -' 1 = 0
by XREAL_1:234;
A7:
width (block_diagonal <*M1,M2*>,d) = Sum (Width <*M1,M2*>)
by Def5;
then A8:
width (block_diagonal <*M1,M2*>,d) = (width M1) + (width M2)
by Th20;
A9:
len <*(width M1)*> = 1
by FINSEQ_1:57;
A10:
len <*M1*> = 1
by FINSEQ_1:57;
A11:
Len <*M1*> = <*(len M1)*>
by Th15;
A12:
Len <*M1,M2*> = (Len <*M1*>) ^ (Len <*M2*>)
by Th14;
then A13:
(Len <*M1,M2*>) . 1 = len M1
by A11, FINSEQ_1:58;
A14:
len <*(len M1)*> = 1
by FINSEQ_1:57;
then A15:
(Len <*M1,M2*>) | 1 = <*(len M1)*>
by A12, A11, FINSEQ_5:26;
A16:
Width <*M1*> = <*(width M1)*>
by Th19;
A17:
Sum <*(len M1)*> = len M1
by RVSUM_1:103;
Width <*M1,M2*> = (Width <*M1*>) ^ (Width <*M2*>)
by Th18;
then A18:
(Width <*M1,M2*>) | 1 = <*(width M1)*>
by A16, A9, FINSEQ_5:26;
A19:
Len <*M2*> = <*(len M2)*>
by Th15;
then A20:
len (Len <*M1,M2*>) = 1 + 1
by A12, A11, A14, FINSEQ_2:19;
A21:
(Len <*M1,M2*>) . 2 = len M2
by A12, A11, A19, A14, FINSEQ_1:59;
len (Width <*M1,M2*>) = len <*M1,M2*>
by FINSEQ_1:def 18;
then A22:
(Width <*M1,M2*>) | 2 = Width <*M1,M2*>
by A20, A3, FINSEQ_1:79;
A23:
dom (Len <*M1,M2*>) = {1,2}
by A20, FINSEQ_1:4, FINSEQ_1:def 3;
then A24:
1 in dom (Len <*M1,M2*>)
by TARSKI:def 2;
then A25:
(Len <*M1,M2*>) /. 1 = (Len <*M1,M2*>) . 1
by PARTFUN1:def 8;
A26:
2 -' 1 = 2 - 1
by XREAL_1:235;
( Sum (Len <*M1,M2*>) = 0 implies Sum (Width <*M1,M2*>) = 0 )
by Th13;
then A27:
width M = (width M1) + (width M2)
by A7, A8, MATRIX13:1;
A28:
2 in dom (Len <*M1,M2*>)
by A23, TARSKI:def 2;
then A29:
(Len <*M1,M2*>) /. 2 = (Len <*M1,M2*>) . 2
by PARTFUN1:def 8;
hereby ( ( for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) ) ) implies M = block_diagonal <*M1,M2*>,d )
assume A30:
M = block_diagonal <*M1,M2*>,
d
;
for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) )let i be
Nat;
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) )thus
(
i in dom M1 implies
Line M,
i = (Line M1,i) ^ ((width M2) |-> d) )
( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) )proof
set W2d =
(width M2) |-> d;
set LM1 =
Line M1,
i;
set LM =
Line M,
i;
A31:
len M1 <= (len M1) + (len M2)
by NAT_1:11;
A32:
len (Line M1,i) = width M1
by FINSEQ_1:def 18;
assume A33:
i in dom M1
;
Line M,i = (Line M1,i) ^ ((width M2) |-> d)
then A34:
1
<= i
by FINSEQ_3:27;
i <= len M1
by A33, FINSEQ_3:27;
then
i <= (len M1) + (len M2)
by A31, XXREAL_0:2;
then A35:
i in dom (block_diagonal <*M1,M2*>,d)
by A2, A34, FINSEQ_3:27;
A36:
len ((width M2) |-> d) = width M2
by FINSEQ_1:def 18;
A37:
len ((Line M1,i) ^ ((width M2) |-> d)) = (len (Line M1,i)) + (len ((width M2) |-> d))
by FINSEQ_1:35;
A38:
len (Line M,i) = (width M1) + (width M2)
by A27, FINSEQ_1:def 18;
A39:
i in Seg (len M1)
by A33, FINSEQ_1:def 3;
now A40:
min (Len <*M1,M2*>),
(i + 0 ) = 1
by A24, A6, A13, A25, A4, A39, Th10, RVSUM_1:102;
let j be
Nat;
( 1 <= j & j <= len (Line M,i) implies (Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j )assume that A41:
1
<= j
and A42:
j <= len (Line M,i)
;
(Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . jA43:
j in Seg (width (block_diagonal <*M1,M2*>,d))
by A8, A38, A41, A42, FINSEQ_1:3;
then A44:
[i,j] in Indices (block_diagonal <*M1,M2*>,d)
by A35, ZFMISC_1:106;
A45:
j in dom ((Line M1,i) ^ ((width M2) |-> d))
by A38, A32, A36, A37, A41, A42, FINSEQ_3:27;
now per cases
( j <= width M1 or j > width M1 )
;
suppose A46:
j <= width M1
;
(Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . jthen A47:
j in Seg (width M1)
by A41, FINSEQ_1:3;
A48:
j in dom (Line M1,i)
by A32, A41, A46, FINSEQ_3:27;
thus (Line M,i) . j =
M * i,
j
by A8, A27, A43, MATRIX_1:def 8
.=
(<*M1,M2*> . 1) * (i -' (Sum ((Len <*M1,M2*>) | 0 ))),
(j -' (Sum ((Width <*M1,M2*>) | 0 )))
by A1, A6, A18, A30, A41, A44, A40, A46, Def5, RVSUM_1:102
.=
(<*M1,M2*> . 1) * i,
(j -' 0 )
by NAT_D:40, RVSUM_1:102
.=
(<*M1,M2*> . 1) * i,
j
by NAT_D:40
.=
M1 * i,
j
by FINSEQ_1:58
.=
(Line M1,i) . j
by A47, MATRIX_1:def 8
.=
((Line M1,i) ^ ((width M2) |-> d)) . j
by A48, FINSEQ_1:def 7
;
verum end; suppose A49:
j > width M1
;
(Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . jA50:
dom ((width M2) |-> d) = Seg (width M2)
by A36, FINSEQ_1:def 3;
not
j in dom (Line M1,i)
by A32, A49, FINSEQ_3:27;
then consider k being
Nat such that A51:
k in dom ((width M2) |-> d)
and A52:
j = (len (Line M1,i)) + k
by A45, FINSEQ_1:38;
thus (Line M,i) . j =
M * i,
j
by A8, A27, A43, MATRIX_1:def 8
.=
d
by A1, A18, A30, A44, A40, A49, Def5
.=
((width M2) |-> d) . k
by A51, A50, FINSEQ_2:71
.=
((Line M1,i) ^ ((width M2) |-> d)) . j
by A51, A52, FINSEQ_1:def 7
;
verum end; end; end; hence
(Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j
;
verum end;
hence
Line M,
i = (Line M1,i) ^ ((width M2) |-> d)
by A38, A32, A36, A37, FINSEQ_1:18;
verum
end; thus
(
i in dom M2 implies
Line M,
(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) )
verumproof
set LM2 =
Line M2,
i;
set W1d =
(width M1) |-> d;
set LM =
Line M,
(i + (len M1));
A53:
len (Line M2,i) = width M2
by FINSEQ_1:def 18;
A54:
len (((width M1) |-> d) ^ (Line M2,i)) = (len ((width M1) |-> d)) + (len (Line M2,i))
by FINSEQ_1:35;
A55:
len ((width M1) |-> d) = width M1
by FINSEQ_1:def 18;
A56:
len (Line M,(i + (len M1))) = (width M1) + (width M2)
by A27, FINSEQ_1:def 18;
assume
i in dom M2
;
Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i)
then A57:
i in Seg (len M2)
by FINSEQ_1:def 3;
then
(len M1) + i in Seg ((len M1) + (len M2))
by FINSEQ_1:81;
then A58:
(len M1) + i in dom (block_diagonal <*M1,M2*>,d)
by A2, FINSEQ_1:def 3;
now A59:
min (Len <*M1,M2*>),
(i + (len M1)) = 2
by A17, A28, A26, A21, A29, A15, A57, Th10;
let j be
Nat;
( 1 <= j & j <= len (Line M,(i + (len M1))) implies (Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j )assume that A60:
1
<= j
and A61:
j <= len (Line M,(i + (len M1)))
;
(Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . jA62:
j in Seg (width (block_diagonal <*M1,M2*>,d))
by A8, A56, A60, A61, FINSEQ_1:3;
then A63:
[(i + (len M1)),j] in Indices (block_diagonal <*M1,M2*>,d)
by A58, ZFMISC_1:106;
A64:
j in dom (((width M1) |-> d) ^ (Line M2,i))
by A56, A53, A55, A54, A60, A61, FINSEQ_3:27;
now per cases
( j <= width M1 or j > width M1 )
;
suppose A65:
j <= width M1
;
(Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . jA66:
dom ((width M1) |-> d) = Seg (width M1)
by A55, FINSEQ_1:def 3;
A67:
j in Seg (width M1)
by A60, A65, FINSEQ_1:3;
thus (Line M,(i + (len M1))) . j =
(block_diagonal <*M1,M2*>,d) * (i + (len M1)),
j
by A30, A62, MATRIX_1:def 8
.=
d
by A1, A26, A18, A63, A59, A65, Def5
.=
((width M1) |-> d) . j
by A67, FINSEQ_2:71
.=
(((width M1) |-> d) ^ (Line M2,i)) . j
by A67, A66, FINSEQ_1:def 7
;
verum end; suppose A68:
j > width M1
;
(Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . jA69:
dom (Line M2,i) = Seg (width M2)
by A53, FINSEQ_1:def 3;
not
j in dom ((width M1) |-> d)
by A55, A68, FINSEQ_3:27;
then consider k being
Nat such that A70:
k in dom (Line M2,i)
and A71:
j = (width M1) + k
by A55, A64, FINSEQ_1:38;
thus (Line M,(i + (len M1))) . j =
(block_diagonal <*M1,M2*>,d) * (i + (len M1)),
j
by A30, A62, MATRIX_1:def 8
.=
(<*M1,M2*> . 2) * ((i + (len M1)) -' (len M1)),
(j -' (width M1))
by A7, A8, A1, A17, A26, A15, A18, A22, A56, A61, A63, A59, A68, Def5
.=
(<*M1,M2*> . 2) * i,
(j -' (width M1))
by NAT_D:34
.=
(<*M1,M2*> . ((len <*M1*>) + 1)) * i,
k
by A10, A71, NAT_D:34
.=
M2 * i,
k
by FINSEQ_1:59
.=
(Line M2,i) . k
by A70, A69, MATRIX_1:def 8
.=
(((width M1) |-> d) ^ (Line M2,i)) . j
by A55, A70, A71, FINSEQ_1:def 7
;
verum end; end; end; hence
(Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j
;
verum end;
hence
Line M,
(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i)
by A56, A53, A55, A54, FINSEQ_1:18;
verum
end;
end;
assume A72:
for i being Nat holds
( ( i in dom M1 implies Line M,i = (Line M1,i) ^ ((width M2) |-> d) ) & ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) )
; M = block_diagonal <*M1,M2*>,d
A73:
Sum ((Width <*M1,M2*>) | 2) = (width M1) + (width M2)
by A22, Th20;
now set W1d =
(width M1) |-> d;
set W2d =
(width M2) |-> d;
A74:
Indices M = Indices (block_diagonal <*M1,M2*>,d)
by MATRIX_1:27;
let i,
j be
Nat;
( [i,j] in Indices M implies M * i,j = (block_diagonal <*M1,M2*>,d) * i,j )assume A75:
[i,j] in Indices M
;
M * i,j = (block_diagonal <*M1,M2*>,d) * i,jA76:
i in dom (block_diagonal <*M1,M2*>,d)
by A75, A74, ZFMISC_1:106;
then A77:
1
<= i
by FINSEQ_3:27;
A78:
j in Seg (width (block_diagonal <*M1,M2*>,d))
by A75, A74, ZFMISC_1:106;
then A79:
1
<= j
by FINSEQ_1:3;
A80:
i in Seg ((len M1) + (len M2))
by A2, A76, FINSEQ_1:def 3;
set LM1 =
Line M1,
i;
A81:
len (Line M1,i) = width M1
by FINSEQ_1:def 18;
A82:
len ((width M1) |-> d) = width M1
by FINSEQ_1:def 18;
A83:
len ((width M2) |-> d) = width M2
by FINSEQ_1:def 18;
A84:
len ((Line M1,i) ^ ((width M2) |-> d)) = (len (Line M1,i)) + (len ((width M2) |-> d))
by FINSEQ_1:35;
A85:
j <= width (block_diagonal <*M1,M2*>,d)
by A78, FINSEQ_1:3;
now per cases
( i <= len M1 or i > len M1 )
;
suppose A86:
i <= len M1
;
M * i,j = (block_diagonal <*M1,M2*>,d) * i,jthen
i in Seg (len M1)
by A76, A77;
then A87:
min (Len <*M1,M2*>),
(i + 0 ) = 1
by A24, A6, A13, A25, A4, Th10, RVSUM_1:102;
A88:
now per cases
( j <= width M1 or j > width M1 )
;
suppose A89:
j <= width M1
;
(block_diagonal <*M1,M2*>,d) * i,j = ((Line M1,i) ^ ((width M2) |-> d)) . jthen A90:
j in Seg (width M1)
by A79, FINSEQ_1:3;
A91:
j in dom (Line M1,i)
by A79, A81, A89, FINSEQ_3:27;
thus (block_diagonal <*M1,M2*>,d) * i,
j =
(<*M1,M2*> . 1) * (i -' 0 ),
(j -' 0 )
by A1, A6, A4, A5, A18, A75, A74, A79, A87, A89, Def5, RVSUM_1:102
.=
(<*M1,M2*> . 1) * i,
(j -' 0 )
by NAT_D:40
.=
(<*M1,M2*> . 1) * i,
j
by NAT_D:40
.=
M1 * i,
j
by FINSEQ_1:58
.=
(Line M1,i) . j
by A90, MATRIX_1:def 8
.=
((Line M1,i) ^ ((width M2) |-> d)) . j
by A91, FINSEQ_1:def 7
;
verum end; suppose A92:
j > width M1
;
(block_diagonal <*M1,M2*>,d) * i,j = ((Line M1,i) ^ ((width M2) |-> d)) . jthen A93:
not
j in dom (Line M1,i)
by A81, FINSEQ_3:27;
A94:
dom ((width M2) |-> d) = Seg (width M2)
by A83, FINSEQ_1:def 3;
dom ((Line M1,i) ^ ((width M2) |-> d)) = Seg (width (block_diagonal <*M1,M2*>,d))
by A8, A81, A83, A84, FINSEQ_1:def 3;
then consider k being
Nat such that A95:
k in dom ((width M2) |-> d)
and A96:
j = (len (Line M1,i)) + k
by A78, A93, FINSEQ_1:38;
thus (block_diagonal <*M1,M2*>,d) * i,
j =
d
by A1, A18, A75, A74, A87, A92, Def5
.=
((width M2) |-> d) . k
by A95, A94, FINSEQ_2:71
.=
((Line M1,i) ^ ((width M2) |-> d)) . j
by A95, A96, FINSEQ_1:def 7
;
verum end; end; end;
i in dom M1
by A77, A86, FINSEQ_3:27;
then
Line M,
i = (Line M1,i) ^ ((width M2) |-> d)
by A72;
hence
M * i,
j = (block_diagonal <*M1,M2*>,d) * i,
j
by A8, A27, A78, A88, MATRIX_1:def 8;
verum end; suppose A97:
i > len M1
;
M * i,j = (block_diagonal <*M1,M2*>,d) * i,jthen reconsider iL =
i - (len M1) as
Element of
NAT by NAT_1:21;
A98:
iL <> 0
by A97;
set LM2 =
Line M2,
iL;
i = iL + (len M1)
;
then
iL in Seg (len M2)
by A80, A98, FINSEQ_1:82;
then A99:
min (Len <*M1,M2*>),
(iL + (len M1)) = 2
by A17, A28, A26, A21, A29, A15, Th10;
A100:
now per cases
( j <= width M1 or j > width M1 )
;
suppose A101:
j <= width M1
;
(block_diagonal <*M1,M2*>,d) * i,j = (((width M1) |-> d) ^ (Line M2,iL)) . jthen A102:
j in Seg (width M1)
by A79, FINSEQ_1:3;
A103:
j in dom ((width M1) |-> d)
by A79, A82, A101, FINSEQ_3:27;
thus (block_diagonal <*M1,M2*>,d) * i,
j =
d
by A1, A26, A18, A75, A74, A99, A101, Def5
.=
((width M1) |-> d) . j
by A102, FINSEQ_2:71
.=
(((width M1) |-> d) ^ (Line M2,iL)) . j
by A103, FINSEQ_1:def 7
;
verum end; suppose A104:
j > width M1
;
(block_diagonal <*M1,M2*>,d) * i,j = (((width M1) |-> d) ^ (Line M2,iL)) . j
len (Line M2,iL) = width M2
by MATRIX_1:def 8;
then A105:
dom ((width M2) |-> d) = dom (Line M2,iL)
by A83, FINSEQ_3:31;
A106:
not
j in dom (Line M1,i)
by A81, A104, FINSEQ_3:27;
A107:
dom ((width M2) |-> d) = Seg (width M2)
by A83, FINSEQ_1:def 3;
dom ((Line M1,i) ^ ((width M2) |-> d)) = Seg (width (block_diagonal <*M1,M2*>,d))
by A8, A81, A83, A84, FINSEQ_1:def 3;
then consider k being
Nat such that A108:
k in dom ((width M2) |-> d)
and A109:
j = (width M1) + k
by A78, A81, A106, FINSEQ_1:38;
thus (block_diagonal <*M1,M2*>,d) * i,
j =
(<*M1,M2*> . 2) * ((iL + (len M1)) -' (len M1)),
(j -' (width M1))
by A8, A1, A17, A26, A15, A18, A73, A75, A74, A85, A99, A104, Def5
.=
(<*M1,M2*> . 2) * iL,
(j -' (width M1))
by NAT_D:34
.=
(<*M1,M2*> . ((len <*M1*>) + 1)) * iL,
k
by A10, A109, NAT_D:34
.=
M2 * iL,
k
by FINSEQ_1:59
.=
(Line M2,iL) . k
by A108, A107, MATRIX_1:def 8
.=
(((width M1) |-> d) ^ (Line M2,iL)) . j
by A82, A108, A109, A105, FINSEQ_1:def 7
;
verum end; end; end;
Seg (len M2) = dom M2
by FINSEQ_1:def 3;
then
Line M,
(iL + (len M1)) = ((width M1) |-> d) ^ (Line M2,iL)
by A72, A80, A98, FINSEQ_1:82;
hence
M * i,
j = (block_diagonal <*M1,M2*>,d) * i,
j
by A8, A27, A78, A100, MATRIX_1:def 8;
verum end; end; end; hence
M * i,
j = (block_diagonal <*M1,M2*>,d) * i,
j
;
verum end;
hence
M = block_diagonal <*M1,M2*>,d
by MATRIX_1:28; verum