comparison dvcomp.pl @ 1:683efd6f9a81

*** empty log message ***
author kono
date Sun, 22 Mar 1998 12:22:28 +0900
parents b35e4dc6ec23
children e1d3145cff7a
comparison
equal deleted inserted replaced
0:b35e4dc6ec23 1:683efd6f9a81
10 $Id$ 10 $Id$
11 */ 11 */
12 12
13 % itl decomposition for DST 13 % itl decomposition for DST
14 14
15 :- dynamic regular_limit/1. 15 :- dynamic length_limit/1,renaming/0.
16
16 % requires [chop] 17 % requires [chop]
17 % itl(Predicate,Next,Empty,ConditionLists) 18 % itl(Predicate,Next,Empty,ConditionLists)
18 19
19 itl(P) :- expand(P,P0), 20 itl(P) :- expand(P,P0),
20 moref(Ev),itl(P0,Next,Ev,[],C), 21 moref(Ev),itl(P0,Next,Ev,[],C),
29 30
30 itl(N,F,E,C,C1):-number(N),!, 31 itl(N,F,E,C,C1):-number(N),!,
31 sb(Subterm,N),!,itl(Subterm,F,E,C,C1). 32 sb(Subterm,N),!,itl(Subterm,F,E,C,C1).
32 itl(true,true,_,C,C):-!. 33 itl(true,true,_,C,C):-!.
33 itl(false,false,_,C,C):-!. 34 itl(false,false,_,C,C):-!.
35 itl(true_false,true_false,more,C,C):-!.
36 itl(true_false,true,empty,C,[choice(true)|C]).
37 itl(true_false,false,E,C,[choice(false)|C]):-!,E=empty.
34 itl(more,false,empty,C,C). 38 itl(more,false,empty,C,C).
35 itl(more,true,E,C,C):-!,E = more. 39 itl(more,true,E,C,C):-!,E = more.
36 % next two rule determines descrete time 40 % next two rule determines descrete time
37 itl(empty,true,empty,C,C). 41 itl(empty,true,empty,C,C).
38 itl(empty,false,E,C,C):-!,E = more. % no succeeding more interval 42 itl(empty,false,E,C,C):-!,E = more. % no succeeding more interval
58 itl(F,N,E,C,C1). 62 itl(F,N,E,C,C1).
59 itl_cond(CN,T,F,N,E,C,C1) :-!, 63 itl_cond(CN,T,F,N,E,C,C1) :-!,
60 itl(T,TN,E,C,C0), 64 itl(T,TN,E,C,C0),
61 itl(F,FN,E,C0,C1), negate(CN,NCN), 65 itl(F,FN,E,C0,C1), negate(CN,NCN),
62 and(TN,CN,N1),and(FN,NCN,N2), or(N1,N2,N). 66 and(TN,CN,N1),and(FN,NCN,N2), or(N1,N2,N).
67 % Non deterministic selection (singleton 2nd order variable)
68 itl([],true,_,C,C):-!.
69 itl([H|L],F,empty,C,C1):-!,
70 empty_choice([H|L],0,F,C,C1).
71 empty_choice([H|_],N,F,C,[choice(N)|C1]) :-
72 itl(H,F,empty,C,C1).
73 empty_choice([_|L],N,F,C,C1) :-
74 N1 is N+1,
75 empty_choice(L,N1,F,C,C1).
76 itl([H|L],F,E,C,C1):-!,E=more,
77 choice([H|L],F,C,C1).
78 choice([],[],C,C) :-!.
79 choice([H|L],[H1|L1],C,C2) :-
80 itl(H,H1,more,C,C1),
81 choice(L,L1,C1,C2).
63 % Regular Variable 82 % Regular Variable
64 itl(^(R),F,empty,C,C1):- 83 itl(^(R),F,empty,C,C1):-
65 local(F0,up(R),C,C0), 84 local(F,^(R,0),C,C1).
66 local(F1,down(R,0),C0,C1),and(F0,F1,F). 85 itl(^(R),^(R,1),E,C,C):-!, E=more.
67 itl(^(R),F1,E,C,[^(R,0)|C1]):-!, E=more,
68 local(F,up(R),C,C1),and(F,^(R,0),F1).
69 86
70 itl(^(R,S),F,empty,C,C1):- 87 itl(^(R,S),F,empty,C,C1):-
71 local(F,down(R,S),C,C1). 88 local(F,^(R,S),C,C1).
72 itl(^(R,S),F,E,C,C1):- E = more, 89 %itl(^(R,S),F,E,C,C1):- E = more,
73 regular_limit(X),S>=X,!, 90 % length_limit(X),S>=X,inc_var(over,_),!,
74 local(F,over(R,S),C,C1). 91 % S1 is S+1,local(F,over(R,S1),C,C1).
75 itl(^(R,S),^(R,S1),E,C,[^(R,S1)|C]):-!, 92 itl(^(R,S),^(R,S1),E,C,C):-!,
76 % increment regular variable rength 93 % increment regular variable length
77 % mark reference to detect singleton
78 E=more, S1 is S+1. 94 E=more, S1 is S+1.
79 95
80 % Quantifier 96 % Quantifier
81 itl(exists(P,Q),F,E,C,C0) :-!, 97 itl(exists(P,Q),F,E,C,C0) :-!,
82 itl(Q,QT,E,[P|C],C1),itl_ex(QT,Q,E,P,F,C1,C0). 98 itl(Q,QT,E,[P|C],C1),itl_ex(QT,Q,E,P,F,C1,C0).
167 write('next empty conflict:'),write((PM,PE,F,Q,C)),nl,!, 183 write('next empty conflict:'),write((PM,PE,F,Q,C)),nl,!,
168 fail. 184 fail.
169 185
170 chop1(false,QF,_,QF):-!. 186 chop1(false,QF,_,QF):-!.
171 chop1(false,false,_,false):-!. 187 chop1(false,false,_,false):-!.
188 chop1(true,false,true,true):-!.
189 chop1(true,_,true,true):-!.
172 chop1(PM,false,Q,(PM&Q)):-!. 190 chop1(PM,false,Q,(PM&Q)):-!.
173 chop1(_,true,_,true):-!. 191 chop1(_,true,_,true):-!.
174 chop1(PM,QF,Q,(QF;(PM&Q))):-!. 192 chop1(PM,QF,Q,(QF;(PM&Q))):-!.
175 193
176 itl(proj(_,Q),F,empty,C,C1) :-!, 194 itl(proj(_,Q),F,empty,C,C1) :-!,
181 prj(PM,QM,P,F). 199 prj(PM,QM,P,F).
182 prj(false,_,_,false):-!. 200 prj(false,_,_,false):-!.
183 prj(_,false,_,false):-!. 201 prj(_,false,_,false):-!.
184 prj(PM,QM,P,(PM&proj(P,QM))). 202 prj(PM,QM,P,(PM&proj(P,QM))).
185 203
204 % prefix is not consistently defined
205 % prefix(fin(false)) = true ? funny...
186 itl(prefix(P),F,empty,C,C1) :-!, 206 itl(prefix(P),F,empty,C,C1) :-!,
187 itl(P,PE,empty,C,C0), 207 itl(P,PE,empty,C,C0),
188 itl(P,PM,more,C0,C1), 208 itl(P,PM,more,C0,C1),
189 prefix(PM,PE,F). 209 prefix(PM,PE,F).
190 itl(prefix(P),F,more,C,C1) :-!, 210 itl(prefix(P),F,more,C,C1) :-!,
201 prefix(_,false,true):-!. 221 prefix(_,false,true):-!.
202 222
203 itl(Def,_,_,_,_) :- 223 itl(Def,_,_,_,_) :-
204 write('error: '),write(Def),nl,!,fail. 224 write('error: '),write(Def),nl,!,fail.
205 225
206 % detect regular variable singleton
207 % we can do renumbering here
208 % what do we do for permutation?
209
210 itl_singleton([empty|L],[empty|L],[]) :- !.
211 itl_singleton(Cond,Cond1,Singleton) :- singleton,!,
212 select_singleton(Cond,Cond0,V),
213 split_singleton_case(V,Cond0,Cond1,Singleton).
214 itl_singleton(Cond,Cond1,[]) :-
215 select_singleton(Cond,Cond1,_).
216
217 select_singleton([],[],[]):-!.
218 select_singleton([^(R,S)|L],L1,V):-!,
219 check_singleton(L,^(R,S),L0,single,F),
220 (F==single -> V = [^(R,S)|V0],select_singleton(L0,L1,V0)
221 ; select_singleton(L0,L1,V)).
222 select_singleton([H|L],[H|L1],V):-!,
223 select_singleton(L,L1,V).
224
225 check_singleton([],_,[],F,F):-!.
226 check_singleton([H|T],H,T1,_,multi):-!,
227 check_singleton(T,H,T1,_,_).
228 check_singleton([H|T],H1,[H|T1],F,F1):-!,
229 check_singleton(T,H1,T1,F,F1).
230
231 % choose singleton's truth value
232 % split_singleton_case(_,Cond,Cond,[]) :- !.
233 split_singleton_case([],Cond,Cond,[]).
234 split_singleton_case([^(R,S)|T],Cond,Cond1,[(^(R,S),true)|T1]):-
235 split_singleton_case(T,[ev(^(R,S))|Cond],Cond1,T1).
236 split_singleton_case([^(R,S)|T],Cond,Cond1,[(^(R,S),false)|T1]):-
237 split_singleton_case(T,[not(ev(^(R,S)))|Cond],Cond1,T1).
238 226
239 % develop Local ITL formula into state diagram 227 % develop Local ITL formula into state diagram
240 % 228 %
241 % Mon May 20 17:24:23 BST 1991 229 % Mon May 20 17:24:23 BST 1991
242 % require([chop]). 230 % require([chop]).
243 231
244 :-dynamic verbose/0,state/2,links/2. 232 :-dynamic verbose/0,state/2,links/2.
245 :-dynamic stay/3,lazy/0,singleton/0. 233 :-dynamic stay/3,lazy/0,singleton/0,detailed/0.
246 234
247 :-assert(verbose).
248 verbose(off) :- retract(verbose),fail;true. 235 verbose(off) :- retract(verbose),fail;true.
249 verbose(on) :- asserta(verbose). 236 verbose(on) :- asserta(verbose).
237 :-verbose(on).
250 238
251 lazy(off) :- retract(lazy),fail;true. 239 lazy(off) :- retract(lazy),fail;true.
252 lazy(on) :- asserta(lazy). 240 lazy(on) :- asserta(lazy).
253 241
242 :-lazy(on).
243
254 singleton(off) :- retract(singleton),fail;true. 244 singleton(off) :- retract(singleton),fail;true.
255 singleton(on) :- asserta(singleton). 245 singleton(on) :- asserta(singleton).
246 :-singleton(on).
247
248 renaming(off) :- retract(renaming),fail;true.
249 renaming(on) :- asserta(renaming).
250 :-renaming(on).
251
252 detail(off) :- retract(detailed),fail;true.
253 detail(on) :- asserta(detailed).
254 % :-detail(on).
256 255
257 set_limit(X) :- 256 set_limit(X) :-
258 set_var(regular_limit,X,_). 257 set_var(length_limit,X,_).
258 no_limit :-
259 retract(length_limit),fail.
260 no_limit.
261
262 :-assert(length_limit(5)).
259 263
260 deve(ITL) :- 264 deve(ITL) :-
261 init,!, 265 init,!,
262 expand(ITL,ITL0), % chop standard form 266 expand(ITL,ITL0), % chop standard form
263 itlstd(ITL0,StdNOW), % BDT 267 itlstd(ITL0,StdNOW,_), % BDT
264 assert(itl_state(StdNOW,1)),!, % Initial State 268 assert(itl_state(StdNOW,1)),!, % Initial State
265 deve0((1,StdNOW)). 269 deve0((1,StdNOW)).
266 270
267 deve0((S,ITL)) :- 271 deve0((S,ITL)) :-
268 show_state(S,ITL), 272 show_state(S,ITL),
275 deve1([H|T]) :- deve0(H),deve1(T). 279 deve1([H|T]) :- deve0(H),deve1(T).
276 280
277 itldecomp(ITL,(NextS,StdNext),From) :- 281 itldecomp(ITL,(NextS,StdNext),From) :-
278 init_var(current,From), 282 init_var(current,From),
279 itl(ITL,Next,Cond), 283 itl(ITL,Next,Cond),
280 itl_singleton(Cond,Cond1,Singleton),
281 %% showing 284 %% showing
282 itlshow(Next,NextS,Cond1,From,StdNext,Singleton). 285 itlshow(Next,NextS,Cond,From,StdNext).
283 286
284 itlshow(Next,S,Cond,From,StdNext,Singleton):- 287 itlshow(Next,S,Cond,From,StdNext):-
285 itlstd(Next,StdNext,Singleton), 288 itlstd(Next,StdNext,Rename),
286
287 itlstd(Next,StdNext1,[]),
288 bdt2itl(StdNext,ItlNext),
289 bdt2itl(StdNext1,ItlNext1),
290 (ItlNext \== ItlNext1 -> write('>>'),
291 write(ItlNext),nl,write(' '),
292 write(ItlNext1),nl; true),
293
294 check_state(StdNext,Cond,New,S), 289 check_state(StdNext,Cond,New,S),
295 (lazy,!;assertz(state(From,Cond,S))), 290 (verbose,!,write(Rename);true),
296 (links(S,From),!;assertz(links(S,From))), 291 (links(S,From),!;
292 assertz(links(S,From)),inc_var(itl_transition_count,_)),
293 inc_var(itl_transition,_),
297 itlshow0(S,Cond,StdNext,New), 294 itlshow0(S,Cond,StdNext,New),
298 !. 295 !.
299 296
300 itlshow0(S,Cond,Next,New) :- verbose,!, 297 itlshow0(S,Cond,Next,New) :- verbose,!,
301 itlshow1(S,Cond,Next,New),nl,!,New=1. 298 itlshow1(S,Cond,Next,New),nl,!,New=1.
314 write(Cond),write('->'),write(S). 311 write(Cond),write('->'),write(S).
315 itlshow1(S,Cond,Org,1):- 312 itlshow1(S,Cond,Org,1):-
316 write(Cond),write('->'),write(S), 313 write(Cond),write('->'),write(S),
317 put(9),bdt2itl(Org,Org0),write(Org0),!. 314 put(9),bdt2itl(Org,Org0),write(Org0),!.
318 315
319 lazy_state(From,Cond,S) :- 316 % lazy transition condition generator
320 links(S,From), 317
318 state(From,Cond,Next) :-
319 links(Next,From),
321 itl_state(ITL,From), 320 itl_state(ITL,From),
322 itl(ITL,Next,Cond), 321 itl(ITL,Next0,Cond),
323 itlstd(Next,StdNext), 322 itlstd(Next0,StdNext,_),
324 check_state(StdNext,Cond,_,S). 323 check_state(StdNext,Cond,_,Next1), % Next1 has not to be instantiated
324 Next1=Next.
325
326 % detailed state transition including 2var renamings
327
328 state(From,Cond,Next,FromFull,NextFull,Rename,Rename1) :-
329 links(Next,From),
330 itl(FromFull,PNext,Cond),
331 itlstd(PNext,StdNext,NextFull,Rename,Rename1),
332 check_state(StdNext,Cond,_,Next1), % S1 has not to be instantiated
333 Next = Next1.
325 334
326 init :- 335 init :-
327 subterm_init, 336 subterm_init,
328 abolish(state,3),
329 asserta((state(true,[more],true):-!)),
330 asserta((state(true,[empty],0):-!)),
331 (lazy,assertz((state(A,B,C) :- lazy_state(A,B,C))),!;true),
332 abolish(itl_state,2), 337 abolish(itl_state,2),
333 abolish(stay,3),asserta(stay(0,0,0)), 338 abolish(stay,3),asserta(stay(0,0,0)),
334 asserta(itl_state(false,false)), 339 asserta(itl_state(false,false)),
335 asserta(itl_state(empty,0)), 340 asserta(itl_state(empty,0)),
336 asserta(itl_state(true,true)), 341 asserta(itl_state(true,true)),
337 abolish(links,2),asserta(links(true,true)), 342 abolish(links,2),asserta(links(true,true)),
338 init_var(current,0), 343 init_var(current,0),
339 init_var(regular_limit,5), 344 init_var(over,0),
345 init_var(itl_transition,0),
346 init_var(itl_transition_count,0),
340 init_var(itl_state_number,1),!. 347 init_var(itl_state_number,1),!.
341 348
342 show_state(S,ITL) :- 349 show_state(S,ITL) :-
343 bdt2itl(ITL,ITL0), 350 bdt2itl(ITL,ITL0),
344 nl,write('state('),write(S), % ( 351 nl,write('state('),write(S), % (
351 itl_state(STD,S),!. 358 itl_state(STD,S),!.
352 check_state(STD,_,1,S):- 359 check_state(STD,_,1,S):-
353 inc_var(itl_state_number,S), 360 inc_var(itl_state_number,S),
354 assert(itl_state(STD,S)),!. 361 assert(itl_state(STD,S)),!.
355 362
356 init_var(X,_) :- functor(F,X,1),assert(F),fail. 363 init_var(X,V) :- abolish(X,1),functor(F,X,1),arg(1,F,V),assert(F),!.
357 init_var(X,_) :- functor(F,X,1),retract(F),fail.
358 init_var(X,V) :- functor(F,X,1),arg(1,F,V),assert(F),!.
359 inc_var(Name,X1) :- 364 inc_var(Name,X1) :-
360 functor(F,Name,1),retract(F),arg(1,F,X), 365 functor(F,Name,1),retract(F),arg(1,F,X),
361 X1 is X+1,functor(F1,Name,1),arg(1,F1,X1), 366 X1 is X+1,functor(F1,Name,1),arg(1,F1,X1),
362 asserta(F1),!. 367 asserta(F1),!.
363 set_var(Name,X,X1) :- 368 set_var(Name,X,X1) :-
364 functor(F,Name,1),retract(F),!,arg(1,F,X), 369 functor(F,Name,1),retract(F),!,arg(1,F,X),
365 functor(F1,Name,1),arg(1,F1,X1),asserta(F1),!. 370 functor(F1,Name,1),arg(1,F1,X1),asserta(F1),!.
366 set_var(Name,X,_) :- init_var(Name,X). 371 set_var(Name,X,_) :- init_var(Name,X).
367 372
368 %init_var(X,_) :- recorded(X,_,Ref),erase(Ref),fail.
369 %init_var(X,V) :- recorda(X,V,_).
370 %inc_var(Name,X1) :-
371 % recorded(Name,X,Ref),X1 is X+1,
372 % erase(Ref),recorda(Name,X1,_).
373 %set_var(Name,X,X1) :-
374 % recorded(Name,X1,_),!,init_var(Name,X).
375 %set_var(Name,X,_) :- init_var(Name,X).
376 373
377 itl_statistics :- nl, 374 itl_statistics :- nl,
378 itl_state_number(X),write(X),write(' states'),nl,fail. 375 itl_state_number(X),write(X),write(' states'),nl,fail.
379 itl_statistics :- 376 itl_statistics :-
380 sbn(X),write(X),write(' subterms'),nl,fail. 377 sbn(X),write(X),write(' subterms'),nl,fail.
381 itl_statistics :- 378 itl_statistics :-
382 init_var(tmp,0), 379 itl_transition_count(X),
383 ((links(_,_),inc_var(tmp,_),fail);true), 380 write(X),write(' state transions'),nl,fail.
384 tmp(N), 381 itl_statistics :-
385 write(N),write(' state transions'),nl,fail. 382 over(X),X=\=0,write(X),write(' interval overflows'),nl,fail.
383 itl_statistics :-
384 verbose,write('verbose,'),fail.
385 itl_statistics :-
386 renaming,write('renaming,'),fail.
387 itl_statistics :-
388 singleton,write('singleton,'),fail.
389 itl_statistics :-
390 detailed,write('detailed,'),fail.
391 itl_statistics :-
392 length_limit(X),X=\=0,write('length limit '),write(X),nl,fail.
386 itl_statistics. 393 itl_statistics.
387 394
388 %% end %% 395 %% end %%