annotate dvcomp.pl @ 20:07d6c4c5654b iso-prolog

SICStus v4 (ISO prolog syntax)
author kono
date Thu, 30 Aug 2007 14:16:36 +0900
parents e1d3145cff7a
children 29cf617f49db
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
1 /*
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
2 Copyright (C) 1991, Shinji Kono, Sony Computer Science Laboratory, Inc.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
3 The University, Newcastle upton Tyne
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
4
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
5 Everyone is permitted to copy and distribute verbatim copies
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
6 of this license, but changing it is not allowed. You can also
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
7 use this wording to make the terms for other programs.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
8
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
9 send your comments to kono@csl.sony.co.jp
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
10 $Id$
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
11 */
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
12
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
13 % itl decomposition for DST
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
14
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
15 :- dynamic length_limit/1,renaming/0.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
16
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
17 % requires [chop]
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
18 % itl(Predicate,Next,Empty,ConditionLists)
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
19
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
20 itl(P) :- expand(P,P0),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
21 moref(Ev),itl(P0,Next,Ev,[],C),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
22 write(([Ev|C]->Next)),nl,fail.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
23 itl(_).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
24 itl(P,Next,[Ev|C]) :- moref(Ev),itl(P,Next,Ev,[],C).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
25
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
26 moref(empty).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
27 moref(more).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
28
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
29 % :- table itl/5.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
30
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
31 itl(N,F,E,C,C1):-number(N),!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
32 sb(Subterm,N),!,itl(Subterm,F,E,C,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
33 itl(true,true,_,C,C):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
34 itl(false,false,_,C,C):-!.
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
35 itl(true_false,true_false,more,C,C):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
36 itl(true_false,true,empty,C,[choice(true)|C]).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
37 itl(true_false,false,E,C,[choice(false)|C]):-!,E=empty.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
38 itl(more,false,empty,C,C).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
39 itl(more,true,E,C,C):-!,E = more.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
40 % next two rule determines descrete time
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
41 itl(empty,true,empty,C,C).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
42 itl(empty,false,E,C,C):-!,E = more. % no succeeding more interval
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
43 itl(P,FF,_,C,C1) :- atomic(P),!, local(FF,P,C,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
44 itl(@(P),P,more,C,C). % strong next
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
45 itl(@(_),false,E,C,C):-!,E=empty.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
46
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
47 itl(?(Cond,T,F),N,E,C,C1):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
48 itl(Cond,CN,E,C,C0),itl_cond(CN,T,F,N,E,C0,C1).
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
49 % Non deterministic selection (singleton 2nd order variable)
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
50 itl([],true,_,C,C):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
51 itl([H|L],F,empty,C,C1):-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
52 empty_choice([H|L],0,F,C,C1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
53 itl([H|L],F,E,C,C1):-!,E=more,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
54 choice([H|L],F,C,C1).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
55 % Regular Variable
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
56 itl(^(R),F,empty,C,C1):-
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
57 local(F,^(R,0),C,C1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
58 itl(^(R),^(R,1),E,C,C):-!, E=more.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
59
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
60 itl(^(R,S),F,empty,C,C1):-
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
61 local(F,^(R,S),C,C1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
62 %itl(^(R,S),F,E,C,C1):- E = more,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
63 % length_limit(X),S>=X,inc_var(over,_),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
64 % S1 is S+1,local(F,over(R,S1),C,C1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
65 itl(^(R,S),^(R,S1),E,C,C):-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
66 % increment regular variable length
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
67 E=more, S1 is S+1.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
68
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
69 % Quantifier
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
70 itl(exists(P,Q),F,E,C,C0) :-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
71 itl(Q,QT,E,[P|C],C1),itl_ex(QT,Q,E,P,F,C1,C0).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
72 itl(*(P),F,empty,C,C1):-!,itl(P,F,empty,C,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
73 itl(*(P),F,E,C,C1):-!,E=more,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
74 itl(P,PX,more,C,C1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
75 closure(PX,P,F).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
76 %% external state diagram
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
77 itl(st(N),F,E,C,C1):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
78 setof((Cond=>X),st(N,Cond,X),L),itl_transition(L,F,E,C,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
79 %% ignore last state to check non stop predicate
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
80 itl(non_terminate(_),F,empty,C,C):-!,F=true.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
81 itl(non_terminate(L),F,more,C,C1):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
82 itl(L,F,more,C,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
83 %% shared resources or state
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
84 itl(share(L),F,empty,C,C1):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
85 exclusive(L,C,C1,true,F).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
86 itl(share(L),F,more,C,C1):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
87 exclusive(L,C,C1,share(L),F).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
88 %%
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
89 itl((P,Q),N,E,C,C1) :-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
90 itl(P,PN,E,C,C0),itland(PN,Q,N,E,C0,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
91 itl((P;Q),N,E,C,C1) :-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
92 itl(P,PN,E,C,C0),itlor(PN,Q,N,E,C0,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
93 itl(not(P),NN,E,X,X1) :- !,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
94 itl(P,N,E,X,X1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
95 negate(N,NN). %% negate/2 in chop.pl
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
96 % F = empty?(P,Q):(empty(P)*more(Q)+more(PM)&Q)
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
97 itl((P&Q),F,empty,C,C1) :-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
98 itl((P,Q),F,empty,C,C1).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
99 itl((P&Q),F,more,C,C2) :-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
100 itl(P,PE,empty,C,C0),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
101 itl(P,PM,more,C0,C1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
102 chop(PM,PE,F,Q,C1,C2).
19
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
103 itl(proj(_,Q),F,empty,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
104 itl(Q,F,empty,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
105 itl(proj(P,Q),F,more,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
106 itl(P,PM,more,C,C0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
107 itl(Q,QM,more,C0,C1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
108 prj(PM,QM,P,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
109 % prefix is not consistently defined
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
110 % prefix(fin(false)) = true ? funny...
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
111 itl(prefix(P),F,empty,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
112 itl(P,PE,empty,C,C0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
113 itl(P,PM,more,C0,C1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
114 prefix(PM,PE,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
115 itl(prefix(P),F,more,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
116 itl(P,PM,more,C,C1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
117 prefix(PM,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
118 itl(Def,_,_,_,_) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
119 write('error: '),write(Def),nl,!,fail.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
120
19
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
121
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
122 local(true,P,C,C1):- true(C,P,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
123 local(false,P,C,C1):- false(C,P,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
124 true([],P,C,[P|C]):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
125 true([P|_],P,C,C):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
126 true([not(P)|_],P,_,_):-!,fail.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
127 true([_|T],P,C,C1):-true(T,P,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
128 false([],P,C,[not(P)|C]):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
129 false([P|_],P,_,_):-!,fail.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
130 false([not(P)|_],P,C,C):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
131 false([_|T],P,C,C1):-false(T,P,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
132 empty_choice([H|_],N,F,C,[choice(N)|C1]) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
133 itl(H,F,empty,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
134 empty_choice([_|L],N,F,C,C1) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
135 N1 is N+1,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
136 empty_choice(L,N1,F,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
137 choice([],[],C,C) :-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
138 choice([H|L],[H1|L1],C,C2) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
139 itl(H,H1,more,C,C1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
140 choice(L,L1,C1,C2).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
141 itl_cond(true,T,_,N,E,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
142 itl(T,N,E,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
143 itl_cond(false,_,F,N,E,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
144 itl(F,N,E,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
145 itl_cond(CN,T,F,N,E,C,C1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
146 itl(T,TN,E,C,C0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
147 itl(F,FN,E,C0,C1), negate(CN,NCN),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
148 and(TN,CN,N1),and(FN,NCN,N2), or(N1,N2,N).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
149 itl_ex(true,_,_,P,true,C,C1):-!,remove_p(C,P,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
150 itl_ex(false,Q,E,P,F,C,C0):- !,remove_p(C,P,C1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
151 itl(Q,QF,E,[not(P)|C1],C2),remove_p(C2,P,C0), exists(QF,P,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
152 itl_ex(QT,Q,E,P,F,C,C0):- remove_p(C,P,C1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
153 itl(Q,QF,E,[not(P)|C1],C2), remove_p(C2,P,C0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
154 or(QT,QF,TF),exists(TF,P,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
155 % constant order optimzation for quantifier
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
156 exists(P,P,true):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
157 exists(P,_,P):-atomic(P),!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
158 exists(Q,P,exists(P,Q)).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
159 remove_p([],_,[]):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
160 remove_p([not(P)|T],P,T):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
161 remove_p([P|T],P,T):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
162 remove_p([H|T],P,[H|T1]):-!,remove_p(T,P,T1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
163 closure(false,_,false):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
164 closure(PX,P,(PX & *(P))). %% infinite clousre (strong)
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
165 %% closure(PX,P,(PX & (*(P);empty))). %% finite closure (weak)
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
166 itl_transition([],false,_,C,C):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
167 itl_transition([(Cond=>empty)|T],F,E,C,C1):-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
168 itl((empty,Cond),F0,E,C,C0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
169 itl_transition(T,F1,E,C0,C1),or(F0,F1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
170 itl_transition([(Cond=>X)|T],F,E,C,C1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
171 itl((more,Cond),F0,E,C,C0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
172 itl_transition1(F0,X,T,F,E,C0,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
173 itl_transition1(false,_,T,F,E,C,C1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
174 itl_transition(T,F,E,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
175 itl_transition1(true,X,T,(st(X);F),E,C,C1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
176 itl_transition(T,F,E,C,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
177 exclusive([],C,C,F,F):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
178 exclusive([A|L],C,C1,F,F1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
179 true(C,A,C,C0),exclusive1(L,C0,C1,F,F1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
180 exclusive([N|L],C,C1,F,F1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
181 false(C,N,C,C0), !,exclusive(L,C0,C1,F,F1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
182 % exclusive(_,C,C,_,false). % eliminate this brach
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
183 exclusive1([],C,C,F,F):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
184 exclusive1([H|L],C,C1,F,F1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
185 false(C,H,C,C0), !,exclusive1(L,C0,C1,F,F1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
186 % exclusive1(_,C,C,_,false).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
187 itland(false,_,false,_,C0,C0):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
188 itland(true,Q,QN,E,C0,C1):-!,itl(Q,QN,E,C0,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
189 itland(PN,Q,N,E,C0,C1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
190 itl(Q,QN,E,C0,C1),and(PN,QN,N). %% and/3 in chop.pl
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
191 itlor(true,_,true,_,C0,C0):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
192 itlor(false,Q,QN,E,C0,C1):-!,itl(Q,QN,E,C0,C1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
193 itlor(PN,Q,N,E,C0,C1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
194 itl(Q,QN,E,C0,C1),or(PN,QN,N). %% or/3 in chop.pl
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
195 chop(false,false,false,_,C,C):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
196 chop(PM,false,(PM & Q),Q,C,C):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
197 chop(PM,true,F,Q,C,C1):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
198 itl(Q,QF,more,C,C1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
199 chop1(PM,QF,Q,F).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
200 chop(PM,PE,F,Q,C,C):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
201 write('next empty conflict:'),write((PM,PE,F,Q,C)),nl,!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
202 fail.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
203
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
204 chop1(false,QF,_,QF):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
205 chop1(false,false,_,false):-!.
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
206 chop1(true,false,true,true):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
207 chop1(true,_,true,true):-!.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
208 chop1(PM,false,Q,(PM&Q)):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
209 chop1(_,true,_,true):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
210 chop1(PM,QF,Q,(QF;(PM&Q))):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
211
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
212 prj(false,_,_,false):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
213 prj(_,false,_,false):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
214 prj(PM,QM,P,(PM&proj(P,QM))).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
215
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
216
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
217 prefix(true,true):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
218 prefix(false,false):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
219 prefix(PM,prefix(PM)):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
220
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
221 prefix(true,_,true):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
222 prefix(_,true,true):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
223 prefix(false,false,false):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
224 prefix(_,false,true):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
225
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
226
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
227 % develop Local ITL formula into state diagram
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
228 %
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
229 % Mon May 20 17:24:23 BST 1991
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
230 % require([chop]).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
231
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
232 :-dynamic verbose/0,state/2,links/2.
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
233 :-dynamic stay/3,lazy/0,singleton/0,detailed/0.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
234
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
235 verbose(off) :- retract(verbose),fail;true.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
236 verbose(on) :- asserta(verbose).
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
237 :-verbose(on).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
238
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
239 lazy(off) :- retract(lazy),fail;true.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
240 lazy(on) :- asserta(lazy).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
241
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
242 :-lazy(on).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
243
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
244 singleton(off) :- retract(singleton),fail;true.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
245 singleton(on) :- asserta(singleton).
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
246 :-singleton(on).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
247
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
248 renaming(off) :- retract(renaming),fail;true.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
249 renaming(on) :- asserta(renaming).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
250 :-renaming(on).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
251
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
252 detail(off) :- retract(detailed),fail;true.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
253 detail(on) :- asserta(detailed).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
254 % :-detail(on).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
255
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
256 set_limit(X) :-
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
257 set_var(length_limit,X,_).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
258 no_limit :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
259 retract(length_limit),fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
260 no_limit.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
261
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
262 :-assert(length_limit(5)).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
263
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
264 deve(ITL) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
265 init,!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
266 expand(ITL,ITL0), % chop standard form
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
267 itlstd(ITL0,StdNOW,_), % BDT
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
268 assert(itl_state(StdNOW,1)),!, % Initial State
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
269 deve0((1,StdNOW)).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
270
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
271 deve0((S,ITL)) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
272 show_state(S,ITL),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
273 bagof(Next,itldecomp(ITL,Next,S),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
274 Nexts),!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
275 deve1(Nexts).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
276 deve0(_).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
277
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
278 deve1([]).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
279 deve1([H|T]) :- deve0(H),deve1(T).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
280
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
281 itldecomp(ITL,(NextS,StdNext),From) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
282 init_var(current,From),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
283 itl(ITL,Next,Cond),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
284 %% showing
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
285 itlshow(Next,NextS,Cond,From,StdNext).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
286
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
287 itlshow(Next,S,Cond,From,StdNext):-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
288 itlstd(Next,StdNext,Rename),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
289 check_state(StdNext,Cond,New,S),
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
290 (verbose,!,write(Rename);true),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
291 (links(S,From),!;
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
292 assertz(links(S,From)),inc_var(itl_transition_count,_)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
293 inc_var(itl_transition,_),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
294 itlshow0(S,Cond,StdNext,New),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
295 !.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
296
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
297 itlshow0(S,Cond,Next,New) :- verbose,!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
298 itlshow1(S,Cond,Next,New),nl,!,New=1.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
299 itlshow0(0,_,_,0):- !,put(101),!,fail. % "e"
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
300 itlshow0(false,_,_,0):- !,put(102),!,fail. % "f"
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
301 itlshow0(true,_,_,0):- !,put(116),!,fail. % "t"
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
302 itlshow0(_,_,_,0):- !,put(46),!,fail. % "."
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
303 itlshow0(S,_,_,1):- !,write(S),put(46),ttyflush,!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
304
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
305 itlshow1(0,Cond,_,_):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
306 write(Cond),write('->'),write(empty). itlshow1(true,Cond,_,_):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
307 write(Cond),write('->'),write(true).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
308 itlshow1(false,Cond,_,_):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
309 write(Cond),write('->'),write(false).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
310 itlshow1(S,Cond,_,0):-!,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
311 write(Cond),write('->'),write(S).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
312 itlshow1(S,Cond,Org,1):-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
313 write(Cond),write('->'),write(S),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
314 put(9),bdt2itl(Org,Org0),write(Org0),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
315
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
316 % lazy transition condition generator
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
317
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
318 state(From,Cond,Next) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
319 links(Next,From),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
320 itl_state(ITL,From),
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
321 itl(ITL,Next0,Cond),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
322 itlstd(Next0,StdNext,_),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
323 check_state(StdNext,Cond,_,Next1), % Next1 has not to be instantiated
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
324 Next1=Next.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
325
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
326 % detailed state transition including 2var renamings
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
327
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
328 state(From,Cond,Next,FromFull,NextFull,Rename,Rename1) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
329 links(Next,From),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
330 itl(FromFull,PNext,Cond),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
331 itlstd(PNext,StdNext,NextFull,Rename,Rename1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
332 check_state(StdNext,Cond,_,Next1), % S1 has not to be instantiated
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
333 Next = Next1.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
334
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
335 init :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
336 subterm_init,
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
337 r_abolish(itl_state,2),
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
338 r_abolish(stay,3),asserta(stay(0,0,0)),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
339 asserta(itl_state(false,false)),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
340 asserta(itl_state(empty,0)),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
341 asserta(itl_state(true,true)),
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
342 r_abolish(links,2),asserta(links(true,true)),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
343 init_var(current,0),
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
344 init_var(over,0),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
345 init_var(itl_transition,0),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
346 init_var(itl_transition_count,0),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
347 init_var(itl_state_number,1),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
348
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
349 show_state(S,ITL) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
350 bdt2itl(ITL,ITL0),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
351 nl,write('state('),write(S), % (
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
352 (verbose,write(' , '), write(ITL0),write(')'),nl;write(')')),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
353
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
354 check_state(true,[more |_],0,true):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
355 check_state(true,[empty|_],0,0):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
356 check_state(false,_,0,false):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
357 check_state(STD,_,0,S):-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
358 itl_state(STD,S),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
359 check_state(STD,_,1,S):-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
360 inc_var(itl_state_number,S),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
361 assert(itl_state(STD,S)),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
362
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
363 init_var(X,V) :- r_abolish(X,1),functor(F,X,1),arg(1,F,V),assert(F),!.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
364 inc_var(Name,X1) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
365 functor(F,Name,1),retract(F),arg(1,F,X),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
366 X1 is X+1,functor(F1,Name,1),arg(1,F1,X1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
367 asserta(F1),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
368 set_var(Name,X,X1) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
369 functor(F,Name,1),retract(F),!,arg(1,F,X),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
370 functor(F1,Name,1),arg(1,F1,X1),asserta(F1),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
371 set_var(Name,X,_) :- init_var(Name,X).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
372
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
373
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
374 itl_statistics :- nl,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
375 itl_state_number(X),write(X),write(' states'),nl,fail.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
376 itl_statistics :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
377 sbn(X),write(X),write(' subterms'),nl,fail.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
378 itl_statistics :-
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
379 itl_transition_count(X),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
380 write(X),write(' state transions'),nl,fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
381 itl_statistics :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
382 over(X),X=\=0,write(X),write(' interval overflows'),nl,fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
383 itl_statistics :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
384 verbose,write('verbose,'),fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
385 itl_statistics :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
386 renaming,write('renaming,'),fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
387 itl_statistics :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
388 singleton,write('singleton,'),fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
389 itl_statistics :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
390 detailed,write('detailed,'),fail.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
391 itl_statistics :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
392 length_limit(X),X=\=0,write('length limit '),write(X),nl,fail.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
393 itl_statistics.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
394
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
395 %% end %%