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;
reconsider W1 = width M1 as Element of NAT by ORDINAL1:def 12;
set W2 = width M2;
A1: Sum <*W1*> = W1 by RVSUM_1:73;
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 CARD_1:def 7;
A4: (Len <*M1,M2*>) | 0 = <*> REAL ;
A5: (Width <*M1,M2*>) | 0 = <*> REAL ;
A6: 1 -' 1 = 0 by XREAL_1:232;
A7: width (block_diagonal (<*M1,M2*>,d)) = Sum (Width <*M1,M2*>) by Def5;
then A8: width (block_diagonal (<*M1,M2*>,d)) = W1 + (width M2) by Th20;
A9: len <*W1*> = 1 by FINSEQ_1:40;
A10: len <*M1*> = 1 by FINSEQ_1:40;
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:41;
A14: len <*(len M1)*> = 1 by FINSEQ_1:40;
then A15: (Len <*M1,M2*>) | 1 = <*(len M1)*> by A12, A11, FINSEQ_5:23;
A16: Width <*M1*> = <*W1*> by Th19;
A17: Sum <*(len M1)*> = len M1 by RVSUM_1:73;
Width <*M1,M2*> = (Width <*M1*>) ^ (Width <*M2*>) by Th18;
then A18: (Width <*M1,M2*>) | 1 = <*W1*> by A16, A9, FINSEQ_5:23;
A19: Len <*M2*> = <*(len M2)*> by Th15;
then A20: len (Len <*M1,M2*>) = 1 + 1 by A12, A11, A14, FINSEQ_2:16;
A21: (Len <*M1,M2*>) . 2 = len M2 by A12, A11, A19, A14, FINSEQ_1:42;
len (Width <*M1,M2*>) = len <*M1,M2*> by CARD_1:def 7;
then A22: (Width <*M1,M2*>) | 2 = Width <*M1,M2*> by A20, A3, FINSEQ_1:58;
A23: dom (Len <*M1,M2*>) = {1,2} by A20, FINSEQ_1:2, 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 6;
A26: 2 -' 1 = 2 - 1 by XREAL_1:233;
( Sum (Len <*M1,M2*>) = 0 implies Sum (Width <*M1,M2*>) = 0 ) by Th13;
then A27: width M = W1 + (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 6;
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 A30: 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
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)) = W1 by CARD_1:def 7;
assume A33: i in dom M1 ; :: thesis: Line (M,i) = (Line (M1,i)) ^ ((width M2) |-> d)
then A34: 1 <= i by FINSEQ_3:25;
i <= len M1 by A33, FINSEQ_3:25;
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:25;
A36: len ((width M2) |-> d) = width M2 by CARD_1:def 7;
A37: len ((Line (M1,i)) ^ ((width M2) |-> d)) = (len (Line (M1,i))) + (len ((width M2) |-> d)) by FINSEQ_1:22;
A38: len (Line (M,i)) = W1 + (width M2) by A27, CARD_1:def 7;
A39: i in Seg (len M1) by A33, FINSEQ_1:def 3;
now :: thesis: for j being Nat st 1 <= j & j <= len (Line (M,i)) holds
(Line (M,i)) . j = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
A40: min ((Len <*M1,M2*>),(i + 0)) = 1 by A24, A6, A13, A25, A4, A39, Th10, RVSUM_1:72;
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 that
A41: 1 <= j and
A42: j <= len (Line (M,i)) ; :: thesis: (Line (M,i)) . j = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
A43: j in Seg (width (block_diagonal (<*M1,M2*>,d))) by A8, A38, A41, A42;
then A44: [i,j] in Indices (block_diagonal (<*M1,M2*>,d)) by A35, ZFMISC_1:87;
A45: j in dom ((Line (M1,i)) ^ ((width M2) |-> d)) by A38, A32, A36, A37, A41, A42, FINSEQ_3:25;
now :: thesis: (Line (M,i)) . j = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
per cases ( j <= W1 or j > W1 ) ;
suppose A46: j <= W1 ; :: thesis: (Line (M,i)) . j = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
then A47: j in Seg (width M1) by A41;
A48: j in dom (Line (M1,i)) by A32, A41, A46, FINSEQ_3:25;
thus (Line (M,i)) . j = M * (i,j) by A8, A27, A43, MATRIX_0:def 7
.= (<*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:72
.= (<*M1,M2*> . 1) * (i,(j -' 0)) by NAT_D:40, RVSUM_1:72
.= (<*M1,M2*> . 1) * (i,j) by NAT_D:40
.= M1 * (i,j)
.= (Line (M1,i)) . j by A47, MATRIX_0:def 7
.= ((Line (M1,i)) ^ ((width M2) |-> d)) . j by A48, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A49: j > W1 ; :: thesis: (Line (M,i)) . j = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
A50: 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:25;
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:25;
thus (Line (M,i)) . j = M * (i,j) by A8, A27, A43, MATRIX_0:def 7
.= d by A1, A18, A30, A44, A40, A49, Def5
.= ((width M2) |-> d) . k by A51, A50, FINSEQ_2:57
.= ((Line (M1,i)) ^ ((width M2) |-> d)) . j by A51, A52, 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 A38, A32, A36, A37; :: thesis: verum
end;
thus ( i in dom M2 implies Line (M,(i + (len M1))) = ((width M1) |-> d) ^ (Line (M2,i)) ) :: thesis: verum
proof
set LM2 = Line (M2,i);
set W1d = W1 |-> d;
set LM = Line (M,(i + (len M1)));
A53: len (Line (M2,i)) = width M2 by CARD_1:def 7;
A54: len ((W1 |-> d) ^ (Line (M2,i))) = (len (W1 |-> d)) + (len (Line (M2,i))) by FINSEQ_1:22;
A55: len (W1 |-> d) = W1 by CARD_1:def 7;
A56: len (Line (M,(i + (len M1)))) = W1 + (width M2) by A27, CARD_1:def 7;
assume i in dom M2 ; :: thesis: 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:60;
then A58: (len M1) + i in dom (block_diagonal (<*M1,M2*>,d)) by A2, FINSEQ_1:def 3;
now :: thesis: for j being Nat st 1 <= j & j <= len (Line (M,(i + (len M1)))) holds
(Line (M,(i + (len M1)))) . j = ((W1 |-> d) ^ (Line (M2,i))) . j
A59: min ((Len <*M1,M2*>),(i + (len M1))) = 2 by A17, A28, A26, A21, A29, A15, A57, Th10;
let j be Nat; :: thesis: ( 1 <= j & j <= len (Line (M,(i + (len M1)))) implies (Line (M,(i + (len M1)))) . b1 = ((W1 |-> d) ^ (Line (M2,i))) . b1 )
assume that
A60: 1 <= j and
A61: j <= len (Line (M,(i + (len M1)))) ; :: thesis: (Line (M,(i + (len M1)))) . b1 = ((W1 |-> d) ^ (Line (M2,i))) . b1
A62: j in Seg (width (block_diagonal (<*M1,M2*>,d))) by A8, A56, A60, A61;
then A63: [(i + (len M1)),j] in Indices (block_diagonal (<*M1,M2*>,d)) by A58, ZFMISC_1:87;
A64: j in dom ((W1 |-> d) ^ (Line (M2,i))) by A56, A53, A55, A54, A60, A61, FINSEQ_3:25;
per cases ( j <= W1 or j > W1 ) ;
suppose A65: j <= W1 ; :: thesis: (Line (M,(i + (len M1)))) . b1 = ((W1 |-> d) ^ (Line (M2,i))) . b1
A66: dom (W1 |-> d) = Seg W1 by A55, FINSEQ_1:def 3;
A67: j in Seg W1 by A60, A65;
thus (Line (M,(i + (len M1)))) . j = (block_diagonal (<*M1,M2*>,d)) * ((i + (len M1)),j) by A30, A62, MATRIX_0:def 7
.= d by A1, A26, A18, A63, A59, A65, Def5
.= (W1 |-> d) . j by A67, FINSEQ_2:57
.= ((W1 |-> d) ^ (Line (M2,i))) . j by A67, A66, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A68: j > W1 ; :: thesis: (Line (M,(i + (len M1)))) . b1 = ((W1 |-> d) ^ (Line (M2,i))) . b1
A69: dom (Line (M2,i)) = Seg (width M2) by A53, FINSEQ_1:def 3;
not j in dom (W1 |-> d) by A55, A68, FINSEQ_3:25;
then consider k being Nat such that
A70: k in dom (Line (M2,i)) and
A71: j = W1 + k by A55, A64, FINSEQ_1:25;
thus (Line (M,(i + (len M1)))) . j = (block_diagonal (<*M1,M2*>,d)) * ((i + (len M1)),j) by A30, A62, MATRIX_0:def 7
.= (<*M1,M2*> . 2) * (((i + (len M1)) -' (len M1)),(j -' W1)) by A7, A8, A1, A17, A26, A15, A18, A22, A56, A61, A63, A59, A68, Def5
.= (<*M1,M2*> . 2) * (i,(j -' W1)) by NAT_D:34
.= (<*M1,M2*> . ((len <*M1*>) + 1)) * (i,k) by A10, A71, NAT_D:34
.= M2 * (i,k) by FINSEQ_1:42
.= (Line (M2,i)) . k by A70, A69, MATRIX_0:def 7
.= ((W1 |-> d) ^ (Line (M2,i))) . j by A55, A70, A71, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
hence Line (M,(i + (len M1))) = ((width M1) |-> d) ^ (Line (M2,i)) by A56, A53, A55, A54; :: thesis: 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)) ) ) ; :: thesis: M = block_diagonal (<*M1,M2*>,d)
A73: Sum ((Width <*M1,M2*>) | 2) = W1 + (width M2) by A22, Th20;
now :: thesis: for i, j being Nat st [i,j] in Indices M holds
M * (i,j) = (block_diagonal (<*M1,M2*>,d)) * (i,j)
set W1d = W1 |-> d;
set W2d = (width M2) |-> d;
A74: Indices M = Indices (block_diagonal (<*M1,M2*>,d)) by MATRIX_0:26;
let i, j be Nat; :: thesis: ( [i,j] in Indices M implies M * (i,j) = (block_diagonal (<*M1,M2*>,d)) * (i,j) )
assume A75: [i,j] in Indices M ; :: thesis: M * (i,j) = (block_diagonal (<*M1,M2*>,d)) * (i,j)
A76: i in dom (block_diagonal (<*M1,M2*>,d)) by A75, A74, ZFMISC_1:87;
then A77: 1 <= i by FINSEQ_3:25;
A78: j in Seg (width (block_diagonal (<*M1,M2*>,d))) by A75, A74, ZFMISC_1:87;
then A79: 1 <= j by FINSEQ_1:1;
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)) = W1 by CARD_1:def 7;
A82: len (W1 |-> d) = W1 by CARD_1:def 7;
A83: len ((width M2) |-> d) = width M2 by CARD_1:def 7;
A84: len ((Line (M1,i)) ^ ((width M2) |-> d)) = (len (Line (M1,i))) + (len ((width M2) |-> d)) by FINSEQ_1:22;
A85: j <= width (block_diagonal (<*M1,M2*>,d)) by A78, FINSEQ_1:1;
now :: thesis: M * (i,j) = (block_diagonal (<*M1,M2*>,d)) * (i,j)
per cases ( i <= len M1 or i > len M1 ) ;
suppose A86: i <= len M1 ; :: thesis: M * (i,j) = (block_diagonal (<*M1,M2*>,d)) * (i,j)
then i in Seg (len M1) by A77;
then A87: min ((Len <*M1,M2*>),(i + 0)) = 1 by A24, A6, A13, A25, A4, Th10, RVSUM_1:72;
A88: now :: thesis: (block_diagonal (<*M1,M2*>,d)) * (i,j) = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
per cases ( j <= W1 or j > W1 ) ;
suppose A89: j <= W1 ; :: thesis: (block_diagonal (<*M1,M2*>,d)) * (i,j) = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
then A90: j in Seg (width M1) by A79;
A91: j in dom (Line (M1,i)) by A79, A81, A89, FINSEQ_3:25;
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:72
.= (<*M1,M2*> . 1) * (i,(j -' 0)) by NAT_D:40
.= (<*M1,M2*> . 1) * (i,j) by NAT_D:40
.= M1 * (i,j)
.= (Line (M1,i)) . j by A90, MATRIX_0:def 7
.= ((Line (M1,i)) ^ ((width M2) |-> d)) . j by A91, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A92: j > W1 ; :: thesis: (block_diagonal (<*M1,M2*>,d)) * (i,j) = ((Line (M1,i)) ^ ((width M2) |-> d)) . j
then A93: not j in dom (Line (M1,i)) by A81, FINSEQ_3:25;
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:25;
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:57
.= ((Line (M1,i)) ^ ((width M2) |-> d)) . j by A95, A96, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
i in dom M1 by A77, A86, FINSEQ_3:25;
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_0:def 7; :: thesis: verum
end;
suppose A97: 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;
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:61;
then A99: min ((Len <*M1,M2*>),(iL + (len M1))) = 2 by A17, A28, A26, A21, A29, A15, Th10;
A100: now :: thesis: (block_diagonal (<*M1,M2*>,d)) * (i,j) = ((W1 |-> d) ^ (Line (M2,iL))) . j
per cases ( j <= W1 or j > W1 ) ;
suppose A101: j <= W1 ; :: thesis: (block_diagonal (<*M1,M2*>,d)) * (i,j) = ((W1 |-> d) ^ (Line (M2,iL))) . j
then A102: j in Seg W1 by A79;
A103: j in dom (W1 |-> d) by A79, A82, A101, FINSEQ_3:25;
thus (block_diagonal (<*M1,M2*>,d)) * (i,j) = d by A1, A26, A18, A75, A74, A99, A101, Def5
.= (W1 |-> d) . j by A102, FINSEQ_2:57
.= ((W1 |-> d) ^ (Line (M2,iL))) . j by A103, FINSEQ_1:def 7 ; :: thesis: verum
end;
suppose A104: j > W1 ; :: thesis: (block_diagonal (<*M1,M2*>,d)) * (i,j) = ((W1 |-> d) ^ (Line (M2,iL))) . j
len (Line (M2,iL)) = width M2 by MATRIX_0:def 7;
then A105: dom ((width M2) |-> d) = dom (Line (M2,iL)) by A83, FINSEQ_3:29;
A106: not j in dom (Line (M1,i)) by A81, A104, FINSEQ_3:25;
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 = W1 + k by A78, A81, A106, FINSEQ_1:25;
thus (block_diagonal (<*M1,M2*>,d)) * (i,j) = (<*M1,M2*> . 2) * (((iL + (len M1)) -' (len M1)),(j -' W1)) by A8, A1, A17, A26, A15, A18, A73, A75, A74, A85, A99, A104, Def5
.= (<*M1,M2*> . 2) * (iL,(j -' W1)) by NAT_D:34
.= (<*M1,M2*> . ((len <*M1*>) + 1)) * (iL,k) by A10, A109, NAT_D:34
.= M2 * (iL,k) by FINSEQ_1:42
.= (Line (M2,iL)) . k by A108, A107, MATRIX_0:def 7
.= ((W1 |-> d) ^ (Line (M2,iL))) . j by A82, A108, A109, A105, FINSEQ_1:def 7 ; :: thesis: verum
end;
end;
end;
Seg (len M2) = dom M2 by FINSEQ_1:def 3;
then Line (M,(iL + (len M1))) = (W1 |-> d) ^ (Line (M2,iL)) by A72, A80, A98, FINSEQ_1:61;
hence M * (i,j) = (block_diagonal (<*M1,M2*>,d)) * (i,j) by A8, A27, A78, A100, MATRIX_0:def 7; :: 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_0:27; :: thesis: verum