M := { A[] -> B[]; B[] -> C[]; T[i] -> T[i+1] };
P := M^2;
assert(P = { A[] -> C[]; T[i] -> T[i+2] });
