Article SCMPDS_8, MML version 4.99.1005

:: SCMPDS_8:th 1
theorem
for b1 being Int_position holds
   ex b2 being Element of NAT st
      b1 = intpos b2;

:: SCMPDS_8:funcnot 1 => SCMPDS_8:func 1
definition
  let a1 be Element of product the Object-Kind of SCMPDS;
  func Dstate A1 -> Element of product the Object-Kind of SCMPDS means
    for b1 being set holds
       (b1 in SCM-Data-Loc implies it . b1 = a1 . b1) &
        (b1 in NAT implies it . b1 = goto 0) &
        (b1 = IC SCMPDS implies it . b1 = inspos 0);
end;

:: SCMPDS_8:def 1
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS holds
   b2 = Dstate b1
iff
   for b3 being set holds
      (b3 in SCM-Data-Loc implies b2 . b3 = b1 . b3) &
       (b3 in NAT implies b2 . b3 = goto 0) &
       (b3 = IC SCMPDS implies b2 . b3 = inspos 0);

:: SCMPDS_8:th 2
theorem
for b1, b2 being Element of product the Object-Kind of SCMPDS
      st b1 | SCM-Data-Loc = b2 | SCM-Data-Loc
   holds Dstate b1 = Dstate b2;

:: SCMPDS_8:th 3
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being Element of the Instructions of SCMPDS
      st InsCode b2 in {0,4,5,6}
   holds Dstate b1 = Dstate Exec(b2,b1);

:: SCMPDS_8:th 4
theorem
for b1 being Int_position
for b2 being Element of product the Object-Kind of SCMPDS holds
   (Dstate b2) . b1 = b2 . b1;

:: SCMPDS_8:th 5
theorem
for b1 being Int_position holds
   ex b2 being Function-like quasi_total Relation of product the Object-Kind of SCMPDS,NAT st
      for b3 being Element of product the Object-Kind of SCMPDS holds
         (b3 . b1 <= 0 implies b2 . b3 = 0) &
          (b3 . b1 <= 0 or b2 . b3 = b3 . b1);

:: SCMPDS_8:funcnot 2 => SCMPDS_8:func 2
definition
  let a1 be Int_position;
  let a2 be integer set;
  let a3 be finite programmed initial Element of sproduct the Object-Kind of SCMPDS;
  func while<0(A1,A2,A3) -> finite programmed initial Element of sproduct the Object-Kind of SCMPDS equals
    (((a1,a2)>=0_goto ((card a3) + 2)) ';' a3) ';' goto - ((card a3) + 1);
end;

:: SCMPDS_8:def 2
theorem
for b1 being Int_position
for b2 being integer set
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   while<0(b1,b2,b3) = (((b1,b2)>=0_goto ((card b3) + 2)) ';' b3) ';' goto - ((card b3) + 1);

:: SCMPDS_8:funcreg 1
registration
  let a1 be finite programmed initial shiftable Element of sproduct the Object-Kind of SCMPDS;
  let a2 be Int_position;
  let a3 be integer set;
  cluster while<0(a2,a3,a1) -> finite programmed initial shiftable;
end;

:: SCMPDS_8:funcreg 2
registration
  let a1 be finite programmed initial No-StopCode Element of sproduct the Object-Kind of SCMPDS;
  let a2 be Int_position;
  let a3 be integer set;
  cluster while<0(a2,a3,a1) -> finite programmed initial No-StopCode;
end;

:: SCMPDS_8:th 6
theorem
for b1 being Int_position
for b2 being integer set
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   card while<0(b1,b2,b3) = (card b3) + 2;

:: SCMPDS_8:th 7
theorem
for b1 being Int_position
for b2 being integer set
for b3 being Element of NAT
for b4 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
      b3 < (card b4) + 2
   iff
      inspos b3 in proj1 while<0(b1,b2,b4);

:: SCMPDS_8:th 8
theorem
for b1 being Int_position
for b2 being integer set
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   (while<0(b1,b2,b3)) . inspos 0 = (b1,b2)>=0_goto ((card b3) + 2) &
    (while<0(b1,b2,b3)) . inspos ((card b3) + 1) = goto - ((card b3) + 1);

:: SCMPDS_8:th 9
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
for b3 being Int_position
for b4 being integer set
      st 0 <= b1 . DataLoc(b1 . b3,b4)
   holds while<0(b3,b4,b2) is_closed_on b1 & while<0(b3,b4,b2) is_halting_on b1;

:: SCMPDS_8:th 10
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
for b3, b4 being Int_position
for b5 being integer set
      st 0 <= b1 . DataLoc(b1 . b3,b5)
   holds IExec(while<0(b3,b5,b2),b1) = b1 +* Start-At inspos ((card b2) + 2);

:: SCMPDS_8:th 11
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
for b3 being Int_position
for b4 being integer set
      st 0 <= b1 . DataLoc(b1 . b3,b4)
   holds IC IExec(while<0(b3,b4,b2),b1) = inspos ((card b2) + 2);

:: SCMPDS_8:th 12
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
for b3, b4 being Int_position
for b5 being integer set
      st 0 <= b1 . DataLoc(b1 . b3,b5)
   holds (IExec(while<0(b3,b5,b2),b1)) . b4 = b1 . b4;

:: SCMPDS_8:sch 1
scheme SCMPDS_8:sch 1
{F1 -> Element of NAT,
  F2 -> Element of product the Object-Kind of SCMPDS,
  F3 -> finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS,
  F4 -> Int_position,
  F5 -> integer set}:
(F1(F2()) = F1(F2()) or P1[F2()]) & while<0(F4(),F5(),F3()) is_closed_on F2() & while<0(F4(),F5(),F3()) is_halting_on F2()
provided
   0 < card F3()
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & F1(Dstate b1) = 0
      holds 0 <= b1 . DataLoc(F2() . F4(),F5())
and
   P1[Dstate F2()]
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & b1 . F4() = F2() . F4() & b1 . DataLoc(F2() . F4(),F5()) < 0
      holds (IExec(F3(),b1)) . F4() = b1 . F4() & F3() is_closed_on b1 & F3() is_halting_on b1 & F1(Dstate IExec(F3(),b1)) < F1(Dstate b1) & P1[Dstate IExec(F3(),b1)];


:: SCMPDS_8:sch 2
scheme SCMPDS_8:sch 2
{F1 -> Element of NAT,
  F2 -> Element of product the Object-Kind of SCMPDS,
  F3 -> finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS,
  F4 -> Int_position,
  F5 -> integer set}:
(F1(F2()) = F1(F2()) or P1[F2()]) &
 IExec(while<0(F4(),F5(),F3()),F2()) = IExec(while<0(F4(),F5(),F3()),IExec(F3(),F2()))
provided
   0 < card F3()
and
   F2() . DataLoc(F2() . F4(),F5()) < 0
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & F1(Dstate b1) = 0
      holds 0 <= b1 . DataLoc(F2() . F4(),F5())
and
   P1[Dstate F2()]
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & b1 . F4() = F2() . F4() & b1 . DataLoc(F2() . F4(),F5()) < 0
      holds (IExec(F3(),b1)) . F4() = b1 . F4() & F3() is_closed_on b1 & F3() is_halting_on b1 & F1(Dstate IExec(F3(),b1)) < F1(Dstate b1) & P1[Dstate IExec(F3(),b1)];


:: SCMPDS_8:th 13
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4 being integer set
for b5 being set
for b6 being Function-like quasi_total Relation of product the Object-Kind of SCMPDS,NAT
      st 0 < card b2 &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st b6 . Dstate b7 = 0
            holds 0 <= b7 . DataLoc(b1 . b3,b4)) &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st (for b8 being Int_position
                        st b8 in b5
                     holds b7 . b8 = b1 . b8) &
                  b7 . b3 = b1 . b3 &
                  b7 . DataLoc(b1 . b3,b4) < 0
            holds (IExec(b2,b7)) . b3 = b7 . b3 &
             b6 . Dstate IExec(b2,b7) < b6 . Dstate b7 &
             b2 is_closed_on b7 &
             b2 is_halting_on b7 &
             (for b8 being Int_position
                   st b8 in b5
                holds (IExec(b2,b7)) . b8 = b7 . b8))
   holds while<0(b3,b4,b2) is_closed_on b1 & while<0(b3,b4,b2) is_halting_on b1;

:: SCMPDS_8:th 14
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4 being integer set
for b5 being set
for b6 being Function-like quasi_total Relation of product the Object-Kind of SCMPDS,NAT
      st 0 < card b2 &
         b1 . DataLoc(b1 . b3,b4) < 0 &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st b6 . Dstate b7 = 0
            holds 0 <= b7 . DataLoc(b1 . b3,b4)) &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st (for b8 being Int_position
                        st b8 in b5
                     holds b7 . b8 = b1 . b8) &
                  b7 . b3 = b1 . b3 &
                  b7 . DataLoc(b1 . b3,b4) < 0
            holds (IExec(b2,b7)) . b3 = b7 . b3 &
             b2 is_closed_on b7 &
             b2 is_halting_on b7 &
             b6 . Dstate IExec(b2,b7) < b6 . Dstate b7 &
             (for b8 being Int_position
                   st b8 in b5
                holds (IExec(b2,b7)) . b8 = b7 . b8))
   holds IExec(while<0(b3,b4,b2),b1) = IExec(while<0(b3,b4,b2),IExec(b2,b1));

:: SCMPDS_8:th 15
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4 being integer set
for b5 being set
      st 0 < card b2 &
         (for b6 being Element of product the Object-Kind of SCMPDS
               st (for b7 being Int_position
                        st b7 in b5
                     holds b6 . b7 = b1 . b7) &
                  b6 . b3 = b1 . b3 &
                  b6 . DataLoc(b1 . b3,b4) < 0
            holds (IExec(b2,b6)) . b3 = b6 . b3 &
             b6 . DataLoc(b1 . b3,b4) < (IExec(b2,b6)) . DataLoc(b1 . b3,b4) &
             b2 is_closed_on b6 &
             b2 is_halting_on b6 &
             (for b7 being Int_position
                   st b7 in b5
                holds (IExec(b2,b6)) . b7 = b6 . b7))
   holds while<0(b3,b4,b2) is_closed_on b1 & while<0(b3,b4,b2) is_halting_on b1;

:: SCMPDS_8:th 16
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4 being integer set
for b5 being set
      st b1 . DataLoc(b1 . b3,b4) < 0 &
         0 < card b2 &
         (for b6 being Element of product the Object-Kind of SCMPDS
               st (for b7 being Int_position
                        st b7 in b5
                     holds b6 . b7 = b1 . b7) &
                  b6 . b3 = b1 . b3 &
                  b6 . DataLoc(b1 . b3,b4) < 0
            holds (IExec(b2,b6)) . b3 = b6 . b3 &
             b6 . DataLoc(b1 . b3,b4) < (IExec(b2,b6)) . DataLoc(b1 . b3,b4) &
             b2 is_closed_on b6 &
             b2 is_halting_on b6 &
             (for b7 being Int_position
                   st b7 in b5
                holds (IExec(b2,b6)) . b7 = b6 . b7))
   holds IExec(while<0(b3,b4,b2),b1) = IExec(while<0(b3,b4,b2),IExec(b2,b1));

:: SCMPDS_8:funcnot 3 => SCMPDS_8:func 3
definition
  let a1 be Int_position;
  let a2 be integer set;
  let a3 be finite programmed initial Element of sproduct the Object-Kind of SCMPDS;
  func while>0(A1,A2,A3) -> finite programmed initial Element of sproduct the Object-Kind of SCMPDS equals
    (((a1,a2)<=0_goto ((card a3) + 2)) ';' a3) ';' goto - ((card a3) + 1);
end;

:: SCMPDS_8:def 3
theorem
for b1 being Int_position
for b2 being integer set
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   while>0(b1,b2,b3) = (((b1,b2)<=0_goto ((card b3) + 2)) ';' b3) ';' goto - ((card b3) + 1);

:: SCMPDS_8:funcreg 3
registration
  let a1 be finite programmed initial shiftable Element of sproduct the Object-Kind of SCMPDS;
  let a2 be Int_position;
  let a3 be integer set;
  cluster while>0(a2,a3,a1) -> finite programmed initial shiftable;
end;

:: SCMPDS_8:funcreg 4
registration
  let a1 be finite programmed initial No-StopCode Element of sproduct the Object-Kind of SCMPDS;
  let a2 be Int_position;
  let a3 be integer set;
  cluster while>0(a2,a3,a1) -> finite programmed initial No-StopCode;
end;

:: SCMPDS_8:th 17
theorem
for b1 being Int_position
for b2 being integer set
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   card while>0(b1,b2,b3) = (card b3) + 2;

:: SCMPDS_8:th 18
theorem
for b1 being Int_position
for b2 being integer set
for b3 being Element of NAT
for b4 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
      b3 < (card b4) + 2
   iff
      inspos b3 in proj1 while>0(b1,b2,b4);

:: SCMPDS_8:th 19
theorem
for b1 being Int_position
for b2 being integer set
for b3 being finite programmed initial Element of sproduct the Object-Kind of SCMPDS holds
   (while>0(b1,b2,b3)) . inspos 0 = (b1,b2)<=0_goto ((card b3) + 2) &
    (while>0(b1,b2,b3)) . inspos ((card b3) + 1) = goto - ((card b3) + 1);

:: SCMPDS_8:th 20
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
for b3 being Int_position
for b4 being integer set
      st b1 . DataLoc(b1 . b3,b4) <= 0
   holds while>0(b3,b4,b2) is_closed_on b1 & while>0(b3,b4,b2) is_halting_on b1;

:: SCMPDS_8:th 21
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
for b3, b4 being Int_position
for b5 being integer set
      st b1 . DataLoc(b1 . b3,b5) <= 0
   holds IExec(while>0(b3,b5,b2),b1) = b1 +* Start-At inspos ((card b2) + 2);

:: SCMPDS_8: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
for b3 being Int_position
for b4 being integer set
      st b1 . DataLoc(b1 . b3,b4) <= 0
   holds IC IExec(while>0(b3,b4,b2),b1) = inspos ((card b2) + 2);

:: SCMPDS_8:th 23
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
for b3, b4 being Int_position
for b5 being integer set
      st b1 . DataLoc(b1 . b3,b5) <= 0
   holds (IExec(while>0(b3,b5,b2),b1)) . b4 = b1 . b4;

:: SCMPDS_8:sch 3
scheme SCMPDS_8:sch 3
{F1 -> Element of NAT,
  F2 -> Element of product the Object-Kind of SCMPDS,
  F3 -> finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS,
  F4 -> Int_position,
  F5 -> integer set}:
(F1(F2()) = F1(F2()) or P1[F2()]) & while>0(F4(),F5(),F3()) is_closed_on F2() & while>0(F4(),F5(),F3()) is_halting_on F2()
provided
   0 < card F3()
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & F1(Dstate b1) = 0
      holds b1 . DataLoc(F2() . F4(),F5()) <= 0
and
   P1[Dstate F2()]
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & b1 . F4() = F2() . F4() & 0 < b1 . DataLoc(F2() . F4(),F5())
      holds (IExec(F3(),b1)) . F4() = b1 . F4() & F3() is_closed_on b1 & F3() is_halting_on b1 & F1(Dstate IExec(F3(),b1)) < F1(Dstate b1) & P1[Dstate IExec(F3(),b1)];


:: SCMPDS_8:sch 4
scheme SCMPDS_8:sch 4
{F1 -> Element of NAT,
  F2 -> Element of product the Object-Kind of SCMPDS,
  F3 -> finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS,
  F4 -> Int_position,
  F5 -> integer set}:
(F1(F2()) = F1(F2()) or P1[F2()]) &
 IExec(while>0(F4(),F5(),F3()),F2()) = IExec(while>0(F4(),F5(),F3()),IExec(F3(),F2()))
provided
   0 < card F3()
and
   0 < F2() . DataLoc(F2() . F4(),F5())
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & F1(Dstate b1) = 0
      holds b1 . DataLoc(F2() . F4(),F5()) <= 0
and
   P1[Dstate F2()]
and
   for b1 being Element of product the Object-Kind of SCMPDS
         st P1[Dstate b1] & b1 . F4() = F2() . F4() & 0 < b1 . DataLoc(F2() . F4(),F5())
      holds (IExec(F3(),b1)) . F4() = b1 . F4() & F3() is_closed_on b1 & F3() is_halting_on b1 & F1(Dstate IExec(F3(),b1)) < F1(Dstate b1) & P1[Dstate IExec(F3(),b1)];


:: SCMPDS_8:th 24
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4, b5 being integer set
for b6, b7 being set
for b8 being Function-like quasi_total Relation of product the Object-Kind of SCMPDS,NAT
      st 0 < card b2 &
         (for b9 being Element of product the Object-Kind of SCMPDS
               st b8 . Dstate b9 = 0
            holds b9 . DataLoc(b1 . b3,b4) <= 0) &
         (for b9 being Int_position
               st b9 in b6
            holds b5 + (b1 . DataLoc(b1 . b3,b4)) <= b1 . b9) &
         (for b9 being Element of product the Object-Kind of SCMPDS
               st (for b10 being Int_position
                        st b10 in b6
                     holds b5 + (b9 . DataLoc(b1 . b3,b4)) <= b9 . b10) &
                  (for b10 being Int_position
                        st b10 in b7
                     holds b9 . b10 = b1 . b10) &
                  b9 . b3 = b1 . b3 &
                  0 < b9 . DataLoc(b1 . b3,b4)
            holds (IExec(b2,b9)) . b3 = b9 . b3 &
             b2 is_closed_on b9 &
             b2 is_halting_on b9 &
             b8 . Dstate IExec(b2,b9) < b8 . Dstate b9 &
             (for b10 being Int_position
                   st b10 in b6
                holds b5 + ((IExec(b2,b9)) . DataLoc(b1 . b3,b4)) <= (IExec(b2,b9)) . b10) &
             (for b10 being Int_position
                   st b10 in b7
                holds (IExec(b2,b9)) . b10 = b9 . b10))
   holds while>0(b3,b4,b2) is_closed_on b1 & while>0(b3,b4,b2) is_halting_on b1;

:: SCMPDS_8:th 25
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4, b5 being integer set
for b6, b7 being set
for b8 being Function-like quasi_total Relation of product the Object-Kind of SCMPDS,NAT
      st 0 < b1 . DataLoc(b1 . b3,b4) &
         0 < card b2 &
         (for b9 being Element of product the Object-Kind of SCMPDS
               st b8 . Dstate b9 = 0
            holds b9 . DataLoc(b1 . b3,b4) <= 0) &
         (for b9 being Int_position
               st b9 in b6
            holds b5 + (b1 . DataLoc(b1 . b3,b4)) <= b1 . b9) &
         (for b9 being Element of product the Object-Kind of SCMPDS
               st (for b10 being Int_position
                        st b10 in b6
                     holds b5 + (b9 . DataLoc(b1 . b3,b4)) <= b9 . b10) &
                  (for b10 being Int_position
                        st b10 in b7
                     holds b9 . b10 = b1 . b10) &
                  b9 . b3 = b1 . b3 &
                  0 < b9 . DataLoc(b1 . b3,b4)
            holds (IExec(b2,b9)) . b3 = b9 . b3 &
             b2 is_closed_on b9 &
             b2 is_halting_on b9 &
             b8 . Dstate IExec(b2,b9) < b8 . Dstate b9 &
             (for b10 being Int_position
                   st b10 in b6
                holds b5 + ((IExec(b2,b9)) . DataLoc(b1 . b3,b4)) <= (IExec(b2,b9)) . b10) &
             (for b10 being Int_position
                   st b10 in b7
                holds (IExec(b2,b9)) . b10 = b9 . b10))
   holds IExec(while>0(b3,b4,b2),b1) = IExec(while>0(b3,b4,b2),IExec(b2,b1));

:: SCMPDS_8:th 26
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4 being integer set
for b5 being set
for b6 being Function-like quasi_total Relation of product the Object-Kind of SCMPDS,NAT
      st 0 < card b2 &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st b6 . Dstate b7 = 0
            holds b7 . DataLoc(b1 . b3,b4) <= 0) &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st (for b8 being Int_position
                        st b8 in b5
                     holds b7 . b8 = b1 . b8) &
                  b7 . b3 = b1 . b3 &
                  0 < b7 . DataLoc(b1 . b3,b4)
            holds (IExec(b2,b7)) . b3 = b7 . b3 &
             b2 is_closed_on b7 &
             b2 is_halting_on b7 &
             b6 . Dstate IExec(b2,b7) < b6 . Dstate b7 &
             (for b8 being Int_position
                   st b8 in b5
                holds (IExec(b2,b7)) . b8 = b7 . b8))
   holds while>0(b3,b4,b2) is_closed_on b1 &
    while>0(b3,b4,b2) is_halting_on b1 &
    (b1 . DataLoc(b1 . b3,b4) <= 0 or IExec(while>0(b3,b4,b2),b1) = IExec(while>0(b3,b4,b2),IExec(b2,b1)));

:: SCMPDS_8:th 27
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4, b5 being integer set
for b6, b7 being set
      st 0 < card b2 &
         (for b8 being Int_position
               st b8 in b6
            holds b5 + (b1 . DataLoc(b1 . b3,b4)) <= b1 . b8) &
         (for b8 being Element of product the Object-Kind of SCMPDS
               st (for b9 being Int_position
                        st b9 in b6
                     holds b5 + (b8 . DataLoc(b1 . b3,b4)) <= b8 . b9) &
                  (for b9 being Int_position
                        st b9 in b7
                     holds b8 . b9 = b1 . b9) &
                  b8 . b3 = b1 . b3 &
                  0 < b8 . DataLoc(b1 . b3,b4)
            holds (IExec(b2,b8)) . b3 = b8 . b3 &
             b2 is_closed_on b8 &
             b2 is_halting_on b8 &
             (IExec(b2,b8)) . DataLoc(b1 . b3,b4) < b8 . DataLoc(b1 . b3,b4) &
             (for b9 being Int_position
                   st b9 in b6
                holds b5 + ((IExec(b2,b8)) . DataLoc(b1 . b3,b4)) <= (IExec(b2,b8)) . b9) &
             (for b9 being Int_position
                   st b9 in b7
                holds (IExec(b2,b8)) . b9 = b8 . b9))
   holds while>0(b3,b4,b2) is_closed_on b1 &
    while>0(b3,b4,b2) is_halting_on b1 &
    (b1 . DataLoc(b1 . b3,b4) <= 0 or IExec(while>0(b3,b4,b2),b1) = IExec(while>0(b3,b4,b2),IExec(b2,b1)));

:: SCMPDS_8:th 28
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4 being integer set
for b5 being set
      st 0 < card b2 &
         (for b6 being Element of product the Object-Kind of SCMPDS
               st (for b7 being Int_position
                        st b7 in b5
                     holds b6 . b7 = b1 . b7) &
                  b6 . b3 = b1 . b3 &
                  0 < b6 . DataLoc(b1 . b3,b4)
            holds (IExec(b2,b6)) . b3 = b6 . b3 &
             b2 is_closed_on b6 &
             b2 is_halting_on b6 &
             (IExec(b2,b6)) . DataLoc(b1 . b3,b4) < b6 . DataLoc(b1 . b3,b4) &
             (for b7 being Int_position
                   st b7 in b5
                holds (IExec(b2,b6)) . b7 = b6 . b7))
   holds while>0(b3,b4,b2) is_closed_on b1 &
    while>0(b3,b4,b2) is_halting_on b1 &
    (b1 . DataLoc(b1 . b3,b4) <= 0 or IExec(while>0(b3,b4,b2),b1) = IExec(while>0(b3,b4,b2),IExec(b2,b1)));

:: SCMPDS_8:th 29
theorem
for b1 being Element of product the Object-Kind of SCMPDS
for b2 being finite programmed initial shiftable No-StopCode Element of sproduct the Object-Kind of SCMPDS
for b3 being Int_position
for b4, b5 being integer set
for b6 being set
      st 0 < card b2 &
         (for b7 being Int_position
               st b7 in b6
            holds b5 + (b1 . DataLoc(b1 . b3,b4)) <= b1 . b7) &
         (for b7 being Element of product the Object-Kind of SCMPDS
               st (for b8 being Int_position
                        st b8 in b6
                     holds b5 + (b7 . DataLoc(b1 . b3,b4)) <= b7 . b8) &
                  b7 . b3 = b1 . b3 &
                  0 < b7 . DataLoc(b1 . b3,b4)
            holds (IExec(b2,b7)) . b3 = b7 . b3 &
             b2 is_closed_on b7 &
             b2 is_halting_on b7 &
             (IExec(b2,b7)) . DataLoc(b1 . b3,b4) < b7 . DataLoc(b1 . b3,b4) &
             (for b8 being Int_position
                   st b8 in b6
                holds b5 + ((IExec(b2,b7)) . DataLoc(b1 . b3,b4)) <= (IExec(b2,b7)) . b8))
   holds while>0(b3,b4,b2) is_closed_on b1 &
    while>0(b3,b4,b2) is_halting_on b1 &
    (b1 . DataLoc(b1 . b3,b4) <= 0 or IExec(while>0(b3,b4,b2),b1) = IExec(while>0(b3,b4,b2),IExec(b2,b1)));