annotate diag.pl @ 9:95897517e464

some how infinite.pl works first.
author kono
date Fri, 19 Jan 2001 20:37:32 +0900
parents 1c57a78f1d98
children f2aa38ce0787
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
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
10 $Id$
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
11 */
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
12
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
13 % develop Local ITL formula into state diagram
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
14 %
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
15 % Mon May 20 17:24:23 BST 1991
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
16 % require([chop]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
17
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
18 ex :- ex1(_).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
19
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
20 ex(N) :- number(N),!,ex1(N).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
21 ex(demo(N)) :- number(N),!,ex1(N).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
22 ex(X) :- verbose,!,time(deve(X)),itl_statistics,diag,!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
23 ex(X) :- time(deve(X)),itl_statistics.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
24
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
25 ex1(N) :- ex(N,P),nl,write(P),write('.'),nl,ex(P),fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
26 ex1(_) :- told.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
27
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
28 exex :- verbose(off),tell(ex),(
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
29 ex(_,P),nl,write(P),write('.'),nl,ex(P),itl_statistics,fail;
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
30 told
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
31 ).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
32
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
33 % cputime(X):-statistics(runtime,[X1,_]),!,X is X1/1000.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
34 % cputime(X):-X is cputime. % for cprolog
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
35 time(X):- r_cputime(T0),call(X),r_cputime(T1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
36 T is T1-T0,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
37 nl,write(T),write(' sec.').
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
38
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
39 state :- listing(state/3),lising(state/4).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
40
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
41 % diagnosis
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
42 diag :- diag(X),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
43 (X = counter_example(_), write('counter example:'),nl; true),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
44 write_diag(X).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
45
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
46 diag(X) :- number(X), % at most X length solution
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
47 links(false,_), % search false
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
48 diag_l(false,[],H,X),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
49 make_hist(H,Hist),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
50 write_diag(counter_example(Hist)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
51 diag(valid) :- \+(links(false,_)),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
52 diag(counter_example(Hist)) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
53 diag_l(false,[],H,0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
54 make_hist(H,Hist).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
55
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
56 % execution exapmle.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
57 exe :- exe(Z),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
58 (Z=unsatisfiable, nl,write('unsatisfiable'),nl,!,fail;
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
59 nl,write('execution:'),nl,write_diag(Z)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
60
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
61 exe(X) :- number(X), % at most X length solution
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
62 possible_root(R),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
63 diag_l(R,[],H,X),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
64 make_hist(H,Hist),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
65 write_diag(execution(Hist)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
66 exe(unsatisfiable) :- \+(possible_root(_)),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
67 exe(execution(Hist)) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
68 possible_root(R),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
69 diag_l(R,[],H,0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
70 make_hist(H,Hist).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
71
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
72 % possible root is non looping true or 0 node.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
73 possible_root(true) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
74 possible_root1(true).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
75 possible_root(0) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
76 possible_root1(0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
77
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
78 possible_root1(R) :- links(R,N),\+(N = true),!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
79
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
80 % Log order search
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
81
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
82 make_hist(S,C) :- detailed,!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
83 S = [P|L],itl_state(P1,P),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
84 make_hist1(L,P,P1,[],_,C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
85 make_hist(S,C) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
86 S = [P|L],
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
87 make_hist0(L,P,C).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
88
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
89 make_hist0([],_,[]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
90 make_hist0([D|L],S,[(D->Cond)|L1]):-!, % step by step
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
91 state(S,Cond,D),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
92 !, %
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
93 make_hist0(L,D,L1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
94
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
95 % trace 2variable renamings
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
96
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
97 make_hist1([],_,_,R,R,[]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
98 make_hist1([SN|L],S,P,R,R1,[(SN->Cond)|L1]):-!, % step by step
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
99 state(S,Cond,SN,P,P1,R,R0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
100 !,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
101 make_hist1(L,SN,P1,R0,R1,L1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
102
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
103
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
104 diag(Hist,P) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
105 diag_l(P,[],Hist,0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
106
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
107 % try to find interesting example
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
108 % reverse order back track
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
109 diag_ls(Ps,L,L1,D):-member(P,Ps),diag_l(P,L,L1,D).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
110
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
111 % one minimum solution
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
112 diag_l(1,L,[1|L],D):-!,D=<0. % Initial State? Enough depth?
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
113 diag_l(E,L,L1,D) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
114 setof(P,links(E,P),P1), % must be minimum first order
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
115 D1 is D-1,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
116 member(P0,P1),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
117 diag_l(P0,[E|L],L1,D1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
118
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
119
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
120 write_diag(counter_example(Hist)) :-!,write_ce(Hist,0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
121 write_diag(execution(Hist)) :-!,write_ce(Hist,0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
122 write_ce([],_):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
123 write_ce([(S->[E|L])|T],I) :- (E=more,L=L1;E=empty,L=L1;[E|L]=L1),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
124 write(I),write(:),write_cond(L1),put(9),write(S),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
125 J is I+1,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
126 write_ce(T,J).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
127 write_diag(R):-!,write(R),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
128
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
129 % condition print
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
130
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
131 write_cond(X) :- sortC(X,Y),write_cond1(Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
132 write_cond1([]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
133 write_cond1([H|T]):-!,write_cond1(H),write_cond1(T).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
134 write_cond1(not(P)):-!,put(45), % "-"
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
135 write(P).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
136 write_cond1(P):- !,put(43), % "+"
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
137 write(P).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
138
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
139 % bubble sort
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
140 sortC([],[]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
141 sortC([H|T],[Min|Y]):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
142 min(T,H,Min,Rest),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
143 sortC(Rest,Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
144
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
145 min([],X,X,[]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
146 min([H|T],X,Y,[H|S]) :- ord(H,X),!,min(T,X,Y,S).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
147 min([H|T],X,Y,[X|S]) :- min(T,H,Y,S).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
148
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
149 ord(not(X),not(Y)) :- !,X @> Y.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
150 ord(X,not(Y)) :- !,X @> Y.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
151 ord(not(X),Y) :- !,X @> Y.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
152 ord(X,Y) :- !,X @> Y.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
153
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
154 rev([],X,X).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
155 rev([H|T],X,Y) :- rev(T,[H|X],Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
156
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
157 member(H,[H|_]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
158 member(H,[_|T]):-member(H,T).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
159
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
160 not_member(_,[]):-!.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
161 not_member(H,[H|_]):-!,fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
162 not_member(H,[_|T]):-not_member(H,T).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
163
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
164 count(A) :- count(A,X),write(X),nl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
165 count(A, _) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
166 init_var(tmp, 0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
167 call(A),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
168 inc_var(tmp, _),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
169 fail.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
170 count(_, A) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
171 retract(tmp(A)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
172
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
173 user_help :- write('?-ex(2).'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
174 write('?-ex( [](p) -> <> p ).'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
175 write(' Verify numbered examples or ITL formula.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
176 write('?-diag.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
177 write(' shows a counter example.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
178 write('?-exe.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
179 write(' This shows an execution of ITL formula.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
180 write('?-diag(N) or ?-exe(N) '),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
181 write(' shows at least N length examples. '),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
182 write(' 1: +p-q means "at clock 1, p is true and q is false". '),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
183 write('?-verbose(off). '),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
184 write(' generates one character per state transition condition.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
185 write(' e empty / t true / f false'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
186 write(' 123. newly genrated state number'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
187 write(' . transition to a registerd state'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
188 write('?-verbose(on).'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
189 write(' show ITL formula for each state. (Can be Very large)'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
190 write('?-start, display.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
191 write(' starts X-Window Interface.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
192 write('?-ex. runs all examples in diag.pl. But it takes several hours.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
193 write(' Some of the examples are quite large.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
194 write('?-kiss.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
195 write(' generates KISS2 format for SIS.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
196 write('?-tgen.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
197 write(' generates Tokio language.'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
198 write('?-read_kiss(File,In,Out,Empty).'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
199 write(' reads KISS2 format. In and Out are list of variables in the order'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
200 write(' of the KISS2 file. '),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
201 write('?-read_kiss(File).'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
202 write(' => read_kiss(File,_,_,empty)'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
203 write('?-read_kiss(File,Empty).'),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
204 write(' => read_kiss(File,_,_,Empty) '),nl,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
205 true.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
206
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
207 /* end */