annotate rstd.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
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
1 %
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
2 /*
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
3 Copyright (C) 1991, Shinji Kono, Sony Computer Science Laboratory, Inc.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
4 The University, Newcastle upton Tyne
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
5
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
6 Everyone is permitted to copy and distribute verbatim copies
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
7 of this license, but changing it is not allowed. You can also
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
8 use this wording to make the terms for other programs.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
9
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
10 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
11 $Id: rstd.pl,v 1.4 2007/08/30 05:16:36 kono Exp $
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
12 */
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
13 % ITL subterm standarization with BDT
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
14 %
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
15 % Fri Jun 21 10:32:58 BST 1991
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
16 %
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
17 % :- dynamic renaming/0,count_limit/1.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
18
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
19 :- dynamic sb/2,sbn/1.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
20
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
21 subterm_init :-
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
22 r_abolish(sb,2),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
23 asserta((sb([],-1))),
20
07d6c4c5654b SICStus v4 (ISO prolog syntax)
kono
parents: 19
diff changeset
24 r_abolish(sbn,1),
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
25 asserta(sbn(0)).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
26
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
27 std_check([],I,?(I1,true,false)) :-!, % no regular variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
28 std_check(I,I1) .
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
29 std_check(_,I,?(I,true,false)) :-!. % can be changed in path 2
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
30
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
31 std_check(I,I) :- atomic(I),!.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
32 std_check(I,J) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
33 sb(I,J),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
34 std_check(I,N1) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
35 retract(sbn(N)),N1 is N+1,asserta(sbn(N1)),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
36 assertz(sb(I,N1)),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
37
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
38 itlstd(P,StdP,Rename) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
39 sbdt(P,P1,([],[],[]),(_,Vars,Dup)), % path 1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
40 itlstd1(Vars,Dup,P1,StdP,Rename).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
41 itlstd1([],[],P,P,[]) :-!. % no regular variable path 1 is enough
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
42 itlstd1(Vars,Dup,P,P1,Rename) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
43 rename_list(Vars,Dup,Rename),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
44 sbdt2(P,P1,Rename). % path 2
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
45
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
46 % for detailed trace
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
47 % itlstd(PNext,StdNext,NextFull,Rename,Rename1)
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
48
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
49 itlstd(P,StdP,FullP1,_,Rename) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
50 sbdt(P,FullP,([],[],[]),(_,Vars,Dup)), % path 1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
51 itlstd2(Vars,Dup,FullP,FullP1,StdP,Rename).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
52 itlstd2([],[],P,P,P,[]) :-!. % no regular variable path 1 is enough
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
53 itlstd2(Vars,Dup,FullP,FullP1,StdP,Rename) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
54 rename_list(Vars,Dup,Rename),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
55 sbdt2(FullP,StdP,Rename), % path 2
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
56 detailed_rename(Rename,Rename1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
57 write((Rename,Rename1)),nl,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
58 sbdt2(FullP,FullP1,Rename1). % over limit replacement only
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
59
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
60 % preserve singleton variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
61 % fix limit overed non-singleton variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
62 detailed_rename([],[]) :-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
63 detailed_rename([(_,true_false)|R],R1) :-!, % singleton
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
64 detailed_rename(R,R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
65 detailed_rename([(_,^(_,_))|R],R1) :-!, % renaming
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
66 detailed_rename(R,R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
67 detailed_rename([H|R],[H|R1]) :-!, % true/false replacement
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
68 detailed_rename(R,R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
69
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
70 rename_list(L,D,R):- singleton,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
71 rename_singleton(L,D,L0,R,R1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
72 sortC(L0,L1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
73 number_list(L1,L2),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
74 compact_list(L2,R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
75 rename_list(L,_,L3):- renaming,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
76 sortC(L,L1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
77 number_list(L1,L2),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
78 compact_list(L2,L3).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
79 rename_list(_,_,[]).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
80
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
81 % rename_singleton(Vars,Duplicate,Deleted,Replace,Replace1)
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
82 rename_singleton([],_,[],R,R):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
83 rename_singleton([V|L],Dup,[V|L1],R,R1):-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
84 member(V,Dup),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
85 rename_singleton(L,Dup,L1,R,R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
86 rename_singleton([V|L],Dup,L1,[(V,true_false)|R],R1):-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
87 rename_singleton(L,Dup,L1,R,R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
88
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
89 uniq([],[]):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
90 uniq([H|L],[H|L1]) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
91 uniq(L,H,L1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
92 uniq([],_,[]) :-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
93 uniq([H|L],H,L1) :-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
94 uniq(L,H,L1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
95 uniq([H|L],_,[H|L1]) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
96 uniq(L,H,L1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
97
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
98 number_list([],[]) :-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
99 number_list([^(R,S)|L],[(^(R,S),^(R,1))|L1]) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
100 length_limit(LM),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
101 number_list(L,R,2,L1,LM).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
102
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
103 number_list([],_,_,[],_) :-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
104 number_list([^(R,S)|L],R,N,[(^(R,S),^(R,N))|L1],LM) :- % same variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
105 N =< LM,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
106 N1 is N+1,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
107 number_list(L,R,N1,L1,LM).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
108 number_list([^(R,S)|L],R,N,[(^(R,S),F)|L1],LM) :- % same variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
109 inc_var(over,_),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
110 !,(F=true;F=false), % over the limit
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
111 number_list(L,R,N,L1,LM).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
112 number_list([^(R,S)|L],_,_,[(^(R,S),^(R,1))|L1],LM) :- % new variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
113 number_list(L,R,2,L1,LM).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
114
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
115 compact_list([],[]) :-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
116 compact_list([(^(R,N),^(R,N))|L1],L2) :-!, % remove identity
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
117 compact_list(L1,L2).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
118 compact_list([H|L1],[H|L2]) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
119 compact_list(L1,L2).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
120
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
121 % do substitution member first ( to avoid infinite loop by identity
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
122 % substitution
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
123
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
124 sbdt_s([],[]):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
125 sbdt_s([(A,B)|L],[(A,B1)|L1]):-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
126 sbdt(B,B1,([],[],[]),_),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
127 sbdt_s(L,L1).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
128
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
129 % BDT classification of subterm
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
130
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
131 % sbdt(Input,BDD,(UseInTerm,Variable,Duplicate),( ... )) path 1
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
132 sbdt(true,true,L,L):-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
133 sbdt(false,false,L,L):-!.
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
134 sbdt(true_false,true_false,L,L):-!.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
135 sbdt(P,F,L,L) :- atomic(P),!,F= ?(P,true,false).
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
136 sbdt(?(C,T,F),?(C,T,F),L,L) :- !. % already done.
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
137 sbdt(not(P),F,L,L1) :- !,sbdt(P,F0,L,L0),sbdt_not(F0,F,L0,L1),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
138 sbdt((P,Q),F,L,L2) :- !,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
139 sbdt(P,P0,L,L0),sbdt(Q,Q0,L0,L1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
140 sbdt_and(P0,Q0,F,L1,L2),!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
141 sbdt((P;Q),F,L,L2) :- !,
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
142 sbdt(P,P0,L,L0),sbdt(Q,Q0,L0,L1),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
143 sbdt_or(P0,Q0,F,L1,L2),!.
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
144 sbdt((P&Q), N,(U,V,D),(U,V2,D2)) :-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
145 sbdt(P,P1,([],V,D),(U1,V1,D1)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
146 sbdt(Q,Q1,([],V1,D1),(U2,V2,D2)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
147 or_list(U1,U2,U3),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
148 % projection and closure touch later part of chop
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
149 std_check(U3,(P1&Q1),N).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
150 % bottom up development is effective for quantifier
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
151 sbdt(exists(P,Q), N,(U,R,D),(U,R1,D1)) :-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
152 sbdt(Q,QF,([],R,D),(U1,R1,D1)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
153 std_check(U1,exists(P,QF),N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
154 sbdt(proj(P,Q), N,(U,V,D),(U,V2,D2)) :-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
155 sbdt(P,P1,([],V,D),(U1,V1,D1)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
156 sbdt(Q,Q1,([],V1,D1),(U2,V2,D2)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
157 or_list(U1,U2,U3),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
158 std_check(U3,proj(P1,Q1),N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
159 sbdt(prefix(Q), N,(U,R,D),(U,R1,D1)) :-!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
160 sbdt(Q,QF,([],R,D),(U1,R1,D1)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
161 std_check(U1,prefix(QF),N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
162 sbdt(^(R), ?(^(R),true,false),L,L) :-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
163 sbdt(Rg, ?(Rg,true,false),(U,V,D),(U1,V1,D1)) :- Rg = ^(_,_),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
164 sbdt_r(Rg,U,V,D,U1,V1,D1).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
165 % Simple Functor
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
166 sbdt(Func,N,(U,V,D),(U,V1,D1)) :- functor(Func,H,1),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
167 arg(1,Func,A),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
168 sbdt(A,A1,([],V,D),(U1,V1,D1)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
169 functor(Func1,H,1),arg(1,Func1,A1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
170 std_check(U1,Func1,N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
171 sbdt(Func,N,(U,V,D),(U,V2,D2)) :- functor(Func,H,2),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
172 arg(1,Func,A),sbdt(A,A1,([],V,D),(U1,V1,D1)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
173 arg(2,Func,B),sbdt(B,B1,([],V1,D1),(U2,V2,D2)),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
174 functor(Func1,H,2),arg(1,Func1,A1),arg(2,Func1,B1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
175 or_list(U1,U2,U3),std_check(U3,Func1,N).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
176 sbdt(Def,true,L,L) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
177 write('bdtstd error: '),write(Def),nl.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
178
19
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
179 sbdt_not(true,false,L,L).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
180 sbdt_not(false,true,L,L).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
181 sbdt_not(true_false,true_false,L,L).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
182 sbdt_not(F,?(H,A1,B1),L,L1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
183 arg(1,F,H),arg(2,F,A),arg(3,F,B),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
184 sbdt_not(A,A1,L,L0),sbdt_not(B,B1,L0,L1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
185 sbdt_and(false,_,false,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
186 sbdt_and(_,false,false,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
187 sbdt_and(true,T,T,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
188 sbdt_and(T,true,T,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
189 sbdt_and(T,T1,T1,L,L):- atomic(T),T=T1,!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
190 sbdt_and(?(PF,P0,P1),true_false,F,L,L1):-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
191 sbdt_and(P0,true_false,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
192 sbdt_and(P1,true_false,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
193 sbdt_opt(PF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
194 sbdt_and(true_false,?(PF,P0,P1),F,L,L1):-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
195 sbdt_and(P0,true_false,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
196 sbdt_and(P1,true_false,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
197 sbdt_opt(PF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
198 sbdt_and(P,Q,R,L,L1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
199 arg(1,P,PF),arg(1,Q,QF),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
200 sbdt_and(PF,QF,P,Q,R,L,L1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
201 sbdt_and(PF,QF,P,Q,R,L,L1):-PF @< QF,!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
202 sbdt_and(QF,PF,Q,P,R,L,L1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
203 sbdt_and(PF,QF,P,Q,F,L,L1):-PF @> QF,!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
204 arg(2,Q,Q0),arg(3,Q,Q1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
205 sbdt_and(Q0,P,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
206 sbdt_and(Q1,P,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
207 sbdt_opt(QF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
208 sbdt_and(PF,PF,P,Q,F,L,L1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
209 arg(2,P,P0),arg(3,P,P1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
210 arg(2,Q,Q0),arg(3,Q,Q1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
211 sbdt_and(P0,Q0,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
212 sbdt_and(P1,Q1,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
213 sbdt_opt(PF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
214 sbdt_or(true,_,true,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
215 sbdt_or(_,true,true,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
216 sbdt_or(false,T,T,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
217 sbdt_or(T,false,T,L,L):-!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
218 sbdt_or(T,T1,T1,L,L):- atomic(T),T=T1,!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
219 sbdt_or(?(PF,P0,P1),true_false,F,L,L1):-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
220 sbdt_or(P0,true_false,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
221 sbdt_or(P1,true_false,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
222 sbdt_opt(PF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
223 sbdt_or(true_false,?(PF,P0,P1),F,L,L1):-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
224 sbdt_or(P0,true_false,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
225 sbdt_or(P1,true_false,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
226 sbdt_opt(PF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
227 sbdt_or(P,Q,R,L,L1) :-!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
228 arg(1,P,PF),arg(1,Q,QF),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
229 sbdt_or(PF,QF,P,Q,R,L,L1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
230 sbdt_or(PF,QF,P,Q,R,L,L1):-PF @< QF,!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
231 sbdt_or(QF,PF,Q,P,R,L,L1).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
232 sbdt_or(PF,QF,P,Q,F,L,L1):-PF @> QF,!,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
233 arg(2,Q,Q0),arg(3,Q,Q1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
234 sbdt_or(Q0,P,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
235 sbdt_or(Q1,P,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
236 sbdt_opt(QF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
237 sbdt_or(PF,PF,P,Q,F,L,L1):-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
238 arg(2,P,P0),arg(3,P,P1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
239 arg(2,Q,Q0),arg(3,Q,Q1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
240 sbdt_or(P0,Q0,R0,L,L0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
241 sbdt_or(P1,Q1,R1,L0,L1),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
242 sbdt_opt(PF,R0,R1,F).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
243 sbdt_opt(_IF,THEN,ELSE,THEN) :- THEN==ELSE,!.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
244 sbdt_opt(IF,THEN,ELSE,?(IF,THEN,ELSE)).
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
245 sbdt_r(Rg,U,V,D,U,V,D) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
246 member(Rg,U),!. % in the same formula
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
247 sbdt_r(Rg,U,V,D,[Rg|U],V,[Rg|D]) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
248 member(Rg,V),!. % duplicate
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
249 sbdt_r(Rg,U,V,D,[Rg|U],[Rg|V],D). % new
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
250
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
251 or_list([],[],[]):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
252 or_list(_,_,[a]):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
253
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
254 % sbdt2(BDD0 ,BDD,Substitute) path 2
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
255 % eliminate and renumber regular variable
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
256 % variable reordering is also necessary
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
257
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
258 sbdt2(true,true,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
259 sbdt2(false,false,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
260 sbdt2(true_false,true_false,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
261 sbdt2(P,P1,L) :- functor(P,?,3),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
262 sbdt2ife(P,P1,L).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
263 sbdt2(P,F,_) :- atomic(P),!,F= ?(P,true,false).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
264 sbdt2(P,P,_) :- write('error in sbdt2:'),write(P),nl.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
265
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
266 sbdt2ife(?(^(R,N),T,F),TF,L) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
267 member((^(R,N),true_false),L),!, % singleton
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
268 sbdt2(T,T1,L),sbdt2(F,F1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
269 sbdt_select(T1,F1,TF,L).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
270 sbdt2ife(?(C,T,F),T2,L) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
271 sbdt2cond(C,C1,L), % T/F may contain C1...
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
272 sbdt2(T,T1,L),sbdt2(F,F1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
273 sbdt_ife_t(T1,F1,C1,T2).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
274
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
275 sbdt2cond(C,C,_) :- atomic(C),!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
276 sbdt2cond(^(C),N,_):- !,std_check(^(C),N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
277 sbdt2cond(^(R,N),R1,L):-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
278 member((^(R,N),^(R,N1)),L),!, % renumber
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
279 std_check(^(R,N1),R1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
280 sbdt2cond(^(R,N),F,L):-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
281 member((^(R,N),F),L),!. % true/false
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
282 sbdt2cond(^(R,N),^(R,N),_):- !.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
283 sbdt2cond(P,N,L):- functor(P,?,3),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
284 sbdt2(P,P1,L),std_check(P1,N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
285 sbdt2cond(C,C0,L) :- functor(C,H,1),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
286 functor(C1,H,1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
287 arg(1,C,A),sbdt2(A,A1,L),arg(1,C1,A1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
288 std_check(C1,C0).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
289 sbdt2cond(C,C0,L) :- functor(C,H,2),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
290 functor(C1,H,2),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
291 arg(1,C,A),sbdt2(A,A1,L),arg(1,C1,A1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
292 arg(2,C,B),sbdt2(B,B1,L),arg(2,C1,B1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
293 std_check(C1,C0).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
294 % reordering
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
295
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
296 % sbdt_split(F,TC,FT,FF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
297 sbdt_split(?(C,T,F),C,T,F) :- !.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
298 sbdt_split(P,C,P,P) :- P = ?(C1,_,_),C1 @> C,!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
299 sbdt_split(?(C1,T1,F1),C,T,F) :- T1 @< C,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
300 sbdt_split(T1,C,CTT,CTF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
301 sbdt_split(F1,C,CFT,CFF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
302 sbdt_opt(C1,CTT,CFT,T),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
303 sbdt_opt(C1,CTF,CFF,F).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
304 sbdt_split(T,_,T,T).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
305
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
306 sbdt_ife(C,T,F,P) :- sbdt_ife_t(T,F,C,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
307 sbdt_ife_t(T,F,C,P) :- T = ?(TC,_,_),TC @> C,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
308 sbdt_ife_f(F,T,C,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
309 sbdt_ife_t(?(TC,TT,TF),F,C,P) :- TC @< C,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
310 sbdt_split(F,TC,FT,FF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
311 sbdt_ife_t(TT,FT,C,PT),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
312 sbdt_ife_t(TF,FF,C,PF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
313 sbdt_opt(TC,PT,PF,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
314 sbdt_ife_t(?(C,TT,_),F,C,P) :- !,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
315 sbdt_ife_f(F,TT,C,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
316 sbdt_ife_t(T,F,C,P) :- !,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
317 sbdt_ife_f(F,T,C,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
318
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
319 sbdt_ife_f(F,T,C,P) :- F = ?(FC,_,_),FC @> C,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
320 sbdt_opt(C,T,F,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
321 sbdt_ife_f(?(FC,FT,FF),T,C,P) :- FC @< C,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
322 sbdt_split(T,FC,TT,TF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
323 sbdt_ife_f(FT,TT,C,PT),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
324 sbdt_ife_f(FF,TF,C,PF),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
325 sbdt_opt(FC,PT,PF,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
326 sbdt_ife_f(?(C,_,F),T,C,P) :- !,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
327 % We don't have go further, it is already reordered
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
328 sbdt_opt(C,T,F,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
329 sbdt_ife_f(F,T,C,P) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
330 sbdt_opt(C,T,F,P).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
331
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
332 sbdt_select(true_false,_,true_false,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
333 sbdt_select(_,true_false,true_false,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
334 sbdt_select(false,true,true_false,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
335 sbdt_select(true,false,true_false,_):-!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
336 sbdt_select(I,I1,I,_):-atomic(I),I=I1,!.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
337 sbdt_select(P,Q,R,L) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
338 arg(1,P,PF), arg(1,Q,QF),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
339 sbdt_select(PF,QF,P,Q,R,L).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
340 sbdt_select(?(C,T,F),Q,R,L) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
341 sbdt_select(T,Q,T1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
342 sbdt_select(F,Q,F1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
343 sbdt_opt(C,T1,F1,R).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
344 sbdt_select(Q,?(C,T,F),R,L) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
345 sbdt_select(T,Q,T1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
346 sbdt_select(F,Q,F1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
347 sbdt_opt(C,T1,F1,R).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
348
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
349 sbdt_select(PF,QF,P,Q,R,L):-PF @< QF,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
350 sbdt_select(QF,PF,Q,P,R,L).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
351 sbdt_select(PF,QF,P,Q,F,L):-PF @> QF,!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
352 arg(2,Q,Q0),arg(3,Q,Q1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
353 sbdt_select(Q0,P,R0,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
354 sbdt_select(Q1,P,R1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
355 sbdt_opt(QF,R0,R1,F).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
356 sbdt_select(PF,PF,P,Q,F,L):-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
357 arg(2,P,P0),arg(3,P,P1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
358 arg(2,Q,Q0),arg(3,Q,Q1),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
359 sbdt_select(P0,Q0,R0,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
360 sbdt_select(P1,Q1,R1,L),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
361 sbdt_opt(PF,R0,R1,F).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
362
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
363 % sbdt_unify(3Valued,Detailed)
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
364 % Order of regular variable checking is not necessary
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
365 sbdt_unify(true,D) :- !,D=true.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
366 sbdt_unify(false,D) :- !,D=false.
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
367 sbdt_unify(true_false,true).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
368 sbdt_unify(true_false,false).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
369 sbdt_unify(N,N1) :- number(N),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
370 sb(T,N), sbdt_unify(T,N1).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
371 sbdt_unify(N,N1) :- number(N1),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
372 sb(T,N1), sbdt_unify(T,N).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
373 sbdt_unify(?(^(_,_),T,F),D) :- !, % really?
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
374 sbdt_unify(T,D),sbdt_unify(F,D).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
375 sbdt_unify(C,?(^(_,_),T,F)) :- C = ?(_,_,_),!, % really?
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
376 sbdt_unify(C,T),sbdt_unify(C,F).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
377 sbdt_unify(?(C,T1,F1),D) :- !,D = ?(C,T2,F2),
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
378 sbdt_unify(T1,T2),sbdt_unify(F1,F2).
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
379 sbdt_unify(F,F1) :-
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
380 functor(F,H,N),functor(F1,H,N),!,
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
381 sbdt_unify_arg(N,N,F,F1).
19
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
382
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
383 sbdt_unify_arg(0,_,_,_) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
384 sbdt_unify_arg(N,N1,F,F0) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
385 N0 is N-1,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
386 arg(N,F,A),arg(N,F0,A0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
387 sbdt_unify(A,A0),sbdt_unify_arg(N0,N1,F,F0).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
388
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
389 sbterm :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
390 listing(sb/2),listing(itl_state/2).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
391
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
392 bdt2itl(B,F) :- number(B),!,sb(F0,B),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
393 bdt2itl(F0,F).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
394 bdt2itl(^(R,N),^(R,N)) :-!.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
395 bdt2itl(st(R),st(R)) :-!.
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
396 bdt2itl(?(IF,THEN,ELSE),F) :-!,
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
397 bdt2itl(IF,IF0),bdt2itl(THEN,THEN0),bdt2itl(ELSE,ELSE0),
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
398 bdt2itl_opt(IF0,THEN0,ELSE0,F).
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
399 bdt2itl(B,F) :- atom(B),!,F=B.
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
400 bdt2itl(B,F) :-
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
401 functor(B,H,N),functor(F,H,N),bdt2itl_subterm(N,N,B,F).
19
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
402 % little more readable representation
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
403 bdt2itl_opt(IF,true,false,IF) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
404 bdt2itl_opt(IF,false,true,not(IF)) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
405 bdt2itl_opt(IF,true,ELSE,(IF;ELSE)) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
406 bdt2itl_opt(IF,THEN,false,(IF,THEN)) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
407 bdt2itl_opt(IF,false,ELSE,(not(IF);ELSE)) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
408 bdt2itl_opt(IF,THEN,true,(not(IF),THEN)) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
409 bdt2itl_opt(IF,THEN,ELSE,?(IF,THEN,ELSE)) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
410 bdt2itl_subterm(0,_,_,_) :- !.
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
411 bdt2itl_subterm(N,N1,F,F0) :-
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
412 N0 is N-1,
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
413 arg(N,F,A),arg(N,F0,A0),
e1d3145cff7a *** empty log message ***
kono
parents: 1
diff changeset
414 bdt2itl(A,A0),bdt2itl_subterm(N0,N1,F,F0).
0
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
415
b35e4dc6ec23 Initial revision
kono
parents:
diff changeset
416 % BDT end %
1
683efd6f9a81 *** empty log message ***
kono
parents: 0
diff changeset
417