reserve p,p1,p2,h for Instruction-Sequence of SCM+FSA;
reserve k, l, n for Nat,
  j for Integer,
  i,i1 for Instruction of SCM+FSA;
reserve s, s1, s2 for State of SCM+FSA,
  a for read-write Int-Location,
  b for Int-Location,
  I, J for MacroInstruction of SCM+FSA,
  Ig for good MacroInstruction of SCM+FSA,
  i, j, k, m, n for Nat;
reserve s, s1, s2 for State of SCM+FSA,
  p, p1 for Instruction-Sequence of SCM+FSA,
  a, b for Int-Location,
  d for read-write Int-Location,
  f for FinSeq-Location,
  I for MacroInstruction of SCM+FSA,
  J for good MacroInstruction of SCM+FSA,
  k, m, n for Nat;
reserve a for read-write Int-Location;

theorem Th48:
 for J being good really-closed MacroInstruction of SCM+FSA holds
  J does not destroy a &
  StepTimes(a,J,p,s).k.intloc 0 = 1 &
  J is_halting_on StepTimes(a,J,p,s).k, p+*Times(a,J) implies
   StepTimes(a,J,p,s).(k+1).intloc 0 = 1 &
  (StepTimes(a,J,p,s).k.a > 0
  implies StepTimes(a,J,p,s).(k+1).a = StepTimes(a,J,p,s).k.a - 1)
proof let J be good really-closed MacroInstruction of SCM+FSA;
  set I = J;
  assume that
A1: J does not destroy a and
A2: StepTimes(a,I,p,s).k.intloc 0 = 1 and
A3: I is_halting_on StepTimes(a,I,p,s).k, p+*Times(a,I);
  set ST = StepTimes(a,I,p,s);
A4: I is_halting_on Initialized ST.k, p+*Times(a,I) by A2,A3,SCMFSA8B:42;
  set SW = StepWhile>0(a, I ";" SubFrom(a, intloc 0),p,Initialized s);
  Macro SubFrom(a, intloc 0)
       is_halting_on IExec(I,p+*Times(a,I),ST.k), p+*Times(a,I)
             by SCMFSA7B:19;
  then
A5: I ";" SubFrom(a, intloc 0)
      is_halting_on Initialized ST.k, p+*Times(a,I) by A4,SFMASTR1:3;
  hereby
    per cases;
    suppose
      SW.k.a <= 0;
      then DataPart SW.(k+1) = DataPart ST.k by Th31;
      hence StepTimes(a,I,p,s).(k+1).intloc 0 = 1 by A2,SCMFSA_M:2;
    end;
    suppose
      SW.k.a > 0;
      then
      DataPart SW.(k+1) =
       DataPart IExec(I ";" SubFrom(a, intloc 0),p+*Times(a,I), ST.k)
            by A2,A5,Th32;
      hence
      ST.(k+1).intloc 0
       = IExec(I ";" SubFrom(a, intloc 0),p+*Times(a,I),ST.k).intloc 0
            by SCMFSA_M:2
      .= Exec(SubFrom(a, intloc 0), IExec(I,p+*
(Times(a,I) qua good Program of SCM+FSA),ST.k)).intloc 0
            by A4,SFMASTR1:11
        .= IExec(I,p+*Times(a,I), ST.k).intloc 0 by SCMFSA_2:65
        .= 1 by A4,SCMFSA8C:67;
    end;
  end;
  assume ST.k.a > 0;
  then DataPart SW.(k+1)
   = DataPart IExec(I ";" SubFrom(a, intloc 0),p+*Times(a,I),ST.k)
  by A2,A5,Th32;
  hence ST.(k+1).a
   = IExec(I ";" SubFrom(a, intloc 0),p+*Times(a,I), ST.k).a by SCMFSA_M:2
    .= Exec(SubFrom(a, intloc 0), IExec(I,p+*Times(a,I), ST.k)).a
     by A4,SFMASTR1:11
    .= IExec(I,p+*Times(a,I),ST.k).a - IExec(I,p+*Times(a,I),ST.k).intloc 0
     by SCMFSA_2:65
    .= IExec(I,p+*Times(a,I), ST.k).a - 1 by A4,SCMFSA8C:67
    .= (Initialized ST.k).a - 1 by A4,A1 ,SCMFSA8C:95
    .= ST.k.a - 1 by SCMFSA_M:37;
end;
