Article SCMPDS_3, MML version 4.99.1005

:: SCMPDS_3:th 2
theorem
for b1 being integer set
for b2, b3 being Element of product the Object-Kind of SCMPDS
      st IC b2 = IC b3
   holds ICplusConst(b2,b1) = ICplusConst(b3,b1);

:: SCMPDS_3:th 3
theorem
for b1 being integer set
for b2 being Int_position
for b3, b4 being Element of product the Object-Kind of SCMPDS
      st b3 | SCM-Data-Loc = b4 | SCM-Data-Loc
   holds b3 . DataLoc(b3 . b2,b1) = b4 . DataLoc(b4 . b2,b1);

:: SCMPDS_3:th 4
theorem
for b1 being Int_position
for b2, b3 being Element of product the Object-Kind of SCMPDS
      st b2 | SCM-Data-Loc = b3 | SCM-Data-Loc
   holds b2 . b1 = b3 . b1;

:: SCMPDS_3:th 5
theorem
the carrier of SCMPDS = ({IC SCMPDS} \/ SCM-Data-Loc) \/ NAT;

:: SCMPDS_3:th 6
theorem
not IC SCMPDS in SCM-Data-Loc;

:: SCMPDS_3:th 7
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
   st b1 | (SCM-Data-Loc \/ {IC SCMPDS}) = b2 | (SCM-Data-Loc \/ {IC SCMPDS})
for b3 being Element of the Instructions of SCMPDS holds
   (Exec(b3,b1)) | (SCM-Data-Loc \/ {IC SCMPDS}) = (Exec(b3,b2)) | (SCM-Data-Loc \/ {IC SCMPDS});

:: SCMPDS_3:th 8
theorem
for b1 being Element of the Instructions of SCMPDS
for b2 being Element of product the Object-Kind of SCMPDS holds
   (Exec(b1,b2)) | NAT = b2 | NAT;

:: SCMPDS_3:th 9
theorem
for b1 being finite Element of sproduct the Object-Kind of SCMPDS holds
   DataPart b1 = b1 | SCM-Data-Loc;

:: SCMPDS_3:th 10
theorem
for b1 being finite Element of sproduct the Object-Kind of SCMPDS holds
      b1 is data-only(NAT, {INT}, SCMPDS)
   iff
      proj1 b1 c= SCM-Data-Loc;

:: SCMPDS_3:th 11
theorem
for b1 being finite Element of sproduct the Object-Kind of SCMPDS holds
   proj1 DataPart b1 c= SCM-Data-Loc;

:: SCMPDS_3:th 13
theorem
for b1 being Element of the Instructions of SCMPDS
for b2 being Element of product the Object-Kind of SCMPDS
for b3 being finite programmed Element of sproduct the Object-Kind of SCMPDS holds
   Exec(b1,b2 +* b3) = (Exec(b1,b2)) +* b3;

:: SCMPDS_3:th 14
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being Instruction-Location of SCMPDS
for b3 being Int_position holds
   b1 . b3 = (b1 +* Start-At b2) . b3;

:: SCMPDS_3:th 15
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS holds
b1 +* (b2 | SCM-Data-Loc) is Element of product the Object-Kind of SCMPDS;

:: SCMPDS_3:funcnot 1 => SCMPDS_3:func 1
definition
  let a1 be Int_position;
  let a2 be integer set;
  redefine func a1 .--> a2 -> finite Element of sproduct the Object-Kind of SCMPDS;
end;

:: SCMPDS_3:th 16
theorem
for b1 being finite autonomic Element of sproduct the Object-Kind of SCMPDS
      st DataPart b1 <> {}
   holds IC SCMPDS in proj1 b1;

:: SCMPDS_3:exreg 1
registration
  cluster Relation-like Function-like finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS;
end;

:: SCMPDS_3:th 17
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS holds
   IC SCMPDS in proj1 b1;

:: SCMPDS_3:th 18
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
for b3, b4, b5 being integer set
      st IC b1 = IC b2 & b3 <> b4 & b5 = IC b1 & 0 <= b5 + b3 & 0 <= b5 + b4
   holds ICplusConst(b1,b3) <> ICplusConst(b2,b4);

:: SCMPDS_3:th 19
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
for b3, b4 being Element of NAT
      st IC b1 = IC b2 & b3 <> b4
   holds ICplusConst(b1,b3) <> ICplusConst(b2,b4);

:: SCMPDS_3:th 20
theorem
for b1 being Element of product the Object-Kind of SCMPDS holds
   Next IC b1 = ICplusConst(b1,1);

:: SCMPDS_3:th 21
theorem
for b1 being finite autonomic Element of sproduct the Object-Kind of SCMPDS
      st IC SCMPDS in proj1 b1
   holds IC b1 in proj1 b1;

:: SCMPDS_3:th 22
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2
for b3 being Element of NAT holds
   IC Computation(b2,b3) in proj1 ProgramPart b1;

:: SCMPDS_3:th 23
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4 being Element of NAT holds
   IC Computation(b2,b4) = IC Computation(b3,b4) & CurInstr Computation(b2,b4) = CurInstr Computation(b3,b4);

:: SCMPDS_3:th 24
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4 being Element of NAT
for b5, b6 being integer set
for b7, b8 being Int_position
      st CurInstr Computation(b2,b4) = (b7,b5):=(b8,b6) &
         b7 in proj1 b1 &
         DataLoc((Computation(b2,b4)) . b7,b5) in proj1 b1
   holds (Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b8,b6) = (Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b8,b6);

:: SCMPDS_3:th 25
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4 being Element of NAT
for b5, b6 being integer set
for b7, b8 being Int_position
      st CurInstr Computation(b2,b4) = AddTo(b7,b5,b8,b6) &
         b7 in proj1 b1 &
         DataLoc((Computation(b2,b4)) . b7,b5) in proj1 b1
   holds (Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b8,b6) = (Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b8,b6);

:: SCMPDS_3:th 26
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4 being Element of NAT
for b5, b6 being integer set
for b7, b8 being Int_position
      st CurInstr Computation(b2,b4) = SubFrom(b7,b5,b8,b6) &
         b7 in proj1 b1 &
         DataLoc((Computation(b2,b4)) . b7,b5) in proj1 b1
   holds (Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b8,b6) = (Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b8,b6);

:: SCMPDS_3:th 27
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4 being Element of NAT
for b5, b6 being integer set
for b7, b8 being Int_position
      st CurInstr Computation(b2,b4) = MultBy(b7,b5,b8,b6) &
         b7 in proj1 b1 &
         DataLoc((Computation(b2,b4)) . b7,b5) in proj1 b1
   holds ((Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b7,b5)) * ((Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b8,b6)) = ((Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b7,b5)) * ((Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b8,b6));

:: SCMPDS_3:th 28
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4, b5 being Element of NAT
for b6 being Int_position
for b7, b8 being integer set
      st CurInstr Computation(b2,b4) = (b6,b7)<>0_goto b8 & b5 = IC Computation(b2,b4) & 0 <= b5 + b8 & b8 <> 1
   holds    (Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b6,b7) = 0
   iff
      (Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b6,b7) = 0;

:: SCMPDS_3:th 29
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4, b5 being Element of NAT
for b6 being Int_position
for b7, b8 being integer set
      st CurInstr Computation(b2,b4) = (b6,b7)<=0_goto b8 & b5 = IC Computation(b2,b4) & 0 <= b5 + b8 & b8 <> 1
   holds    0 < (Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b6,b7)
   iff
      0 < (Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b6,b7);

:: SCMPDS_3:th 30
theorem
for b1 being finite autonomic non programmed Element of sproduct the Object-Kind of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
   st b1 c= b2 & b1 c= b3
for b4, b5 being Element of NAT
for b6 being Int_position
for b7, b8 being integer set
      st CurInstr Computation(b2,b4) = (b6,b7)>=0_goto b8 & b5 = IC Computation(b2,b4) & 0 <= b5 + b8 & b8 <> 1
   holds    (Computation(b2,b4)) . DataLoc((Computation(b2,b4)) . b6,b7) < 0
   iff
      (Computation(b3,b4)) . DataLoc((Computation(b3,b4)) . b6,b7) < 0;

:: SCMPDS_3:funcnot 2 => SCMPDS_3:func 2
definition
  let a1 be Element of NAT;
  func inspos A1 -> Instruction-Location of SCMPDS equals
    a1;
end;

:: SCMPDS_3:def 2
theorem
for b1 being Element of NAT holds
   inspos b1 = b1;

:: SCMPDS_3:th 34
theorem
for b1 being Instruction-Location of SCMPDS
for b2 being Element of NAT holds
   (b1 + b2) -' b2 = b1;

:: SCMPDS_3:th 35
theorem
for b1, b2 being Instruction-Location of SCMPDS
for b3 being Element of NAT holds
      Start-At (b1 + b3) = Start-At (b2 + b3)
   iff
      Start-At b1 = Start-At b2;

:: SCMPDS_3:th 36
theorem
for b1, b2 being Instruction-Location of SCMPDS
for b3 being natural set
      st Start-At b1 = Start-At b2
   holds Start-At (b1 -' b3) = Start-At (b2 -' b3);

:: SCMPDS_3:attrnot 1 => SCMPDS_3:attr 1
definition
  let a1 be finite Element of sproduct the Object-Kind of SCMPDS;
  attr a1 is initial means
    for b1, b2 being Element of NAT
          st b2 in proj1 a1 & b1 < b2
       holds b1 in proj1 a1;
end;

:: SCMPDS_3:dfs 2
definiens
  let a1 be finite Element of sproduct the Object-Kind of SCMPDS;
To prove
     a1 is initial
it is sufficient to prove
  thus for b1, b2 being Element of NAT
          st b2 in proj1 a1 & b1 < b2
       holds b1 in proj1 a1;

:: SCMPDS_3:def 5
theorem
for b1 being finite Element of sproduct the Object-Kind of SCMPDS holds
      b1 is initial
   iff
      for b2, b3 being Element of NAT
            st b3 in proj1 b1 & b2 < b3
         holds b2 in proj1 b1;

:: SCMPDS_3:funcnot 3 => SCMPDS_3:func 3
definition
  func SCMPDS-Stop -> finite Element of sproduct the Object-Kind of SCMPDS equals
    (inspos 0) .--> halt SCMPDS;
end;

:: SCMPDS_3:def 6
theorem
SCMPDS-Stop = (inspos 0) .--> halt SCMPDS;

:: SCMPDS_3:funcreg 1
registration
  cluster SCMPDS-Stop -> non empty finite programmed initial;
end;

:: SCMPDS_3:exreg 2
registration
  cluster non empty Relation-like Function-like finite programmed initial Element of sproduct the Object-Kind of SCMPDS;
end;