reserve m for Nat;
reserve P,PP,P1,P2 for Instruction-Sequence of SCM+FSA;

theorem
  for s1,s2 being State of SCM+FSA,I being really-closed Program of SCM+FSA st
  s1.intloc 0 = 1 & I is_halting_on s1,P1 &
   ((for a being read-write Int-Location holds s1.a = s2.a) &
  for f being FinSeq-Location holds s1.f = s2.f)
  holds DataPart IExec(I,P1,s1) = DataPart IExec(I,P2,s2)
proof
  let s1,s2 be State of SCM+FSA;
  set D = Data-Locations SCM+FSA;
  let I be really-closed Program of SCM+FSA;
  set s11 = Initialized s1, P11 = P1 +* I;
  set s21 = Initialized s2, P21 = P2 +* I;
  assume s1.intloc 0 = 1;
  then
A1: s11 = Initialize s1 by SCMFSA_M:18;
  then
A2: DataPart s11 = DataPart s1 by MEMSTR_0:79;
  assume that
A3: I is_halting_on s1,P1;
  assume
A4: for a being read-write Int-Location holds s1.a = s2.a;
A5: now
    let a be read-write Int-Location;
     a <> intloc 0 & a <> IC SCM+FSA by SCMFSA_2:56;
     then
A6: not a in dom Initialize((intloc 0).-->1) by SCMFSA_M:11,TARSKI:def 2;
    hence s11.a = s1.a by FUNCT_4:11
      .= s2.a by A4
      .= s21.a by A6,FUNCT_4:11;
  end;
  assume
A7: for f being FinSeq-Location holds s1.f = s2.f;
A8: now
    let f be FinSeq-Location;
     f <> intloc 0 & f <> IC SCM+FSA by SCMFSA_2:57,58;
     then
A9: not f in dom Initialize((intloc 0).-->1) by SCMFSA_M:11,TARSKI:def 2;
    hence s11.f = s1.f by FUNCT_4:11
      .= s2.f by A7
      .= s21.f by A9,FUNCT_4:11;
  end;
A10: intloc 0 in dom Initialize((intloc 0).-->1) by SCMFSA_M:10;
  then s11.intloc 0 = (Initialize((intloc 0).-->1)).intloc 0 by FUNCT_4:13
    .= s21.intloc 0 by A10,FUNCT_4:13;
  then
A11: DataPart s11 = DataPart s21 by A5,A8,SCMFSA_M:20;
A12: I c= P21 by FUNCT_4:25;
A13: I c= P11 by FUNCT_4:25;
A14: P11 halts_on s11 by A3,A1;
  then CurInstr(P11,
  Comput(P11,s11,LifeSpan(P11,s11)))
  = halt SCM+FSA by EXTPRO_1:def 15;
  then CurInstr(P21,
  Comput(P21,s21,LifeSpan(P11,s11)))
   = halt SCM+FSA by A11,Th9,A13,A12;
  then
A15: P21 halts_on s21 by EXTPRO_1:29;
  I is_halting_on s11,P11 by A3,A2,SCMFSA8B:5;
  then
A16: LifeSpan(P11,s11) = LifeSpan(P21,s21) by A11,Th10,A13,A12;
  thus DataPart IExec(I,P1,s1) = DataPart Result(P11,s11)
    .= DataPart Comput(P11, s11,LifeSpan(P11,s11)) by A14,EXTPRO_1:23
    .= DataPart Comput(P21, s21,LifeSpan(P11,s11)) by A11,Th9,A13,A12
    .= DataPart Result(P21,s21) by A16,A15,EXTPRO_1:23
    .= DataPart IExec(I,P2,s2);
end;
