From c0426ded4bf803bd68e8443b5e3272905619c595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Bobot?= <francois.bobot@cea.fr> Date: Fri, 18 Jun 2021 15:58:33 +0200 Subject: [PATCH] Import from Bin:a1af7a0 Src:08a70c336 farith:a93db57 --- Src/COLIBRI/realarith.pl | 6 ++++-- Src/COLIBRI/solve.pl | 45 +++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/Src/COLIBRI/realarith.pl b/Src/COLIBRI/realarith.pl index a5fe445e2..360b43325 100755 --- a/Src/COLIBRI/realarith.pl +++ b/Src/COLIBRI/realarith.pl @@ -19385,8 +19385,10 @@ gt_real_float_numberA(A,B,Continue) :- % en plus, on doit interdire A = B mreal:maxdomain(B,MaxB), (MaxB < 1.0Inf -> - Continue = 1, - mreal:dvar_remove_smaller(A,MaxB) + mreal:dvar_remove_smaller(A,MaxB), + (number(A) -> + gt_real_numberA(A,B,Continue) + ; Continue = 1) ; get_previous_float(real,1.0Inf,PInf), set_interval_box(A,PInf,1.0Inf), gt_real_boxA(A,B,Continue)) diff --git a/Src/COLIBRI/solve.pl b/Src/COLIBRI/solve.pl index 87eb6d996..a8d1cefa6 100644 --- a/Src/COLIBRI/solve.pl +++ b/Src/COLIBRI/solve.pl @@ -6545,8 +6545,11 @@ unfold_real_expr(real(EA),D,Cstr,Type,R) ?- % Conversions depuis float % hors smtlib -unfold_real_expr(real_from_float(EA),D,Cstr,real,R) :- +unfold_real_expr(real_from_float(EA),D,Cstr,Real,R) :- ND is D + 1, + (var(Real) -> + Real = real + ; real_type(Real,real)), unfold_real_expr(EA,ND,CA,float_simple,A), !, insert_dep_inst(dep(R,D,[A])), @@ -6623,15 +6626,21 @@ unfold_real_expr(float_from_double(Rnd0,EA),D,Cstr,Type,R) ?- make_conj(CARnd,Cond,CACond), make_conj(CACond,double_to_float(BCond,Rnd,A,R),Cstr))). -unfold_real_expr(real_from_double(EA),D,Cstr,real,R) :- +unfold_real_expr(real_from_double(EA),D,Cstr,Real,R) :- ND is D + 1, + (var(Real) -> + Real = real + ; real_type(Real,real)), unfold_real_expr(EA,ND,CA,float_double,A), !, insert_dep_inst(dep(R,D,[A])), make_conj(CA,float_to_real(float_double,A,R),Cstr). -unfold_real_expr(fp_to_real(EA),D,Cstr,real,R) :- +unfold_real_expr(fp_to_real(EA),D,Cstr,Real,R) :- ND is D + 1, + (var(Real) -> + Real = real + ; real_type(Real,real)), unfold_real_expr(EA,ND,CA,TypeF,A), % NaN autorise pour Cond unfold_int_expr(isNaN(as(A,TypeF)) or isInfinite(as(A,TypeF)),D,Cond,bool,Bool), @@ -11072,19 +11081,24 @@ choose_fd_var([Adj|UseList],Var,Size,NUseList) :- MinVars \== [], leaf_vars([Adj|UseList],Leaves,NUseList), leaf_var_with_max_cstr_min_dom(MinVars,[],Var,Size). -% leaf_var_with_max_cstr_min_dom(MinVars,Leaves,Var,Size). +%% leaf_var_with_max_cstr_min_dom(MinVars,Leaves,Var,Size). leaf_vars(UseList,Leaves,NUseList) :- (foreach((V,D,A),UseList), fromto([],IT,OT,NUseList0) do - term_variables(A,NA), + term_variables(A,NA0), (nonvar(V) -> - (foreach(VA,NA), + (foreach(VA,NA0), fromto(IT,INA,ONA,NewAdjs) do ONA = [(VA,0,[])|INA]), OT = NewAdjs - ; OT = [(V,0,NA)|IT])), + ; ((member_begin_end(VV,NA0,NA,End,End), + VV == V) + -> + true + ; NA = NA0), + OT = [(V,0,NA)|IT])), sort(NUseList0,NUseList), leaf_vars(NUseList,Leaves0), sort(Leaves0,Leaves). @@ -11439,6 +11453,20 @@ leaf_var_with_max_cstr_min_dom(L,Leaves,Var,MinSize) :- Var,MinSize))). leaf_var_with_max_cstr_min_dom0([V|LV],Leaves,Var0,NbV0,Size0,Leaf0,Var,MinSize) :- + (((occurs(V,Leaves) -> + Leaf = 1 + ; true), + (nonvar(Leaf0) -> + Leaf == 1 + ; true), + constraints_number(V,NbV), + NbV >= NbV0, + get_type(V,Type), + dvar_size(Type,V,Size), + (NbV > NbV0 -> + true + ; Size < Size0)) +/* constraints_number(V,NbV), (occurs(V,Leaves) -> Leaf = 1 @@ -11452,7 +11480,8 @@ leaf_var_with_max_cstr_min_dom0([V|LV],Leaves,Var0,NbV0,Size0,Leaf0,Var,MinSize) (nonvar(Leaf0) -> nonvar(Leaf) ; true))) - -> +*/ + -> Var1 = V, NbV1 = NbV, Size1 = Size, -- GitLab