3:-module(trill_test,
    4  [close_to/2,close_to/3,run/1,run_fail/1]).    5
    6:- meta_predicate run(:).    7:- meta_predicate run_fail(:).    8
    9run(M:H):-
   10	copy_term(H,NH),
   11	numbervars(NH),
   12%	NH=(_Query,close_to('P',_Prob)),
   13	format("~p.~n",[NH]),
   14	(H=(G,R)),
   15	time(call(M:G)),!,
   16	format("\t~p.~n~n",[G]),
   17	call(R).
   18
   19run_fail(M:H):-
   20	copy_term(H,NH),
   21	numbervars(NH),
   22%	NH=(_Query,close_to('P',_Prob)),
   23	format("~p.~n",[NH]),
   24	time(call(M:H))->fail;true.
   25
   26epsilon(0.09).
   27
   28close_to(V,T):-
   29	epsilon(E),
   30	TLow is T-E,
   31	THigh is T+E,
   32	TLow<V,
   33	V<THigh.
   34
   35close_to(V,T,E):-
   36	TLow is T-E,
   37	THigh is T+E,
   38	TLow<V,
   39	V<THigh.
   40
   41same_expl(Expl, CorrExpl):-
   42	length(Expl,NE),
   43	length(CorrExpl,NE),
   44	same_expl_int(Expl, CorrExpl).
   45
   46same_expl_int([],_CorrExpls).
   47
   48same_expl_int([Expl|Expls],CorrExpls):-
   49  sort(Expl,ExplSort),
   50  member(X,CorrExpls),
   51  sort(X,ExplSort),!,
   52  same_expl_int(Expls,CorrExpls).
   53
   54one_of(Expl,CorrExpls):-
   55  sort(Expl,ExplSort),
   56  member(X,CorrExpls),
   57  sort(X,ExplSort),!.
   58
   59test_formula(F1,F2):-
   60  \+ trill:test(_,F1,F2),
   61  \+ trill:test(_,F2,F1)