Article AMI_6, MML version 4.99.1005

:: AMI_6:th 1
theorem
for b1 being Data-Location holds
   not b1 in NAT;

:: AMI_6:th 2
theorem
SCM-Data-Loc <> NAT;

:: AMI_6:th 3
theorem
for b1 being Element of the carrier of SCM
      st b1 <> IC SCM & not b1 in NAT
   holds b1 is Data-Location;

:: AMI_6:th 5
theorem
for b1 being Data-Location
for b2, b3 being Element of product the Object-Kind of SCM
      st b2,b3 equal_outside NAT
   holds b2 . b1 = b3 . b1;

:: AMI_6:th 7
theorem
AddressPart halt SCM = {};

:: AMI_6:th 16
theorem
for b1 being Element of InsCodes SCM
      st b1 = 0
   holds AddressParts b1 = {0};

:: AMI_6:funcreg 1
registration
  let a1 be Element of InsCodes SCM;
  cluster AddressParts a1 -> non empty;
end;

:: AMI_6:th 17
theorem
for b1 being Element of InsCodes SCM
      st b1 = 1
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 18
theorem
for b1 being Element of InsCodes SCM
      st b1 = 2
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 19
theorem
for b1 being Element of InsCodes SCM
      st b1 = 3
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 20
theorem
for b1 being Element of InsCodes SCM
      st b1 = 4
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 21
theorem
for b1 being Element of InsCodes SCM
      st b1 = 5
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 22
theorem
for b1 being Element of InsCodes SCM
      st b1 = 6
   holds proj1 product" AddressParts b1 = {1};

:: AMI_6:th 23
theorem
for b1 being Element of InsCodes SCM
      st b1 = 7
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 24
theorem
for b1 being Element of InsCodes SCM
      st b1 = 8
   holds proj1 product" AddressParts b1 = {1,2};

:: AMI_6:th 25
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode (b1 := b2)) . 1 = SCM-Data-Loc;

:: AMI_6:th 26
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode (b1 := b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 27
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode AddTo(b1,b2)) . 1 = SCM-Data-Loc;

:: AMI_6:th 28
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode AddTo(b1,b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 29
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode SubFrom(b1,b2)) . 1 = SCM-Data-Loc;

:: AMI_6:th 30
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode SubFrom(b1,b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 31
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode MultBy(b1,b2)) . 1 = SCM-Data-Loc;

:: AMI_6:th 32
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode MultBy(b1,b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 33
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode Divide(b1,b2)) . 1 = SCM-Data-Loc;

:: AMI_6:th 34
theorem
for b1, b2 being Data-Location holds
(product" AddressParts InsCode Divide(b1,b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 35
theorem
for b1 being Instruction-Location of SCM holds
   (product" AddressParts InsCode goto b1) . 1 = NAT;

:: AMI_6:th 36
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM holds
   (product" AddressParts InsCode (b1 =0_goto b2)) . 1 = NAT;

:: AMI_6:th 37
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM holds
   (product" AddressParts InsCode (b1 =0_goto b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 38
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM holds
   (product" AddressParts InsCode (b1 >0_goto b2)) . 1 = NAT;

:: AMI_6:th 39
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM holds
   (product" AddressParts InsCode (b1 >0_goto b2)) . 2 = SCM-Data-Loc;

:: AMI_6:th 40
theorem
for b1 being Instruction-Location of SCM holds
   NIC(halt SCM,b1) = {b1};

:: AMI_6:funcreg 2
registration
  cluster JUMP halt SCM -> empty;
end;

:: AMI_6:th 41
theorem
for b1, b2 being Data-Location
for b3 being Instruction-Location of SCM holds
   NIC(b1 := b2,b3) = {succ b3};

:: AMI_6:funcreg 3
registration
  let a1, a2 be Data-Location;
  cluster JUMP (a1 := a2) -> empty;
end;

:: AMI_6:th 42
theorem
for b1, b2 being Data-Location
for b3 being Instruction-Location of SCM holds
   NIC(AddTo(b1,b2),b3) = {succ b3};

:: AMI_6:funcreg 4
registration
  let a1, a2 be Data-Location;
  cluster JUMP AddTo(a1,a2) -> empty;
end;

:: AMI_6:th 43
theorem
for b1, b2 being Data-Location
for b3 being Instruction-Location of SCM holds
   NIC(SubFrom(b1,b2),b3) = {succ b3};

:: AMI_6:funcreg 5
registration
  let a1, a2 be Data-Location;
  cluster JUMP SubFrom(a1,a2) -> empty;
end;

:: AMI_6:th 44
theorem
for b1, b2 being Data-Location
for b3 being Instruction-Location of SCM holds
   NIC(MultBy(b1,b2),b3) = {succ b3};

:: AMI_6:funcreg 6
registration
  let a1, a2 be Data-Location;
  cluster JUMP MultBy(a1,a2) -> empty;
end;

:: AMI_6:th 45
theorem
for b1, b2 being Data-Location
for b3 being Instruction-Location of SCM holds
   NIC(Divide(b1,b2),b3) = {succ b3};

:: AMI_6:funcreg 7
registration
  let a1, a2 be Data-Location;
  cluster JUMP Divide(a1,a2) -> empty;
end;

:: AMI_6:th 46
theorem
for b1, b2 being Instruction-Location of SCM holds
NIC(goto b1,b2) = {b1};

:: AMI_6:th 47
theorem
for b1 being Instruction-Location of SCM holds
   JUMP goto b1 = {b1};

:: AMI_6:funcreg 8
registration
  let a1 be Instruction-Location of SCM;
  cluster JUMP goto a1 -> non empty trivial;
end;

:: AMI_6:th 48
theorem
for b1 being Data-Location
for b2, b3 being Instruction-Location of SCM holds
NIC(b1 =0_goto b2,b3) = {b2,succ b3};

:: AMI_6:th 49
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM holds
   JUMP (b1 =0_goto b2) = {b2};

:: AMI_6:funcreg 9
registration
  let a1 be Data-Location;
  let a2 be Instruction-Location of SCM;
  cluster JUMP (a1 =0_goto a2) -> non empty trivial;
end;

:: AMI_6:th 50
theorem
for b1 being Data-Location
for b2, b3 being Instruction-Location of SCM holds
NIC(b1 >0_goto b2,b3) = {b2,succ b3};

:: AMI_6:th 51
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM holds
   JUMP (b1 >0_goto b2) = {b2};

:: AMI_6:funcreg 10
registration
  let a1 be Data-Location;
  let a2 be Instruction-Location of SCM;
  cluster JUMP (a1 >0_goto a2) -> non empty trivial;
end;

:: AMI_6:th 52
theorem
for b1 being Instruction-Location of SCM holds
   SUCC b1 = {b1,succ b1};

:: AMI_6:th 53
theorem
for b1 being IL-Function of NAT,SCM
      st for b2 being Element of NAT holds
           b1 . b2 = il. b2
   holds b1 is bijective(NAT, NAT) &
    (for b2 being Element of NAT holds
       b1 . (b2 + 1) in SUCC (b1 . b2) &
        (for b3 being Element of NAT
              st b1 . b3 in SUCC (b1 . b2)
           holds b2 <= b3));

:: AMI_6:funcreg 11
registration
  cluster SCM -> strict standard;
end;

:: AMI_6:th 54
theorem
for b1 being natural set holds
   il.(SCM,b1) = il. b1;

:: AMI_6:th 55
theorem
for b1 being natural set holds
   succ il.(SCM,b1) = il.(SCM,b1 + 1);

:: AMI_6:th 56
theorem
for b1 being Instruction-Location of SCM holds
   succ b1 = NextLoc b1;

:: AMI_6:funcreg 12
registration
  cluster (halt SCM) `1 -> jump-only;
end;

:: AMI_6:funcreg 13
registration
  cluster halt SCM -> jump-only;
end;

:: AMI_6:funcreg 14
registration
  let a1 be Instruction-Location of SCM;
  cluster (goto a1) `1 -> jump-only;
end;

:: AMI_6:funcreg 15
registration
  let a1 be Instruction-Location of SCM;
  cluster goto a1 -> jump-only non sequential non ins-loc-free;
end;

:: AMI_6:funcreg 16
registration
  let a1 be Data-Location;
  let a2 be Instruction-Location of SCM;
  cluster (a1 =0_goto a2) `1 -> jump-only;
end;

:: AMI_6:funcreg 17
registration
  let a1 be Data-Location;
  let a2 be Instruction-Location of SCM;
  cluster (a1 >0_goto a2) `1 -> jump-only;
end;

:: AMI_6:funcreg 18
registration
  let a1 be Data-Location;
  let a2 be Instruction-Location of SCM;
  cluster a1 =0_goto a2 -> jump-only non sequential non ins-loc-free;
end;

:: AMI_6:funcreg 19
registration
  let a1 be Data-Location;
  let a2 be Instruction-Location of SCM;
  cluster a1 >0_goto a2 -> jump-only non sequential non ins-loc-free;
end;

:: AMI_6:funcreg 20
registration
  let a1, a2 be Data-Location;
  cluster (a1 := a2) `1 -> non jump-only;
end;

:: AMI_6:funcreg 21
registration
  let a1, a2 be Data-Location;
  cluster (AddTo(a1,a2)) `1 -> non jump-only;
end;

:: AMI_6:funcreg 22
registration
  let a1, a2 be Data-Location;
  cluster (SubFrom(a1,a2)) `1 -> non jump-only;
end;

:: AMI_6:funcreg 23
registration
  let a1, a2 be Data-Location;
  cluster (MultBy(a1,a2)) `1 -> non jump-only;
end;

:: AMI_6:funcreg 24
registration
  let a1, a2 be Data-Location;
  cluster (Divide(a1,a2)) `1 -> non jump-only;
end;

:: AMI_6:funcreg 25
registration
  let a1, a2 be Data-Location;
  cluster a1 := a2 -> non jump-only sequential;
end;

:: AMI_6:funcreg 26
registration
  let a1, a2 be Data-Location;
  cluster AddTo(a1,a2) -> non jump-only sequential;
end;

:: AMI_6:funcreg 27
registration
  let a1, a2 be Data-Location;
  cluster SubFrom(a1,a2) -> non jump-only sequential;
end;

:: AMI_6:funcreg 28
registration
  let a1, a2 be Data-Location;
  cluster MultBy(a1,a2) -> non jump-only sequential;
end;

:: AMI_6:funcreg 29
registration
  let a1, a2 be Data-Location;
  cluster Divide(a1,a2) -> non jump-only sequential;
end;

:: AMI_6:funcreg 30
registration
  cluster SCM -> strict homogeneous with_explicit_jumps without_implicit_jumps;
end;

:: AMI_6:funcreg 31
registration
  cluster SCM -> strict regular;
end;

:: AMI_6:th 57
theorem
for b1 being Instruction-Location of SCM
for b2 being natural set holds
   IncAddr(goto b1,b2) = goto il.(SCM,(locnum b1) + b2);

:: AMI_6:th 58
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM
for b3 being natural set holds
   IncAddr(b1 =0_goto b2,b3) = b1 =0_goto il.(SCM,(locnum b2) + b3);

:: AMI_6:th 59
theorem
for b1 being Data-Location
for b2 being Instruction-Location of SCM
for b3 being natural set holds
   IncAddr(b1 >0_goto b2,b3) = b1 >0_goto il.(SCM,(locnum b2) + b3);

:: AMI_6:funcreg 32
registration
  cluster SCM -> strict IC-good Exec-preserving;
end;