reserve x for set,
  k for Element of NAT;
reserve s for State of SCMPDS;
reserve d1,d2,d3,d4,d5 for Element of SCM-Data-Loc,
  k1,k2,k3,k4,k5,k6 for Integer;
reserve I for Instruction of SCMPDS;
reserve a,b,c for Int_position;

theorem
  for I being set holds I is Instruction of SCMPDS implies
   I = [0,{},{}] or
   (ex k1 st I
= goto k1) or (ex a st I = return a) or (ex a,k1 st I = saveIC(a,k1)) or (ex a,
k1 st I = a:=k1) or (ex a,k1,k2 st I = (a,k1):=k2) or (ex a,k1,k2 st I = (a,k1)
<>0_goto k2) or (ex a,k1,k2 st I = (a,k1)<=0_goto k2) or (ex a,k1,k2 st I = (a,
k1)>=0_goto k2) or (ex a,b,k1,k2 st I = AddTo(a,k1,k2)) or (ex a,b,k1,k2 st I =
AddTo(a,k1,b,k2)) or (ex a,b,k1,k2 st I = SubFrom(a,k1,b,k2)) or (ex a,b,k1,k2
st I = MultBy(a,k1,b,k2)) or (ex a,b,k1,k2 st I = Divide(a,k1,b,k2)) or ex a,b,
  k1,k2 st I = (a,k1):=(b,k2)
proof
  let I be set;
    assume I is Instruction of SCMPDS;
    then reconsider I as Instruction of SCMPDS;
    per cases by Lm1;
    suppose
      I in {[0,{},{}]};
      then I = [0,{},{}] by TARSKI:def 1;
      hence thesis;
    end;
    suppose
      I in S1;
      then consider k1 being Element of INT such that
A1:   I = [14,{},<*k1*>];
      I = goto k1 by A1;
      hence thesis;
    end;
    suppose
      I in S2;
      then consider d1 such that
A2:   I = [1,{},<*d1*>];
      reconsider a=d1 as Int_position by AMI_2:def 16;
      I = return a by A2;
      hence thesis;
    end;
    suppose
      I in S3;
      then consider
      I2 being Element of Segm 15, d2 being Element of SCM-Data-Loc,
      k2 being Element of INT such that
A3:   I = [I2,{},<*d2,k2*>] & I2 in {2,3};
      reconsider a=d2 as Int_position by AMI_2:def 16;
      I = saveIC(a,k2) or I = a:=k2 by A3,TARSKI:def 2;
      hence thesis;
    end;
    suppose
      I in S4;
      then consider
      I3 being Element of Segm 15, d3 being Element of SCM-Data-Loc,
      k1,k2 being Element of INT such that
A4:   I=[I3,{},<*d3,k1,k2*>] & I3 in {4,5,6,7,8};
      reconsider a=d3 as Int_position by AMI_2:def 16;
      I = (a,k1)<>0_goto k2 or I=(a,k1)<=0_goto k2 or I= (a,k1) >=0_goto
      k2 or I= (a,k1) := k2 or I=AddTo(a,k1,k2) by A4,ENUMSET1:def 3;
      hence thesis;
    end;
    suppose
      I in S5;
      then consider I3 being Element of Segm 15, d4,d5 being Element of
      SCM-Data-Loc, k1,k2 being Element of INT such that
A5:   I=[I3,{},<*d4,d5,k1,k2*>] & I3 in {9,10,11,12,13};
      reconsider a=d4,b=d5 as Int_position by AMI_2:def 16;
      I=AddTo(a,k1,b,k2) or I=SubFrom(a,k1,b,k2) or I=MultBy(a,k1,b,k2)
      or I=Divide(a,k1,b,k2) or I=(a,k1) := (b,k2) by A5,ENUMSET1:def 3;
      hence thesis;
    end;
end;
