reserve m for Nat;
reserve P for Instruction-Sequence of SCM+FSA;

theorem Th20:
  for s being State of SCM+FSA,
      P being Instruction-Sequence of SCM+FSA,
      I being really-closed Program of SCM+FSA, a being Int-Location
       st I does not destroy  a :::& I is_closed_on s,P
    for k being Nat holds Comput(P +* I,Initialize s,k).a = s.a
proof
  let s be State of SCM+FSA;
  let P be Instruction-Sequence of SCM+FSA;
  let I be really-closed Program of SCM+FSA;
  let a be Int-Location;
  assume
A1: I does not destroy a;
  defpred P[Nat] means
   Comput(P+*I,Initialize s,$1).a = s.a;
A2: I c= P+*I by FUNCT_4:25;
:::  assume
:::A3: I is_closed_on s,P;
A3: now
    let k be Nat;
    assume
A4: P[k];
    set l = IC Comput(P+*I,Initialize s,k);
    IC Initialize s = 0 by MEMSTR_0:47;
    then IC Initialize s in dom I by AFINSQ_1:65;
    then
A5: l in dom I by A2,AMISTD_1:21;
    then (P+*I).l = I.l by A2,GRFUNC_1:2;
    then (P+*I).l in rng I by A5,FUNCT_1:def 3;
    then
A6: (P+*I).l does not destroy a by A1;
A7: dom(P+*I) = NAT by PARTFUN1:def 2;
    Comput(P+*I,(Initialize s),k + 1).a =
     (Following(P+*I,Comput(P+*I,(Initialize s),k))).a
      by EXTPRO_1:3
      .=(Exec((P+*I).
         IC Comput(P+*I,Initialize s,k),
          Comput(P+*I,Initialize s,k))).a
                by A7,PARTFUN1:def 6
      .= Comput(P+*I,s+* Start-At(0,SCM+FSA),k).a by A6,Th19
      .= s.a by A4;
    hence P[k+1];
  end;
A8: not a in dom Start-At(0,SCM+FSA) by SCMFSA_2:102;
  Comput(P+*I,Initialize s,0).a = (Initialize s).a
    .= s.a by A8,FUNCT_4:11;
  then
A9: P[0];
  thus for k being Nat holds P[k] from NAT_1:sch 2(A9, A3);
end;
