reserve a,b,k,m,n,s for Nat;
reserve c,c1,c2,c3 for Complex;
reserve i,j,z for Integer;
reserve p for Prime;
reserve x for object;
reserve f,g for complex-valued FinSequence;

theorem Th59:
  (f^g)^2 = (f^2) ^ (g^2)
  proof
A1: len(f^2) = len f by Th54;
A2: len(g^2) = len g by Th54;
    dom((f^g)^2) = dom(f^g) by VALUED_1:11
    .= Seg(len f + len g) by FINSEQ_1:def 7
    .= dom((f^2)^(g^2)) by A1,A2,FINSEQ_1:def 7;
    hence len((f^g)^2) = len((f^2)^(g^2)) by FINSEQ_3:29;
    let k be Nat such that
A3: 1 <= k and
A4: k <= len((f^g)^2);
A5: (f^g)^2.k = ((f^g).k)^2 by VALUED_1:11;
    per cases;
    suppose
A6:   k <= len f;
      hence (f^g)^2.k = (f.k)^2 by A3,A5,FINSEQ_1:64
      .= (f^2).k by VALUED_1:11
      .= ((f^2)^(g^2)).k by A1,A3,A6,FINSEQ_1:64;
    end;
    suppose
A7:   k > len f;
      then reconsider i = k-len(f) as Element of NAT by INT_1:5;
A8:   len(f^g) = len f + len g by FINSEQ_1:22;
A9:   len((f^g)^2) = len(f^g) by Th54;
A10:  k = len f + i;
A11:  0+1 <= k - len f by A7,XREAL_1:50,INT_1:7;
A12:  k - len f <= len g by A4,A8,A9,XREAL_1:20;
      then
A13:  (f^g).k = g.i by A10,A11,FINSEQ_1:65;
      ((f^2)^(g^2)).k = (g^2).i by A1,A2,A10,A11,A12,FINSEQ_1:65;
      hence (f^g)^2.k = ((f^2)^(g^2)).k by A5,A13,VALUED_1:11;
    end;
  end;
