reserve m, n, i, k for Nat;
reserve IAlph, OAlph for non empty set,
  fsm for non empty FSM over IAlph,
  s for Element of IAlph,
  w, w1, w2 for FinSequence of IAlph,
  q, q9, q1, q2 for State of fsm;
reserve tfsm, tfsm1, tfsm2, tfsm3 for non empty Mealy-FSM over IAlph, OAlph,
  sfsm for non empty Moore-FSM over IAlph, OAlph,
  qs for State of sfsm,
  q, q1, q2 , q3, qa, qb, qc, qa9, qt, q1t, q2t for State of tfsm,
  q11, q12 for State of tfsm1,
  q21, q22 for State of tfsm2;
reserve OAlphf for finite non empty set,
  tfsmf for finite non empty Mealy-FSM over IAlph, OAlphf,
  sfsmf for finite non empty Moore-FSM over IAlph, OAlphf;

theorem
  for sfsm being non empty finite Moore-FSM over IAlph, OAlph ex tfsm
  being non empty finite Mealy-FSM over IAlph, OAlph st tfsm is_similar_to sfsm
proof
  let sfsm be non empty finite Moore-FSM over IAlph, OAlph;
  set S = the carrier of sfsm, T = the Tran of sfsm;
  set sOF = the OFun of sfsm, IS = the InitS of sfsm;
  deffunc F(Element of S,Element of IAlph) = sOF.(T.[$1, $2]);
  consider tOF being Function of [: S, IAlph:], OAlph such that
A1: for q being Element of S, s be Element of IAlph holds tOF.(q, s) = F
  (q,s) from BINOP_1:sch 4;
  take tfsm = Mealy-FSM (# S, T, tOF, IS #);
  let tw be FinSequence of IAlph;
  set tIS = the InitS of tfsm;
  set twa = (tIS, tw)-admissible;
  set swa = (IS, tw)-admissible;
  defpred P[Nat] means $1 in Seg (len tw + 1) implies twa.$1 = swa.
  $1;
A2: for i being Nat st P[i] holds P[i+1]
  proof
    let i be Nat;
    assume
A3: i in Seg (len tw + 1) implies twa.i = swa.i;
    assume (i+1) in Seg (len tw + 1);
    then
A4: i+1 <= len tw + 1 by FINSEQ_1:1;
    per cases by A4,XREAL_1:6;
    suppose
A5:   i = 0;
      twa.1=the InitS of tfsm by Def2;
      hence thesis by A5,Def2;
    end;
    suppose
A6:   i > 0 & i <= len tw;
      then
A7:   i<=len tw + 1 by NAT_1:13;
A8:   0+1=1 implies 1 <= i & i <= len tw by A6,NAT_1:13;
      then (ex twi being Element of IAlph, tqi, tqi1 being Element of tfsm st
twi = tw.i & tqi = twa.i & tqi1 = twa.(i+1) & twi-succ_of tqi = tqi1 )& ex swi
being Element of IAlph, sqi, sqi1 being Element of sfsm st swi = tw.i & sqi =
      swa.i & sqi1 = swa.(i+1) & swi-succ_of sqi = sqi1 by Def2;
      hence thesis by A3,A8,A7,FINSEQ_1:1;
    end;
  end;
A9: P[0] by FINSEQ_1:1;
A10: for i being Nat holds P[i] from NAT_1:sch 2( A9, A2 );
  now
    thus len (<*sOF.IS*>^((tIS, tw)-response)) = len <*sOF.IS*> + len ((
    tIS, tw)-response) by FINSEQ_1:22
      .= 1+len ((tIS, tw)-response) by FINSEQ_1:40
      .=len tw +1 by Def6;
    then
A11: dom (<*sOF.IS*>^((tIS, tw)-response)) = Seg (len tw + 1) by FINSEQ_1:def 3
;
    thus len ((IS, tw)-response) = len tw + 1 by Def7;
    let i be Nat;
    assume
A12: i in dom (<*sOF.IS*>^((tIS, tw)-response));
    then
A13: 1 <= i by A11,FINSEQ_1:1;
A14: i <= len tw + 1 by A11,A12,FINSEQ_1:1;
    per cases by A13,XXREAL_0:1;
    suppose
A15:  i = 1;
      then i in Seg 1 by FINSEQ_1:2,TARSKI:def 1;
      then i in dom <*sOF.IS*> by FINSEQ_1:38;
      hence (<*sOF.IS*>^((tIS, tw)-response)).i = <*sOF.IS*>.i by
FINSEQ_1:def 7
        .= sOF.IS by A15
        .= ((IS, tw)-response).i by A15,Th10;
    end;
    suppose
      1 < i;
      then consider j being Element of NAT such that
A16:  j = i - 1 and
A17:  1 <= j by INT_1:51;
A18:  i = j + 1 by A16;
      then
A19:  j <= len tw by A14,XREAL_1:6;
      then consider
      swj being Element of IAlph, swaj, swai being Element of sfsm
      such that
A20:  swj = tw.j & swaj = swa.j and
A21:  swai = swa.(j+1) & swj-succ_of swaj = swai by A17,Def2;
A22:  j in Seg len tw by A17,A19,FINSEQ_1:1;
      then
A23:  j in dom tw by FINSEQ_1:def 3;
      j <= len tw + 1 by A19,NAT_1:12;
      then
A24:  j in Seg (len tw + 1) by A17,FINSEQ_1:1;
      len ((tIS, tw)-response) = len tw by Def6;
      then len <*sOF.IS*> = 1 & j in dom ((tIS, tw)-response) by A22,
FINSEQ_1:40,def 3;
      then (<*sOF.IS*>^((tIS, tw)-response)).i = (tIS, tw)-response.j by A18,
FINSEQ_1:def 7
        .= (the OFun of tfsm).[(tIS, tw)-admissible.j, tw.j] by A23,Def6
        .= tOF.((IS, tw)-admissible.j, tw.j) by A10,A24
        .= sOF.(T.(swaj, swj)) by A1,A20
        .= (IS, tw)-response.i by A11,A12,A16,A21,Def7;
      hence (<*sOF.IS*>^((tIS, tw)-response)).i = (IS, tw)-response.i;
    end;
  end;
  hence thesis by FINSEQ_2:9;
end;
