annotate ndcomp.pl @ 22:29cf617f49db default tip

newer CVS version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 22 Apr 2016 16:47:13 +0900
parents 07d6c4c5654b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
1 /*
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
2 Copyright (C) 1991, Shinji Kono, Sony Computer Science Laboratory, Inc.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
3 The University, Newcastle upton Tyne
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
4
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
5 Everyone is permitted to copy and distribute verbatim copies
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
6 of this license, but changing it is not allowed. You can also
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
7 use this wording to make the terms for other programs.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
8
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
9 send your comments to kono@csl.sony.co.jp
22
29cf617f49db newer CVS version
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
10 $Id: ndcomp.pl,v 1.2 2007/08/30 05:16:36 kono Exp $
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
11 */
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
12
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
13 :-dynamic verbose/0,state/2,links/2.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
14 :-dynamic stay/3.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
15 :-dynamic regular_limit/1.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
16
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
17 % itl decomposition for DST
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
18
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
19 % requires [chop]
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
20 % itl(Predicate,Next,Empty,ConditionLists)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
21
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
22 itl(P) :- expand(P,P0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
23 moref(Ev),itl(P0,Next,Ev,[],C),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
24 write(([Ev|C]->Next)),nl,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
25 itl(_).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
26 itl(P,Next,[Ev|C]) :- moref(Ev),itl(P,Next,Ev,[],C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
27
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
28 moref(empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
29 moref(more).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
30
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
31 itl(true,true,_,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
32 itl(false,false,_,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
33 itl(more,false,empty,C,C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
34 itl(more,true,E,C,C):-!,E = more.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
35 % next two rule determines descrete time
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
36 itl(empty,true,empty,C,C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
37 itl(empty,false,E,C,C):-!,E = more. % no succeeding more interval
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
38 itl(N,F,E,C,C1):-number(N),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
39 sb(Subterm,N),!,itl(Subterm,F,E,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
40 itl(?(Cond,T,F),N,E,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
41 itl(Cond,CN,E,C,C0),itl_cond(CN,T,F,N,E,C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
42 itl_cond(true,T,_,N,E,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
43 itl(T,N,E,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
44 itl_cond(false,_,F,N,E,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
45 itl(F,N,E,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
46 itl_cond(CN,T,F,N,E,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
47 itl(T,TN,E,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
48 itl(F,FN,E,C0,C1), negate(CN,NCN),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
49 and(TN,CN,N1),and(FN,NCN,N2), or(N1,N2,N).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
50
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
51 itl(P,FF,_,C,C1) :- atomic(P),!, local(FF,P,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
52 local(true,P,C,C1):- true(C,P,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
53 true([],P,C,[P|C]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
54 true([P|_],P,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
55 true([not(P)|_],P,_,_):-!,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
56 true([_|T],P,C,C1):-true(T,P,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
57 local(false,P,C,C1):- false(C,P,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
58 false([],P,C,[not(P)|C]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
59 false([P|_],P,_,_):-!,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
60 false([not(P)|_],P,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
61 false([_|T],P,C,C1):-false(T,P,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
62 itl(@(P),P,more,C,C). % strong next
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
63 itl(@(_),false,E,C,C):-!,E=empty.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
64
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
65 % Regular Variable
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
66 itl(^(R),F,empty,C,C1):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
67 local(F0,up(R),C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
68 local(F1,down(R,0),C0,C1),and(F0,F1,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
69 itl(^(R),F1,E,C,C1):-!, E=more,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
70 local(F,up(R),C,C1),and(F,^(R,0),F1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
71
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
72 itl(^(_R,S),false,_,C,C):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
73 regular_limit(X),S>X,!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
74 itl(^(R,S),F,empty,C,C1):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
75 local(F,down(R,S),C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
76 itl(^(R,S),^(R,S1),E,C,C):-!, E=more, S1 is S+1.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
77
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
78 % Quantifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
79 itl(exists(P,Q),F,E,C,C0) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
80 itl(Q,QT,E,[P|C],C1),itl_ex(QT,Q,E,P,F,C1,C0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
81 itl_ex(true,_,_,P,true,C,C1):-!,remove_p(C,P,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
82 itl_ex(false,Q,E,P,F,C,C0):- !,remove_p(C,P,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
83 itl(Q,QF,E,[not(P)|C1],C2),remove_p(C2,P,C0), exists(QF,P,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
84 itl_ex(QT,Q,E,P,F,C,C0):- remove_p(C,P,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
85 itl(Q,QF,E,[not(P)|C1],C2), remove_p(C2,P,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
86 or(QT,QF,TF),exists(TF,P,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
87 % constant order optimzation for quantifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
88 exists(P,P,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
89 exists(P,_,P):-atomic(P),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
90 exists(Q,P,exists(P,Q)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
91 remove_p([],_,[]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
92 remove_p([not(P)|T],P,T):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
93 remove_p([P|T],P,T):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
94 remove_p([H|T],P,[H|T1]):-!,remove_p(T,P,T1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
95 itl(*(P),F,empty,C,C1):-!,itl(P,F,empty,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
96 itl(*(P),F,E,C,C1):-!,E=more,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
97 itl(P,PX,more,C,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
98 closure(PX,P,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
99 closure(false,_,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
100 closure(PX,P,(PX & *(P))). %% infinite clousre (strong)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
101 %% closure(PX,P,(PX & (*(P);empty))). %% finite closure (weak)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
102 %% external state diagram (determinization)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
103 itl(st(N),F,E,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
104 setof((Cond=>X),st(N,Cond,X),L),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
105 itl_transition(L,F,E,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
106 itl_transition([],false,_,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
107 itl_transition([(Cond=>true)|T],F,E,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
108 itl((Cond),F0,E,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
109 itl_transition(T,F1,E,C0,C1),or(F0,F1,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
110 itl_transition([(Cond=>empty)|T],F,E,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
111 itl((empty,Cond),F0,E,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
112 itl_transition(T,F1,E,C0,C1),or(F0,F1,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
113 itl_transition([(Cond=>X)|T],F,E,C,C1):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
114 itl((more,Cond),F0,E,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
115 itl_transition1(F0,X,T,F,E,C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
116 itl_transition1(false,_,T,F,E,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
117 itl_transition(T,F,E,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
118 itl_transition1(true,X,T,F1,E,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
119 itl_transition(T,F,E,C,C1),or(F,st(X),F1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
120 %% ignore last state to check non stop predicate
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
121 itl(free_fin(_),F,empty,C,C):-!,F=true.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
122 itl(free_fin(L),F1,more,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
123 itl(L,F,more,C,C1),free_fin(F,F1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
124 free_fin(true,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
125 free_fin(false,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
126 free_fin(X,free_fin(X)):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
127 %%
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
128 itl((P,Q),N,E,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
129 itl(P,PN,E,C,C0),itland(PN,Q,N,E,C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
130 itland(false,_,false,_,C0,C0):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
131 itland(true,Q,QN,E,C0,C1):-!,itl(Q,QN,E,C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
132 itland(PN,Q,N,E,C0,C1):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
133 itl(Q,QN,E,C0,C1),and(PN,QN,N). %% and/3 in chop.pl
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
134 itl((P;Q),N,E,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
135 itl(P,PN,E,C,C0),itlor(PN,Q,N,E,C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
136 itlor(true,_,true,_,C0,C0):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
137 itlor(false,Q,QN,E,C0,C1):-!,itl(Q,QN,E,C0,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
138 itlor(PN,Q,N,E,C0,C1):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
139 itl(Q,QN,E,C0,C1),or(PN,QN,N). %% or/3 in chop.pl
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
140 itl(not(P),NN,E,X,X1) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
141 itl(P,N,E,X,X1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
142 negate(N,NN). %% negate/2 in chop.pl
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
143 % F = empty?(P,Q):(empty(P)*more(Q)+more(PM)&Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
144 itl((P&Q),F,empty,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
145 itl((P,Q),F,empty,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
146 itl((P&Q),F,more,C,C2) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
147 itl(P,PE,empty,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
148 C0 = C0R,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
149 itl(P,PM,more,C0R,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
150 chop(PM,PE,F,Q,C1,C2).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
151
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
152 chop(false,false,false,_,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
153 chop(PM,false,(PM & Q),Q,C,C):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
154 chop(PM,true,F,Q,C,C1):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
155 itl(Q,QF,more,C,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
156 chop1(PM,QF,Q,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
157 chop(PM,PE,F,Q,C,C):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
158 write('next empty conflict:'),write((PM,PE,F,Q,C)),nl,!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
159 fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
160
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
161 chop1(false,QF,_,QF):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
162 chop1(false,false,_,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
163 chop1(PM,false,Q,(PM&Q)):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
164 chop1(_,true,_,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
165 chop1(PM,QF,Q,(QF;(PM&Q))):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
166
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
167 itl(proj(_,Q),F,empty,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
168 itl(Q,F,empty,C,C1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
169 itl(proj(P,Q),F,more,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
170 itl(P,PM,more,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
171 itl(Q,QM,more,C0,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
172 prj(PM,QM,P,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
173 prj(false,_,_,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
174 prj(_,false,_,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
175 prj(PM,QM,P,(PM&proj(P,QM))).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
176
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
177 itl(prefix(P),F,empty,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
178 itl(P,PE,empty,C,C0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
179 itl(P,PM,more,C0,C1), % this must be satistifiable
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
180 prefix(PM,PE,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
181 itl(prefix(P),F,more,C,C1) :-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
182 itl(P,PM,more,C,C1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
183 prefix(PM,F).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
184
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
185 prefix(true,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
186 prefix(false,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
187 prefix(PM,prefix(PM)):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
188
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
189 prefix(true,_,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
190 prefix(_,true,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
191 prefix(false,false,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
192 prefix(_,false,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
193
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
194 itl(Def,_,_,_,_) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
195 write('error: '),write(Def),nl,!,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
196
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
197 itl_statistics :- nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
198 itl_state_number(X),write(X),write(' states'),nl,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
199 itl_statistics :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
200 sbn(X),write(X),write(' subterms'),nl,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
201 itl_statistics :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
202 init_var(tmp,0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
203 ((links(_,_),inc_var(tmp,_),fail);true),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
204 tmp(N),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
205 % init_var(tmp,0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
206 % ((state(_,_,_),inc_var(tmp,_),fail);true),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
207 % recorded(tmp,L,_),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
208 itl_transition(L),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
209 write(N),put(47), % "/"
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
210 write(L),write(' state transitions'),nl,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
211 itl_statistics.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
212
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
213
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
214 :-assert(verbose).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
215 verbose(off) :- retract(verbose),fail;true.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
216 verbose(on) :- asserta(verbose).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
217
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
218 deve(ITL) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
219 init,!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
220 expand(ITL,ITL0), % chop standard form
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
221 itlstd(ITL0,StdNOW), % BDT
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
222 assert(itl_state(StdNOW,1)),!, % Initial State
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
223 deve0((1,ITL0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
224
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
225 deve0((S,ITL)) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
226 % increment_state(ITL,ITL_1,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
227 show_state(S,ITL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
228 % setof(Next,itldecomp(ITL,Next,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
229 bagof(Next,itldecomp(ITL,Next,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
230 Nexts),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
231 deve1(Nexts).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
232 deve0(_).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
233
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
234 deve1([]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
235 deve1([H|T]) :- deve0(H),deve1(T).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
236
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
237 itldecomp(ITL,(NextS,Next),From) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
238 init_var(current,From),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
239 itl(ITL,Next,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
240 %% showing
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
241 itlshow(Next,NextS,Cond,From).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
242
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
243 itlshow(Next,S,Cond,From):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
244 itlstd(Next,StdNext),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
245 check_state(StdNext,Cond,New,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
246 inc_var(itl_transition,_),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
247 assertz(state(From,Cond,S)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
248 (links(S,From),!;assertz(links(S,From))),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
249 !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
250 itlshow0(S,Cond,Next,New).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
251
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
252 itlshow0(S,Cond,Next,New) :- verbose,!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
253 itlshow1(S,Cond,Next,New),nl,!,New=1.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
254 itlshow0(0,_,_,0):- !,put(101),!,fail. % "e"
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
255 itlshow0(false,_,_,0):- !,put(102),!,fail. % "f"
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
256 itlshow0(true,_,_,0):- !,put(116),!,fail. % "t"
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
257 itlshow0(_,_,_,0):- !,put(46),!,fail. % "."
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
258 itlshow0(S,_,_,1):- !,write(S),put(46),ttyflush,!. % "."
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
259
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
260 itlshow1(0,Cond,_,_):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
261 write(Cond),write('->'),write(empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
262 itlshow1(true,Cond,_,_):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
263 write(Cond),write('->'),write(true).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
264 itlshow1(false,Cond,_,_):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
265 write(Cond),write('->'),write(false).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
266 itlshow1(S,Cond,_,0):-!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
267 write(Cond),write('->'),write(S).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
268 itlshow1(S,Cond,Org,1):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
269 write(Cond),write('->'),write(S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
270 put(9),write(Org),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
271
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
272 init :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
273 subterm_init,
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 2
diff changeset
274 r_abolish(state,3),
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
275 asserta(state(true,[more],true)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
276 asserta(state(true,[empty],0)),
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 2
diff changeset
277 r_abolish(itl_state,2),
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 2
diff changeset
278 r_abolish(stay,3),asserta(stay(0,0,0)),
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
279 asserta(itl_state(false,false)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
280 asserta(itl_state(empty,0)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
281 asserta(itl_state(true,true)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
282 init_var(regular_limit,5),
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 2
diff changeset
283 r_abolish(links,2),asserta(links(true,true)),
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
284 init_var(current,0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
285 init_var(itl_transition,1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
286 init_var(itl_state_number,1),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
287
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
288 show_state(S,ITL) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
289 nl,write('state('),write(S), % (
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
290 (verbose,write(' , '), write(ITL),write(')'),nl;write(')')),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
291
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
292 check_state(true,[more |_],0,true):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
293 check_state(true,[empty|_],0,0):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
294 check_state(false,_,0,false):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
295 check_state(STD,_,0,S):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
296 itl_state(STD,S),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
297 check_state(STD,_,1,S):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
298 inc_var(itl_state_number,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
299 assert(itl_state(STD,S)),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
300
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
301 init_var(X,_) :- functor(F,X,1),assert(F),fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
302 init_var(X,_) :- functor(F,X,1),retract(F),fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
303 init_var(X,V) :- functor(F,X,1),arg(1,F,V),assert(F),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
304 inc_var(Name,X1) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
305 functor(F,Name,1),retract(F),arg(1,F,X),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
306 X1 is X+1,functor(F1,Name,1),arg(1,F1,X1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
307 asserta(F1),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
308 set_var(Name,X,X1) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
309 functor(F,Name,1),retract(F),!,arg(1,F,X),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
310 functor(F1,Name,1),arg(1,F1,X1),asserta(F1),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
311 set_var(Name,X,_) :- init_var(Name,X).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
312
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
313 increment_state(stay(P,now),stay(P,S),S) :- !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
314 (stay(P,F,S);assertz(stay(P,F,S))),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
315 increment_state(N,N,_) :- atomic(N),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
316 increment_state(P,R,S) :- functor(P,H,N),functor(R,H,N),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
317 increment_state_arg(N,P,R,S).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
318 increment_state_arg(0,_P,_R,_):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
319 increment_state_arg(N,P,R,S):-arg(N,P,PA),arg(N,R,RA),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
320 N1 is N-1,increment_state(PA,RA,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
321 increment_state_arg(N1,P,R,S).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
322
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
323 %% end %%