reserve x,y for object,
        D,D1,D2 for non empty set,
        i,j,k,m,n for Nat,
        f,g for FinSequence of D*,
        f1 for FinSequence of D1*,
        f2 for FinSequence of D2*;

theorem
  f1 = f2 implies D1-concatenation "**" f1 = D2-concatenation "**" f2
proof
  set CC = D2-concatenation;
  set NC = D1-concatenation;
  defpred P[Nat] means
  for fn be FinSequence of D1*,fc be FinSequence of D2* st $1 = len fn & fn=fc
    holds
  NC "**" fn = CC "**" fc;
  A1:P[0]
  proof
    let fn be FinSequence of D1*,fc be FinSequence of D2*;
    assume 0 = len fn & fn=fc;
    then fn={} & fc={};
    then NC "**" fn={} & CC "**" fc={} by Lm1;
    hence thesis;
  end;
  A2:P[i] implies P[i+1]
  proof
    assume A3:P[i];
    set i1=i+1;
    let fn be FinSequence of D1*,fc be FinSequence of D2*;
    assume A4:i1 = len fn & fn=fc;
    then consider f1 be FinSequence of D1*, d1 be Element of D1* such that
    A5:fn=f1^<*d1*> by FINSEQ_2:19;
    consider f2 be FinSequence of D2*, d2 be Element of D2* such that
    A6:fc=f2^<*d2*> by FINSEQ_2:19,A4;
    A7:len f1+1 = len fn by A5,FINSEQ_2:16;
    A8:CC "**"fc = (CC"**"f2)^(CC"**"<*d2*>) by Th3,A6
                 .= (CC"**"f2)^d2 by FINSOP_1:11;
    A9:NC "**"fn = (NC"**"f1)^(NC"**"<*d1*>) by Th3,A5
                 .= (NC"**"f1)^d1 by FINSOP_1:11;
    f1=f2 & d1=d2 by A5,A6,A4,FINSEQ_2:17;
    hence thesis by A3,A7,A4,A8,A9;
  end;
  P[i] from NAT_1:sch 2(A1,A2);
  hence thesis;
end;
