let D be non empty set ; :: thesis: for M being Matrix of D st len M > 0 & width M > 0 holds
(M @ ) @ = M

let M be Matrix of D; :: thesis: ( len M > 0 & width M > 0 implies (M @ ) @ = M )
assume A1: ( len M > 0 & width M > 0 ) ; :: thesis: (M @ ) @ = M
set N = M @ ;
A2: ( len (M @ ) = width M & ( for i, j being Nat holds
( [i,j] in Indices (M @ ) iff [j,i] in Indices M ) ) & ( for i, j being Nat st [j,i] in Indices M holds
(M @ ) * i,j = M * j,i ) ) by MATRIX_1:def 7;
A3: width (M @ ) = len M by A1, Th12;
A4: width (M @ ) > 0 by A1, Th12;
A5: ( len ((M @ ) @ ) = width (M @ ) & ( for i, j being Nat holds
( [i,j] in Indices ((M @ ) @ ) iff [j,i] in Indices (M @ ) ) ) & ( for i, j being Nat st [j,i] in Indices (M @ ) holds
((M @ ) @ ) * i,j = (M @ ) * j,i ) ) by MATRIX_1:def 7;
A6: width ((M @ ) @ ) = width M by A2, A4, Th12;
( dom M = Seg (len M) & dom ((M @ ) @ ) = Seg (len ((M @ ) @ )) ) by FINSEQ_1:def 3;
then A7: Indices ((M @ ) @ ) = Indices M by A1, A2, A3, A5, Th12;
for i, j being Nat st [i,j] in Indices ((M @ ) @ ) holds
((M @ ) @ ) * i,j = M * i,j
proof
let i, j be Nat; :: thesis: ( [i,j] in Indices ((M @ ) @ ) implies ((M @ ) @ ) * i,j = M * i,j )
assume A8: [i,j] in Indices ((M @ ) @ ) ; :: thesis: ((M @ ) @ ) * i,j = M * i,j
then [j,i] in Indices (M @ ) by MATRIX_1:def 7;
then ((M @ ) @ ) * i,j = (M @ ) * j,i by MATRIX_1:def 7;
hence ((M @ ) @ ) * i,j = M * i,j by A7, A8, MATRIX_1:def 7; :: thesis: verum
end;
hence (M @ ) @ = M by A3, A5, A6, MATRIX_1:21; :: thesis: verum