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 * M2) = n & width (M1 * M2) = n ) by MATRIX_1:25;
A3: ( len ((M1 * M1) + (M1 * M2)) = n & width ((M1 * M1) + (M1 * M2)) = n ) by MATRIX_1:25;
A4: ( len ((M1 * M2) + (M2 * M2)) = n & width ((M1 * M2) + (M2 * M2)) = n ) by MATRIX_1:25;
A5: ( len (M1 * M1) = n & width (M1 * M1) = n ) by MATRIX_1:25;
A6: ( len M1 = n & width M1 = n ) by MATRIX_1:25;
A7: ( len ((M1 * M1) + (M2 * M1)) = n & width ((M1 * M1) + (M2 * M1)) = n ) by MATRIX_1:25;
A8: ( len M2 = n & width M2 = n ) by MATRIX_1:25;
A9: ( len (M1 + M2) = n & width (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 A10: 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, A6, A8, A9, MATRIX_4:62
.= ((M1 * M1) + (M2 * M1)) + ((M1 + M2) * M2) by A1, A6, A8, MATRIX_4:63
.= ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) by A1, A6, A8, MATRIX_4:63
.= (((M1 * M1) + (M2 * M1)) + (M1 * M2)) + (M2 * M2) by A2, A7, MATRIX_3:5 ;
hence (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) by A10, Def1; :: thesis: verum
end;
assume A11: (M1 + M2) * (M1 + M2) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) ; :: thesis: M1 commutes_with M2
A12: ( len (M2 * M1) = n & width (M2 * M1) = n ) by MATRIX_1:25;
(M1 + M2) * (M1 + M2) = ((M1 + M2) * M1) + ((M1 + M2) * M2) by A1, A6, A8, A9, MATRIX_4:62
.= ((M1 * M1) + (M2 * M1)) + ((M1 + M2) * M2) by A1, A6, A8, MATRIX_4:63
.= ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) by A1, A6, A8, MATRIX_4:63
.= (((M1 * M1) + (M2 * M1)) + (M1 * M2)) + (M2 * M2) by A2, A7, MATRIX_3:5 ;
then ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) = (((M1 * M1) + (M1 * M2)) + (M1 * M2)) + (M2 * M2) by A2, A7, A11, MATRIX_3:5;
then ((M1 * M1) + (M2 * M1)) + ((M1 * M2) + (M2 * M2)) = ((M1 * M1) + (M1 * M2)) + ((M1 * M2) + (M2 * M2)) by A2, A3, MATRIX_3:5;
then (M1 * M1) + (M2 * M1) = (M1 * M1) + (M1 * M2) by A7, A4, A3, MATRIX_4:4;
then (M2 * M1) + (M1 * M1) = (M1 * M1) + (M1 * M2) by A5, A12, MATRIX_3:4;
then (M2 * M1) + (M1 * M1) = (M1 * M2) + (M1 * M1) by A5, A2, MATRIX_3:4;
then M2 * M1 = M1 * M2 by A5, A2, A12, MATRIX_4:4;
hence M1 commutes_with M2 by Def1; :: thesis: verum