:: SCMPDS Is Not Standard
:: by Artur Korni{\l}owicz and Yasunari Shidama
::
:: Received September 27, 2003
:: Copyright (c) 2003-2021 Association of Mizar Users


definition
let la, lb be Int_position;
let a, b be Integer;
:: original: -->
redefine func (la,lb) --> (a,b) -> PartState of SCMPDS;
coherence
(la,lb) --> (a,b) is PartState of SCMPDS
proof end;
end;

Lm1: for k being Integer holds JUMP (goto k) = {}
proof end;

registration
let k be Integer;
cluster JUMP (goto k) -> empty ;
coherence
JUMP (goto k) is empty
by Lm1;
end;

theorem Th1: :: SCMPDS_9:1
for i being Instruction of SCMPDS
for l being Element of NAT st ( for s being State of SCMPDS st IC s = l holds
(Exec (i,s)) . (IC ) = (IC s) + 1 ) holds
NIC (i,l) = {(l + 1)}
proof end;

theorem Th2: :: SCMPDS_9:2
for i being Instruction of SCMPDS st ( for l being Element of NAT holds NIC (i,l) = {(l + 1)} ) holds
JUMP i is empty
proof end;

theorem Th3: :: SCMPDS_9:3
for l being Element of NAT
for k being Integer holds NIC ((goto k),l) = {|.(k + l).|}
proof end;

Lm2: for k being Nat st k > 1 holds
k - 2 is Element of NAT

proof end;

theorem Th4: :: SCMPDS_9:4
for a being Int_position
for l being Element of NAT holds NIC ((return a),l) = { k where k is Nat : k > 1 }
proof end;

theorem Th5: :: SCMPDS_9:5
for a being Int_position
for l being Element of NAT
for k1 being Integer holds NIC ((saveIC (a,k1)),l) = {(l + 1)}
proof end;

theorem Th6: :: SCMPDS_9:6
for a being Int_position
for l being Element of NAT
for k1 being Integer holds NIC ((a := k1),l) = {(l + 1)}
proof end;

theorem Th7: :: SCMPDS_9:7
for a being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC (((a,k1) := k2),l) = {(l + 1)}
proof end;

theorem Th8: :: SCMPDS_9:8
for a, b being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC (((a,k1) := (b,k2)),l) = {(l + 1)}
proof end;

theorem Th9: :: SCMPDS_9:9
for a being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC ((AddTo (a,k1,k2)),l) = {(l + 1)}
proof end;

theorem Th10: :: SCMPDS_9:10
for a, b being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC ((AddTo (a,k1,b,k2)),l) = {(l + 1)}
proof end;

theorem Th11: :: SCMPDS_9:11
for a, b being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC ((SubFrom (a,k1,b,k2)),l) = {(l + 1)}
proof end;

theorem Th12: :: SCMPDS_9:12
for a, b being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC ((MultBy (a,k1,b,k2)),l) = {(l + 1)}
proof end;

theorem Th13: :: SCMPDS_9:13
for a, b being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC ((Divide (a,k1,b,k2)),l) = {(l + 1)}
proof end;

theorem :: SCMPDS_9:14
for a being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC (((a,k1) <>0_goto k2),l) = {(l + 1),|.(k2 + l).|}
proof end;

theorem :: SCMPDS_9:15
for a being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC (((a,k1) <=0_goto k2),l) = {(l + 1),|.(k2 + l).|}
proof end;

theorem :: SCMPDS_9:16
for a being Int_position
for l being Element of NAT
for k1, k2 being Integer holds NIC (((a,k1) >=0_goto k2),l) = {(l + 1),|.(k2 + l).|}
proof end;

theorem Th17: :: SCMPDS_9:17
for a being Int_position holds JUMP (return a) = { k where k is Nat : k > 1 }
proof end;

registration
let a be Int_position;
cluster JUMP (return a) -> infinite ;
coherence
not JUMP (return a) is finite
proof end;
end;

registration
let a be Int_position;
let k1 be Integer;
cluster JUMP (saveIC (a,k1)) -> empty ;
coherence
JUMP (saveIC (a,k1)) is empty
proof end;
end;

registration
let a be Int_position;
let k1 be Integer;
cluster JUMP (a := k1) -> empty ;
coherence
JUMP (a := k1) is empty
proof end;
end;

registration
let a be Int_position;
let k1, k2 be Integer;
cluster JUMP ((a,k1) := k2) -> empty ;
coherence
JUMP ((a,k1) := k2) is empty
proof end;
end;

registration
let a, b be Int_position;
let k1, k2 be Integer;
cluster JUMP ((a,k1) := (b,k2)) -> empty ;
coherence
JUMP ((a,k1) := (b,k2)) is empty
proof end;
end;

registration
let a be Int_position;
let k1, k2 be Integer;
cluster JUMP (AddTo (a,k1,k2)) -> empty ;
coherence
JUMP (AddTo (a,k1,k2)) is empty
proof end;
end;

registration
let a, b be Int_position;
let k1, k2 be Integer;
cluster JUMP (AddTo (a,k1,b,k2)) -> empty ;
coherence
JUMP (AddTo (a,k1,b,k2)) is empty
proof end;
cluster JUMP (SubFrom (a,k1,b,k2)) -> empty ;
coherence
JUMP (SubFrom (a,k1,b,k2)) is empty
proof end;
cluster JUMP (MultBy (a,k1,b,k2)) -> empty ;
coherence
JUMP (MultBy (a,k1,b,k2)) is empty
proof end;
cluster JUMP (Divide (a,k1,b,k2)) -> empty ;
coherence
JUMP (Divide (a,k1,b,k2)) is empty
proof end;
end;

Lm3: not 5 / 3 is integer
proof end;

Lm4: for d being Real holds (((|.d.| + (((- d) + |.d.|) + 4)) + 2) - 2) + d <> - (((((|.d.| + (((- d) + |.d.|) + 4)) + (((- d) + |.d.|) + 4)) + 2) - 2) + d)
proof end;

Lm5: for b, d being Real holds b + 1 <> b + ((((- d) + |.d.|) + 4) + d)
proof end;

Lm6: for c, d being Real st c > 0 holds
(|.d.| + c) + 1 <> - (((|.d.| + c) + c) + d)

proof end;

Lm7: for b being Real
for d being Integer st d <> 5 holds
(b + (((- d) + |.d.|) + 4)) + 1 <> b + d

proof end;

Lm8: for c, d being Real st c > 0 holds
((|.d.| + c) + c) + 1 <> - ((|.d.| + c) + d)

proof end;

Lm9: for a being Int_position
for k1 being Integer holds JUMP ((a,k1) <>0_goto 5) = {}

proof end;

Lm10: for a being Int_position
for k1, k2 being Integer st k2 <> 5 holds
JUMP ((a,k1) <>0_goto k2) = {}

proof end;

Lm11: for a being Int_position
for k1 being Integer holds JUMP ((a,k1) <=0_goto 5) = {}

proof end;

Lm12: for a being Int_position
for k1, k2 being Integer st k2 <> 5 holds
JUMP ((a,k1) <=0_goto k2) = {}

proof end;

Lm13: for a being Int_position
for k1 being Integer holds JUMP ((a,k1) >=0_goto 5) = {}

proof end;

Lm14: for a being Int_position
for k1, k2 being Integer st k2 <> 5 holds
JUMP ((a,k1) >=0_goto k2) = {}

proof end;

registration
let a be Int_position;
let k1, k2 be Integer;
cluster JUMP ((a,k1) <>0_goto k2) -> empty ;
coherence
JUMP ((a,k1) <>0_goto k2) is empty
proof end;
cluster JUMP ((a,k1) <=0_goto k2) -> empty ;
coherence
JUMP ((a,k1) <=0_goto k2) is empty
proof end;
cluster JUMP ((a,k1) >=0_goto k2) -> empty ;
coherence
JUMP ((a,k1) >=0_goto k2) is empty
proof end;
end;

theorem Th18: :: SCMPDS_9:18
for l being Element of NAT holds SUCC (l,SCMPDS) = NAT
proof end;

registration
cluster SCMPDS -> non InsLoc-antisymmetric ;
coherence
not SCMPDS is InsLoc-antisymmetric
proof end;
end;

registration
cluster SCMPDS -> non weakly_standard ;
coherence
not SCMPDS is weakly_standard
by AMI_WSTD:10;
end;