let n be Nat; :: thesis: for K being Field
for M1, M2 being Matrix of n,K st n > 0 holds
( M1 commutes_with M2 iff (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) )

let K be Field; :: thesis: for M1, M2 being Matrix of n,K st n > 0 holds
( M1 commutes_with M2 iff (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) )

let M1, M2 be Matrix of n,K; :: thesis: ( n > 0 implies ( M1 commutes_with M2 iff (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) ) )
assume A1: n > 0 ; :: thesis: ( M1 commutes_with M2 iff (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) )
A2: ( len M1 = n & width M1 = n & len M2 = n & width M2 = n ) by MATRIX_1:25;
A3: ( len (M1 + M2) = n & width (M1 + M2) = n ) by MATRIX_1:25;
A4: ( len (M1 * M1) = n & width (M1 * M1) = n & len (M1 * M2) = n & width (M1 * M2) = n ) by MATRIX_1:25;
A5: ( len (M2 * M1) = n & width (M2 * M1) = n & len (M2 * M2) = n & width (M2 * M2) = n ) by MATRIX_1:25;
A6: ( len ((M1 * M1) + (M2 * M1)) = n & width ((M1 * M1) + (M2 * M1)) = n & len ((M1 * M2) + (M2 * M2)) = n & width ((M1 * M2) + (M2 * M2)) = n ) by MATRIX_1:25;
A7: ( len ((M1 * M1) + (M1 * M2)) = n & width ((M1 * M1) + (M1 * M2)) = n ) by MATRIX_1:25;
thus ( M1 commutes_with M2 implies (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) ) :: thesis: ( (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) implies M1 commutes_with M2 )
proof
assume A8: M1 commutes_with M2 ; :: thesis: (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2)
(M1 + M2) * (M1 + M2) = ((M1 + M2) * M1) + ((M1 + M2) * M2) by A1, A2, A3, MATRIX_4:62
.= ((M1 * M1) + (M2 * M1)) + ((M1 + M2) * M2) by A1, A2, MATRIX_4:63
.= ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) by A1, A2, MATRIX_4:63
.= (((M1 * M1) + (M2 * M1)) + (M1 * M2)) + (M2 * M2) by A4, A5, A6, MATRIX_3:5 ;
hence (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) by A8, Def1; :: thesis: verum
end;
assume A9: (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) ; :: thesis: M1 commutes_with M2
(M1 + M2) * (M1 + M2) = ((M1 + M2) * M1) + ((M1 + M2) * M2) by A1, A2, A3, MATRIX_4:62
.= ((M1 * M1) + (M2 * M1)) + ((M1 + M2) * M2) by A1, A2, MATRIX_4:63
.= ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) by A1, A2, MATRIX_4:63
.= (((M1 * M1) + (M2 * M1)) + (M1 * M2)) + (M2 * M2) by A4, A5, A6, MATRIX_3:5 ;
then ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) by A4, A5, A6, A9, MATRIX_3:5;
then ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) = ((M1 * M1) + (M1 * M2)) + ((M1 * M2) + (M2 * M2)) by A4, A5, A7, MATRIX_3:5;
then (M1 * M1) + (M2 * M1) = (M1 * M1) + (M1 * M2) by A6, A7, MATRIX_4:4;
then (M2 * M1) + (M1 * M1) = (M1 * M1) + (M1 * M2) by A4, A5, MATRIX_3:4;
then (M2 * M1) + (M1 * M1) = (M1 * M2) + (M1 * M1) by A4, MATRIX_3:4;
then M2 * M1 = M1 * M2 by A4, A5, MATRIX_4:4;
hence M1 commutes_with M2 by Def1; :: thesis: verum