34
35:- module(clpcd,
36 [ {}/1,
37 maximize/1,
38 minimize/1,
39 inf/2,
40 inf/4,
41 sup/2,
42 sup/4,
43 bb_inf/3,
44 bb_inf/4,
45 entailed/1
46 ]). 47
48:- use_module(library(lists)). 49:- use_module(library(neck)). 50:- use_module(library(clpcd/bb)). 51:- use_module(library(clpcd/nf)). 52:- use_module(library(clpcd/bv)). 53:- use_module(library(clpcd/inv)). 54:- use_module(library(clpcd/domain_ops)). 55:- reexport(library(clpcd/dump), [dump/3]). 56:- reexport(library(clpcd/ordering), [clp_type/2]). 57:- reexport(library(clpcd/ordering), [ordering/1]). 58:- init_expansors. 59
60:- meta_predicate
61 inf(:,?),
62 inf(:,?,?,?),
63 sup(:,?),
64 sup(:,?,?,?),
65 maximize(:),
66 minimize(:),
67 {:},
68 entailed(:),
69 bb_inf(?,:,?),
70 bb_inf(?,:,?,?). 71
72inf(C:Expression, Inf) :-
73 active_clpcd(C, D),
74 inf(D, Expression, Inf).
75
76inf(C:Expression, Inf, Vector, Vertex) :-
77 active_clpcd(C, D),
78 inf(D, Expression, Inf, Vector, Vertex).
79
80sup(C:Expression, Sup) :-
81 active_clpcd(C, D),
82 sup(D, Expression, Sup).
83
84sup(C:Expression, Sup, Vector, Vertex) :-
85 active_clpcd(C, D),
86 sup(D, Expression, Sup, Vector, Vertex).
87
88maximize(C:Term) :-
89 active_clpcd(C, D),
90 maximize(D, Term).
91
92minimize(C:Term) :-
93 active_clpcd(C, D),
94 minimize(D, Term).
95
96{C:Rel} :-
97 active_clpcd(C, D),
98 add_constraint(Rel, D).
99
100entailed(C:E) :-
101 active_clpcd(C, D),
102 entailed(D, E).
103
104bb_inf(Is, C:Term, Inf) :-
105 active_clpcd(C, D),
106 bb_inf(D, Is, Term, Inf, _).
107
108bb_inf(Is, C:Term, Inf, Vertex) :-
109 active_clpcd(C, D),
110 bb_inf(D, Is, Term, Inf, Vertex).
111
112clpcd_nf:nl_invertible(_, F) :-
113 cd_invertible(F).
114
115clpcd_nf:nl_invert(C, F, X, Y, Res) :-
116 cd_invert(F, C, X, Y, N),
117 cast_d(C, N, Res).
118
119clpcd_nf:nonlin(_, Term, AL, Skel, SL) :-
120 cd_nonlin(Term, AL, Skel, SL).
121
122:- multifile
123 sandbox:safe_primitive/1. 124
125sandbox:safe_primitive(clpcd:H) :-
126 member(H, [{_},
127 entailed(_),
128 bb_inf(_, _, _),
129 bb_inf(_, _, _, _),
130 maximize(_),
131 minimize(_),
132 inf(_,_),
133 inf(_,_,_,_),
134 sup(_,_),
135 sup(_,_,_,_)
136 ]),
137 neck