Article SCMPDS_5, MML version 4.99.1005

:: SCMPDS_5:th 2
theorem
for b1 being set
for b2 being Element of the Instructions of SCMPDS holds
      b1 in proj1 Load b2
   iff
      b1 = inspos 0;

:: SCMPDS_5:th 3
theorem
for b1 being Instruction-Location of SCMPDS
for b2 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS
      st b1 in proj1 stop b2 & (stop b2) . b1 <> halt SCMPDS
   holds b1 in proj1 b2;

:: SCMPDS_5:th 4
theorem
for b1 being Element of the Instructions of SCMPDS holds
   proj1 Load b1 = {inspos 0} &
    (Load b1) . inspos 0 = b1;

:: SCMPDS_5:th 5
theorem
for b1 being Element of the Instructions of SCMPDS holds
   inspos 0 in proj1 Load b1;

:: SCMPDS_5:th 6
theorem
for b1 being Element of the Instructions of SCMPDS holds
   card Load b1 = 1;

:: SCMPDS_5:th 7
theorem
for b1 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   card stop b1 = (card b1) + 1;

:: SCMPDS_5:th 8
theorem
for b1 being Element of the Instructions of SCMPDS holds
   card stop Load b1 = 2;

:: SCMPDS_5:th 9
theorem
for b1 being Element of the Instructions of SCMPDS holds
   inspos 0 in proj1 stop Load b1 & inspos 1 in proj1 stop Load b1;

:: SCMPDS_5:th 10
theorem
for b1 being Element of the Instructions of SCMPDS holds
   (stop Load b1) . inspos 0 = b1 &
    (stop Load b1) . inspos 1 = halt SCMPDS;

:: SCMPDS_5:th 11
theorem
for b1 being set
for b2 being Element of the Instructions of SCMPDS holds
      b1 in proj1 stop Load b2
   iff
      (b1 = inspos 0 or b1 = inspos 1);

:: SCMPDS_5:th 12
theorem
for b1 being Element of the Instructions of SCMPDS holds
   proj1 stop Load b1 = {inspos 0,inspos 1};

:: SCMPDS_5:th 13
theorem
for b1 being Element of the Instructions of SCMPDS holds
   inspos 0 in proj1 Initialized stop Load b1 &
    inspos 1 in proj1 Initialized stop Load b1 &
    (Initialized stop Load b1) . inspos 0 = b1 &
    (Initialized stop Load b1) . inspos 1 = halt SCMPDS;

:: SCMPDS_5:th 15
theorem
for b1, b2 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
Initialized b1 c= Initialized stop (b1 ';' b2);

:: SCMPDS_5:th 16
theorem
for b1, b2 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
proj1 stop b1 c= proj1 stop (b1 ';' b2);

:: SCMPDS_5:th 17
theorem
for b1, b2 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
(Initialized stop b1) +* Initialized stop (b1 ';' b2) = Initialized stop (b1 ';' b2);

:: SCMPDS_5:th 18
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS
      st Initialized b2 c= b1
   holds IC b1 = inspos 0;

:: SCMPDS_5:th 19
theorem
for b1 being Int_position
for b2 being Element of product the Object-Kind of SCMPDS
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   (b2 +* Initialized b3) . b1 = b2 . b1;

:: SCMPDS_5:th 20
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
   st Initialized stop b3 c= b1 & Initialized stop b3 c= b2 & b1,b2 equal_outside NAT
for b4 being Element of NAT holds
   Computation(b1,b4),Computation(b2,b4) equal_outside NAT & CurInstr Computation(b1,b4) = CurInstr Computation(b2,b4);

:: SCMPDS_5:th 21
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
      st Initialized stop b3 c= b1 & Initialized stop b3 c= b2 & b1,b2 equal_outside NAT
   holds LifeSpan b1 = LifeSpan b2 & Result b1,Result b2 equal_outside NAT;

:: SCMPDS_5:th 22
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   IC IExec(b2,b1) = IC Result (b1 +* Initialized stop b2);

:: SCMPDS_5:th 23
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS
   st Initialized stop b2 c= b1
for b4 being Element of NAT
      st b4 <= LifeSpan b1
   holds Computation(b1,b4),Computation(b1 +* (b2 ';' b3),b4) equal_outside NAT;

:: SCMPDS_5:th 24
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS
   st Initialized stop b2 c= b1
for b4 being Element of NAT
      st b4 <= LifeSpan b1
   holds Computation(b1,b4),Computation(b1 +* Initialized stop (b2 ';' b3),b4) equal_outside NAT;

:: SCMPDS_5:attrnot 1 => SCMPDS_5:attr 1
definition
  let a1 be Element of the Instructions of SCMPDS;
  attr a1 is No-StopCode means
    a1 <> halt SCMPDS;
end;

:: SCMPDS_5:dfs 1
definiens
  let a1 be Element of the Instructions of SCMPDS;
To prove
     a1 is No-StopCode
it is sufficient to prove
  thus a1 <> halt SCMPDS;

:: SCMPDS_5:def 1
theorem
for b1 being Element of the Instructions of SCMPDS holds
      b1 is No-StopCode
   iff
      b1 <> halt SCMPDS;

:: SCMPDS_5:attrnot 2 => SCMPDS_5:attr 2
definition
  let a1 be Element of the Instructions of SCMPDS;
  attr a1 is parahalting means
    Load a1 is parahalting;
end;

:: SCMPDS_5:dfs 2
definiens
  let a1 be Element of the Instructions of SCMPDS;
To prove
     a1 is parahalting
it is sufficient to prove
  thus Load a1 is parahalting;

:: SCMPDS_5:def 2
theorem
for b1 being Element of the Instructions of SCMPDS holds
      b1 is parahalting
   iff
      Load b1 is parahalting;

:: SCMPDS_5:exreg 1
registration
  cluster shiftable No-StopCode parahalting Element of the Instructions of SCMPDS;
end;

:: SCMPDS_5:th 25
theorem
for b1 being integer set
      st b1 <> 0
   holds goto b1 is No-StopCode;

:: SCMPDS_5:funcreg 1
registration
  let a1 be Int_position;
  cluster return a1 -> No-StopCode;
end;

:: SCMPDS_5:funcreg 2
registration
  let a1 be Int_position;
  let a2 be integer set;
  cluster a1 := a2 -> No-StopCode;
end;

:: SCMPDS_5:funcreg 3
registration
  let a1 be Int_position;
  let a2 be integer set;
  cluster saveIC(a1,a2) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 4
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster (a1,a2)<>0_goto a3 -> No-StopCode;
end;

:: SCMPDS_5:funcreg 5
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster (a1,a2)<=0_goto a3 -> No-StopCode;
end;

:: SCMPDS_5:funcreg 6
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster (a1,a2)>=0_goto a3 -> No-StopCode;
end;

:: SCMPDS_5:funcreg 7
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster (a1,a2):= a3 -> No-StopCode;
end;

:: SCMPDS_5:funcreg 8
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster AddTo(a1,a2,a3) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 9
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster AddTo(a1,a3,a2,a4) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 10
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster SubFrom(a1,a3,a2,a4) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 11
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster MultBy(a1,a3,a2,a4) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 12
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster Divide(a1,a3,a2,a4) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 13
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster (a1,a3):=(a2,a4) -> No-StopCode;
end;

:: SCMPDS_5:funcreg 14
registration
  cluster halt SCMPDS -> parahalting;
end;

:: SCMPDS_5:funcreg 15
registration
  let a1 be parahalting Element of the Instructions of SCMPDS;
  cluster Load a1 -> finite programmed initial parahalting;
end;

:: SCMPDS_5:funcreg 16
registration
  let a1 be Int_position;
  let a2 be integer set;
  cluster a1 := a2 -> parahalting;
end;

:: SCMPDS_5:funcreg 17
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster (a1,a2):= a3 -> parahalting;
end;

:: SCMPDS_5:funcreg 18
registration
  let a1 be Int_position;
  let a2, a3 be integer set;
  cluster AddTo(a1,a2,a3) -> parahalting;
end;

:: SCMPDS_5:funcreg 19
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster AddTo(a1,a3,a2,a4) -> parahalting;
end;

:: SCMPDS_5:funcreg 20
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster SubFrom(a1,a3,a2,a4) -> parahalting;
end;

:: SCMPDS_5:funcreg 21
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster MultBy(a1,a3,a2,a4) -> parahalting;
end;

:: SCMPDS_5:funcreg 22
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster Divide(a1,a3,a2,a4) -> parahalting;
end;

:: SCMPDS_5:funcreg 23
registration
  let a1, a2 be Int_position;
  let a3, a4 be integer set;
  cluster (a1,a3):=(a2,a4) -> parahalting;
end;

:: SCMPDS_5:th 26
theorem
for b1 being Element of the Instructions of SCMPDS
      st InsCode b1 = 1
   holds b1 is not parahalting;

:: SCMPDS_5:attrnot 3 => SCMPDS_5:attr 3
definition
  let a1 be finite Element of sproduct the Object-Kind of SCMPDS;
  attr a1 is No-StopCode means
    for b1 being Instruction-Location of SCMPDS
          st b1 in proj1 a1
       holds a1 . b1 <> halt SCMPDS;
end;

:: SCMPDS_5:dfs 3
definiens
  let a1 be finite Element of sproduct the Object-Kind of SCMPDS;
To prove
     a1 is No-StopCode
it is sufficient to prove
  thus for b1 being Instruction-Location of SCMPDS
          st b1 in proj1 a1
       holds a1 . b1 <> halt SCMPDS;

:: SCMPDS_5:def 3
theorem
for b1 being finite Element of sproduct the Object-Kind of SCMPDS holds
      b1 is No-StopCode
   iff
      for b2 being Instruction-Location of SCMPDS
            st b2 in proj1 b1
         holds b1 . b2 <> halt SCMPDS;

:: SCMPDS_5:exreg 2
registration
  cluster Relation-like Function-like finite programmed initial parahalting shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS;
end;

:: SCMPDS_5:funcreg 24
registration
  let a1, a2 be finite programmed initial No-StopCode Element of sproduct the Object-Kind of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial No-StopCode;
end;

:: SCMPDS_5:funcreg 25
registration
  let a1 be No-StopCode Element of the Instructions of SCMPDS;
  cluster Load a1 -> finite programmed initial No-StopCode;
end;

:: SCMPDS_5:funcreg 26
registration
  let a1 be No-StopCode Element of the Instructions of SCMPDS;
  let a2 be finite programmed initial No-StopCode Element of sproduct the Object-Kind of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial No-StopCode;
end;

:: SCMPDS_5:funcreg 27
registration
  let a1 be finite programmed initial No-StopCode Element of sproduct the Object-Kind of SCMPDS;
  let a2 be No-StopCode Element of the Instructions of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial No-StopCode;
end;

:: SCMPDS_5:funcreg 28
registration
  let a1, a2 be No-StopCode Element of the Instructions of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial No-StopCode;
end;

:: SCMPDS_5:th 27
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
      st Initialized stop b2 c= b1
   holds IC Computation(b1,LifeSpan (b1 +* Initialized stop b2)) = inspos card b2;

:: SCMPDS_5:th 28
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
for b3 being Element of NAT
      st b3 < LifeSpan (b1 +* Initialized stop b2)
   holds IC Computation(b1 +* Initialized stop b2,b3) in proj1 b2;

:: SCMPDS_5:th 29
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
for b3 being Element of NAT
      st Initialized b2 c= b1 & b3 <= LifeSpan (b1 +* Initialized stop b2)
   holds Computation(b1,b3),Computation(b1 +* Initialized stop b2,b3) equal_outside NAT;

:: SCMPDS_5:th 30
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
      st Initialized b2 c= b1
   holds IC Computation(b1,LifeSpan (b1 +* Initialized stop b2)) = inspos card b2;

:: SCMPDS_5:th 31
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
      st Initialized b2 c= b1 &
         CurInstr Computation(b1,LifeSpan (b1 +* Initialized stop b2)) <> halt SCMPDS
   holds IC Computation(b1,LifeSpan (b1 +* Initialized stop b2)) = inspos card b2;

:: SCMPDS_5:th 32
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Element of NAT
      st Initialized b2 c= b1 &
         b3 < LifeSpan (b1 +* Initialized stop b2)
   holds CurInstr Computation(b1,b3) <> halt SCMPDS;

:: SCMPDS_5:th 33
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS
for b4 being Element of NAT
      st b4 <= LifeSpan (b1 +* Initialized stop b2)
   holds Computation(b1 +* Initialized stop b2,b4),Computation(b1 +* ((b2 ';' b3) +* Start-At inspos 0),b4) equal_outside NAT;

:: SCMPDS_5:th 34
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS
for b4 being Element of NAT
      st b4 <= LifeSpan (b1 +* Initialized stop b2)
   holds Computation(b1 +* Initialized stop b2,b4),Computation(b1 +* Initialized stop (b2 ';' b3),b4) equal_outside NAT;

:: SCMPDS_5:funcreg 29
registration
  let a1 be finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS;
  let a2 be finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial parahalting;
end;

:: SCMPDS_5:funcreg 30
registration
  let a1 be parahalting Element of the Instructions of SCMPDS;
  let a2 be finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial parahalting;
end;

:: SCMPDS_5:funcreg 31
registration
  let a1 be finite programmed initial parahalting Element of sproduct the Object-Kind of SCMPDS;
  let a2 be shiftable parahalting Element of the Instructions of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial parahalting;
end;

:: SCMPDS_5:funcreg 32
registration
  let a1 be parahalting Element of the Instructions of SCMPDS;
  let a2 be shiftable parahalting Element of the Instructions of SCMPDS;
  cluster a1 ';' a2 -> finite programmed initial parahalting;
end;

:: SCMPDS_5:th 35
theorem
for b1, b2 being Element of NAT
for b3, b4 being Element of product the Object-Kind of SCMPDS
for b5 being finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS
      st b3 = Computation(b4 +* Initialized stop b5,b1)
   holds Exec(CurInstr b3,b3 +* Start-At ((IC b3) + b2)) = (Following b3) +* Start-At ((IC Following b3) + b2);

:: SCMPDS_5:th 36
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS
for b4 being Element of NAT
      st Initialized stop (b2 ';' b3) c= b1
   holds (Computation((Result (b1 +* Initialized stop b2)) +* Initialized stop b3,b4)) +* Start-At ((IC Computation((Result (b1 +* Initialized stop b2)) +* Initialized stop b3,b4)) + card b2),Computation(b1 +* Initialized stop (b2 ';' b3),(LifeSpan (b1 +* Initialized stop b2)) + b4) equal_outside NAT;

:: SCMPDS_5:th 37
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS holds
   LifeSpan (b1 +* Initialized stop (b2 ';' b3)) = (LifeSpan (b1 +* Initialized stop b2)) + LifeSpan ((Result (b1 +* Initialized stop b2)) +* Initialized stop b3);

:: SCMPDS_5:th 38
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS holds
   IExec(b2 ';' b3,b1) = (IExec(b3,IExec(b2,b1))) +* Start-At ((IC IExec(b3,IExec(b2,b1))) + card b2);

:: SCMPDS_5:th 39
theorem
for b1 being Int_position
for b2 being Element of product the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b4 being finite programmed initial parahalting shiftable Element of sproduct the Object-Kind of SCMPDS holds
   (IExec(b3 ';' b4,b2)) . b1 = (IExec(b4,IExec(b3,b2))) . b1;

:: SCMPDS_5:funcnot 1 => SCMPDS_5:func 1
definition
  let a1 be Element of product the Object-Kind of SCMPDS;
  func Initialized A1 -> Element of product the Object-Kind of SCMPDS equals
    a1 +* Start-At inspos 0;
end;

:: SCMPDS_5:def 4
theorem
for b1 being Element of product the Object-Kind of SCMPDS holds
   Initialized b1 = b1 +* Start-At inspos 0;

:: SCMPDS_5:th 40
theorem
for b1 being Int_position
for b2 being Element of product the Object-Kind of SCMPDS
for b3 being Instruction-Location of SCMPDS holds
   IC Initialized b2 = inspos 0 & (Initialized b2) . b1 = b2 . b1 & (Initialized b2) . b3 = b2 . b3;

:: SCMPDS_5:th 41
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS holds
   b1,b2 equal_outside NAT
iff
   b1 | (SCM-Data-Loc \/ {IC SCMPDS}) = b2 | (SCM-Data-Loc \/ {IC SCMPDS});

:: SCMPDS_5:th 43
theorem
for b1 being Element of the Instructions of SCMPDS
for b2, b3 being Element of product the Object-Kind of SCMPDS
      st b2 | SCM-Data-Loc = b3 | SCM-Data-Loc & InsCode b1 <> 3
   holds (Exec(b1,b2)) | SCM-Data-Loc = (Exec(b1,b3)) | SCM-Data-Loc;

:: SCMPDS_5:th 44
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
for b3 being shiftable Element of the Instructions of SCMPDS
      st b1 | SCM-Data-Loc = b2 | SCM-Data-Loc
   holds (Exec(b3,b1)) | SCM-Data-Loc = (Exec(b3,b2)) | SCM-Data-Loc;

:: SCMPDS_5:th 45
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being parahalting Element of the Instructions of SCMPDS holds
   Exec(b2,Initialized b1) = IExec(Load b2,b1);

:: SCMPDS_5:th 46
theorem
for b1 being Int_position
for b2 being Element of product the Object-Kind of SCMPDS
for b3 being finite programmed initial parahalting No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b4 being shiftable parahalting Element of the Instructions of SCMPDS holds
   (IExec(b3 ';' b4,b2)) . b1 = (Exec(b4,IExec(b3,b2))) . b1;

:: SCMPDS_5:th 47
theorem
for b1 being Int_position
for b2 being Element of product the Object-Kind of SCMPDS
for b3 being No-StopCode parahalting Element of the Instructions of SCMPDS
for b4 being shiftable parahalting Element of the Instructions of SCMPDS holds
   (IExec(b3 ';' b4,b2)) . b1 = (Exec(b4,Exec(b3,Initialized b2))) . b1;