let I be shiftable Program of ; for k1 being Integer st (card I) + k1 >= 0 holds
I ';' (goto k1) is shiftable
let k1 be Integer; ( (card I) + k1 >= 0 implies I ';' (goto k1) is shiftable )
set J = Load (goto k1);
set Ig = I ';' (goto k1);
assume A1:
(card I) + k1 >= 0
; I ';' (goto k1) is shiftable
now set D =
{ (l + (card I)) where l is Element of NAT : l in dom (Load (goto k1)) } ;
let n be
Element of
NAT ;
for i being Instruction of SCMPDS st n in dom (I ';' (goto k1)) & i = (I ';' (goto k1)) . n holds
( InsCode b3 <> 1 & InsCode b3 <> 3 & b3 valid_at b2 )let i be
Instruction of
SCMPDS;
( n in dom (I ';' (goto k1)) & i = (I ';' (goto k1)) . n implies ( InsCode b2 <> 1 & InsCode b2 <> 3 & b2 valid_at b1 ) )assume that A2:
n in dom (I ';' (goto k1))
and A3:
i = (I ';' (goto k1)) . n
;
( InsCode b2 <> 1 & InsCode b2 <> 3 & b2 valid_at b1 )
dom (Shift ((Load (goto k1)),(card I))) = { (l + (card I)) where l is Element of NAT : l in dom (Load (goto k1)) }
by VALUED_1:def 12;
then A4:
dom (I ';' (goto k1)) = (dom I) \/ { (l + (card I)) where l is Element of NAT : l in dom (Load (goto k1)) }
by FUNCT_4:def 1;
per cases
( n in dom I or n in { (l + (card I)) where l is Element of NAT : l in dom (Load (goto k1)) } )
by A2, A4, XBOOLE_0:def 3;
suppose
n in { (l + (card I)) where l is Element of NAT : l in dom (Load (goto k1)) }
;
( InsCode b2 <> 1 & InsCode b2 <> 3 & b2 valid_at b1 )then consider l being
Element of
NAT such that A6:
n = l + (card I)
and A7:
l in dom (Load (goto k1))
;
dom (Load (goto k1)) = {0}
by FUNCOP_1:13;
then A8:
l = 0
by A7, TARSKI:def 1;
then A9:
goto k1 =
(Load (goto k1)) . l
by FUNCOP_1:72
.=
i
by A3, A6, A7, AFINSQ_1:def 3
;
hence
(
InsCode i <> 1 &
InsCode i <> 3 )
by SCMPDS_2:12;
i valid_at nA10:
InsCode i <> 6
by A9, SCMPDS_2:12;
(
InsCode i <> 4 &
InsCode i <> 5 )
by A9, SCMPDS_2:12;
hence
i valid_at n
by A1, A6, A8, A9, A10, Def11;
verum end; end; end;
hence
I ';' (goto k1) is shiftable
by Def12; verum