annotate infinite.pl @ 7:bd06de5e669a

*** empty log message ***
author kono
date Fri, 19 Jan 2001 17:21:47 +0900
parents 9b86eb10b61c
children b5ce553f92c6
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
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
13 A set of non-empty-exit looping states represents infinite
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) :-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
34 write('satisfiable in infinite interval: '),
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
35 write(L),nl.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
36
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
37 retract_all(X) :-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
38 retract(X),fail.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
39 retract_all(_).
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
40
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
41 infinite([S|L]) :-
7
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
42 setof(S,links(S,0),Depth),
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
43 member(S1,[0|Depth]),
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
44 more_only_loop(S1,L,[],[S1]),
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
45 assert(found_infinite).
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
46 infinite([]) :-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
47 found_infinite.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
48
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
49 more_only(S) :-
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
50 state(S,[empty|_],true),!,fail.
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
51 more_only(S) :- number(S).
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
52
7
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
53 more_only_loop(S,L,L1,Hist) :-
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
54 setof(N,links(N,S),Depth),
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
55 member(S1,Depth),
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
56 more_only_loop1(S1,L,L1,Hist).
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
57
7
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
58 more_only_loop1(S,L,L,Hist) :-
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
59 member(S,Hist),
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
60 !.
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
61 more_only_loop1(S,[N|L],L1,Hist) :-
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
62 more_only(N),
7
bd06de5e669a *** empty log message ***
kono
parents: 6
diff changeset
63 more_only_loop(N,S,L,L1,[S|Hist]).
6
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
64
9b86eb10b61c *** empty log message ***
kono
parents:
diff changeset
65 /* end */