annotate infinite.pl @ 16:4360c2030303

strange...
author kono
date Sun, 21 Jan 2001 00:51:10 +0900
parents 816425e04ea7
children 29cf617f49db
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
1 /*
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
2 Copyright (C) 2001, Shinji Kono, University of the Ryukyus
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
3
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
4 Everyone is permitted to copy and distribute verbatim copies
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
5 of this license, but changing it is not allowed. You can also
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
6 use this wording to make the terms for other programs.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
7
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
8 send your comments to kono@ie.u-ryukyu.ac.jp
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
9 $Header$
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
10
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
11 Infinite satisfiability/validity checker
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
12
15
816425e04ea7 fix true - omega interval satisfiability
kono
parents: 13
diff changeset
13 A set of `more' looping states represents infinite
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
14 interval in ITL. The loop can contains deterministic state
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
15 choice. This should correspond Rabin/Strreet Automaton
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
16 that is non-deterministic Buchi automaton.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
17
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
18 The algorith works in depth first way.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
19
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
20 */
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
21
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
22 :-dynamic found_infinite/0.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
23
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
24 infinite:-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
25 retract_all(found_infinite),
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
26 infinite(L),
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
27 write_infinite_seq(L).
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
28 infinite:-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
29 found_infinite,!.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
30 infinite:-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
31 write('unsatisfiable in infinite interval.'),nl.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
32
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
33 write_infinite_seq(L) :-
10
f2aa38ce0787 add state display.
kono
parents: 9
diff changeset
34 write('satisfiable in infinite interval:'),nl,
12
66d0522d46e8 *** empty log message ***
kono
parents: 11
diff changeset
35 write_infinite_seq1(L).
66d0522d46e8 *** empty log message ***
kono
parents: 11
diff changeset
36 write_infinite_seq1([L]) :-!, % odd case.
66d0522d46e8 *** empty log message ***
kono
parents: 11
diff changeset
37 make_hist([L,L],L1),
66d0522d46e8 *** empty log message ***
kono
parents: 11
diff changeset
38 write_ce(L1,0),nl.
66d0522d46e8 *** empty log message ***
kono
parents: 11
diff changeset
39 write_infinite_seq1(L) :-
16
4360c2030303 strange...
kono
parents: 15
diff changeset
40 insert_loop_mark(L,L1),
4360c2030303 strange...
kono
parents: 15
diff changeset
41 make_hist(L1,L2),
4360c2030303 strange...
kono
parents: 15
diff changeset
42 write_ce(L2,0),nl.
4360c2030303 strange...
kono
parents: 15
diff changeset
43
4360c2030303 strange...
kono
parents: 15
diff changeset
44 insert_loop_mark(L,L1) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
45 last(L,Last),
4360c2030303 strange...
kono
parents: 15
diff changeset
46 insert_loop_mark(L,Last,L1).
4360c2030303 strange...
kono
parents: 15
diff changeset
47
4360c2030303 strange...
kono
parents: 15
diff changeset
48 last([Last],Last) :-!.
4360c2030303 strange...
kono
parents: 15
diff changeset
49 last([_|T],Last) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
50 last(T,Last).
4360c2030303 strange...
kono
parents: 15
diff changeset
51
4360c2030303 strange...
kono
parents: 15
diff changeset
52 insert_loop_mark([Last|T],Last,[(*),Last|T]):-!.
4360c2030303 strange...
kono
parents: 15
diff changeset
53 insert_loop_mark([H|T],Last,[H|T1]):-
4360c2030303 strange...
kono
parents: 15
diff changeset
54 insert_loop_mark(T,Last,T1).
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
55
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
56 retract_all(X) :-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
57 retract(X),fail.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
58 retract_all(_).
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
59
9
95897517e464 some how infinite.pl works first.
kono
parents: 8
diff changeset
60 infinite(L) :-
11
30c6f64102fa *** empty log message ***
kono
parents: 10
diff changeset
61 % 1 seems like original ITL formula that is root.
15
816425e04ea7 fix true - omega interval satisfiability
kono
parents: 13
diff changeset
62 setof(S,links(S,1),Children),
16
4360c2030303 strange...
kono
parents: 15
diff changeset
63 more_node(1,Children,L,[],[1]).
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
64 infinite([]) :-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
65 found_infinite.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
66
16
4360c2030303 strange...
kono
parents: 15
diff changeset
67 infinite_node(S) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
68 state(S,[empty|_],true),!,fail.
4360c2030303 strange...
kono
parents: 15
diff changeset
69 infinite_node(S) :- number(S).
13
d2aa6137e9a9 *** empty log message ***
kono
parents: 12
diff changeset
70
16
4360c2030303 strange...
kono
parents: 15
diff changeset
71 %infinite_node(true) :- !.
4360c2030303 strange...
kono
parents: 15
diff changeset
72 %infinite_node(S) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
73 % number(S),
4360c2030303 strange...
kono
parents: 15
diff changeset
74 % state(S,[more|_],_).
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
75
16
4360c2030303 strange...
kono
parents: 15
diff changeset
76 more_node(S,[S1|Children],[S|L],L1,Hist) :-
11
30c6f64102fa *** empty log message ***
kono
parents: 10
diff changeset
77 % write('checking '),write(S),nl,
16
4360c2030303 strange...
kono
parents: 15
diff changeset
78 infinite_node(S),
10
f2aa38ce0787 add state display.
kono
parents: 9
diff changeset
79 % starting false loop
16
4360c2030303 strange...
kono
parents: 15
diff changeset
80 more_loop(S1,Children,L,L1,[S|Hist],[S]).
4360c2030303 strange...
kono
parents: 15
diff changeset
81 more_node(S,Children,L,L1,Hist) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
82 % goto one depth deeper
4360c2030303 strange...
kono
parents: 15
diff changeset
83 more_node1(Children,L,L1,[S|Hist]).
8
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
84
16
4360c2030303 strange...
kono
parents: 15
diff changeset
85 more_node1([H|_],L,L1,Hist) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
86 not_member(H,Hist),
15
816425e04ea7 fix true - omega interval satisfiability
kono
parents: 13
diff changeset
87 setof(S,links(S,H),Children),
16
4360c2030303 strange...
kono
parents: 15
diff changeset
88 more_node(H,Children,L,L1,Hist).
4360c2030303 strange...
kono
parents: 15
diff changeset
89 more_node1([_|T],L,L1,Hist) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
90 more_node1(T,L,L1,Hist).
8
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
91
16
4360c2030303 strange...
kono
parents: 15
diff changeset
92 more_loop(true,_,[true|L],L,_Hist,_Seq) :-
15
816425e04ea7 fix true - omega interval satisfiability
kono
parents: 13
diff changeset
93 assert(found_infinite).
16
4360c2030303 strange...
kono
parents: 15
diff changeset
94 more_loop(S,_,[S|L],L,_Hist,Seq) :-
9
95897517e464 some how infinite.pl works first.
kono
parents: 8
diff changeset
95 member(S,Seq),!,
95897517e464 some how infinite.pl works first.
kono
parents: 8
diff changeset
96 assert(found_infinite).
8
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
97 % we find the one
16
4360c2030303 strange...
kono
parents: 15
diff changeset
98 more_loop(S,_,L,L,Hist,_Seq) :-
8
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
99 member(S,Hist),!,
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
100 fail.
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
101 % end of this branch
16
4360c2030303 strange...
kono
parents: 15
diff changeset
102 more_loop(H,_,[H|L],L1,Hist,Seq) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
103 infinite_node(H),!,
8
b5ce553f92c6 *** empty log message ***
kono
parents: 7
diff changeset
104 % still in the false interval
15
816425e04ea7 fix true - omega interval satisfiability
kono
parents: 13
diff changeset
105 setof(S,links(S,H),Children),
16
4360c2030303 strange...
kono
parents: 15
diff changeset
106 more_loop1(Children,L,L1,[H|Hist],[H|Seq]).
4360c2030303 strange...
kono
parents: 15
diff changeset
107 more_loop(_,[S|T],L,L1,Hist,Seq) :-!,
4360c2030303 strange...
kono
parents: 15
diff changeset
108 % try another child
4360c2030303 strange...
kono
parents: 15
diff changeset
109 more_loop(S,T,L,L1,Hist,Seq).
4360c2030303 strange...
kono
parents: 15
diff changeset
110 % more_loop(H,[],L,L1,Hist,Seq) :-!,fail.
4360c2030303 strange...
kono
parents: 15
diff changeset
111 % empty case. fail and try another branch
4360c2030303 strange...
kono
parents: 15
diff changeset
112
4360c2030303 strange...
kono
parents: 15
diff changeset
113
4360c2030303 strange...
kono
parents: 15
diff changeset
114 more_loop1([H|_],L,L1,Hist,Seq) :-
15
816425e04ea7 fix true - omega interval satisfiability
kono
parents: 13
diff changeset
115 setof(S,links(S,H),Children),
16
4360c2030303 strange...
kono
parents: 15
diff changeset
116 more_loop(H,Children,L,L1,Hist,Seq).
4360c2030303 strange...
kono
parents: 15
diff changeset
117 more_loop1([_|T],L,L1,Hist,Seq) :-
4360c2030303 strange...
kono
parents: 15
diff changeset
118 more_loop1(T,L,L1,Hist,Seq).
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
119
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
120 /* end */