Journal of Formalized Mathematics
Volume 8, 1996
University of Bialystok
Copyright (c) 1996
Association of Mizar Users
The abstract of the Mizar article:
-
- by
- Andrzej Trybulec,
- Yatsuka Nakamura,
and
- Piotr Rudnicki
- Received February 7, 1996
- MML identifier: SCMFSA_2
- [
Mizar article,
MML identifier index
]
environ
vocabulary AMI_1, FUNCT_1, RELAT_1, INT_1, FUNCT_7, SCMFSA_1, GR_CY_1, BOOLE,
CAT_1, AMI_2, ORDINAL2, AMI_3, ARYTM_1, FINSET_1, TARSKI, AMI_5, MCART_1,
FINSEQ_1, FUNCT_4, FUNCOP_1, FUNCT_2, CARD_3, ABSVALUE, FINSEQ_2, NAT_1,
SCMFSA_2, FINSEQ_4, ARYTM;
notation TARSKI, XBOOLE_0, ENUMSET1, SUBSET_1, ORDINAL1, ORDINAL2, NUMBERS,
XCMPLX_0, XREAL_0, NAT_1, INT_1, RELAT_1, MCART_1, CARD_3, ABSVALUE,
FINSEQ_1, CQC_LANG, STRUCT_0, GR_CY_1, FUNCT_1, FUNCOP_1, FUNCT_2,
FINSET_1, FUNCT_4, FINSEQ_2, FINSEQ_4, FUNCT_7, AMI_1, AMI_2, AMI_3,
AMI_5, SCMFSA_1;
constructors SCMFSA_1, REAL_1, AMI_5, WELLORD2, CAT_2, DOMAIN_1, FINSOP_1,
FUNCT_7, NAT_1, FINSEQ_4, PROB_1, MEMBERED;
clusters XBOOLE_0, AMI_1, RELSET_1, SCMFSA_1, INT_1, FUNCT_1, FINSEQ_1, AMI_2,
AMI_3, FUNCOP_1, CQC_LANG, AMI_5, NAT_1, FRAENKEL, MEMBERED, ORDINAL2;
requirements REAL, NUMERALS, SUBSET, BOOLE, ARITHM;
begin
canceled 2;
theorem :: SCMFSA_2:3
for N being with_non-empty_elements set,
S being non void AMI-Struct over N,
s being State of S
holds the Instruction-Locations of S c= dom s;
theorem :: SCMFSA_2:4
for N being with_non-empty_elements set,
S being IC-Ins-separated non void (non empty AMI-Struct over N),
s being State of S
holds IC s in dom s;
theorem :: SCMFSA_2:5
for N being with_non-empty_elements set,
S being non empty non void AMI-Struct over N,
s being State of S,
l being Instruction-Location of S
holds l in dom s;
begin :: The SCM+FSA Computer
definition
func SCM+FSA -> strict AMI-Struct over { INT,INT* } equals
:: SCMFSA_2:def 1
AMI-Struct(#INT,In (0,INT),SCM+FSA-Instr-Loc,Segm 13,
SCM+FSA-Instr,SCM+FSA-OK,SCM+FSA-Exec#);
end;
definition
cluster SCM+FSA -> non empty non void;
end;
theorem :: SCMFSA_2:6
the Instruction-Locations of SCM+FSA <> INT &
the Instructions of SCM+FSA <> INT &
the Instruction-Locations of SCM+FSA <> the Instructions of SCM+FSA &
the Instruction-Locations of SCM+FSA <> INT* &
the Instructions of SCM+FSA <> INT*;
theorem :: SCMFSA_2:7
IC SCM+FSA = 0;
begin :: The Memory Structure
reserve k for Nat,
J,K,L for Element of Segm 13,
O,P,R for Element of Segm 9;
definition
func Int-Locations -> Subset of SCM+FSA equals
:: SCMFSA_2:def 2
SCM+FSA-Data-Loc;
func FinSeq-Locations -> Subset of SCM+FSA equals
:: SCMFSA_2:def 3
SCM+FSA-Data*-Loc;
end;
theorem :: SCMFSA_2:8
the carrier of SCM+FSA =
Int-Locations \/ FinSeq-Locations \/ {IC SCM+FSA} \/
the Instruction-Locations of SCM+FSA;
definition
mode Int-Location -> Object of SCM+FSA means
:: SCMFSA_2:def 4
it in SCM+FSA-Data-Loc;
mode FinSeq-Location -> Object of SCM+FSA means
:: SCMFSA_2:def 5
it in SCM+FSA-Data*-Loc;
end;
reserve da for Int-Location,
fa for FinSeq-Location,
x for set;
theorem :: SCMFSA_2:9
da in Int-Locations;
theorem :: SCMFSA_2:10
fa in FinSeq-Locations;
theorem :: SCMFSA_2:11
x in Int-Locations implies x is Int-Location;
theorem :: SCMFSA_2:12
x in FinSeq-Locations implies x is FinSeq-Location;
theorem :: SCMFSA_2:13
Int-Locations misses the Instruction-Locations of SCM+FSA;
theorem :: SCMFSA_2:14
FinSeq-Locations misses the Instruction-Locations of SCM+FSA;
theorem :: SCMFSA_2:15
Int-Locations misses FinSeq-Locations;
definition let k be natural number;
func intloc k -> Int-Location equals
:: SCMFSA_2:def 6
dl.k;
func insloc k -> Instruction-Location of SCM+FSA equals
:: SCMFSA_2:def 7
il.k;
func fsloc k -> FinSeq-Location equals
:: SCMFSA_2:def 8
-(k+1);
end;
theorem :: SCMFSA_2:16
for k1,k2 being natural number st k1 <> k2 holds intloc k1 <> intloc k2;
theorem :: SCMFSA_2:17
for k1,k2 being natural number st k1 <> k2 holds fsloc k1 <> fsloc k2;
theorem :: SCMFSA_2:18
for k1,k2 being natural number st k1 <> k2 holds insloc k1 <> insloc k2;
theorem :: SCMFSA_2:19
for dl being Int-Location ex i being Nat
st dl = intloc i;
theorem :: SCMFSA_2:20
for fl being FinSeq-Location ex i being Nat
st fl = fsloc i;
theorem :: SCMFSA_2:21
for il being Instruction-Location of SCM+FSA ex i being Nat
st il = insloc i;
theorem :: SCMFSA_2:22
Int-Locations is infinite;
theorem :: SCMFSA_2:23
FinSeq-Locations is infinite;
theorem :: SCMFSA_2:24
the Instruction-Locations of SCM+FSA is infinite;
theorem :: SCMFSA_2:25
for I being Int-Location holds I is Data-Location;
theorem :: SCMFSA_2:26
for l being Int-Location holds ObjectKind l = INT;
theorem :: SCMFSA_2:27
for l being FinSeq-Location holds ObjectKind l = INT*;
theorem :: SCMFSA_2:28
for x being set st x in SCM+FSA-Data-Loc
holds x is Int-Location;
theorem :: SCMFSA_2:29
for x being set st x in SCM+FSA-Data*-Loc
holds x is FinSeq-Location;
theorem :: SCMFSA_2:30
for x being set st x in SCM+FSA-Instr-Loc
holds x is Instruction-Location of SCM+FSA;
definition let loc be Instruction-Location of SCM+FSA;
func Next loc -> Instruction-Location of SCM+FSA means
:: SCMFSA_2:def 9
ex mj being Element of SCM+FSA-Instr-Loc st mj = loc & it = Next mj;
end;
theorem :: SCMFSA_2:31
for loc being Instruction-Location of SCM+FSA,
mj being Element of SCM+FSA-Instr-Loc st mj = loc
holds Next mj = Next loc;
theorem :: SCMFSA_2:32
for k being natural number holds Next insloc k = insloc(k+1);
reserve la,lb for Instruction-Location of SCM+FSA,
La for Instruction-Location of SCM,
i for Instruction of SCM+FSA,
I for Instruction of SCM,
l for Instruction-Location of SCM+FSA,
LA,LB for Element of SCM-Instr-Loc,
dA,dB,dC for Element of SCM+FSA-Data-Loc,
DA,DB,DC for Element of SCM-Data-Loc,
fA,fB for Element of SCM+FSA-Data*-Loc,
f,g for FinSeq-Location,
A,B for Data-Location,
a,b,c,db for Int-Location;
theorem :: SCMFSA_2:33
la = La implies Next la = Next La;
begin :: The Instruction Structure
definition let I be Instruction of SCM+FSA;
cluster InsCode I -> natural;
end;
theorem :: SCMFSA_2:34
for I being Instruction of SCM+FSA st InsCode I <= 8
holds I is Instruction of SCM;
theorem :: SCMFSA_2:35
for I being Instruction of SCM+FSA holds InsCode I <= 12;
canceled;
theorem :: SCMFSA_2:37
for i being Instruction of SCM+FSA, I being Instruction of SCM st i = I
holds InsCode i = InsCode I;
theorem :: SCMFSA_2:38
for I being Instruction of SCM holds
I is Instruction of SCM+FSA;
definition let a,b;
canceled;
func a := b -> Instruction of SCM+FSA means
:: SCMFSA_2:def 11
ex A,B st a = A & b = B & it = A:=B;
func AddTo(a,b) -> Instruction of SCM+FSA means
:: SCMFSA_2:def 12
ex A,B st a = A & b = B & it = AddTo(A,B);
func SubFrom(a,b) -> Instruction of SCM+FSA means
:: SCMFSA_2:def 13
ex A,B st a = A & b = B & it = SubFrom(A,B);
func MultBy(a,b) -> Instruction of SCM+FSA means
:: SCMFSA_2:def 14
ex A,B st a = A & b = B & it = MultBy(A,B);
func Divide(a,b) -> Instruction of SCM+FSA means
:: SCMFSA_2:def 15
ex A,B st a = A & b = B & it = Divide(A,B);
end;
theorem :: SCMFSA_2:39
the Instruction-Locations of SCM = the Instruction-Locations of SCM+FSA;
definition let la;
func goto la -> Instruction of SCM+FSA means
:: SCMFSA_2:def 16
ex La st la = La & it = goto La;
let a;
func a=0_goto la -> Instruction of SCM+FSA means
:: SCMFSA_2:def 17
ex A,La st a = A & la = La & it = A=0_goto La;
func a>0_goto la -> Instruction of SCM+FSA means
:: SCMFSA_2:def 18
ex A,La st a = A & la = La & it = A>0_goto La;
end;
definition let c,i be Int-Location; let a be FinSeq-Location;
func c:=(a,i) -> Instruction of SCM+FSA equals
:: SCMFSA_2:def 19
[9,<*c,a,i*>];
func (a,i):=c -> Instruction of SCM+FSA equals
:: SCMFSA_2:def 20
[10,<*c,a,i*>];
end;
definition let i be Int-Location; let a be FinSeq-Location;
func i:=len a -> Instruction of SCM+FSA equals
:: SCMFSA_2:def 21
[11,<*i,a*>];
func a:=<0,...,0>i -> Instruction of SCM+FSA equals
:: SCMFSA_2:def 22
[12,<*i,a*>];
end;
canceled 2;
theorem :: SCMFSA_2:42
InsCode (a:=b) = 1;
theorem :: SCMFSA_2:43
InsCode (AddTo(a,b)) = 2;
theorem :: SCMFSA_2:44
InsCode (SubFrom(a,b)) = 3;
theorem :: SCMFSA_2:45
InsCode (MultBy(a,b)) = 4;
theorem :: SCMFSA_2:46
InsCode (Divide(a,b)) = 5;
theorem :: SCMFSA_2:47
InsCode (goto lb) = 6;
theorem :: SCMFSA_2:48
InsCode (a=0_goto lb) = 7;
theorem :: SCMFSA_2:49
InsCode (a>0_goto lb) = 8;
theorem :: SCMFSA_2:50
InsCode (c:=(fa,a)) = 9;
theorem :: SCMFSA_2:51
InsCode ((fa,a):=c) = 10;
theorem :: SCMFSA_2:52
InsCode (a:=len fa) = 11;
theorem :: SCMFSA_2:53
InsCode (fa:=<0,...,0>a) = 12;
theorem :: SCMFSA_2:54
for ins being Instruction of SCM+FSA st InsCode ins = 1
holds ex da,db st ins = da:=db;
theorem :: SCMFSA_2:55
for ins being Instruction of SCM+FSA st InsCode ins = 2
holds ex da,db st ins = AddTo(da,db);
theorem :: SCMFSA_2:56
for ins being Instruction of SCM+FSA st InsCode ins = 3
holds ex da,db st ins = SubFrom(da,db);
theorem :: SCMFSA_2:57
for ins being Instruction of SCM+FSA st InsCode ins = 4
holds ex da,db st ins = MultBy(da,db);
theorem :: SCMFSA_2:58
for ins being Instruction of SCM+FSA st InsCode ins = 5
holds ex da,db st ins = Divide(da,db);
theorem :: SCMFSA_2:59
for ins being Instruction of SCM+FSA st InsCode ins = 6
holds ex lb st ins = goto lb;
theorem :: SCMFSA_2:60
for ins being Instruction of SCM+FSA st InsCode ins = 7
holds ex lb,da st ins = da=0_goto lb;
theorem :: SCMFSA_2:61
for ins being Instruction of SCM+FSA st InsCode ins = 8
holds ex lb,da st ins = da>0_goto lb;
theorem :: SCMFSA_2:62
for ins being Instruction of SCM+FSA st InsCode ins = 9
holds ex a,b,fa st ins = b:=(fa,a);
theorem :: SCMFSA_2:63
for ins being Instruction of SCM+FSA st InsCode ins = 10
holds ex a,b,fa st ins = (fa,a):=b;
theorem :: SCMFSA_2:64
for ins being Instruction of SCM+FSA st InsCode ins = 11
holds ex a,fa st ins = a:=len fa;
theorem :: SCMFSA_2:65
for ins being Instruction of SCM+FSA st InsCode ins = 12
holds ex a,fa st ins = fa:=<0,...,0>a;
begin :: Relationship to {\bf SCM}
reserve S for State of SCM,
s,s1 for State of SCM+FSA;
theorem :: SCMFSA_2:66
for s being State of SCM+FSA, d being Int-Location
holds d in dom s;
theorem :: SCMFSA_2:67
f in dom s;
theorem :: SCMFSA_2:68
not f in dom S;
theorem :: SCMFSA_2:69
for s being State of SCM+FSA holds Int-Locations c= dom s;
theorem :: SCMFSA_2:70
for s being State of SCM+FSA holds FinSeq-Locations c= dom s;
theorem :: SCMFSA_2:71
for s being State of SCM+FSA
holds dom (s|Int-Locations) = Int-Locations;
theorem :: SCMFSA_2:72
for s being State of SCM+FSA
holds dom (s|FinSeq-Locations) = FinSeq-Locations;
theorem :: SCMFSA_2:73
for s being State of SCM+FSA, i being Instruction of SCM
holds (s|NAT) +* (SCM-Instr-Loc --> i) is State of SCM;
theorem :: SCMFSA_2:74
for s being State of SCM+FSA, s' being State of SCM
holds s +* s' +* (s|SCM+FSA-Instr-Loc) is State of SCM+FSA;
theorem :: SCMFSA_2:75
for i being Instruction of SCM, ii being Instruction of SCM+FSA,
s being State of SCM, ss being State of SCM+FSA
st i = ii & s = ss|NAT +* (SCM-Instr-Loc --> i)
holds Exec(ii,ss) = ss +* Exec(i,s) +* ss|SCM+FSA-Instr-Loc;
definition let s be State of SCM+FSA, d be Int-Location;
redefine func s.d -> Integer;
end;
definition let s be State of SCM+FSA, d be FinSeq-Location;
redefine func s.d -> FinSequence of INT;
end;
theorem :: SCMFSA_2:76
S = s|NAT +* (SCM-Instr-Loc --> I) implies
s = s +* S +* s|SCM+FSA-Instr-Loc;
theorem :: SCMFSA_2:77
for I being Element of SCM+FSA-Instr st I = i
for S being SCM+FSA-State st S = s holds
Exec(i,s) = SCM+FSA-Exec-Res(I,S);
theorem :: SCMFSA_2:78
s1 = s +* S +* s|SCM+FSA-Instr-Loc
implies s1.IC SCM+FSA = S.IC SCM;
theorem :: SCMFSA_2:79
s1 = s +* S +* s|SCM+FSA-Instr-Loc & A = a implies S.A = s1.a;
theorem :: SCMFSA_2:80
S = s|NAT +* (SCM-Instr-Loc --> I) & A = a implies S.A = s.a;
definition
cluster SCM+FSA ->
realistic IC-Ins-separated data-oriented definite steady-programmed;
end;
theorem :: SCMFSA_2:81
for dl being Int-Location holds
dl <> IC SCM+FSA;
theorem :: SCMFSA_2:82
for dl being FinSeq-Location holds
dl <> IC SCM+FSA;
theorem :: SCMFSA_2:83
for il being Int-Location,
dl being FinSeq-Location holds
il <> dl;
theorem :: SCMFSA_2:84
for il being Instruction-Location of SCM+FSA,
dl being Int-Location holds
il <> dl;
theorem :: SCMFSA_2:85
for il being Instruction-Location of SCM+FSA,
dl being FinSeq-Location holds
il <> dl;
theorem :: SCMFSA_2:86
for s1,s2 being State of SCM+FSA
st IC s1 = IC s2 &
(for a being Int-Location holds s1.a = s2.a) &
(for f being FinSeq-Location holds s1.f = s2.f) &
for i being Instruction-Location of SCM+FSA holds s1.i = s2.i
holds s1 = s2;
canceled;
theorem :: SCMFSA_2:88
S = s|NAT +* (SCM-Instr-Loc --> I) implies IC s = IC S;
begin :: Users guide
theorem :: SCMFSA_2:89
Exec(a:=b, s).IC SCM+FSA = Next IC s &
Exec(a:=b, s).a = s.b &
(for c st c <> a holds Exec(a:=b, s).c = s.c) &
for f holds Exec(a:=b, s).f = s.f;
theorem :: SCMFSA_2:90
Exec(AddTo(a,b), s).IC SCM+FSA = Next IC s &
Exec(AddTo(a,b), s).a = s.a + s.b &
(for c st c <> a holds Exec(AddTo(a,b), s).c = s.c) &
for f holds Exec(AddTo(a,b), s).f = s.f;
theorem :: SCMFSA_2:91
Exec(SubFrom(a,b), s).IC SCM+FSA = Next IC s &
Exec(SubFrom(a,b), s).a = s.a - s.b &
(for c st c <> a holds Exec(SubFrom(a,b), s).c = s.c) &
for f holds Exec(SubFrom(a,b), s).f = s.f;
theorem :: SCMFSA_2:92
Exec(MultBy(a,b), s).IC SCM+FSA = Next IC s &
Exec(MultBy(a,b), s).a = s.a * s.b &
(for c st c <> a holds Exec(MultBy(a,b), s).c = s.c) &
for f holds Exec(MultBy(a,b), s).f = s.f;
theorem :: SCMFSA_2:93
Exec(Divide(a,b), s).IC SCM+FSA = Next IC s &
(a <> b implies
Exec(Divide(a,b), s).a = s.a div s.b) &
Exec(Divide(a,b), s).b = s.a mod s.b &
(for c st c <> a & c <> b holds Exec(Divide(a,b), s).c = s.c) &
for f holds Exec(Divide(a,b), s).f = s.f;
theorem :: SCMFSA_2:94
Exec(Divide(a,a), s).IC SCM+FSA = Next IC s &
Exec(Divide(a,a), s).a = s.a mod s.a &
(for c st c <> a holds Exec(Divide(a,a), s).c = s.c) &
for f holds Exec(Divide(a,a), s).f = s.f;
theorem :: SCMFSA_2:95
Exec(goto l, s).IC SCM+FSA = l &
(for c holds Exec(goto l, s).c = s.c) &
for f holds Exec(goto l, s).f = s.f;
theorem :: SCMFSA_2:96
(s.a = 0 implies Exec(a =0_goto l, s).IC SCM+FSA = l) &
(s.a <> 0 implies Exec(a=0_goto l, s).IC SCM+FSA = Next IC s) &
(for c holds Exec(a=0_goto l, s).c = s.c) &
for f holds Exec(a=0_goto l, s).f = s.f;
theorem :: SCMFSA_2:97
(s.a > 0 implies Exec(a >0_goto l, s).IC SCM+FSA = l) &
(s.a <= 0 implies Exec(a>0_goto l, s).IC SCM+FSA = Next IC s) &
(for c holds Exec(a>0_goto l, s).c = s.c) &
for f holds Exec(a>0_goto l, s).f = s.f;
theorem :: SCMFSA_2:98
Exec(c:=(g,a), s).IC SCM+FSA = Next IC s &
(ex k st k = abs(s.a) & Exec(c:=(g,a), s).c = (s.g)/.k) &
(for b st b <> c holds Exec(c:=(g,a), s).b = s.b) &
for f holds Exec(c:=(g,a), s).f = s.f;
theorem :: SCMFSA_2:99
Exec((g,a):=c, s).IC SCM+FSA = Next IC s &
(ex k st k = abs(s.a) & Exec((g,a):=c, s).g = s.g+*(k,s.c)) &
(for b holds Exec((g,a):=c, s).b = s.b) &
for f st f <> g holds Exec((g,a):=c, s).f = s.f;
theorem :: SCMFSA_2:100
Exec(c:=len g, s).IC SCM+FSA = Next IC s &
Exec(c:=len g, s).c = len(s.g) &
(for b st b <> c holds Exec(c:=len g, s).b = s.b) &
for f holds Exec(c:=len g, s).f = s.f;
theorem :: SCMFSA_2:101
Exec(g:=<0,...,0>c, s).IC SCM+FSA = Next IC s &
(ex k st k = abs(s.c) & Exec(g:=<0,...,0>c, s).g = k |-> 0) &
(for b holds Exec(g:=<0,...,0>c, s).b = s.b) &
for f st f <> g holds Exec(g:=<0,...,0>c, s).f = s.f;
begin :: Halt Instruction
theorem :: SCMFSA_2:102
for S being SCM+FSA-State st S = s holds IC s = IC S;
theorem :: SCMFSA_2:103
for i being Instruction of SCM, I being Instruction of SCM+FSA st
i = I & i is halting holds I is halting;
theorem :: SCMFSA_2:104
for I being Instruction of SCM+FSA st
ex s st Exec(I,s).IC SCM+FSA = Next IC s
holds I is non halting;
theorem :: SCMFSA_2:105
a := b is non halting;
theorem :: SCMFSA_2:106
AddTo(a,b) is non halting;
theorem :: SCMFSA_2:107
SubFrom(a,b) is non halting;
theorem :: SCMFSA_2:108
MultBy(a,b) is non halting;
theorem :: SCMFSA_2:109
Divide(a,b) is non halting;
theorem :: SCMFSA_2:110
goto la is non halting;
theorem :: SCMFSA_2:111
a=0_goto la is non halting;
theorem :: SCMFSA_2:112
a>0_goto la is non halting;
theorem :: SCMFSA_2:113
c:=(f,a) is non halting;
theorem :: SCMFSA_2:114
(f,a):=c is non halting;
theorem :: SCMFSA_2:115
c:=len f is non halting;
theorem :: SCMFSA_2:116
f:=<0,...,0>c is non halting;
theorem :: SCMFSA_2:117
[0,{}] is Instruction of SCM+FSA;
theorem :: SCMFSA_2:118
for I being Instruction of SCM+FSA st I = [0,{}] holds I is halting;
theorem :: SCMFSA_2:119
for I be Instruction of SCM+FSA st InsCode I = 0 holds I = [0,{}];
theorem :: SCMFSA_2:120
for I being set holds I is Instruction of SCM+FSA iff
I = [0,{}] or
(ex a,b st I = a:=b) or
(ex a,b st I = AddTo(a,b)) or
(ex a,b st I = SubFrom(a,b)) or
(ex a,b st I = MultBy(a,b)) or
(ex a,b st I = Divide(a,b)) or
(ex la st I = goto la) or
(ex lb,da st I = da=0_goto lb) or
(ex lb,da st I = da>0_goto lb) or
(ex b,a,fa st I = a:=(fa,b)) or
(ex a,b,fa st I = (fa,a):=b) or
(ex a,f st I = a:=len f) or
ex a,f st I = f:=<0,...,0>a;
definition
cluster SCM+FSA -> halting;
end;
theorem :: SCMFSA_2:121
for I being Instruction of SCM+FSA st I is halting holds I = halt SCM+FSA;
theorem :: SCMFSA_2:122
for I being Instruction of SCM+FSA st InsCode I = 0 holds I = halt SCM+FSA;
theorem :: SCMFSA_2:123
halt SCM = halt SCM+FSA;
theorem :: SCMFSA_2:124
InsCode halt SCM+FSA = 0;
theorem :: SCMFSA_2:125
for i being Instruction of SCM, I being Instruction of SCM+FSA st
i = I & i is non halting holds I is non halting;
Back to top