let D be non empty set ; :: thesis: 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; :: thesis: 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; :: thesis: 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; :: thesis: ( 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: ( len (block_diagonal <*M1,M2*>,d) = Sum (Len <*M1,M2*>) & width (block_diagonal <*M1,M2*>,d) = Sum (Width <*M1,M2*>) ) by Def5;
A2: ( Len <*M1,M2*> = (Len <*M1*>) ^ (Len <*M2*>) & Width <*M1,M2*> = (Width <*M1*>) ^ (Width <*M2*>) & Len <*M1*> = <*(len M1)*> & Len <*M2*> = <*(len M2)*> & Width <*M1*> = <*(width M1)*> ) by Th14, Th15, Th18, Th19;
A3: ( len (block_diagonal <*M1,M2*>,d) = (len M1) + (len M2) & width (block_diagonal <*M1,M2*>,d) = (width M1) + (width M2) & Sum <*(width M1)*> = width M1 & Sum <*(len M1)*> = len M1 ) by A1, Th16, Th20, RVSUM_1:103;
( Sum (Len <*M1,M2*>) = 0 implies Sum (Width <*M1,M2*>) = 0 ) by Th13;
then A4: width M = (width M1) + (width M2) by A1, A3, MATRIX13:1;
A5: ( len <*(len M1)*> = 1 & len <*(width M1)*> = 1 & len <*M1*> = 1 ) by FINSEQ_1:57;
then A6: len (Len <*M1,M2*>) = 1 + 1 by A2, FINSEQ_2:19;
then A7: dom (Len <*M1,M2*>) = {1,2} by FINSEQ_1:4, FINSEQ_1:def 3;
A8: ( len (Width <*M1,M2*>) = len <*M1,M2*> & len <*M1,M2*> = len (Len <*M1,M2*>) ) by FINSEQ_1:def 18;
A9: ( 1 in dom (Len <*M1,M2*>) & 2 in dom (Len <*M1,M2*>) & 1 -' 1 = 0 & 2 -' 1 = 2 - 1 ) by A7, TARSKI:def 2, XREAL_1:234, XREAL_1:235;
then A10: ( (Len <*M1,M2*>) . 2 = len M2 & (Len <*M1,M2*>) /. 2 = (Len <*M1,M2*>) . 2 & (Len <*M1,M2*>) . 1 = len M1 & (Len <*M1,M2*>) /. 1 = (Len <*M1,M2*>) . 1 & (Len <*M1,M2*>) | 0 = <*> REAL & (Width <*M1,M2*>) | 0 = <*> REAL & (Len <*M1,M2*>) | 1 = <*(len M1)*> & (Width <*M1,M2*>) | 1 = <*(width M1)*> & (Width <*M1,M2*>) | 2 = Width <*M1,M2*> ) by A2, A5, A6, A8, FINSEQ_1:58, FINSEQ_1:59, FINSEQ_1:79, FINSEQ_5:26, PARTFUN1:def 8;
then A11: Sum ((Width <*M1,M2*>) | 2) = (width M1) + (width M2) by Th20;
hereby :: thesis: ( ( 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 A12: M = block_diagonal <*M1,M2*>,d ; :: thesis: 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; :: thesis: ( ( 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) ) :: thesis: ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) )
proof
assume i in dom M1 ; :: thesis: Line M,i = (Line M1,i) ^ ((width M2) |-> d)
then A13: ( 1 <= i & i <= len M1 & len M1 <= (len M1) + (len M2) & i in Seg (len M1) ) by FINSEQ_1:def 3, FINSEQ_3:27, NAT_1:11;
then i <= (len M1) + (len M2) by XXREAL_0:2;
then A14: i in dom (block_diagonal <*M1,M2*>,d) by A3, A13, FINSEQ_3:27;
set LM = Line M,i;
set LM1 = Line M1,i;
set W2d = (width M2) |-> d;
A15: ( len (Line M,i) = (width M1) + (width M2) & len (Line M1,i) = width M1 & len ((width M2) |-> d) = width M2 & len ((Line M1,i) ^ ((width M2) |-> d)) = (len (Line M1,i)) + (len ((width M2) |-> d)) ) by A4, FINSEQ_1:35, FINSEQ_1:def 18, MATRIX_1:def 8;
now
let j be Nat; :: thesis: ( 1 <= j & j <= len (Line M,i) implies (Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j )
assume A16: ( 1 <= j & j <= len (Line M,i) ) ; :: thesis: (Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j
A17: ( j in Seg (width (block_diagonal <*M1,M2*>,d)) & j in dom ((Line M1,i) ^ ((width M2) |-> d)) ) by A15, A16, A3, FINSEQ_1:3, FINSEQ_3:27;
then A18: [i,j] in Indices (block_diagonal <*M1,M2*>,d) by A14, ZFMISC_1:106;
A19: min (Len <*M1,M2*>),(i + 0 ) = 1 by A10, A9, A13, Th10, RVSUM_1:102;
now
per cases ( j <= width M1 or j > width M1 ) ;
suppose A20: j <= width M1 ; :: thesis: (Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j
then A21: ( j in Seg (width M1) & j in dom (Line M1,i) ) by A15, A16, FINSEQ_1:3, FINSEQ_3:27;
thus (Line M,i) . j = M * i,j by A3, A4, A17, MATRIX_1:def 8
.= (<*M1,M2*> . 1) * (i -' (Sum ((Len <*M1,M2*>) | 0 ))),(j -' (Sum ((Width <*M1,M2*>) | 0 ))) by A12, A16, A18, A9, A19, A10, Def5, A20, A3, 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 A21, MATRIX_1:def 8
.= ((Line M1,i) ^ ((width M2) |-> d)) . j by A21, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A22: j > width M1 ; :: thesis: (Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j
then not j in dom (Line M1,i) by A15, FINSEQ_3:27;
then consider k being Nat such that
A23: ( k in dom ((width M2) |-> d) & j = (len (Line M1,i)) + k ) by A17, FINSEQ_1:38;
A24: dom ((width M2) |-> d) = Seg (width M2) by A15, FINSEQ_1:def 3;
thus (Line M,i) . j = M * i,j by A3, A4, A17, MATRIX_1:def 8
.= d by A12, A18, A19, A10, Def5, A22, A3
.= ((width M2) |-> d) . k by A23, A24, FINSEQ_2:71
.= ((Line M1,i) ^ ((width M2) |-> d)) . j by A23, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
hence (Line M,i) . j = ((Line M1,i) ^ ((width M2) |-> d)) . j ; :: thesis: verum
end;
hence Line M,i = (Line M1,i) ^ ((width M2) |-> d) by A15, FINSEQ_1:18; :: thesis: verum
end;
thus ( i in dom M2 implies Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) ) :: thesis: verum
proof
set LM = Line M,(i + (len M1));
set W1d = (width M1) |-> d;
set LM2 = Line M2,i;
assume i in dom M2 ; :: thesis: Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i)
then A25: 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 A26: (len M1) + i in dom (block_diagonal <*M1,M2*>,d) by A3, FINSEQ_1:def 3;
A27: ( len (Line M,(i + (len M1))) = (width M1) + (width M2) & len (Line M2,i) = width M2 & len ((width M1) |-> d) = width M1 & len (((width M1) |-> d) ^ (Line M2,i)) = (len ((width M1) |-> d)) + (len (Line M2,i)) ) by A4, FINSEQ_1:35, FINSEQ_1:def 18, MATRIX_1:def 8;
now
let j be Nat; :: thesis: ( 1 <= j & j <= len (Line M,(i + (len M1))) implies (Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j )
assume A28: ( 1 <= j & j <= len (Line M,(i + (len M1))) ) ; :: thesis: (Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j
A29: ( j in Seg (width (block_diagonal <*M1,M2*>,d)) & j in dom (((width M1) |-> d) ^ (Line M2,i)) ) by A3, A27, A28, FINSEQ_1:3, FINSEQ_3:27;
then A30: [(i + (len M1)),j] in Indices (block_diagonal <*M1,M2*>,d) by A26, ZFMISC_1:106;
A31: min (Len <*M1,M2*>),(i + (len M1)) = 2 by A25, A9, Th10, A3, A10;
now
per cases ( j <= width M1 or j > width M1 ) ;
suppose A32: j <= width M1 ; :: thesis: (Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j
then A33: ( j in Seg (width M1) & dom ((width M1) |-> d) = Seg (width M1) ) by A28, A27, FINSEQ_1:3, FINSEQ_1:def 3;
thus (Line M,(i + (len M1))) . j = (block_diagonal <*M1,M2*>,d) * (i + (len M1)),j by A12, A29, MATRIX_1:def 8
.= d by A30, A9, A10, A31, Def5, A3, A32
.= ((width M1) |-> d) . j by A33, FINSEQ_2:71
.= (((width M1) |-> d) ^ (Line M2,i)) . j by A33, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A34: j > width M1 ; :: thesis: (Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j
then not j in dom ((width M1) |-> d) by A27, FINSEQ_3:27;
then consider k being Nat such that
A35: ( k in dom (Line M2,i) & j = (width M1) + k ) by A27, A29, FINSEQ_1:38;
A36: dom (Line M2,i) = Seg (width M2) by A27, FINSEQ_1:def 3;
thus (Line M,(i + (len M1))) . j = (block_diagonal <*M1,M2*>,d) * (i + (len M1)),j by A12, A29, MATRIX_1:def 8
.= (<*M1,M2*> . 2) * ((i + (len M1)) -' (len M1)),(j -' (width M1)) by A27, A28, A3, A30, A9, A10, A31, A1, A34, Def5
.= (<*M1,M2*> . 2) * i,(j -' (width M1)) by NAT_D:34
.= (<*M1,M2*> . ((len <*M1*>) + 1)) * i,k by A5, A35, NAT_D:34
.= M2 * i,k by FINSEQ_1:59
.= (Line M2,i) . k by A35, A36, MATRIX_1:def 8
.= (((width M1) |-> d) ^ (Line M2,i)) . j by A27, A35, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
hence (Line M,(i + (len M1))) . j = (((width M1) |-> d) ^ (Line M2,i)) . j ; :: thesis: verum
end;
hence Line M,(i + (len M1)) = ((width M1) |-> d) ^ (Line M2,i) by A27, FINSEQ_1:18; :: thesis: verum
end;
end;
assume A37: 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) ) ) ; :: thesis: M = block_diagonal <*M1,M2*>,d
now
let i, j be Nat; :: thesis: ( [i,j] in Indices M implies M * i,j = (block_diagonal <*M1,M2*>,d) * i,j )
assume A38: [i,j] in Indices M ; :: thesis: M * i,j = (block_diagonal <*M1,M2*>,d) * i,j
A39: Indices M = Indices (block_diagonal <*M1,M2*>,d) by MATRIX_1:27;
then A40: ( i in dom (block_diagonal <*M1,M2*>,d) & j in Seg (width (block_diagonal <*M1,M2*>,d)) ) by A38, ZFMISC_1:106;
then A41: ( 1 <= i & 1 <= j & i in Seg ((len M1) + (len M2)) & j <= width (block_diagonal <*M1,M2*>,d) ) by A3, FINSEQ_1:3, FINSEQ_1:def 3, FINSEQ_3:27;
set LM1 = Line M1,i;
set W2d = (width M2) |-> d;
set W1d = (width M1) |-> d;
A42: ( len (Line M1,i) = width M1 & len ((width M2) |-> d) = width M2 & len ((width M1) |-> d) = width M1 & len ((Line M1,i) ^ ((width M2) |-> d)) = (len (Line M1,i)) + (len ((width M2) |-> d)) ) by FINSEQ_1:35, FINSEQ_1:def 18, MATRIX_1:def 8;
now
per cases ( i <= len M1 or i > len M1 ) ;
suppose A43: i <= len M1 ; :: thesis: M * i,j = (block_diagonal <*M1,M2*>,d) * i,j
then i in dom M1 by A41, FINSEQ_3:27;
then A44: Line M,i = (Line M1,i) ^ ((width M2) |-> d) by A37;
i in Seg (len M1) by A43, A41;
then A45: min (Len <*M1,M2*>),(i + 0 ) = 1 by A10, A9, Th10, RVSUM_1:102;
now
per cases ( j <= width M1 or j > width M1 ) ;
suppose A46: j <= width M1 ; :: thesis: (block_diagonal <*M1,M2*>,d) * i,j = ((Line M1,i) ^ ((width M2) |-> d)) . j
then A47: ( j in Seg (width M1) & j in dom (Line M1,i) ) by A41, A42, FINSEQ_1:3, FINSEQ_3:27;
thus (block_diagonal <*M1,M2*>,d) * i,j = (<*M1,M2*> . 1) * (i -' 0 ),(j -' 0 ) by A9, A10, A38, A39, A41, A45, A46, Def5, A3, 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 A47, MATRIX_1:def 8
.= ((Line M1,i) ^ ((width M2) |-> d)) . j by A47, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A48: j > width M1 ; :: thesis: (block_diagonal <*M1,M2*>,d) * i,j = ((Line M1,i) ^ ((width M2) |-> d)) . j
then ( not j in dom (Line M1,i) & dom ((Line M1,i) ^ ((width M2) |-> d)) = Seg (width (block_diagonal <*M1,M2*>,d)) ) by A3, A42, FINSEQ_1:def 3, FINSEQ_3:27;
then consider k being Nat such that
A49: ( k in dom ((width M2) |-> d) & j = (len (Line M1,i)) + k ) by A40, FINSEQ_1:38;
A50: dom ((width M2) |-> d) = Seg (width M2) by A42, FINSEQ_1:def 3;
thus (block_diagonal <*M1,M2*>,d) * i,j = d by A3, A10, A38, A39, A45, A48, Def5
.= ((width M2) |-> d) . k by A49, A50, FINSEQ_2:71
.= ((Line M1,i) ^ ((width M2) |-> d)) . j by A49, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
hence M * i,j = (block_diagonal <*M1,M2*>,d) * i,j by A44, A3, A4, A40, MATRIX_1:def 8; :: thesis: verum
end;
suppose A51: i > len M1 ; :: thesis: M * i,j = (block_diagonal <*M1,M2*>,d) * i,j
then reconsider iL = i - (len M1) as Element of NAT by NAT_1:21;
set LM2 = Line M2,iL;
iL <> 0 by A51;
then ( iL > 0 & i = iL + (len M1) ) ;
then A52: ( iL in Seg (len M2) & Seg (len M2) = dom M2 ) by A41, FINSEQ_1:82, FINSEQ_1:def 3;
then A53: Line M,(iL + (len M1)) = ((width M1) |-> d) ^ (Line M2,iL) by A37;
A54: min (Len <*M1,M2*>),(iL + (len M1)) = 2 by A9, Th10, A3, A10, A52;
now
per cases ( j <= width M1 or j > width M1 ) ;
suppose A55: j <= width M1 ; :: thesis: (block_diagonal <*M1,M2*>,d) * i,j = (((width M1) |-> d) ^ (Line M2,iL)) . j
then A56: ( j in dom ((width M1) |-> d) & j in Seg (width M1) & width M1 <> 0 ) by A41, A42, FINSEQ_1:3, FINSEQ_3:27;
thus (block_diagonal <*M1,M2*>,d) * i,j = d by A9, A10, A38, A39, A55, A54, Def5, A3
.= ((width M1) |-> d) . j by A56, FINSEQ_2:71
.= (((width M1) |-> d) ^ (Line M2,iL)) . j by A56, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A57: j > width M1 ; :: thesis: (block_diagonal <*M1,M2*>,d) * i,j = (((width M1) |-> d) ^ (Line M2,iL)) . j
then A58: ( not j in dom (Line M1,i) & dom ((Line M1,i) ^ ((width M2) |-> d)) = Seg (width (block_diagonal <*M1,M2*>,d)) & len (Line M2,iL) = width M2 ) by A3, A42, FINSEQ_1:def 3, FINSEQ_3:27, MATRIX_1:def 8;
then consider k being Nat such that
A59: ( k in dom ((width M2) |-> d) & j = (width M1) + k ) by A40, A42, FINSEQ_1:38;
A60: ( dom ((width M2) |-> d) = Seg (width M2) & dom ((width M2) |-> d) = dom (Line M2,iL) ) by A42, A58, FINSEQ_1:def 3, FINSEQ_3:31;
thus (block_diagonal <*M1,M2*>,d) * i,j = (<*M1,M2*> . 2) * ((iL + (len M1)) -' (len M1)),(j -' (width M1)) by A3, A9, A10, A11, A38, A39, A41, A57, A54, Def5
.= (<*M1,M2*> . 2) * iL,(j -' (width M1)) by NAT_D:34
.= (<*M1,M2*> . ((len <*M1*>) + 1)) * iL,k by A5, A59, NAT_D:34
.= M2 * iL,k by FINSEQ_1:59
.= (Line M2,iL) . k by A60, A59, MATRIX_1:def 8
.= (((width M1) |-> d) ^ (Line M2,iL)) . j by A42, A59, A60, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
hence M * i,j = (block_diagonal <*M1,M2*>,d) * i,j by A53, A3, A4, A40, MATRIX_1:def 8; :: thesis: verum
end;
end;
end;
hence M * i,j = (block_diagonal <*M1,M2*>,d) * i,j ; :: thesis: verum
end;
hence M = block_diagonal <*M1,M2*>,d by MATRIX_1:28; :: thesis: verum