From 90cb8c04462365a3f182db937639642a3a921c81 Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 13:42:02 +0100 Subject: [PATCH 1/7] Moved src to prolog and added pack.pl to allow for direct usage as a pack --- pack.pl | 5 +++++ {src => prolog}/clpBNR.pl | 0 {src => prolog}/ia_primitives.pl | 0 {src => prolog}/ia_simplify.pl | 0 {src => prolog}/ia_utilities.pl | 0 5 files changed, 5 insertions(+) create mode 100644 pack.pl rename {src => prolog}/clpBNR.pl (100%) mode change 100755 => 100644 rename {src => prolog}/ia_primitives.pl (100%) mode change 100755 => 100644 rename {src => prolog}/ia_simplify.pl (100%) rename {src => prolog}/ia_utilities.pl (100%) mode change 100755 => 100644 diff --git a/pack.pl b/pack.pl new file mode 100644 index 0000000..fa487be --- /dev/null +++ b/pack.pl @@ -0,0 +1,5 @@ +name(clpBNR). +title('CLP over Reals using Interval Arithmetic - includes Rational, Integer and Boolean domains as subsets.'). +version('0.9.4'). +author('Rick Workman', 'ridgeworks@mac.com'). +home('https://github.com/ridgeworks/clpBNR_pl'). diff --git a/src/clpBNR.pl b/prolog/clpBNR.pl old mode 100755 new mode 100644 similarity index 100% rename from src/clpBNR.pl rename to prolog/clpBNR.pl diff --git a/src/ia_primitives.pl b/prolog/ia_primitives.pl old mode 100755 new mode 100644 similarity index 100% rename from src/ia_primitives.pl rename to prolog/ia_primitives.pl diff --git a/src/ia_simplify.pl b/prolog/ia_simplify.pl similarity index 100% rename from src/ia_simplify.pl rename to prolog/ia_simplify.pl diff --git a/src/ia_utilities.pl b/prolog/ia_utilities.pl old mode 100755 new mode 100644 similarity index 100% rename from src/ia_utilities.pl rename to prolog/ia_utilities.pl From 9790d886a7623ecaaaf7e1fbd7358bac08d43ea6 Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 13:42:50 +0100 Subject: [PATCH 2/7] Deleted packed archives from the repo --- docs/Package/clpBNR-0.7.4.zip | Bin 26826 -> 0 bytes docs/Package/clpBNR-0.8.1.zip | Bin 30206 -> 0 bytes docs/Package/clpBNR-0.8.2.zip | Bin 31205 -> 0 bytes docs/Package/clpBNR-0.8.zip | Bin 29943 -> 0 bytes docs/Package/clpBNR-0.9.0.zip | Bin 34710 -> 0 bytes docs/Package/clpBNR-0.9.1.zip | Bin 35158 -> 0 bytes docs/Package/clpBNR-0.9.2.zip | Bin 34610 -> 0 bytes docs/Package/clpBNR-0.9.3.zip | Bin 35985 -> 0 bytes docs/Package/clpBNR-0.9.4.zip | Bin 36039 -> 0 bytes docs/Package/clpBNR-0.9.4/pack.pl | 5 - docs/Package/clpBNR-0.9.4/prolog/clpBNR.pl | 825 ----------------- .../clpBNR-0.9.4/prolog/ia_primitives.pl | 838 ------------------ .../clpBNR-0.9.4/prolog/ia_simplify.pl | 386 -------- .../clpBNR-0.9.4/prolog/ia_utilities.pl | 797 ----------------- 14 files changed, 2851 deletions(-) delete mode 100644 docs/Package/clpBNR-0.7.4.zip delete mode 100644 docs/Package/clpBNR-0.8.1.zip delete mode 100644 docs/Package/clpBNR-0.8.2.zip delete mode 100644 docs/Package/clpBNR-0.8.zip delete mode 100644 docs/Package/clpBNR-0.9.0.zip delete mode 100644 docs/Package/clpBNR-0.9.1.zip delete mode 100644 docs/Package/clpBNR-0.9.2.zip delete mode 100644 docs/Package/clpBNR-0.9.3.zip delete mode 100644 docs/Package/clpBNR-0.9.4.zip delete mode 100644 docs/Package/clpBNR-0.9.4/pack.pl delete mode 100755 docs/Package/clpBNR-0.9.4/prolog/clpBNR.pl delete mode 100755 docs/Package/clpBNR-0.9.4/prolog/ia_primitives.pl delete mode 100644 docs/Package/clpBNR-0.9.4/prolog/ia_simplify.pl delete mode 100755 docs/Package/clpBNR-0.9.4/prolog/ia_utilities.pl diff --git a/docs/Package/clpBNR-0.7.4.zip b/docs/Package/clpBNR-0.7.4.zip deleted file mode 100644 index 814c941908eb23ef2993a5043c4cc9cceb2619d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26826 zcmb@sb8sf%zBT&Bcw^hPHL-2mwr$(CHL>kXtcfPJ%}FxJoqhJHbI;!AJKz21c2{?G zSJ!V<_4=*#)YH#uMHw(~SinCv?=W%s|G4^bpEEx`WpCiUjj3)DaW6cos zknQD1=bev>cpv6y+}O7intO4#6c_yiosSiq=qU7!J1&;1h7<$6wY&Mjk20iBjcxb3 zp3l;n>)dFfw%$U*SsovI0UKwRD~P(xOk=zbr3%#|Dp-xK^H0}m&PQ{-Z~W5d+UWw* z_cQ9WQfPfXg$21U*8~I=3KI`9$Z#fD%g?&0^$$whI!3!OhJa?q3?gXbnSrc?)z4>k z=wMBu``}qUf>HA{4T-BdBZxV;X^~RZ^c^c+|NDm1{Z`brO~br?IvxKy(LH< zxFjA(^cjt)C<6t(F+23-3jzRuV*&o7pZ}CXTll|90p@Q%4GiRjL=;ps|4Rn{kis(v z+W)2OA2Rr_vj3x${yWD1SxUtJD+YtX|EekzLv#}hLu12RIa&2vMD<9;K+r@iFiIp` zkVagjkXLlUX@JTe(Lf*=S9mD6P!>9q-swMH9|{^6Il#sKSO1=WkN;QR|LzR5f0wtT zk%o@wgGMOZHVq)fQW}-ah&oJcQ$~CPFjWuiBpZwHtvHk}B z3Jvp#_wHPB?RR7AtnhnRuOQxKu&72HmSar=-CWDG=APd#ZHQ06Uj~w$b0+-H%5)UX zxhl_4z>;!|0Rxnm46>2*8U9v|9_D9PlSJIYTe(V;^aS}t}?$N3^5^zTEqcm*chm{ z90B%*ViPbO00@o3mj&Wq$W3U`MBl9bvuwXs6UJUct{czLWm@EGY{5W98vT}KZI^31R> zQyY;|Puu53b$H-SbHa#ju1#)lf)>l287+%d@mBVYURu0)9e+2@np>@cGe3hB3>*4b zMZWoZk?loy;g&fdsY~X4=#9ELs@a``f-3UV~G)bDzj9R-aV>u}u zTKUuN-Zk-J2o0IOyC)qxJ<;Fr%6Io=P?#+T`$Zs6WYA*q$Ssz7KlXa{f!iihiRErd z%jK;!TKO}^SZ3EZcLMuJn>wiOeMI<_j*QcW8Hoe*9~81_EURz6Yt+<-iKw9C?Oa59 z@+)}mAV`QJgzVEWN+$=CrUs9iQ2AekyML#aDe%lYTDHM?G2psJE`vC1z~vYp96s*o znMcZV@>;-4$M(E#qQ7MUYY5+g9EfOhLiEl}drMJ?DM-f96iI64b~hYPZwkI^cGXK} zSssIzZ;uo4ucb{*69qlefS|*+I~A9h2TmP!piwoD7(|})OBfYQ7NZ5B4`f0hk#$cm zDWC}5Wst_ed}0KF{$!t*0qHPnFV+PCM}v6J!D`K zXLQ!Yj(^BAWmus{7{k0v2z1CElVxoYcn%hHiL_{b za?T?W*-iT@zadp7&-~F-32iaDBwT)oCoOo1xZU?McH!f&9hv^cgAZlb?rDjNY^3eA|#!8RQe>(U;lsr@`LQP#uucXb_IQhXiG$ZckKka^1;85%{uECI-G$th5BlZWr?#@j^UrL&bYyar1KHLOw4| zLsdN+e`Fq&VID}J52L;^k=BrOwmQ!&LM3Ty@s+b=Z%wR^8#X2UN}8mBTHh|9B=C`*9NOr9R+as=4b=*S79V6I2_W*EElRg1YvH~lU$(yoxA-PP9ObX-c$G~r(0SQ5b zMV`wxJxk5I76}|hBixev(7wwkAM2D_!OAp@lloKE?MjSy)KOuf?FYUL?*XbhY>l;o z6RuzbM0J6&Do77rt2pfhGv4hCuxDLT&(KJKnV{w#G|jG#4){95;r&mBtSykd5w?84 zPzZBEWURn@_E4&VPjGWaE|Hm!+m7U-z^o!c)1(eb;11X@Cb2fJti&dc_&f(9b;$_m z&>heeDSIyK7l;iLZ|4x>pl2@`peJ`9$SXSA(MTlLN*>klM9t*DBm{l?m6H!4{ez|u zQrOncP7({5!dU50#)#_cFrKt^t5T+^!RXRs3Us z5RHhKXrZ|yRWHbuF2@x-i&`deTX_nsD!U_uh(>8&ij2{;m4Stcz@=(a|6A544JJjU`sGWiCPCOOi)eX^DalJAKg#q^J_lOx z?l7v705(v#F)(48z(;r?mdF>J0iMV(EG{||>Np12-xKRhH3v|oO!u;g0%PO1L$gph zq|a)gkoB7p=P>nHC*! zmXZy;P*BXR9f7dWpD)_!?&#bs-{7|zbN9sR&Og}=gqi-(!sX}^5)L!YlWTJg%@;)y zl5Pqbwi2vk#Y=24fnGNYIt*0^LF4SA1b}@kxX>jMRHO0a;)OH-614JxY^>>xHAkWlTnh+OWNKYBdw@9=yoeT?&@2hvE znO4(wF@?g7TM1;aEiP(f9Hi`Yd@Bo!>T01z_+f#mz!9jTCXxwZY-}Pgq>7h2lc*?I zQ%>h}I+O;t78;rw*!hD?Wc&MT-gNBmK9OT7nt{lgM_INYvDDtB0Prr3#TTO367ylUL7Ab!rs+9{>>$`>JERw$UF--x zSa?gAX^s&{A6=!5T~*CmSE_==p+omVh*iX+=y-4%VGCH>c9x^_XIqHZ1X9aATcru_ zqSVpHBn2a%ioS@^c6KIh2{=iqrv=QIQ^=-DUwKq9K%Cik<}@T@1E9QZCilZlyc`ZV zYG%5!2}9H6IefdC$iTggAkIcedFtTc=bM%^G7O4WCxXW90IRv*63&F;vp& z2sK~`6A(AG451z9tq7{UCTXypc5qLB$yqFb)#$Oq{aKKM7(Od&T zt$m_bA5lI7fuf3T`Nocf?eZJ^J&=5$2jkMA?H6@=ovu~^QZpDjuHi?s5du4YE&!zm zeIS9!>xT`>!pFXJOaT^daygjJZ zCa5(I!kV?41=0hmLU>EW%rzG38DtHG;}mx1V8VpiLWQ0+dS*K#MpxT>!OTQ>@TG+S z8KD0A6CrI8l=A~0!rp|N)^T`8WH-ESKuNE`PpoWu?VZJw#dxhC2L3IIK01m z8hPE&z^hSjKb+2~wP@ogPJ*p$1}4fCi<(QJIMsyp&=IbkTe=(!M)q8FbO64EZO=pG z>NjJ46A*d0Wb3H~L1hwc384zSoWkKY85oud3GS87uMB}aS3l4tOS;U?EJ*k@fVu<64=@*cthC(7>-9KwME$pzUl2L>LMxZg~6KgMs-mJc})eCan>BBI{N?< z4|3{`Xh@@Bw_gT~8QVgQF{&C7m#;N)ckc24`6rzteeC$_XabSN!e>}=p3B)7SKO zAa!N3p#_8rkWv(4a6XS%mBc|))Zzj@mHTPLH}T%F%;~f&&o!LfVPjq74^c>Ha)EEj z>dNwSxa>pBmuxA%eRFeTLACNVLR2K+qpDX_0Yr&6Gj`pUDE>GGW^+t+v@YR`g&~jn zRcHG^!>yEktQv`hj@Muh=10Z@x?1=^ah}<sL|x_hIDG1$Gyn|9-}O7&xxg zkDxh@&gN1L5E7ryh>ymYpw{%1?c6D9kk?Ki2u+^-U5gdUa z)#1$~u8EHo)E>a5sT9A8Qh^xO9PAzvrzjpH~)0`)ES9>ZygUyo+Eo z_?D$)pYceYH2l4*p2`|nhqOjaW0%AofqJ)v3~eo}<8DeLh=ae#AK$SWZZLpvG#lP{ zwt1PiyqXW>W>o4&(dr@zw;b6=$n4UrK+<4rgr>(V42wE!Q#C`;1cSzoZJW<^DhTS9 zz$%$9%iNF6!GMj&{IvvKW;?TAwmbPWyObF@Yb@EGm$+G5F*&W1Okfl7Zfrn1AU=g)+TwIfss9Ed=N@a~`_(Al8!Kj8J{LP}>9id3$ z!y>ZT8;AUStk6%qJ8^+ZX)HeH=#3OcB)0jk1tZ6z;%6h5jC8HxuHjN|@wvNeLur?Q zJ2sKg+?}BIN`Zh$lOX$=bcTS9Pho<^)gT`E>Jq#nUx?Rt!Z2JN9()y1rMZTZReVXP zwIWZ6u#`{F3%0N)>6BycOpkMjoue)?!}^>{J83r$e-H z)BCEbF1U(Mw|V}-q_Y%&_6k2fmkPZ^P{AI%|9Tk5j8sj%)^gt4kQ$6p;x&D(UC!h( z^D^poL}xi#<*CQ{fG-8lh7nC6bN)E==VqAYfkF3D&p^`0Z#4jmcCJ7_0)T$DzyM-5 zsGQ%IFVJsaw#oP182}5qZ3CTlB($>KFkLjkQ=L-_-%9c>huVXcK``RS`Y8x51`I*P&DcBX`L zs;n4okPCw_GYfGuw>Gh)b+``6av63oKLt^%;g9?oL8gjX^GjCz{wfn(VOmRyL99}k zE%5D*gNA@;_Pw%08>r*kpdvpR_K53a4lH;=);m~Q1J$DPkOZ5Z;2hn6PVs5gic;A9 zx~-B_gq{AweQYB6m#Jjfm171U;APi{xe?|YmdHROOeq>twnR@amGh4knNdEtXPg(S z#?~e!!h>RX4_7hTE(1LJ#aH#M)_4HBJfH;4=Dj*G2IArguU=L0pwjyNXc2P@>qt%9 ztB>XKIJx+yFKhELXo5)ONRpv?W-JFm&rQB5lVl9rK7NYH^N_-Lo5DlF#59LkDll{j znrZk=&;`*fl-~dOjpkWZeJ!~&R z66)y+;^dE##@6nyGJ8`7{Vt=OZx!}cewkYbJY?-REq1pIoxLsujpQFW)n_%*bZQyo z918X1Pp!=;RoeiX8}c~~JmBe`Kcy}j0 zI0;0?^B+=%0Kge;24;Spi+d`O$$SLsE^!iqp`)F8gqFTnV9s+W;x5stubyNXx(W~$ zAj)4*Hl7zkMSAu*AEd^iSI!Ydk)F&U-3mF5aFP@ka)=GD3#on7{9Tn1e-~W}VAjO$ z)-Tb{KkF9T|!*LlU7}y9gd@*Svse1my^R4nDY`o~HVu$uvfuZm8 z`%Y#~zHk5G`)%;-g@s`k84#~4$S zUAj(;5AubbT^&I}G2d_gCCpZ76ed5-!9+2yjQS;RF_OY&B09t5foy5s>)JiPeBmY; z!UYbnhw4$Fn=Kd`!`#&)`v5XXo^Ih4sImUo9N$$Y^08r;f3a{8-#&)~^sEv{pqdec zZ;8Kv*&-Uq>m-(NNlCXJ7RQ{4cFqa(FwloaFyiv*8^m+C4SvfKVVHQ3Lqg_pa$+T0Y$>kl9`k+Z3g9pK?;2Vc^b%gwDmH zf#q>sImiCAl?fOp0*h9G)I5b=0Z*~y;D9bfFvYhVknr^P7NmKs9wWSsX0=W8m(xRg zJdx19Dd;QT&VsZI<~IoxAG!TVMG9KUoj>&2pco9YE$M%$B{ zEE`}Ej9B42g<`!xOHm_km?R=rt8Q02RVBF{_3+sq@R(b_f6?!&e9eeFiuzZ?6^R_b z;H`(qVOhl+@>J@CN&WCJW&AP>>#~jhoV7^aHJkSzoL*uIe^dOTeogen0!P@eT5}q@ zSBZlJ@bya={nf?3UA}gsJ%fT^>_MM%s@8RMjf+kN21G*@G(zr zAS-km(z61k&`^uUJ1VVDZ`?F0;*3{GLpzroe@Z$ONTf8*ecYd3PKWK&Zqot;?||z+ z%<>u@je+AnTS(!^gsvn|xcPo?_DjAv6?-fb#bU%}w>uF5zg038`7e(W=O*3|5O@0> zgY(F`3c7uoalw)J^eZA^-Pv~869ig89j$gff=0gnBM{!1scBLc zt%`44iACO7cw&5E9)-TCNHVR|xSQ~8(gR_Y^9SlP|~jg}UhK{@A`1fU?s zdrL+JWNqkMC@4z?W{EvIziqILb7Zs!LIIC&t52n(xRy=>O%TChN0U1TJzYF8p(2?e zKHrr|YRC0F+X60M@SR-T4k9Cz{NEauP>nT6(1^gMIsoxmlo%>v%@kK`h0zQu zu{K!3QQx5X#EJn#Cv5bg0@?H|flhXGA(<~S2=*AuOOVoif(Fz=lMo^8-P<<+MGn0Z zzDw#;)ZeH#C_i#;uoxh%q@~1iGQZ3Xoev;?>So$+li zbio=y`&f%#qa{7#3H@h{Uu3geNg13~5LRI&9)5E!(BS}Lz4cD*a?UpS+VC80o#iz0 zT7?-#pddGC6R8T&OX`nOQo<^zLvr=qEFz!n5|y@g&mk$7euPm8u2xj_R|0+$Zdop$9Kp#cV8mtZDY zm)pB(17?lwuI`7gV;saAF3YQ-#0hmr5RB)6uI^A^hykTRHX~!veJLQ*lE;r_P7Fhi zf9DfiAuJ$jEC=sN2|yTp@=W|F z>5U&>SPGR$(S1m;1|PHs;W@L9Q%qC|k$M&{yyS7#vnbd}XGl=Z+ZLJt_PVnNEhPh- z6kx(~3k*hlPCOhH6bsIg64aNOdRn7klqBU)2RnjJ#Qy|w@*nq4_3mNxxs3FX_~HW{ zm-S|s!fby8h4GF!?_ze$Aw{`MMRSo9FNIkmrCp>VaL4Iz{Tgickd5=+OdCw#^7bW* zbU`WcrJ(nGaB#dLA`*v|;+Q?u@BsR|wI8kO4cv^@+s7Gg^@kbl(o=O*djR+Kq1R-C zJB|kpAG*-rx|=XiZ;S8n2uo>O#-9XoEUNK-gVnO!GIfszAf?ul)hXv93S& zyb`w}Z7c&Y6j+_oD>J!Rr}Hs-jA;--4iqwBG$~_=F5Cs*`ekCoXgCYt2b$Xs-pFLq zp9F_c1qr2kQk7Ij9CFf;h6=-6eDe!Ih%C3ck%*U~l)D#);+l<%6i$IeRte4LkvO5L z`=Ek^BF$^xD|X1KYzYRTS!HtZ`8C~&T=|szO|h!M;6@0(n9G~wZ46r?xj9xYgZZnC!=ixf1ez(J{Xj z4cz+HK{S&2iQDI(RKDV}U4=<`GQjv5~eQ(`UZz596q#cu9tFFGWE^YsLp6A4D^g6F%tH zRuvKn5!3-uOO(S|sc~DCKCFWr=@J~P4p=9C_p#af+1FxFQx0s*&=-x+z%Ho}*E0ov z6Tx@vC)98%s!TCR4R5vbQ--yhZzESP_PzDZ;s)=6z{bPg4Zodwkz6_G?Rq$elrb8El*^PD*Wf3h5!$dv4cQ@6p{7?ktU@u0RKY zoko1u%O}j3zlEr4h5>&+==c8^?`Yz9eJJsTYCYa}-aJRT2wjSm8kV zgQ7j*Ye*kV{Vwi6e?D6>iR1zEWjfSARLyZD{8oV}O&#FxLsFMMA?g4I&N*m0VIzPY z56(7MMNt%gyYl+4@ z@d9LHd*7yWeusFcvzkZ8Y1_a0o*1fjb&KD=oI=;sPp*@8yH}lc5=s31Gwz4DrAW-( zJ_Fj&&l%K$!gwP5u-}O6SDFQvE{yIyx1emMSl>k6SfcZksFpp@N;o0-nv3$WP^QFN znmNbwN{}XnX=0rESYVyNz?k{HqDA!%uJbmlG58gGaG7-?p~%dDL=5vX-AIl04BXp3EIZp9&cL=**ee2di}D)&|$6x@6Y z?FFCd5bM-FR_l=qy7Y#{^o^5ydx`wyzA@Q$ujRu{3t3@n;Eo*x3Lsu$a>hqE*AzJ9 z5%ZgfsDVuKT0}muQ2z|w4MZwkI+Ypcu{4SoJsg!#c)LA6Q`*5^d?EI;$nb|Lhj0S{ zH;iOf+mnbo)%ixRA0fJ5_zRf%?GweXF=7pBLT^5oxCzX>fPk?E+wkU`{n=cvUTU?7 z#u;jF6TbxP5*?!|COPz=P}yO7;4a;=K4b*pu^vVpggXEuX-@)y>RVcoQDTIs371HgH~fLIv4T5*4rG`G?Q=m*|JR$@LD5|F=@qJerX zKBSfMd;JVjYUYdE&?g%*E zwDx|X#Be}Ifwd+9!BS1dweCUI3X>(fVorB&Poq2@!TU8kjflyTNHZXUv=ddk=s;Bk zlfXmC6sLkPF%e`(h-@p;m=oc%ccHUdRHM6ACT)vhoS1R$b~9?KaHOhDTiLgd&?wHc z`6=cy9`DGI2qZI$u$RT~%hv~L(S56#U~w*#-Ns(=t+D5$Z(?k$fC%Io)k-I>>%_c_!)WNh9~uVd+Z+TI)cB2 zy$bZgf}|Ep=cA=x4hD&ZBM?blS3?2c6`P@hNC^jJd%V9JkAMmOK6m?}K+JD6DH&fC z{!l1;@c@iZ3^vV<;XPWzw$<^y+8L5aHVHmJg4;*1Fkhbs9`b=SfZ)d>yH3)<4(`O} z(ef#cI!LmD=Vj!om#aX99Y#&^CHASEI4JJgi^O(;rFBK(s7{t;ruVzF>-(@MoX|`< z|I)wjFJ1U4IRg?d(Ffn@VvB#F@cz;HkZW#vDrs2& zb|TjD^N;V&RiL%(s1YLVzIALTRY*-P*8zt`#gPACr`!nuP7F8LM7EagBGxWm4SAjN zcb=|F^CGtq36`d#e^4iALbswuy3hnt$dq)JDmuDm_TBpAX&W4^O^SzSr=&}E-!~pt z7p4kws5tsidJ*@?eWxsm-^UPgLgTSdsT9b3e^6H2#;kdKV;|rS$fs)*(9l`Rg21Bm zWWp+du(rId^kvbg*f)kwtIudU%NM#pgt%h!D09J#?MXUG(JzFh3MUZkY}($ycpoSc zS&*^OvD`->8l*otGc6lAo~5D-l*L2AS=`5LTOx?Mq%bkVGbj0G z2>Fn8xq!{hPuP%Bo%1QXy_1(dh~_&KrKT>DMi9!n5vc+6r8sgE>AgVO#C_P(D{oA7 zZ;h}Pv73Fj#CxA7hFZa{xivMbt`d)x*(w`lS8q!}_T!%wbuQkKPJ4|yB+esuM(ZF; zWcb~)cSZV&yz{|zC!e@5JS%MnKZQ~-d2V4ndOO%+@z{JcH;VEY^XsL@4fd`;oJRzE zKpfcj6-lm1%;UJyBfFjFUir!fE5u-dulVc&9k|48eV|3Or>I`*s zjdV1HddN5S)!V{o*Dy5J)Wtq98|+Azdvfe*O6m2f?QpH`w-(!??e?VGjy#&+{nZ=b zEq;|Pjo`Ie1xBdNyKtxa2CINi7ah=H@L-Al9_7woRzh#!Q2}RAgzhYd{<_x^M)0-t zR-pQsCEqd_Rl|qSramtB8FDDZ4t2p}?F+w_53;e;V8*`dAT`ucqOu{+O{2JJ|J`NU zt(J!!DdOPx`)u1;>oQViB;(48$5oZG@Y{fdk9PU~ji6 z8z@FiAVUrDOxt+Gp%WCsEp2`lhE&N>NTh1$SUejqmk7I7w09Ib2U{H*koq5$ z`+8jV5cOGGZF&Ltm5f#DK#8=^@};WvExU!f^J|`#SEIt2s{OjALorDFbm#UF)^ zU`54V>Km`e(R1H}FGqo$%chU^LVxs5%bpl`Tc$L@T*{{42hTIsS!>>$PZS``^eXSi zPB|XjKVfs%o8M?2!&fGfn1;}=G&?)p%9XvB+)ApZFQ zkNc(r#eykzHFV0ADwVAeRy(QcalKwx@|CJ3`L-L4sq(yPktrB@SHxum-8+1;((9_@ zIj!pT*LUYyPMNs9O=*`lG}Fc0t>_%#P!npQ$&!TS{qNHb8^`03bC$rjzc1LNB|jUzo)b@{P|S&G;X`ou4WOS&U|gQ<&tB$?)iJhFczWPk{GW(bfPV^g)g-l$lU)RbC=(x9Y^)e z=UIXJrlc;vPs)fPFi4q~30sV1_$#-D{B<{&rVL-JFjcvc!YZ7Tcw&UkPbXvqS=}jA zLO+tr(ju715MBQZ)QYdEw}f>1ZUg;U@(2F0HfG3<*$EX)I0iK1q{Qv|qs*0%OFFK; zcq%=ZM1|fWLPj0jCC(M+@$Mm-g7?7~wduFP1 zkY$m)UfP(*mrsgSl5+aVy9i!)r|pBy(IbUn!!q5OL?7wuWG53U6kk*Ep!)KFT@Ptgk6iflxZl8yW1%V~=Hq8l8jR3sFxnZDgc8_-jmM7K8Ed?-DA$^*OMM zo5v~Xo|vp&Xx^pqsBg-QhZoU;;q^D%C89NaVn)C3#i?9Lg|6>h+A#GRu*$s3_$x-FM$)yZs)+gDB~8-Y*A_k5$k!uD>#39DCL zH?~P59~Ww;+b-)FJ)Z2A_qYL=oL?uYZeOWtj4dHmj!)$>1edyOVjtmnpSR5&nPr8= zR(X~aZlXINac%!1_mB>bl$W5{sW(CD+N6cE=jJ$5lK^w9jbzdkZ3&<`poZN|os%7V7N~5pB&|rwR_BN_zI{OiE%|>iuJc-kVS%x$@Y-%W>Fc`FU$nGo$Dngjze?(0GNE~W zL}v>BkRsUls149sr{)Lz2;>Wq@L?yI$#BYPS^;ylv8Zo3_)(l>jGSk&*NCn17Kv7p zR05}Q#fOckpmFz_x}=!=jpx?XpJ%57ik~jU21Fe`QF)_C8u?h(xF?rfi4{tlrVwwH zb^(f31XH;O1m=^i$^9qth7z5_XAp_kkUQF>kJ*pwwns(xgj@W1O*lPn3=xg^Fyk(s zNsR;FR7nfUDvQr0Q>>y%^;zs7wX|7JXgCQD=QKwe-pz!_*}Tpko~qs`0*et9Wh#Z= z%T$jJD=I&}w-qVwSE*FuT~OI3cbH_UT@*`af5#-a-8OY3^JEf~#{%ihO&79BI5yi+ zBLPX7XI?mq{_+Q{w6qLYo?WFcN$&bPTj?BFdU{-}HwxPpiD)XueMDGY)S>h`Z9v}% zHm#34To{^*hPFr|KVmVinO-NqOTgpNM}7xJ>9f~o4dZy*{dV=6a4h-V(2A<|UVd() zl};&ElfTQdDx%ctwAgjmxyW%*4u4;3eK{#d+hWFAe?>0F=dhHkpZ>0^YmOyQsO{Pt z?xndc#CF}xWKEJyWYe!^mf>y~SpJLrUgjraxy2}zn?!W~J)NB$2&}`Wo&+tsGw-P3 z-~Uis+EXblw zGTI@vwgAk$S>)q=!(jx^>l&9@1%gnM%bhAfZV8}~H?b^}7%qtZY0(2sSrW4C@2n%e zV&*9GuI0<}Xy4{JxuZ5TdB1(WbJ$6pzZI2~TkJ}UN@_gA{rJ{8UY#&if39>9F3Vfh z`Ju;OQ>D50quBqb(7I(9b_VoUy9T`6$#*l`Pub=M_ikFXPeopUAocu8| z?W_*Y5PjOkNdyMQBGE*eaJ&l^Jb6M7+w;R7t-=+zXu*;|ZtCq`gni$G^tG~mh|aYL zmsvoS)|(S6Ea|x>VT?m*0I4%vnM*|d$S=heEN#I#lwRVeGntP1SgpHb%D8>tQOK$_ zOf`%DBPZzx41LOk&=kIlpnk?jn|t)7`*fva5Jy*H??@t0R5veH%r{Tk4lp#n-pGNl zf0}4bGc;WZ2LJ1{Vfjp*Ys4ZD{*%b0=({rSZZw79wk*+!bA7MJ?HBFGVGcO?L&IYp z#&4%EEl)kJx z@gcm@sEJN+S;DZLYRx=Y)A1zK(&ryIjbVm3w1nqy8%@Wnb!bAUwcDmVN0HD{sO6;Y zeg=E2V?KsKPV2+}emyx{!4`R7-X$DXRkIGMqbm9dLyAUA!Faz9|7<*SI-`t{xQy@_ zg=h^{a1+5w69{ojfQ|mM(VpgWp85jRw{}~7)vih>$VQddl^-zLv>Rey6^zrTS90D< zd4|tgUJq*xIRCmTEKj2kkWv(>{S7HJvqvE`lbs21rtCc`6^bSNIMopXl(-do(ZyM& zzG-GOK~T#}5t6u7x~qZ?liv6^*OO1f@o8$baDH%r=EPbq-wP+Z3}D_(Qt+uFy^To3WAAMd|AME!1gf)@goawf?3ivPUZp_-Ib6{3FH&cNvQ_ddRE7)5t%fLXo0sv_>6ep?)wSf%0d zntW`STeh z3lIXH2}xaVZG1IwrMA8CQ|4cH2h5Y(F1zJg;LkgYN7SRkXA@7M(B{Uq0( zszmdjy*-IR#Evk8q|8K_xPK_X75Zq1eVTOT&C^-*>KpV8SlFi=F z{D8mDv?WfQSd}WJhM!oCDy9B8u{v=GizFSKs+f+_Ql>~DC#0dQ1^eb*WgAE}y6CA( zn?BKdgc93Joo=O$D*aJoyrWLGWUCTHXCuvkwZ3dVA??HlLZzQE^n=`nd;(B7zJVr2 za3cq>C5r z=okhbdVn&RDb-5p^#@Wl+fVQcd9W`68XPwA8a=B#$m`#V3j+x@VmHTq#jAeWNxUB- z!%B&(rHt7EUn`4HR2*z!W;67qbE){K17kxHYUcnl4t!zkgg7PIvO(~Mu=fkxVf~Uq zHt+Dq9Pxx}1pmI9`QGO!5{vy0i368ynjb1bAZ^Z zXbVX#?=^*nrJNSWmSg?fSZ4d<|5MmmM#Z&kYr6>^+%>p6!KHC`ceg-rm*5hl2@)i@ zYjAg$;BLV!K;usEFFAXhbI87T->>^ekN)$lSv6~{v1+ba@4Ij7F+gDdL@o<<2=P|J zvN|eU{?^svZmvoe`(FDQ^7q;9E82zIAu<5q^~aaJGJGHS{}96<`{!O6XDeF=8!HRX z7o9RH=8FFk#u(MHbzYQ0f3orIqfjpg5Oq2*6Sq?Fte>WrnDAg>2&9dR4_exkU{h$I zUwaJ;K4l!^N$28Ja(!=Uo?((;dt3zqR~V5ALQU=ts8k#eLjycq$k*ERi?teK(G7DP zuvVuxLw{1E+04_Oe=)&>aomIn{|K=^6|IirlE$LEX@}KpK_4EUN~2i%keMLQb1H`V zs#}q0jt)Xx5SsvNC1etRB8JRU>7d`3+`QIOL1#0MoQx|V^7wVMJ}I*JGzz+FMUGam zay?!HKI#wJNZ%-E8W8~@*6{>lYC5IZ#uX})BLR>u<(zM;O8GAAjnHC09q;#GW%Q=; zQ3N#4r(B05HVi9+%QTIKYzQC~5hQM-h&lGmJ|&&bw-p#$=E??3Ul@DZ^3ziO0x8{5 zQ`#p^{)C*$VZv9gCsbxkXx(q^&?Ov$=4Z&Dn#jLHq}5HtO5!_W2nhEO4x$iY1(PJz zA42r&>%6aRcOVjXk zlbxdx%S0}YIzC(STf#p_y*k(CZ;W=sy@ycf_WI-?P7*2Q!o`RGDGfDHGm0__w|IfO z(o`qHz1q>p({bDL%ddy$evgGCgM)95hEcFwpIM#!Tj&zTt?q8b+4kIgIKe12HI+#r#!|2#?k11v<1U+Ct6U`4MIVGlBB zsjTB1Tiys1i^-j<6V>n*cb4s^p0UuL$%7m6hEr3B>mvz=!>89_-OH=y=Dcg)Y#1c3 z_76=8unr!Ow>C&@yKUDw!d0(3h2tG_`>W0&4NqZSnvC(2dOIU`fvL33q(ez}Sm&JI z;EZ}Q?1~k4{;25-VNO#k8b4=)ryQY$V#tu5Ac!eSids=cH=&TE5H}^I^G7xX67T1}0*1 z09`;C8p^hEIiUsTG16%g9^uZAUc^sd$?m)l;B?CbPC%B!MbMA;2WP-s5TQ>C`Cc*I zz;t6@A+VfB+0;o&e{TNku_RGKY%GG4nXIX?O11qypWpxv165D9&lV=iii6bik6y;o zX`oi&xhZh&8?e>?RWENTu(Y!{W0FYVymnRZKqnitvom}M|Y(n#~j7>dSj)ZyX(LmZFlVRD+lv;^uUNjN<0Q<52+Ft7N z;lWVidt#ixwUuHiXxYAe*VvDlMI2M=4C7l2phEUWVk418PB4rn&rpsh5kVZhzOct# zqUPqD{*#=zPR4_>q6-1+r@%vUeTAFyaEOT6*uw?`!YlR`R)S0Y0~_SLBJ|`uF)BW# zql=;T6>`Y8hu@h3!V_KK2zjg^4(U~cOGA841F@I0U5`|41>)#2)PLJMn3L?uT z_nk6~+WVQ|XypZ}U7;HW*Rn~!GintTS-}mbW|4f3=S3dv4!rQ24)_G$HivGz+c5%R z4x^f??rlcBjyI20Z^U++e-on2GnjnNWj)ua6!+CKxI5sU<8W%N;mjm5Qd=29-aa0! z^yB3u_Ys<(f3bQ(B>lvews=?$VvXiXlCx0-M36p=2uBpd(210!Z2YyvrPd^ha)zi; zz-D@wvUjwF?Yoba_B$&yQR!@PI9bC&qOnB%Xl3;aBlYv|;7F$^qh*IsYFfuFiVmg5 zCu`f~wg`;C9Mt+QmK@|N@6V*Z4$Jdw##nX{W>RgxCZwh%c&C!5e@vAgZkJ{FtFE{M zJ|GAeTPs^iMt48Wczd#ME^O2*s?a5>kZu^~6r5TD;G+;v2OyvW2ChVm+{Z+`L$^%;*CSh<3v~u^Jp$fTV7ixg zkWE5fS(7EAWOu0P^U`@P+>m~3-B*n>Dnlj-Z^e&s*4ij}nw%BFX3hSpx(nnCdh^q- zQhb?0?_Tyg^;QO1-qtzCwr70p{9P?Eit^7HHDyeR(VJZFw4y@8Wx}aGaJk0DulI@q zA;q-HNp5Qm`#&=87%t*_XHZbDsM<~?voBIhmD5J=KO zOl@XuNOpHFK5lZFTfRreajJrBV15_$MZ5KjSSIJaoY>qEN@YHQDKf>1-9Ck=N3Gp; zIzt#(IBObn-b*rQWv@A3LMd>3d;4qhBjT1o)A%MAR)}Md$pbTkW&fKz9Q4R#v67j| z?4J2b1-c&q&(B@WS87qUZaG5vfMH&i?!YV0U&{|WaK#v%#u|aXH!Wg43W&PLDYI{B zi%X{H-|Sm})Q)=E5Vl+En9lc;VIy{$5E$YrgA456YkL!9et=7?K}JhVSrzq@d$R*t zonDJKd=C+7kDitZT!B3#bRYsra;`GAt^OuC?N+l`koWQ?CvQoU<<=_#uG#3Z-AQ*0 zr{uZlyn*C?Z#?gbd&`)NAd zGRMSBG>gkl8$YWC9`h|vx!|@#bpLtd#K|K`77n+#@8h+%kZ@%z+nrlTbP5ZY0F_T^ zs?0#bzg_>zfZB-t=Y=%W8PkR0f=yAZ>opCw6WiOtyd#$q?l%^7u#&IaSNUq>(mF7E zH&SKR=_GQm5QfMyGTg-;Q0+7`l!~B=B+fB)KBN?R=`zJvcd3fS!6C~xy9w4splAG; zBY}5~_OduWufZ<2Yai5}GjH@P*vyrdefUv2yVIe7fE$B~#4!6)Q}pZMCk=D1bgZK! zXEUOASOghZwpt+-izgM--vjhc1H5};7ae10l27;r1Cb}jOv$I56#Fi3}{5a7XHw`xc@AGqhHrJlZIp40}Za;YlTeOP*NJi1l z+7XkVGRoP3hC}hADOnJ;4R}FAr?F1NtmatWr{B0q9^@q8XAF%Qmd|fn&yaOUq?xxlg5gnMAb?>1o)flyN-H#3@Dp9rH`c3usWp2cT zPKG?C-IM#y2lRaFNC)U_PenVI4)2?>9|XuDOj=Qqc3=AW>wHBjRM=KN<+dZ_=1sd| zcI{_lnwa*ED>M`(DxRaXoLI}RW}u30J6kM)-*XgD+nKl9Y2fsV)4V7?7tXD0`EaKN zXi-2Z0Qzp%T`ZoFFSCYnHLo2-qkvG_ZV#T4Frwv*+4lH5w&%G+L$yI#_0pc~+B36* zFqsP4C5IZ>;pdIqCm^uv07`I{s?z)nDhF>gH`_4^)4{yuEnJ_j^I%kGnS^}o{Z^O>kkIhd&kKojFCLB*I|>RmDF>^eg%%y76#>kUdUyF{zpIjrD`B*i4P=-S-$UV?yd~Y_gYsn zj-l%AOfr1V-|0T5rNogV9~Uad*KHjww&??x+Q5GQ(tuNCB0+OQ0st78Uhe9qJUIW@ z)sg@6uFloP%I4Pzh(8WM47*GIwXM_Dbzb7c_O17Y{*0$sgsDr z+J&#u|3G!V9yBC|-G3n!PLf`MO*bYkIr7xT1?nmW&26uM8AjLZPW@k1dw`9!IN{Uw_gTV)gzEcG+Us z=#@m9*2+%%k2)WC?<2Q{*+n~B1T@NE%e2zXVz|>59i}576?g6`K`BMaP{5%fdTQf$Vn8WmS9z1Y^qNYwTo3onS;^D^$!0!o5%5j0_LG~2KN6c@H^y!i zrXnB-dKcK@A))n^%}=9MYZ}jjcURQY|{iUY)HJhw_W_kyE;Mxb;bQLqcn-(D>!+ZWp zz{u%`oO2=(CCI$VC6F&l>@sO?YS*{n!x;uY1iGvLM#h{uJ3^)xI6H~W`pMV0 za!izLpw9p@XuP|xir&`mE~y9ANEL><&_2?S-&OnNsmCam`y=skcawXH+&D>QAgal2 zU3#9r#u3h7sN~E5gk)TnE*%Nb*IIN{5`v$VkV_yXGhrnu#&XAfE~JT*5-m04xa;X- z#9aGdyyrLlENS>nm1afcT^5Pp52Wb_=Eiy6(zC44m<)m zi!_Ubf~<0tSQhVv2wMIOmX1j94qYVT6VKqDFpXSFxbR6isuU*`B-7C>TQpk?w1rc& zkCRKE<6=n<6UH6$85RIij#ww{g33feN>+2DTqY7~Fl6^=ZcabcFX5No z5JfZ6#*Xk&LtA;4czDHPd9E6t2Q*AGCVH|*N~#v0{@EaC+Q-r`Z zIa#khgV6bA=s|opMrbPaP+sL|*H2K^*GcOY;Mlhu)Ej4Xku;(3P)PCvN-Ih+(H-e! zb0iVmZ?R9qiF|2?U_zvdR4`f7pm*th1bU`X#J=7nV^hgi8o3-R0b|`Xd*`X~)-0j& z{W?^q1ajc{944eRWo?VqiHbY+$!Y=)OE`>dbU-M*e|A=xA*>Q2c@?6FNtef`g4xv} z9b=8jE!+e1mG5uttNWdPEuySkEX~ zh)@1p?=k=i8=?`LR!0mES0^0nmdfmW#{BL4YMc6q7)qnp!5YiK z%3|Lskf$*Ds%f2}F|x`I6?z+OOqT-8WxJ*hff+3hO}ypgJvsg&@=22#o8;V`r6N`ftis* zBUDE~4Tdeqap2uZ_6asClp{fH&VV{&8|w*iP|D1~RnAyAt&!h}18FC9_mnQz#z3}d zW9Nz<_5xRFSs-!R`QN;$X0_AynKtKv?9#zzlL$3YG=gx9W1J0+L<=yGzwD>h;3Ct7 zQtnNn0l$kQ37MGvrVghey-ReKWK2K7BsBs^;k^D_msFf4rX_<AJa0xKWxOeG~@vl(fSK#Wa>0U-vYcx%tym1=k)eMg^#bH5LWjv^9PO{{YZ* zSN0`WKl}(P&RAquHaDu)xn^&;$P}+aWv!oNTBD}%L83vQ%+n`zB**Ub2G!JgLTaf+ ziTE&#uA?pikuD=f1w^ec`efc5XS%9k&9aAX7O)QMXgx0R2ZUFIdm+4yuI4(RP1j9v1mr9|H%h$tnQ2W3*gS;Q?T zcGBrmj{)}PaL0RaTm5B`sw{hIbq>t-m{i$t++N!YQ3yzUHy>1Klk{R*TVqV%-!7{a zMg0+yqnKj)+WFlz5I=Q1_>KsY8y1cvR#Ht%2 z2t|IwCg8 z>3(Wc+%@rw{(NS&`gA_7co#^N?q_9w(<0$x*@oS#gDt}{)vb@TaFb!<6137+4pliJtq-<-G~@P@iY#+Y5^138 zMRHmN+r;&@E-q?_R3zAr?YlEQ?#H*)g>^cjDqnM3JYL5-{)iQOjRnjL4YVTFkUjQv zaHkc5?t?$sp&PIwr9|;s!4)^l;oZPMjP|Vy-GRgFz7`}5=p6sqQ%~~QdLz0w5MV; zY|aH@p^(4M(m0+{mj~{p7>MdPX{TdH=VdU^Da^TB#%mbwQ>E=_>KoM6iQmg2ijGS} z$Q8Edz)3_G7lRzlLchx?Crj6U_Gwxyq0d*NwNnbsh^Q(5*-pPYff^PhZXRLY_gM~m zi)H6%yxfD%#+DvoC1=csu9q4KZ-$CCp0Pd5N~BN`9WH8(dJ+P$nz??t&<#9Idrpl= zKwql9H@^XA%{ZTqijELmeN)Xyd&+~6hg;^(4UJx0SqoGobdcb&ta**uDS`&wReBUyc;P;kk8Atf)LI^ufEq zzJy3;T=daUB1WOGeIE)*u9-!QeEm~Lq=rxuE-WQ`47qUMpoZI8$}tjN71*#i=YYg`7(s!xHPchWh3Xhuk5=OnRkFsQ~ zt{1pVuNUAI^Y7a4n43en*4J&&^{>F?9|FVTwJI)O6Iq`gT$gXuhH!YyujXsjc$l&R zljNdpELJwBIY9PJbl9Riy;(cm4Kh0n1%f}tJ~|%-?8vIDx%eeWs``*n-HVaC+{h|4EI+ZfzEcKBi=9&?JAegd%ACB@YfxvgTWVu*AV%r zN)URP-JH$P5!s-i0LV&Or8(3XrmLOwHC0U;DjD|6=?4|$70zp}{t9=sgP#>5fykYY z=p86$%@;MKw)m-E_rDvaLmlxV0IJyKidp#VEp;#&oV@C3Fv5m;> z_4B+%ZSETf|Ckzb@l3a(gT7*H^jY-*=Hvymt%U2WH&tj}h4U+(7~{3Y?zG+!WH%k}IlTv%kcjNe@`E3Tf~UOjP1vjl3$*Q@ zSLD3Exj@y}E@uOorPe=$+)6=8cAc)rLtUg){1cZg-x7tujn=y-<;d}lvu|# z<+$@&aibyJy#?f)`scbCdbm6(m~HUe9Zc)-_~nOPhVtUklvhra_dsE($TPd?aCD_r z2E)Q0vTO!x4GR=pB9-qxeCH~!-f8~iaQ6W@4H^C8EeQUi{kC>^nc3e41TS3<-uw}p;Xly+NbtWs2>!3^yu>~V+d#ia z@E_Uvk72^!lm6FC{*Lx#l4$;jw&DMW{add74E(Pv{B}KfsiN~T@S^|~nE!ot{~E); z8iC*d|Moz5InBQ%cwROfQM?HJD1eaUf5-k$L7uNQwR< z{f`!=zu3Q9m|n7fm(E|_UC3Xsj{=C4|B?M?A^k7-??SqgEcCBg1OSkKeKUWpFD$d) G|NbAF8pW6Z diff --git a/docs/Package/clpBNR-0.8.1.zip b/docs/Package/clpBNR-0.8.1.zip deleted file mode 100644 index 0bc8a8a761849e573ed85edc016408f30cc6bc64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30206 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 diff --git a/docs/Package/clpBNR-0.9.0.zip b/docs/Package/clpBNR-0.9.0.zip deleted file mode 100644 index b6817ed8e3766ed196601d131399a5e99c393e6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34710 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 MoDWQ251T+d01b0Y%K!iX diff --git a/docs/Package/clpBNR-0.9.1.zip b/docs/Package/clpBNR-0.9.1.zip deleted file mode 100644 index 68384e0bef2efedc5b702437517ef2a0cfd3e082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35158 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 Hwt#p5&#?=t diff --git a/docs/Package/clpBNR-0.9.2.zip b/docs/Package/clpBNR-0.9.2.zip deleted file mode 100644 index ed6e42831793e6b9f59717b521c318ac9c19c91b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34610 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 diff --git a/docs/Package/clpBNR-0.9.3.zip b/docs/Package/clpBNR-0.9.3.zip deleted file mode 100644 index e10a056270ba6ea19f4a23903c3db687a79ba3c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35985 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 diff --git a/docs/Package/clpBNR-0.9.4/pack.pl b/docs/Package/clpBNR-0.9.4/pack.pl deleted file mode 100644 index fa487be..0000000 --- a/docs/Package/clpBNR-0.9.4/pack.pl +++ /dev/null @@ -1,5 +0,0 @@ -name(clpBNR). -title('CLP over Reals using Interval Arithmetic - includes Rational, Integer and Boolean domains as subsets.'). -version('0.9.4'). -author('Rick Workman', 'ridgeworks@mac.com'). -home('https://github.com/ridgeworks/clpBNR_pl'). diff --git a/docs/Package/clpBNR-0.9.4/prolog/clpBNR.pl b/docs/Package/clpBNR-0.9.4/prolog/clpBNR.pl deleted file mode 100755 index f804a44..0000000 --- a/docs/Package/clpBNR-0.9.4/prolog/clpBNR.pl +++ /dev/null @@ -1,825 +0,0 @@ -% -% CLP(BNR) == Constraints On Boolean, Integer, and Real Intervals -% -/* The MIT License (MIT) - * - * Copyright (c) 2019,2020 Rick Workman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -:- module(clpBNR, % SWI module declaration - [ - op(700, xfx, ::), - op(150, xf, ...), % postfix op currently just for output - (::)/2, % declare interval - {}/1, % define constraint - interval/1, % filter for clpBNR constrained var - list/1, % for compatibility - domain/2, range/2, % for compatibility - delta/2, % width (span) of an interval or numeric (also arithmetic function) - midpoint/2, % midpoint of an interval (or numeric) (also arithmetic function) - median/2, % median of an interval (or numeric) (also arithmetic function) - lower_bound/1, % narrow interval to point equal to lower bound - upper_bound/1, % narrow interval to point equal to upper bound - - % additional constraint operators - op(200, fy, ~), % boolean 'not' - op(500, yfx, and), % boolean 'and' - op(500, yfx, or), % boolean 'or' - op(500, yfx, nand), % boolean 'nand' - op(500, yfx, nor), % boolean 'nor' - op(500, yfx, xor), % boolean 'xor' - op(700, xfx, <>), % integer not equal - op(700, xfx, <=), % set inclusion - op(700, xfx, =>), % set inclusion - - % utilities - print_interval/1, print_interval/2, % pretty print interval with optional stream - small/1, small/2, % defines small interval width based on precision value - solve/1, solve/2, % solve (list of) intervals using split to find point solutions - splitsolve/1, splitsolve/2, % solve (list of) intervals using split - absolve/1, absolve/2, % absolve (list of) intervals, narrows by nibbling bounds - enumerate/1, % "enumerate" integers - global_minimum/2, % find interval containing global minimums for an expression - global_minimum/3, % global_minimum/2 with definable precision - global_maximum/2, % find interval containing global minimums for an expression - global_maximum/3, % global_maximum/2 with definable precision - nb_setbounds/2, % non-backtracking set bounds (use with branch and bound) - partial_derivative/3, % differentiate Exp wrt. X and simplify - clpStatistics/0, % reset - clpStatistic/1, % get selected - clpStatistics/1, % get all defined in a list - watch/2 % enable monitoring of changes for interval or (nested) list of intervals - ]). - -/* missing(?) functionality: utility accumulate/2. */ - -/* supported interval relations: - -+ - * / %% arithmetic -** %% includes real exponent, odd/even integer -abs %% absolute value -sqrt %% positive square root -min max %% binary min/max -== is <> =< >= < > %% comparison -<= => %% inclusion -and or nand nor xor -> %% boolean -- ~ %% unary negate and not -exp log %% exp/ln -sin asin cos acos tan atan %% trig functions - -*/ - -:- use_module(library(arithmetic)). % for interval arithmetic functions -:- use_module(library(lists),[subtract/3,union/3]). % for flags - -:- style_check([-singleton, -discontiguous]). % :- discontiguous ... not reliable. - -% -% SWIP optimise control - set flag to true for compiled arithmetic -% -:- (current_prolog_flag(optimise,Opt), - nb_setval('clpBNR:temp',Opt), % save current value to restore on :- initialization/1 - set_prolog_flag(optimise,false) - ). -% -% Define debug_clpBNR_/2 before turning on optimizer removing debug calls. -% -debug_clpBNR_(FString,Args) :- debug(clpBNR,FString,Args). - -:- set_prolog_flag(optimise,true). - -current_node_(Node) :- % look back to find current Op being excuted for debug messages - prolog_current_frame(F), % this is a little grungy, but necessary to get intervals - prolog_frame_attribute(F,parent_goal,doNode_(Arg,Op,_,_,_,_)), - Arg =.. [_|Args], - Node=..[Op|Args]. - -% -% statistics -% - -% assign,increment/read global counter (assumed to be ground value so use _linkval) -g_assign(G,V) :- nb_linkval(G,V). -g_inc(G) :- nb_getval(G,N), N1 is N+1, nb_linkval(G,N1). -g_incb(G) :- nb_getval(G,N), N1 is N+1, b_setval(G,N1). % undone on backtrack -g_read(G,V) :- nb_getval(G,V). - -:- discontiguous - clpBNR:clpStatistics/0, clpBNR:clpStatistic/1, - sandbox:safe_global_variable/1. - -sandbox:safe_global_variable('clpBNR:userTime'). -sandbox:safe_global_variable('clpBNR:inferences'). -sandbox:safe_global_variable('clpBNR:gc_time'). - -clpStatistics :- - % garbage_collect, % ? do gc before time snapshots - statistics(cputime,T), g_assign('clpBNR:userTime',T), % thread based - statistics(inferences,I), g_assign('clpBNR:inferences',I), - statistics(garbage_collection,[_,_,G,_]), g_assign('clpBNR:gc_time',G), - fail. % backtrack to reset other statistics. - -clpStatistic(userTime(T)) :- statistics(cputime,T1), g_read('clpBNR:userTime',T0), T is T1-T0. - -clpStatistic(gcTime(G)) :- statistics(garbage_collection,[_,_,G1,_]), g_read('clpBNR:gc_time',G0), G is (G1-G0)/1000.0. - -clpStatistic(globalStack(U/T)) :- statistics(globalused,U), statistics(global,T). - -clpStatistic(trailStack(U/T)) :- statistics(trailused,U), statistics(trail,T). - -clpStatistic(localStack(U/T)) :- statistics(localused,U), statistics(local,T). - -clpStatistic(inferences(I)) :- statistics(inferences,I1), g_read('clpBNR:inferences',I0), I is I1-I0. - - -:- include(ia_primitives). % interval arithmetic relations via evalNode/4. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% SWI-Prolog implementation of IA -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Intervals are constrained (attributed) variables. -% -% Current interval bounds updates via setarg(Val) which is backtrackable -% -% interval(X) - filter -% -interval(X) :- get_attr(X, clpBNR, _). - -% internal abstraction -interval_object(Int, Type, Val, Nodelist) :- - get_attr(Int, clpBNR, interval(Type, Val, Nodelist, Flags)). - -% flags (list) abstraction -get_interval_flags_(Int,Flags) :- - get_attr(Int, clpBNR, interval(Type, Val, Nodelist, Flags)). - -set_interval_flags_(Int,Flags) :- % flags assumed to be ground so no copy required - get_attr(Int, clpBNR, interval(Type, Val, Nodelist, _)), - put_attr(Int, clpBNR, interval(Type, Val, Nodelist, Flags)). - -% -% Interval value constants -% -universal_interval((-1.0Inf,1.0Inf)). - -% Finite intervals - 64 bit IEEE reals, -finite_interval(real, (-1.0e+16,1.0e+16)). -finite_interval(integer, (L,H)) :- %% SWIP: - current_prolog_flag(bounded,false),!, % integers are unbounded, but use tagged limits for finite default - current_prolog_flag(min_tagged_integer,L), - current_prolog_flag(max_tagged_integer,H). -%finite_interval(boolean, (0,1)). - -% Empty (L>H) -%empty_interval([L,H]) :- universal_interval([H,L]). - -% -% non-backtracking set bounds for use with branch and bound -% -nb_setbounds(Int, [L,U]) :- - get_attr(Int, clpBNR, Def), - Def = interval(_, Val, _, _), - ^(Val,(L,U),NewVal), % new range is intersection (from ia_primitives) - nb_setarg(2, Def, NewVal). - -% -% get current value -% -getValue(Int, Val) :- - number(Int) - -> Val=(Int,Int) % numeric point value - ; get_attr(Int, clpBNR, interval(_, Val, _, _)). % interval, optimized for SWIP - -% -% set monitor action on an interval -% -watch(Int,Action) :- - atom(Action), - get_interval_flags_(Int,Flags), !, - lists:subtract(Flags,[watch(_)],Flags1), % remove any previous setting - (Action = none -> true ; set_interval_flags_(Int,[watch(Action)|Flags1])). -watch(Ints,Action) :- - is_list(Ints), - watch_list_(Ints,Action). - -watch_list_([],Action). -watch_list_([Int|Ints],Action) :- - watch(Int,Action), - watch_list_(Ints,Action). - -% check if watch enabled on this interval -check_monitor_(Int, Update, interval(Type,Val,Nodelist,Flags)) :- - (memberchk(watch(Action), Flags) - -> once(monitor_action_(Action, Update, Int)) % in ia_utilities - ; true - ). - -% -% set interval value (assumes bounds check has already been done) -% -putValue_(New, Int, NodeList) :- - get_attr(Int, clpBNR, Def), !, % still an interval - (debugging(clpBNR,true) -> check_monitor_(Int, New, Def) ; true), - Def = interval(Type,_,Nodes,_), % get Type and Nodes before setValue_ - setValue_(New,Int,Def), % set new value - queue_nodes_(Type,New,Int,Nodes,NodeList). % construct node list to schedule -putValue_((L,H), Num, NodeList) :- number(Num), % catch things like [0,-0.0] - L=:=Num, H=:=Num. - -setValue_((L,H),Int,Def) :- L=:=H, !, % narrowed to a point, unify with interval - setarg(3,Def,_NL), % clear node list (so nothing done in unify) - (rational(L) -> Int=L ; Int=H). % if either bound rational (precise), use it -setValue_(New,Int,Def) :- % update value in interval (backtrackable) - setarg(2,Def,New). - -queue_nodes_(real,_,_,Nodes,Nodes). % type real - just use Nodes -queue_nodes_(integer,(L,H),_,Nodes,Nodes) :- % type integer #1 with integral bounds - integral_(L), integral_(H), !. % run Nodes if bounds integers or infinities -queue_nodes_(integer,_,Int,_,[node(integral,_,0,$(Int))|_]). % type integer #2 - % schedule an "integral" node to re-adjust bounds (Nodes run on adjustment) - -integral_(1.0Inf). -integral_(-1.0Inf). -integral_(B) :- integer(B). - -% -% range(Int, Bounds) for compatability -% -% for interval(Int) and number(Int), check if value is (always) in specified range, unifying any vars with current value -range(Int, [L,H]) :- getValue(Int, (IL,IH)), number(IL), !, % existing interval - (var(L) -> L=IL ; L= H=IH ; IH= 0.0. % contains 0 (handles (-inf,inf) -median_(L,H,M) :- M is copysign(sqrt(abs(L))*sqrt(abs(H)),L). % L and H have same sign - -% -% lower_bound and upper_bound -% -lower_bound(Int) :- - getValue(Int,(L,H)), - Int=L. - -upper_bound(Int) :- - getValue(Int,(L,H)), - Int=H. - -% -% Interval declarations -% - -Ints::Dom :- is_list(Ints),!, - intervals_(Ints,Dom). - -R::Dom :- var(R), var(Dom), !, % declare R = real(L,H), Note: R can be interval - int_decl_(real,(_,_),R), - domain(R,Dom). - -R::Dom :- var(Dom), !, % domain query (if interval(R) else fail) - domain(R,Dom). % "domain" query, unify interval Type and Bounds - -R::Dom :- % interval(R) or number(R) and nonvar(Dom) - Dom=..[Type|Bounds], - (Bounds=[] -> Val=(_,_) ; Val=..[,|Bounds]), - int_decl_(Type,Val,R). - -int_decl_(boolean,_,R) :- !, % boolean is integer; 0=false, 1=true, ignore any bounds. - int_decl_(integer,(0,1),R). - -int_decl_(Type,(L,H),R) :- interval_object(R,IType,CVal,_NL), !, % already interval - lower_bound_val_(Type,L,IL), % changing type,bounds? - upper_bound_val_(Type,H,IH), - applyType_(Type, IType, R, T/T, Agenda), % coerce reals to integers (or no-op). - ^(CVal,(IL,IH),New), % low level functional primitive - updateValue_(CVal, New, R, 1, Agenda, NewAgenda), % update value (Agenda empty if no value change) - stable_(NewAgenda). % then execute Agenda - -int_decl_(Type,(L,H),R) :- var(R), !, % new interval (R can't be existing interval) - lower_bound_val_(Type,L,IL), - upper_bound_val_(Type,H,IH), - IL= - R=IL ; % point range, can unify now - put_attr(R, clpBNR, interval(Type, (IL,IH), _NL, [])) % attach clpBNR attribute - ). - -int_decl_(Type,(L,H),R) :- (Type=integer -> integer(R) ; number(R)), !, % R already a point value, check range - lower_bound_val_(Type,L,IL), IL= IL=Lv ; IL is nexttoward(Lv,-1.0Inf)). -lower_bound_val_(integer,L,IL) :- % integer: make integer, fail if inf - IL is ceiling(L), IL \= 1.0Inf. - -upper_bound_val_(Type,H,IH) :- var(H), !, % unspecified bound, make it finite - finite_interval(Type,(_,IH)). -upper_bound_val_(real,H,IH) :- % real: evaluate and round outward (if float) - Hv is H, Hv\= -1.0Inf, - (rational(Hv) -> IH=Hv ; IH is nexttoward(Hv,1.0Inf)). -upper_bound_val_(integer,H,IH) :- % integer: make integer, fail if -inf - IH is floor(H), IH \= -1.0Inf. - -applyType_(integer, real, Int, Agenda, NewAgenda) :- !, % narrow real to integer - get_attr(Int,clpBNR,interval(Type,Val,NodeList,Flags)), - (debugging(clpBNR,true) -> check_monitor_(Int, integer, interval(Type,Val,NodeList,Flags)) ; true), - Val = (L,H), - lower_bound_val_(integer,L,IL), - upper_bound_val_(integer,H,IH), - (IL=IH - -> Int=IL % narrowed to point - ; (put_attr(Int,clpBNR,interval(integer,(IL,IH),NodeList,Flags)), % set Type (only case allowed) - linkNodeList_(NodeList, Agenda, NewAgenda) - ) - ). -applyType_(Type,IType,Int, Agenda, Agenda). % anything else: no change - -% -% this goal gets triggered whenever an interval is unified, valid for a numeric value or another interval -% -attr_unify_hook(interval(Type,(L,H),Nodelist,Flags), V) :- % unify an interval with a numeric - (Type=integer -> integer(V) ; number(V)), % check that V is consistent with Type - L= monitor_unify_(interval(Type,(L,H),_,Flags), V) ; true), - linkNodeList_(Nodelist, T/T, Agenda), - stable_(Agenda). % broadcast change - -attr_unify_hook(interval(Type1,V1,Nodelist1,Flags1), Int) :- % unifying two intervals - get_attr(Int, clpBNR, interval(Type2,V2,Nodelist2,Flags2)), !, %%SWIP attribute def. - mergeType_(Type1, Type2, NewType), % unified Type=integer if either is an integer - ^(V1,V2,V), % unified range is intersection (from ia_primitives), - mergeNodes_(Nodelist2,Nodelist1,Newlist), % unified node list is a merge of two lists - mergeFlags_(Flags1,Flags2,Flags), - (debugging(clpBNR,true) -> monitor_unify_(interval(Type1,V1,_,Flags), Int) ; true), - % update new type, value and constraint list, undone on backtracking - put_attr(Int,clpBNR,interval(NewType,V,Newlist,Flags)), - linkNodeList_(Newlist, T/T, Agenda), - stable_(Agenda). % broadcast change - -attr_unify_hook(interval(Type,Val,Nodelist,Flags), V) :- % new value out of range - g_inc('clpBNR:evalNodeFail'), % count of primitive call failures - debugging(clpBNR, true), % fail immediately unless debug=true - debug_clpBNR_('Failed to unify ~w::~w with ~w',[Type,Val,V]), - fail. - -% awkward monitor case because original interval gone -monitor_unify_(IntDef, Update) :- % debbuging, manufacture temporary interval - put_attr(Temp,clpBNR,IntDef), - check_monitor_(Temp, Update, IntDef). - -% if both real, result type is real, else one is integer so result type integer -mergeType_(real, real, real) :- !. -mergeType_(_, _, integer). - -% optimize for one or both lists (dominant case) -mergeFlags_([],Flags2,Flags2) :- !. -mergeFlags_(Flags1,[],Flags1) :- !. -mergeFlags_(Flags1,Flags2,Flags) :- - lists:union(Flags1,Flags2,Flags). % ambiguous if both have same flag set to different values - -mergeNodes_([N],NodeList,NodeList) :- var(N),!. -mergeNodes_([N|Ns],NodeList,[N|NewList]) :- - N=node(Op,_,_,Ops), - notIn_(NodeList,Op,Ops), !, % test for equivalent node already in NodeList - mergeNodes_(Ns,NodeList,NewList). -mergeNodes_([N|Ns],NodeList,NewList) :- - mergeNodes_(Ns,NodeList,NewList). - -notIn_([node(NOp,_,_,NOps)|Ns],Op,Ops) :- % equivalent node(Op, _, _,Ops) ==> failure - NOp==Op, NOps==Ops, % avoid unification of ops and operands (Op may be more than just an atom) - !, fail. -notIn_([N|Ns],Op,Ops) :- % keep searching - nonvar(N), !, - notIn_(Ns,Op,Ops). -notIn_(_,_,_). % end of search - -% -% New Constraints use { ... } syntax. -% -{}. -{Cons} :- - addConstraints_(Cons,T/T,Agenda), % add constraints - stable_(Agenda). % then execute Agenda - -addConstraints_(C,Agenda,NewAgenda) :- - constraint_(C), !, % a constraint is a boolean expression that evaluates to true - simplify(C,CS), % optional - buildConstraint_(CS, Agenda, NewAgenda). -addConstraints_((C,Cs),Agenda,NewAgenda) :- % Note: comma as operator - nonvar(C), - addConstraints_(C,Agenda,NextAgenda), !, - addConstraints_(Cs,NextAgenda,NewAgenda). -addConstraints_([],Agenda,Agenda). -addConstraints_([C|Cs],Agenda,NewAgenda) :- - nonvar(C), - addConstraints_(C,Agenda,NextAgenda), !, - addConstraints_(Cs,NextAgenda,NewAgenda). - -% low overhead version for internal use -constrain_(C) :- - buildConstraint_(C,T/T,Agenda), - stable_(Agenda). - -buildConstraint_(C,Agenda,NewAgenda) :- - debug_clpBNR_('Add ~p',{C}), - build_(C, 1, boolean, Agenda, NewAgenda), !. - -:- include(ia_simplify). % simplifies constraints to a hopefully more efficient equivalent - -% -% build a node from an expression -% -build_(Int, Int, VarType, Agenda, NewAgenda) :- % existing interval object - interval_object(Int, Type, _, _), !, - applyType_(VarType, Type, Int, Agenda, NewAgenda). % coerces exsiting intervals to required type -build_(Var, Var, VarType, Agenda, Agenda) :- % implicit interval creation. - var(Var), !, - universal_interval(UI), - int_decl_(VarType,UI,Var). -build_(Num, Num, _, Agenda, Agenda) :- % rational numeric value is precise - rational(Num), !. -build_(Num, Int, VarType, Agenda, Agenda) :- % floating point constant, may not be precise - float(Num), !, - int_decl_(VarType,(Num,Num),Int). % may be fuzzed, so not a point -build_(pt(Num), Num, _, Agenda, Agenda) :- % point value, must be a number - number(Num), !. -build_(Exp, Num, VarType, Agenda, Agenda) :- % pre-compile ground Exp (including pi and e) - ground(Exp), - safe_(Exp), % safe to evaluate - L is roundtoward(Exp,to_negative), % rounding only affects float evaluation - (float(L) % not precise -> interval - -> (H is roundtoward(Exp,to_positive), int_decl_(VarType,(L,H),Num)) % if precise use L - ; Num=L % else use precise value - ), !. -build_(Exp, Z, _, Agenda, NewAgenda) :- % deconstruct to primitives - Exp =.. [F|Args], - fmap_(F,Op,[Z|Args],ArgsR,Types), !, % supported arithmetic op - build_args_(ArgsR,Objs,Types,Agenda,ObjAgenda), - newNode_(Op,Objs,ObjAgenda,NewAgenda). - -build_args_([],[],_,Agenda,Agenda). -build_args_([Arg|ArgsR],[Obj|Objs],[Type|Types],Agenda,NewAgenda) :- - build_(Arg,Obj,Type,Agenda,NxtAgenda), - build_args_(ArgsR,Objs,Types,NxtAgenda,NewAgenda). - -% only called when argument is ground -safe_(E) :- atomic(E), !. % all atomics, including [] -safe_([A|As]) :- !, - safe_(A), - safe_(As). -safe_(F) :- - current_arithmetic_function(F), % evaluable by is/2 - F =.. [Op|Args], - \+memberchk(Op,[**,sin,cos,tan,asin,acos,atan]), % unsafe operations due to rounding - safe_(Args). - -% a constraint must evaluate to a boolean -constraint_(C) :- nonvar(C), C =..[Op|_], fmap_(Op,_,_,_,[boolean|_]), !. - -% map constraint operator to primitive/arity/types -fmap_(+, add, ZXY, ZXY, [real,real,real]). -fmap_(-, add, [Z,X,Y], [X,Z,Y], [real,real,real]). % note subtract before minus -fmap_(*, mul, ZXY, ZXY, [real,real,real]). -fmap_(/, mul, [Z,X,Y], [X,Z,Y], [real,real,real]). -fmap_(**, pow, ZXY, ZXY, [real,real,real]). -fmap_(min, min, ZXY, ZXY, [real,real,real]). -fmap_(max, max, ZXY, ZXY, [real,real,real]). -fmap_(==, eq, ZXY, ZXY, [boolean,real,real]). % strict equality -fmap_(=:=, eq, ZXY, ZXY, [boolean,real,real]). % Prolog compatible, strict equality -fmap_(is, eq, ZXY, ZXY, [boolean,real,real]). -fmap_(<>, ne, ZXY, ZXY, [boolean,integer,integer]). -fmap_(=\=, ne, ZXY, ZXY, [boolean,integer,integer]). % Prolog compatible -fmap_(=<, le, ZXY, ZXY, [boolean,real,real]). -fmap_(>=, le, [Z,X,Y], [Z,Y,X], [boolean,real,real]). -fmap_(<, lt, ZXY, ZXY, [boolean,real,real]). -fmap_(>, lt, [Z,X,Y], [Z,Y,X], [boolean,real,real]). -fmap_(<=, in, ZXY, ZXY, [boolean,real,real]). % inclusion/subinterval -fmap_(=>, in, [Z,X,Y], [Z,Y,X], [boolean,real,real]). % inclusion/subinterval - -fmap_(and, and, ZXY, ZXY, [boolean,boolean,boolean]). -fmap_(or, or, ZXY, ZXY, [boolean,boolean,boolean]). -fmap_(nand, nand, ZXY, ZXY, [boolean,boolean,boolean]). -fmap_(nor, nor, ZXY, ZXY, [boolean,boolean,boolean]). -fmap_(xor, xor, ZXY, ZXY, [boolean,boolean,boolean]). -fmap_(->, imB, ZXY, ZXY, [boolean,boolean,boolean]). - -fmap_(sqrt,sqrt, ZX, ZX, [real,real]). % pos. root version vs. **(1/2) -fmap_(-, minus, ZX, ZX, [real,real]). -fmap_(~, not, ZX, ZX, [boolean,boolean]). -fmap_(exp, exp, ZX, ZX, [real,real]). -fmap_(log, exp, [Z,X], [X,Z], [real,real]). -fmap_(abs, abs, ZX, ZX, [real,real]). -fmap_(sin, sin, ZX, ZX, [real,real]). -fmap_(asin,sin, [Z,X], [X,Z], [real,real]). -fmap_(cos, cos, ZX, ZX, [real,real]). -fmap_(acos,cos, [Z,X], [X,Z], [real,real]). -fmap_(tan, tan, ZX, ZX, [real,real]). -fmap_(atan,tan, [Z,X], [X,Z], [real,real]). - -% reverse map from Op and Args (used by "verbose" top level output to reverse compile constraints) -remap_(Op,$(Z,X,Y),C) :- constraint_(Op), Z==1, !, % simplification for constraints - C=..[Op,X,Y]. -remap_(Op,$(Z,X,Y),Z==C) :- !, - C=..[Op,X,Y]. -remap_(Op,$(Z,X),Z==C) :- - C=..[Op,X]. - -% -% Node constructor -% -newNode_(Op, Objs, Agenda, NewAgenda) :- - Args =.. [$|Objs], % store arguments as $/N where N=1..3 - NewNode = node(Op, P, 0, Args), % L=0 - addNode_(Objs,NewNode), - % increment count of added nodes, will be decremented on backtracking/failure - g_incb('clpBNR:node_count'), - linkNode_(Agenda, NewNode, NewAgenda). - -addNode_([],_Node). -addNode_([Arg|Args],Node) :- - (interval_object(Arg, _Type, _Val, Nodelist) -> newmember(Nodelist, Node) ; true), - addNode_(Args,Node). - -clpStatistics :- - g_assign('clpBNR:node_count',0), % reset/initialize node count to 0 - fail. % backtrack to reset other statistics. - -clpStatistic(node_count(C)) :- - g_read('clpBNR:node_count',C). - -% extend list with X -newmember([X|Xs],N) :- - nonvar(X), !, % not end of (indefinite) list - newmember(Xs,N). -newmember([N|_],N). % end of list - -% -% Process Agenda to narrow intervals (fixed point iteration) -% -stable_(Agenda) :- - current_prolog_flag(clpBNR_iteration_limit,Ops), % budget for current operation - stableLoop_(Agenda,Ops), - !. % achieved stable state with empty Agenda -> commit. - -stableLoop_([]/[], OpsLeft) :- !, % terminate successfully when agenda comes to an end - g_read('clpBNR:iterations',Cur), % maintain "low" water mark (can be negative) - (OpsLeft g_assign('clpBNR:iterations',OpsLeft);true). -stableLoop_([Node|Agenda]/T, OpsLeft) :- - Node = node(Op,P,_,Args), % if node on queue ignore link bit (was: Node = node(Op,P,1,Args)) - doNode_(Args, Op, P, OpsLeft, Agenda/T, NewAgenda), % undoable on backtrack - nb_setarg(3,Node,0), % reset linked bit - RemainingOps is OpsLeft-1, % decrement OpsLeft (can go negative) - stableLoop_(NewAgenda,RemainingOps). - -% support for max_iterations statistic -sandbox:safe_global_variable('clpBNR:iterations'). - -clpStatistics :- - current_prolog_flag(clpBNR_iteration_limit,L), - g_assign('clpBNR:iterations',L), % set "low" water mark to upper limit - fail. % backtrack to reset other statistics. - -clpStatistic(max_iterations(O/L)) :- - g_read('clpBNR:iterations',Ops), - current_prolog_flag(clpBNR_iteration_limit,L), - O is L-Ops. % convert "low" water mark to high water mark - -% -% Execute a node on the queue -% Note: "special" ops like instantiate and integral not counted as narrowing op in clpStatistics -% -% Comment out the following to enable Op tracing: -goal_expansion(traceIntOp_(Op, Args, PrimArgs, New),true). - -doNode_($(ZArg,XArg,YArg), Op, P, OpsLeft, Agenda, NewAgenda) :- % Arity 3 Op - var(P), !, % check persistent bit - % nonground(Args,_), !, % not safe, unifications happens before attr_unify_hook - getValue(ZArg,ZVal), - getValue(XArg,XVal), - getValue(YArg,YVal), - evalNode(Op, P, $(ZVal,XVal,YVal), $(NZVal,NXVal,NYVal)), % can fail causing stable_ to fail => backtracking - traceIntOp_(Op, [ZArg,XArg,YArg], [ZVal,XVal,YVal], [NZVal,NXVal,NYVal]), % in ia_utilities - updateValue_(ZVal, NZVal, ZArg, OpsLeft, Agenda, AgendaZ), - updateValue_(XVal, NXVal, XArg, OpsLeft, AgendaZ, AgendaZX), - updateValue_(YVal, NYVal, YArg, OpsLeft, AgendaZX, NewAgenda). - -doNode_($(ZArg,XArg), Op, P, OpsLeft, Agenda, NewAgenda) :- % Arity 2 Op - var(P), !, % check persistent bit - % nonground(Args,_), !, % not safe, unifications happens before attr_unify_hook - getValue(ZArg,ZVal), - getValue(XArg,XVal), - evalNode(Op, P, $(ZVal,XVal), $(NZVal,NXVal)), % can fail causing stable_ to fail => backtracking - traceIntOp_(Op, [ZArg,XArg], [ZVal,XVal], [NZVal,NXVal]), % in ia_utilities - updateValue_(ZVal, NZVal, ZArg, OpsLeft, Agenda, AgendaZ), - updateValue_(XVal, NXVal, XArg, OpsLeft, AgendaZ, NewAgenda). - -doNode_($(Arg), Op, P, OpsLeft, Agenda, NewAgenda) :- % Arity 1 Op - var(P), !, % check persistent bit - % nonground(Args,_), !, % not safe, unifications happens before attr_unify_hook - getValue(Arg,Val), - evalNode(Op, P, $(Val), $(NVal)), % can fail causing stable_ to fail => backtracking - traceIntOp_(Op, [Arg], [Val], [NVal]), % in ia_utilities - updateValue_(Val, NVal, Arg, 1, Agenda,NewAgenda). % always update value regardless of OpsLeft limiter - -doNode_(Args, Op, p, _, Agenda, Agenda) :- % persistent bit "set", skip node and trim - trim_ops_(Args). - -% -% called whenever a persistent node is encountered in FP iteration -% remove it from any node arguments -% -trim_ops_($(Op1,Op2,Op3)) :- - trim_op_(Op1), - trim_op_(Op2), - trim_op_(Op3). -trim_ops_($(Op1,Op2)) :- - trim_op_(Op1), - trim_op_(Op2). -trim_ops_($(Op1)) :- - trim_op_(Op1). - -trim_op_(Arg) :- number(Arg), !. -trim_op_(Arg) :- - get_attr(Arg, clpBNR, Def), % an interval ? - Def = interval(_, _, NList, _), - trim_persistent_(NList,TrimList), - % if trimmed list empty, set to a new unshared var to avoid cycles(?) on backtracking - (var(TrimList) -> setarg(3,Def,_) ; setarg(3,Def,TrimList)). % write trimmed node list - -trim_persistent_(T,T) :- var(T), !. % end of indefinite list -trim_persistent_([node(_,P,_,_)|Ns],TNs) :- nonvar(P), !, trim_persistent_(Ns,TNs). -trim_persistent_([N|Ns],[N|TNs]) :- trim_persistent_(Ns,TNs). - -% -% Any changes in interval values should come through here. -% Note: This captures all updated state for undoing on backtracking -% -updateValue_(Old, Old, _, _, Agenda, Agenda) :- !. % no change in value (constant?) - -updateValue_(Old, New, Int, OpsLeft, Agenda, NewAgenda) :- % set interval value to New - % New = [NewL,NewH], (NewL > NewH -> trace ; true), - % NewL=0 or narrowing sufficent - putValue_(New, Int, Nodelist), % update value (may fail) - linkNodeList_(Nodelist, Agenda, NewAgenda). % then propagate change - -updateValue_(_, _, _, _, Agenda, Agenda). % otherwise just continue with Agenda - -propagate_if_(Ops, _, _) :- Ops>0, !. % check work limiter -propagate_if_(_, (OL,OH), (NL,NH)) :- (NH-NL)/(OH-OL) < 0.9. % any overflow in calculation will propagate - -linkNodeList_([X|Xs], List, NewList) :- - nonvar(X), !, % not end of list ... - (arg(3,X,1) % test linked flag - -> NextList = List % already linked - ; linkNode_(List, X, NextList) % not linked add it to list - ), - linkNodeList_(Xs, NextList, NewList). -linkNodeList_(_, List, List). % end of indefinite node list (don't make it definite) - -% Assumes persistant nodes are pre-trimmed (see putValue_/3) -linkNode_(List/[X|NextTail], X, List/NextTail) :- % add to list - setarg(3,X,1). % set linked bit - -:- include(ia_utilities). % print,solve, etc. - -% -% Get all defined statistics -% -clpStatistics(Ss) :- findall(S, clpStatistic(S), Ss). - -% end of reset chain succeeds. Need cut since predicate is "discontiguous". -clpStatistics :- !. - -clpBNR_version_("0.9.4"). - -:- initialization(( - % restore "optimise" flag - (nb_current('clpBNR:temp',Opt) - -> (nb_delete('clpBNR:temp'), set_prolog_flag(optimise,Opt)) - ; true - ), - - clpBNR_version_(Version), format("*** clpBNR v~walpha ***\n\n",[Version]), - (current_prolog_flag(bounded,true) - -> write("Error: clpBNR requires unbounded integers and rationals.\n") - ; true - ), - (current_prolog_flag(float_overflow,_) - -> true - ; write("Error: clpBNR requires support for IEEE arithmetic.\n") - ), - - % Set required arithmetic flags - set_prolog_flag(prefer_rationals, true), % enable rational arithmetic - set_prolog_flag(max_rational_size, 16), % rational size in bytes before .. - set_prolog_flag(max_rational_size_action, float), % conversion to float - - set_prolog_flag(float_overflow,infinity), % enable IEEE continuation values - set_prolog_flag(float_zero_div,infinity), - set_prolog_flag(float_undefined,nan), - - once(prolog_stack_property(global,min_free(Free))), % minimum free cells (8 bytes/cell) - (Free < 8196 -> set_prolog_stack(global,min_free(8196)) ; true), - - % create clpBNR specific flags - create_prolog_flag(clpBNR_iteration_limit,3000,[type(integer),keep(true)]), - create_prolog_flag(clpBNR_default_precision,6,[type(integer),keep(true)]), - create_prolog_flag(clpBNR_verbose,false,[type(boolean),keep(true)]), - - clpStatistics % initialize statistics -)). diff --git a/docs/Package/clpBNR-0.9.4/prolog/ia_primitives.pl b/docs/Package/clpBNR-0.9.4/prolog/ia_primitives.pl deleted file mode 100755 index a265485..0000000 --- a/docs/Package/clpBNR-0.9.4/prolog/ia_primitives.pl +++ /dev/null @@ -1,838 +0,0 @@ -/* The MIT License (MIT) - * - * Copyright (c) 2019,2020 Rick Workman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -% -% API function for executing primitives -% -% evalNode(+primitive_name, ?persistence_flag, +$(inputs..), -$(outputs..)) -% -evalNode(Op, P, Is, R) :- - g_inc('clpBNR:evalNode'), % count of primitive calls - narrowing_op(Op, P, Is, R), - !. -evalNode(Op, _, _, _):- - g_inc('clpBNR:evalNodeFail'), % count of primitive call failures - debugging(clpBNR, true), % fail immediately unless debug=true - current_node_(Node), - debug_clpBNR_('Fail ~w',Node), - fail. - -sandbox:safe_global_variable('clpBNR:evalNode'). -sandbox:safe_global_variable('clpBNR:evalNodeFail'). - -clpStatistics :- - g_assign('clpBNR:evalNode',0), - g_assign('clpBNR:evalNodeFail',0), - fail. % backtrack to reset other statistics. - -clpStatistic(narrowingOps(C)) :- g_read('clpBNR:evalNode',C). - -clpStatistic(narrowingFails(C)) :- g_read('clpBNR:evalNodeFail',C). - -% SWIP optimization for non_empty/2, replaces nexttoward function call with constant -goal_expansion(L < RHS, L < MaxFloat) :- - RHS == nexttoward( 1.0Inf,0), - current_prolog_flag(float_max,MaxFloat). % MaxFloat is nexttoward( 1.0Inf,0). -goal_expansion(H > RHS, H > NegMaxFloat) :- - RHS == nexttoward( -1.0Inf,0), - current_prolog_flag(float_max,MaxFloat), - NegMaxFloat is -MaxFloat. % NegMaxFloat is nexttoward( -1.0Inf,0). -% -% non-empty inteval test, L= L < nexttoward( 1.0Inf,0) ; true), - (float(H) -> H > nexttoward(-1.0Inf,0) ; true). - -% -% forces all intervals to boolean range, (optimize if already boolean) -% -booleanVal_((0,0),(0,0)). -booleanVal_((1,1),(1,1)). -booleanVal_((0,1),(0,1)). -booleanVal_(V,(0,1)):- ^(V,(0,1),(0,1)). % constrain non-booleans to (0,1) - -% -% interval category: non-negative (includes zero), non-positive, or split (contains 0) -% -intCase(p, (L,H)) :- L>=0, !. % non-negative -intCase(n, (L,H)) :- H=<0, !. % non-positive -intCase(s, (L,H)). % split - -% -% interval primitive functions -% X, Y and Z are intervals -% - -% Z := X ^ Y (intersection) -^((Xl,Xh), (Yl,Yh), (Zl,Zh)) :- - Zl is max(Xl, Yl), Zh is min(Xh, Yh), - non_empty(Zl,Zh). - -% -% wrap repeating interval onto a prime cylinder of width W and -% return projected interval and "mulipliers" to re-project -% Note: fails if interval wider than W so beware of outward rounding on ranges, e.g., -% range of [-pi/2,pi/2] on tan argument actually spans 3 cylinders (-1 to 1). -% -wrap_((Xl,Xh), W, (MXl,MXh), (Xpl,Xph)) :- % project onto cylinder from -W/2 to W/2 - MXl is round(Xl/W), - MXh is round(Xh/W), - MXh-MXl =< 1, Xh-Xl =< W, % MX check first to avoid overflow - Xpl is Xl - (MXl*W), Xph is Xh-(MXh*W). - -% -% unwrap projected interval back to original range -% -unwrap_((Xpl,Xph), W, (MXl,MXh), (Xl,Xh)) :- - Xl is Xpl+W*MXl, Xh is Xph+W*MXh. - -union_(X,[],X) :-!. % set union (including empty set) -union_([],Y,Y) :-!. -union_((Xl,Xh),(Yl,Yh),(Zl,Zh)) :- Zl is min(Xl,Yl), Zh is max(Xh,Yh). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Relational Operations (narrowing operations) -% -:- discontiguous clpBNR:narrowing_op/4. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% integral (contract to integer bounds) - -narrowing_op(integral, P, $((L,H)), $((NL,NH))) :- - NL is ceiling(L), NH is floor(H), - NL= P=p ; true). % if a point, mark as persistent (makes a huge difference on some problems) - -narrowing_op(eq, p, $(Z, X, Y), $(NewZ, X, Y)) :- % persistent, X and Y don't intersect, Z is false - \+(^(X,Y,_)), !, - ^(Z, (0,0), NewZ). - -narrowing_op(eq, p, $(Z, (X,X), (Y,Y)), $(NewZ, (X,X), (Y,Y))) :- % if X and Y are necessarily equal, Z is true - X =:= Y, !, - ^(Z, (1,1), NewZ). - -narrowing_op(eq, _, $(Z,X,Y), $(NewZ,X,Y)) :- ^(Z,(0,1),NewZ). % else no change, but narrow Z to boolean - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==(X<>Y) % (Z boolean, X,Y integer) - -narrowing_op(ne, p, $(Z, X, Y), $(NewZ, X, Y)) :- % persistent: disjoint or necessarily equal - not_equal_(X,Y,Z1), !, - ^(Z, Z1, NewZ). - -narrowing_op(ne, _, $((1,1), X, Y), $((1,1), NewX, NewY)) :- % Z true, X/Y a point = bound of Y/X - ne_int_(X,Y,NewX), % narrow X if Y is a point and a bound of X (always succeeds but may not narrow) - ne_int_(Y,NewX,NewY), !. % narrow Y if NewX is a point and a bound of Y (always succeeds but may not narrow) - -narrowing_op(ne, _, $(Z,X,Y), $(NewZ,X,Y)) :- ^(Z,(0,1),NewZ). % none of the above, narrow Z to boolean - -not_equal_((Xl,Xh), (Yl,Yh), (1,1)) :- (Xh < Yl ; Yh < Xl). % X and Y disjoint, Z true -not_equal_((X,X), (Y,Y), (0,0)) :- X =:= Y. % pt(X)=:=pt(Y), Z false - -% Z <> X, where where Z and X are integer intervals (enforced elsewhere) -ne_int_((X,H), (X,X), (NewL,H)) :- !, % X is a point, and low bound of Z - NewL is X+1, NewL= le_true(X,Y,New,P) % Z true - ; (Z=(0,0) - -> le_false(X,Y,New,P) % Z false - ; le_bool(X,Y,New,P) % Z unknown - ) - ). -le_true(X, (Yl,Yh), $((1,1), (NXl,NXh), (NYl,NYh)), P) :- - ^(X, (-1.0Inf,Yh), (NXl,NXh)), % NewX := (Xl,Xh) ^(NI,Yh) - ^((Yl,Yh), (NXl,1.0Inf), (NYl,NYh)), % NewY := (Yl,Yh) ^(Xl,PI) - (NXh =< NYl -> P=p ; true). % will? always be true - -le_false(X, Y, $((0,0), NewX, NewY), P) :- - lt_true(Y,X,$(_,NewY,NewX),P). - -le_bool((Xl,Xh), (Yl,Yh), $(NewZ, (Xl,Xh), (Yl,Yh)), P) :- - (Yh < Xl - -> (NewZ=(0,0), P=p) % false persistant - ; (Xh =< Yl - -> (NewZ=(1,1), P=p) % true persistant - ; NewZ=(0,1) % indefinite boolean - ) - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==(X lt_true(X,Y,New,P) % Z true - ; (Z=(0,0) - -> lt_false(X,Y,New,P) % Z false - ; lt_bool(X,Y,New,P) % Z unknown - ) - ). - -lt_true( X, (Yl,Yh), $((1,1), (NXl,NXh), (NYl,NYh)), P) :- - next_lt_(Yh,-1,YhD), % YhD is next downward value from Yh - ^(X, (-1.0Inf,YhD), (NXl,NXh)), % NewX := (Xl,Xh) ^(NInf,YhD) - next_lt_(NXl,1,NXlU), % NXlU is next upward value from NXl - ^((Yl,Yh), (NXlU,1.0Inf), (NYl,NYh)), % NewY := (Yl,Yh) ^(NXlU,PInf) - (NXh < NYl -> P=p ; true). % will? always be true - -lt_false(X, Y, $((0,0), NewX, NewY), P) :- - le_true(Y,X,$(_,NewY,NewX),P). - -lt_bool((Xl,Xh), (Yl,Yh), $(NewZ, (Xl,Xh), (Yl,Yh)), P) :- - (Yh =< Xl - -> (NewZ=(0,0), P=p) % false persistant - ; (Xh < Yl - -> (NewZ=(1,1), P=p) % true persistant - ; NewZ=(0,1) % indefinite boolean - ) - ). - -% Note: can't narrow an infinite bound, minimize change to bound -% Repeat, not sound on reals (uses nexttoward, missing values between floats) -next_lt_( 1.0Inf, _, 1.0Inf) :- !. -next_lt_(-1.0Inf, _, -1.0Inf) :- !. -next_lt_(V, -1, NV) :- NV is max(V-1,nexttoward(V,-1.0Inf)). % integers will get sorted out with `integral` -next_lt_(V, 1, NV) :- NV is min(V+1,nexttoward(V, 1.0Inf)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==(X<=Y) % inclusion, constrains X to be subinterval of Y (Z boolean) - -% Only two cases: either X and Y intersect or they don't. -narrowing_op(in, _, $(Z, X, Y), $(NewZ, NewX, Y)):- - ^(X,Y,NewX), !, % NewX is intersection of X and Y - ^(Z,(1,1),NewZ). - -narrowing_op(in, p, $((0,0), X, Y), $((0,0), NewX, Y)):- % persistent, X and Y don't intersect' - ^(Z,(0,0),NewZ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X+Y - -narrowing_op(add, _, $((Zl,Zh), (Xl,Xh), (Yl,Yh)), $((NZl,NZh), (NXl,NXh), (NYl,NYh))) :- - NZl is max(Zl, roundtoward( Xl+Yl, to_negative)), % NewZ := Z ^ (X+Y), - NZh is min(Zh, roundtoward( Xh+Yh, to_positive)), - non_empty(NZl,NZh), - % Note: subtraction done by adding minus values so rounding mode consistent - % during any numeric type conversion. - NXl is max(Xl, roundtoward(NZl+(-Yh), to_negative)), % NewX := X ^ (NZ-Y), - NXh is min(Xh, roundtoward(NZh+(-Yl), to_positive)), - non_empty(NXl,NXh), - NYl is max(Yl, roundtoward(NZl+(-NXh), to_negative)), % NewY := Y ^ (NZ-NX). - NYh is min(Yh, roundtoward(NZh+(-NXl), to_positive)), - non_empty(NYl,NYh). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X*Y - -narrowing_op(mul, _, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - mul_(X,Y,Z,NewZ), % NewZ := Z ^ (X*Y) - odiv_(NewZ,X,Y,Yp), % Yp := Y ^ (Z/X), - odiv_(NewZ,Yp,X,NewX), % NewX := X ^ (Z/Yp), - % if X narrowed it may be necessary to recalculate Y due to non-optimal ordering. - mul_redoY(Y,Yp,X,NewX,NewY,NewZ). - -mul_redoY(Y,Y,X,NewX,NewY,NewZ) :- % if initial Y narrowing didn't change (contain 0?) - X \= NewX, !, % and X did narrow - %/(NewZ,NewX,Y1), ^(Y,Y1,NewY). % recalculate Y with NewX - odiv_(NewZ,NewX,Y,NewY). % recalculate Y with NewX -mul_redoY(_,NewY,_,_,NewY,_). % else keep Y as NewY - -% NZ := Z ^ (X * Y) (multiply) -mul_(X, Y, Z, NZ) :- - intCase(Cx,X), - intCase(Cy,Y), - multCase(Cx,Cy,X,Y,Z,NZ), !. - -% NZ := Z ^ (X / Y) (odiv) -odiv_(X, Y, Z, NZ) :- - intCase(Cx,X), - intCase(Cy,Y), - odivCase(Cx,Cy,X,Y,Z,NZ). % !'s in odiv' - -% -% * cases ("Interval Arithmetic: from Principles to Implementation", Fig. 3) -% -%multCase(z,_, X, _, _, X) :- !. % X==0 -%multCase(_,z, _, Y, _, Y). % Y==0 - -multCase(p,p, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xl*Yl,to_negative)), - NZh is min(Zh,roundtoward(Xh*Yh,to_positive)), - non_empty(NZl,NZh). -multCase(p,n, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xh*Yl,to_negative)), - NZh is min(Zh,roundtoward(Xl*Yh,to_positive)), - non_empty(NZl,NZh). -multCase(n,p, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xl*Yh,to_negative)), - NZh is min(Zh,roundtoward(Xh*Yl,to_positive)), - non_empty(NZl,NZh). -multCase(n,n, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xh*Yh,to_negative)), - NZh is min(Zh,roundtoward(Xl*Yl,to_positive)), - non_empty(NZl,NZh). - -multCase(p,s, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xh*Yl,to_negative)), - NZh is min(Zh,roundtoward(Xh*Yh,to_positive)), - non_empty(NZl,NZh). -multCase(n,s, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xl*Yh,to_negative)), - NZh is min(Zh,roundtoward(Xl*Yl,to_positive)), - non_empty(NZl,NZh). -multCase(s,p, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xl*Yh,to_negative)), - NZh is min(Zh,roundtoward(Xh*Yh,to_positive)), - non_empty(NZl,NZh). -multCase(s,n, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,roundtoward(Xh*Yl,to_negative)), - NZh is min(Zh,roundtoward(Xl*Yl,to_positive)), - non_empty(NZl,NZh). - -multCase(s,s, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - NZl is max(Zl,min(roundtoward(Xl*Yh,to_negative),roundtoward(Xh*Yl,to_negative))), - NZh is min(Zh,max(roundtoward(Xl*Yl,to_positive),roundtoward(Xh*Yh,to_positive))), - non_empty(NZl,NZh). - -% -% / cases ("Interval Arithmetic: from Principles to Implementation", Fig. 4) -% Tricky handling the "zero" cases - returns universal interval when no narowing possible: -% 1. denominator is zero or contains zero (z and s) -% 2. denominator is bounded by zero (p and n) and numerator contains zero (see numeric guards) -% Numeric guards check for 0/0, e.g., p,p -> Xh+Yh>0 - -odivCase(p,p, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - sign(Yl)+sign(Xl) > 0, !, % X > 0 or Y > 0 - NZl is max(Zl,roundtoward(Xl/Yh,to_negative)), - NZh is min(Zh,roundtoward(Xh/max(0.0,Yl),to_positive)), - non_empty(NZl,NZh). -odivCase(p,n, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - sign(Xl)-sign(Yh) > 0, !, % X > 0 or Y < 0 - NZl is max(Zl,roundtoward(Xh/min(-0.0,Yh),to_negative)), - NZh is min(Zh,roundtoward(Xl/Yl,to_positive)), - non_empty(NZl,NZh). -odivCase(p,s, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - Xl > 0, !, % X > 0 - ZIl is roundtoward(Xl/Yh,to_negative), - ZIh is roundtoward(Xl/Yl,to_positive), - (Zl > ZIh -> NZl is max(Zl,ZIl) ; NZl = Zl), % similar to ^/3 - (Zh < ZIl -> NZh is min(Zh,ZIh) ; NZh = Zh), - non_empty(NZl,NZh). - -odivCase(n,p, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)):- - sign(Yl)-sign(Xh) > 0, !, % X < 0 or Y > 0 - NZl is max(Zl,roundtoward(Xl/max(0.0,Yl),to_negative)), - NZh is min(Zh,roundtoward(Xh/Yh,to_positive)), - non_empty(NZl,NZh). -odivCase(n,n, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - sign(Yh)+sign(Xh) < 0, !, % X < 0 or Y < 0 - NZl is max(Zl,roundtoward(Xh/Yl,to_negative)), - NZh is min(Zh,roundtoward(Xl/min(-0.0,Yh),to_positive)), - non_empty(NZl,NZh). -odivCase(n,s, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - Xh < 0, !, % X < 0 - ZIl is roundtoward(Xh/Yl,to_negative), - ZIh is roundtoward(Xh/Yh,to_positive), - (Zl > ZIh -> NZl is max(Zl,ZIl) ; NZl = Zl), % similar to ^/3 - (Zh < ZIl -> NZh is min(Zh,ZIh) ; NZh = Zh), - non_empty(NZl,NZh). - -odivCase(s,p, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - Yl > 0, !, % Y > 0 - NZl is max(Zl,roundtoward(Xl/Yl,to_negative)), - NZh is min(Zh,roundtoward(Xh/Yl,to_positive)), - non_empty(NZl,NZh). -odivCase(s,n, (Xl,Xh), (Yl,Yh), (Zl,Zh), (NZl,NZh)) :- - Yh < 0, !, % Y < 0 - NZl is max(Zl,roundtoward(Xh/Yh,to_negative)), - NZh is min(Zh,roundtoward(Xl/Yh,to_positive)), - non_empty(NZl,NZh). - -odivCase(_,_, _, _, Z, Z). % all other cases, no narrowing - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==min(X,Y) Z==max(X,Y) - -narrowing_op(min, _, $((Zl,Zh),(Xl,Xh),(Yl,Yh)), New) :- - Z1l is max(Zl,min(Xl,Yl)), % Z1 := Z ^ min(X,Y), - Z1h is min(Zh,min(Xh,Yh)), - minimax((Zl,1.0Inf), $((Z1l,Z1h),(Xl,Xh),(Yl,Yh)), New). - -narrowing_op(max, _, $((Zl,Zh),(Xl,Xh),(Yl,Yh)), New) :- - Z1l is max(Zl,max(Xl,Yl)), % Z1 := Z ^ max(X,Y), - Z1h is min(Zh,max(Xh,Yh)), - minimax((-1.0Inf,Zh), $((Z1l,Z1h),(Xl,Xh),(Yl,Yh)), New). - -minimax(_, $(Z,X,Y), $(New, X, New)) :- % Case 1, X not in Z1 - \+(^(Z,X,_)), !, % _ := Z1 \^ X, - ^(Y,Z,New). % New := Y ^ Z1. - -minimax(_, $(Z,X,Y), $(New, New, Y)) :- % Case 2, Y not in Z1 - \+(^(Z,Y,_)), !, % _ := Z1 \^ Y, - ^(X,Z,New). % New := X ^ Z1. - -minimax(Zpartial, $(Z,X,Y), $(Z, NewX, NewY)) :- % Case 3, overlap - ^(X,Zpartial,NewX), % NewX := X ^ Zpartial, - ^(Y,Zpartial,NewY). % NewY := Y ^ Zpartial. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==abs(X) - -narrowing_op(abs, _, $(Z,X), $(NewZ, NewX)) :- - intCase(Cx,X), - absCase(Cx,X,Z,NewZ), !, - non_empty(NewZ), - intersect_regions_(X,NewZ,NewX), - non_empty(NewX). - -% -% intersect and join Z with positive and negative regions of X -% -intersect_regions_(Z,X,NewZ) :- - (^(Z,X,ZPos) -> true ; ZPos = []), % positive Z region - (-(X,Z,ZNeg) -> true ; ZNeg = []), % negative Z region - union_(ZPos,ZNeg,NewZ). - -% NZ := Z ^ -X (unary minus) --((Xl,Xh), (Zl,Zh), (NZl,NZh)) :- - NZl is max(Zl,-Xh), NZh is min(Zh,-Xl), - NZl =< NZh. % no infinity/overflow check required - -% -% abs(X) cases -% -absCase(p, (Xl,Xh), (Zl,Zh), (NZl,NZh)) :- NZl is max(Zl,Xl), NZh is min(Zh,Xh). -absCase(n, (Xl,Xh), (Zl,Zh), (NZl,NZh)) :- NZl is max(Zl,-Xh), NZh is min(Zh,-Xl). -absCase(s, (Xl,Xh), (Zl,Zh), (NZl,NZh)) :- NZl is max(Zl,0), NZh is min(Zh,max(-Xl,Xh)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== -X - -narrowing_op(minus, _, $((Zl,Zh),(Xl,Xh)), $((NZl,NZh),(NXl,NXh))) :- - NZl is max(Zl,-Xh), NZh is min(Zh,-Xl), % NewZ := Z ^ -X, no empty check required - NXl is max(Xl,-NZh), NXh is min(Xh,-NZl). % NewX := X ^ -Z, no empty check required - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== sqrt(X) (Z is positive root of positive X) - -narrowing_op(sqrt, _, $((Zl,Zh),(Xl,Xh)), $((NZl,NZh),(NXl,NXh))) :- - Xh>=0, Xl1 is max(0,Xl), % narrow X to positive range - NZl is max(max(0,Zl),roundtoward(sqrt(Xl1),to_negative)), - NZh is min(Zh,roundtoward(sqrt(Xh),to_positive)), - non_empty(NZl,NZh), - NXh is min(Xh,roundtoward(NZh*NZh,to_positive)), - NXl is max(Xl,-NXh), - non_empty(NXl,NXh). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== exp(X) - -narrowing_op(exp, _, $((Zl,Zh),(Xl,Xh)), $((NZl,NZh),(NXl,NXh))) :- - NZl is max(Zl,roundtoward(exp(Xl),to_negative)), - NZh is min(Zh,roundtoward(exp(Xh),to_positive)), - non_empty(NZl,NZh), - NXl is max(Xl,roundtoward(log(NZl),to_negative)), - NXh is min(Xh,roundtoward(log(NZh),to_positive)), - non_empty(NXl,NXh). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== X**Y - -narrowing_op(pow, _, $(Z,X,(R,R)), $(NewZ, NewX, (R,R))) :- !, % Y = point exponent - pt_powr_(Z,X,R,NewZ), non_empty(NewZ), - Ri is 1/R, - pt_powr_(X,NewZ,Ri,NewX), non_empty(NewX). - -narrowing_op(pow, _, $(Z,(Xl,Xh),Y), $(NewZ, NewX, NewY)) :- % interval Y, X must be positive - XZl is max(0,Xl), Xp = (XZl,Xh), Xh >= 0, % X must be positive (>=0) - powr_(Z,Xp,Y,NewZ), non_empty(NewZ), - universal_interval(UI), odiv_((1,1),Y,UI,Yi), - powr_(Xp,NewZ,Yi,NewX), non_empty(NewX), - ln(NewZ,Ynum), ln(NewX,Yden), - odiv_(Ynum,Yden,Y,NewY). % NY := Y ^ log(NZ)/log(NX)*/ - -% requires conservative rounding using nexttoward -pt_powr_(Z,X,R,NewZ) :- - R < 0, !, % negative R - Rp is -R, - universal_interval(UI), - odiv_((1,1),Z,UI,Zi), - pt_powr_(Zi,X,Rp,NZi), - odiv_((1,1),NZi,Z,NewZ). -pt_powr_(Z,X,R,NewZ) :- - integer(R), R rem 2 =:= 0, !, % even integer R - Z = (Zl,Zh), X = (Xl,Xh), - (float(Xl) - -> Zl1 is max(0,nexttoward(roundtoward(Xl**R,to_negative),-1.0Inf)) - ; Zl1 is max(0,roundtoward(Xl**R,to_negative)) - ), - (float(Xh) - -> Zh1 is nexttoward(roundtoward(Xh**R,to_positive), 1.0Inf) - ; Zh1 is roundtoward(Xh**R,to_positive) - ), - ( sign(Xl)*sign(Xh) =< 0 - -> NZl is max(0,Zl) % X bounded by or includes 0 - ; NZl is max(min(Zl1,Zh1),Zl) % X doesn't include 0 - ), - NZh is min(max(Zl1,Zh1),Zh), - NewZ = (NZl,NZh). -pt_powr_(Z,X,R,NewZ) :- - rational(R), denominator(R) rem 2 =:= 0, !, % even rational R - Z = (Zl,Zh), X = (Xl,Xh), - (float(Xl) - -> Zl1 is max(0,nexttoward(roundtoward(Xl**R,to_negative),-1.0Inf)) - ; Zl1 is max(0,roundtoward(Xl**R,to_negative)) - ), - (float(Xh) - -> Zh1 is nexttoward(roundtoward(Xh**R,to_positive), 1.0Inf) - ; Zh1 is roundtoward(Xh**R,to_positive) - ), - Zpl is max(Zl,Zl1), Zph is min(Zh,Zh1), % positive case - (Zpl =< Zph -> Zps = (Zpl,Zph) ; Zps = []), - Znl is max(Zl,-Zh1), Znh is min(Zh,-Zl1), % negative case - (Znl =< Znh -> Zns = (Znl,Znh) ; Zns = []), - union_(Zps,Zns,NewZ). % union of positive and negative cases -pt_powr_((Zl,Zh),(Xl,Xh),R,(NZl,NZh)) :- % all other cases - (float(Xl) - -> Zl1 is nexttoward(roundtoward(Xl**R,to_negative),-1.0Inf) - ; Zl1 is roundtoward(Xl**R,to_negative) - ), - (float(Xh) - -> Zh1 is nexttoward(roundtoward(Xh**R,to_positive), 1.0Inf) - ; Zh1 is roundtoward(Xh**R,to_positive) - ), - NZl is max(Zl,min(Zl1,Zh1)), NZh is min(Zh,max(Zl1,Zh1)). - -ln((Xl,Xh), (Zl,Zh)) :- - Zl is roundtoward(log(Xl),to_negative), % rounding dependable? - Zh is roundtoward(log(Xh),to_positive). - -powr_((Zl,Zh), (Xl,Xh), (Yl,Yh), (NZl,NZh)) :- % X assumed positive - Zll is max(0,nexttoward(roundtoward(Xl**Yl,to_negative),-1.0Inf)), - Zlh is nexttoward(roundtoward(Xl**Yh,to_positive), 1.0Inf), - Zhl is max(0,nexttoward(roundtoward(Xh**Yl,to_negative),-1.0Inf)), - Zhh is nexttoward(roundtoward(Xh**Yh,to_positive), 1.0Inf), - NZlmin is min(Zll, min(Zlh, min(Zhl, Zhh))), % min of all - NZl is max(Zl,NZlmin), - NZhmax is max(Zll, max(Zlh, max(Zhl, Zhh))), % max of all - NZh is min(Zh,NZhmax). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== sin(X) - -narrowing_op(sin, _, $(Z,X), $(NewZ, NewX)) :- - wrap_(X,2*pi,MX,Xp), !, % fails if X too wide - sin_(MX,Xp,Z,NMX,X1,NewZ), - unwrap_(X1,2*pi,NMX,X2), % project back to original cylinder - non_empty(NewZ), - ^(X,X2,NewX). -% ^(Z1,(-1,1),NewZ). % take care of any rounding beyond range - -narrowing_op(sin, _, $(Z,X), $(NewZ,X)) :- % no narrowing possible, just constrain Z - ^(Z,(-1,1),NewZ). - -sin_((MX,MX), X, Z, (MX,MX), NewX, NewZ) :- - !, % same cylinder, split into 3 interval convex sectors - Pi_2 is pi/2, - sin_sector_(lo, Pi_2, X, Z, NXlo, NZlo), - sin_sector_(mid,Pi_2, X, Z, NXmid, NZmid), - sin_sector_(hi, Pi_2, X, Z, NXhi, NZhi), - union_(NXlo,NXmid,NX1), union_(NX1,NXhi,NewX), - union_(NZlo,NZmid,NZ1), union_(NZ1,NZhi,NewZ). - -sin_((MXl,MXh), (Xl,Xh), Z, (NMXl,NMXh), NewX, NewZ) :- - % adjacent cylinders, - Pi is pi, MPi is -pi, - try_sin_((Xl,Pi), Z, NX1, NZ1,MXl,MXh,NMXl), - try_sin_((MPi,Xh),Z, NX2, NZ2,MXh,MXl,NMXh), - union_(NZ1,NZ2,NewZ), - union_(NX1,NX2,NewX). - -try_sin_(X,Z,NewX,NewZ,MXS,MXF,MXS) :- sin_((MXS,MXS), X, Z, _, NewX, NewZ),!. -try_sin_(X,Z,[],[],MXS,MXF,MXF). % if sin_ fails, return empty X interval for union - -sin_sector_(lo,Pi_2,(Xl,Xh),Z,(NXl,NXh),NewZ) :- - Xl =< -Pi_2, !, % X intersects lo sector, flip to mid - X1l is max(-pi-Xh,-Pi_2), X1h is -pi-Xl, - sin_prim_((X1l,X1h),Z,(NX1l,NX1h),NewZ), - NXl is -pi-NX1h, NXh is -pi-NX1l. - -sin_sector_(hi,Pi_2,(Xl,Xh),Z,(NXl,NXh),NewZ) :- - Xh >= Pi_2, !, % X intersects hi sector, flip to mid - X1l is pi-Xh, X1h is min(pi-Xl,Pi_2), - sin_prim_((X1l,X1h),Z,(NX1l,NX1h),NewZ), - NXl is pi-NX1h, NXh is pi-NX1l. - -sin_sector_(mid,Pi_2,(Xl,Xh),Z,NewX,NewZ) :- - Xl =< Pi_2, Xh >= -Pi_2, !, % mid sector, valid asin function range - X1l is max(Xl,-Pi_2), X1h is min(Xh, Pi_2), - sin_prim_((X1l,X1h),Z,NewX,NewZ). - -sin_sector_(_Any,_,_X,_Z,[],[]). - -% both sin and asin monotonic, increasing in range -pi/2 to pi/2 -sin_prim_((Xl,Xh),(Zl,Zh),(NXl,NXh),(NZl,NZh)) :- - % Note: can't depend on transcendentals to obey rounding - NZl is max(Zl,max(-1,nexttoward(sin(Xl),-1.0Inf))), - NZh is min(Zh,min( 1,nexttoward(sin(Xh), 1.0Inf))), - NXl is max(Xl,nexttoward(asin(NZl),-1.0Inf)), - NXh is min(Xh,nexttoward(asin(NZh), 1.0Inf)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== cos(X) - -narrowing_op(cos, _, $(Z,X), $(NewZ, NewX)) :- - wrap_(X,2*pi,MX,Xp), !, % fails if X too wide - cos_(MX,Xp,Z,NMX,X1,NewZ), - unwrap_(X1,2*pi,NMX,X2), % project back to original cylinder - non_empty(NewZ), - ^(X,X2,NewX). -% ^(Z1,(-1,1),NewZ). % take care of any rounding beyond range - -narrowing_op(cos, _, $(Z,X), $(NewZ,X)) :- % no narrowing possible, just constrain Z - ^(Z,(-1,1),NewZ). - -cos_((MX,MX), X, Z, (MX,MX), NewX, NewZ) :- - !, % same cylinder, split into 2 interval convex sectors - cos_sector_(neg, X, Z, NXneg, NZneg), - cos_sector_(pos, X, Z, NXpos, NZpos), - union_(NZneg,NZpos,NewZ), - union_(NXneg,NXpos,NewX). - -cos_((MXl,MXh), (Xl,Xh), Z, (NMXl,NMXh), NewX, NewZ) :- - % adjacent cylinders, - Pi is pi, MPi is -pi, - try_cos_((Xl,Pi), Z, NX1, NZ1,MXl,MXh,NMXl), - try_cos_((MPi,Xh),Z, NX2, NZ2,MXh,MXl,NMXh), - union_(NZ1,NZ2,NewZ), - union_(NX1,NX2,NewX). - -try_cos_(X,Z,NewX,NewZ,MXS,MXF,MXS) :- cos_((MXS,MXS), X, Z, _, NewX, NewZ),!. -try_cos_(X,Z,[],[],MXS,MXF,MXF). % if cos_ fails, return empty X interval for union - -cos_sector_(neg,(Xl,Xh),Z,(NXl,NXh),NewZ) :- % Lo is -pi, Hi is 0 - Xl =< 0, !, - X1l is -Xh, X1h is max(0,-Xl), - cos_prim_((X1l,X1h),Z,(NX1l,NX1h),NewZ), - NXl is -NX1h, NXh is -NX1l. - -cos_sector_(pos,(Xl,Xh),Z,NewX,NewZ) :- % Lo is 0, Hi is pi - Xh >=0, !, - X1l is max(0,Xl), - cos_prim_((X1l,Xh),Z,NewX,NewZ). - -cos_sector_(_Any,_X,_Z,[],[]). - -% both cos and acos monotonic decreasing in range 0 to pi -cos_prim_((Xl,Xh),(Zl,Zh),(NXl,NXh),(NZl,NZh)) :- - % Note: can't depend on transcendentals to obey rounding - NZl is max(Zl,max(-1,nexttoward(cos(Xh),-1.0Inf))), - NZh is min(Zh,min( 1,nexttoward(cos(Xl), 1.0Inf))), - NXl is max(Xl,nexttoward(acos(NZh),-1.0Inf)), - NXh is min(Xh,nexttoward(acos(NZl), 1.0Inf)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== tan(X) - -narrowing_op(tan, _, $(Z,X), $(NewZ, NewX)) :- - wrap_(X,pi,MX,Xp), !, % fails if X too wide - tan_(MX,Xp,Z,NMX,X1,NewZ), - unwrap_(X1,pi,NMX,X2), % project back to original cylinder - non_empty(NewZ), - ^(X,X2,NewX). - -narrowing_op(tan, _, ZX, ZX). % no narrowing possible, e.g., not same or adjacent cylinder. - -% both tan and atan monotonic, increasing in range -pi/2 to pi/2 -tan_((MX,MX), (Xl,Xh), (Zl,Zh), (MX,MX), (NXl,NXh), (NZl,NZh)) :- - !, % same cylinder - % Note: can't depend on transcendentals to obey rounding - NZl is max(Zl,nexttoward(tan(Xl),-1.0Inf)), - NZh is min(Zh,nexttoward(tan(Xh), 1.0Inf)), - non_empty(NZl,NZh), - NXl is max(Xl,nexttoward(atan(NZl),-1.0Inf)), - NXh is min(Xh,nexttoward(atan(NZh), 1.0Inf)), - non_empty(NXl,NXh). - -% not same cylinder, must span infinite discontinuity --> no change -%tan_(MX, X, Z, MX, X, Z). - -tan_((MXl,MXh), (Xl,Xh), Z, (NMXl,NMXh), NewX, NewZ) :- -% MXl is MXh-1, % adjacent cylinders - PiBy2 is pi/2, MPiBy2 is -PiBy2, - try_tan_((Xl,PiBy2), Z, NX1, NZ1,MXl,MXh,NMXl), - try_tan_((MPiBy2,Xh), Z, NX2, NZ2,MXh,MXl,NMXh), - union_(NZ1,NZ2,NewZ), % will fail if both empty - union_(NX1,NX2,NewX). - -try_tan_(X,Z,NewX,NewZ,MXS,MXF,MXS) :- tan_((MXS,MXS), X, Z, _, NewX, NewZ), !. -try_tan_(X,Z,[],[],MXS,MXF,MXF). % if tan_ fails, return empty X interval for union - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z== ~X boolean negation (Z and X boolean) - -narrowing_op(not, P, $(Z,X), $(NewZ, NewX)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), % constrain to boolean - notB_(XB,ZB,NewZ,P), - notB_(NewZ,XB,NewX,P). - %(NewZ=(B,B) -> P=p ; true). % if either was a point, both are now - -notB_((0,0), (_,1), (1,1), p). -notB_((1,1), (0,_), (0,0), p). -notB_((0,1), Z, Z, _). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X and Y boolean 'and' - -narrowing_op(and, P, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), booleanVal_(Y,YB), - andB_rel_(ZB,XB,YB, NewZ, NewX, NewY, P), !. - -andB_rel_(Z,(1,1),(1,1), NewZ,(1,1),(1,1), p) :- !, ^(Z,(1,1),NewZ). % all cases persistent (points) except last -andB_rel_(Z,(0,0),Y, NewZ,(0,0),Y, p) :- !, ^(Z,(0,0),NewZ). -andB_rel_(Z,X,(0,0), NewZ,X,(0,0), p) :- !, ^(Z,(0,0),NewZ). -andB_rel_((1,1),X,Y, (1,1),NewX,NewY, p) :- !, ^(X,(1,1),NewX), ^(Y,(1,1),NewY). -andB_rel_((0,0),X,(1,1), (0,0),NewX,(1,1), p) :- !, ^(X,(0,0),NewX). -andB_rel_((0,0),(1,1),Y, (0,0),(1,1),NewY, p) :- !, ^(Y,(0,0),NewY). -andB_rel_(Z,X,Y, Z,X,Y, P). % still indeterminate - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X and Y boolean 'nand' - -narrowing_op(nand, P, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), booleanVal_(Y,YB), - nandB_rel_(ZB,XB,YB, NewZ, NewX, NewY, P), !. - -nandB_rel_(Z,(1,1),(1,1), NewZ,(1,1),(1,1), p) :- !, ^(Z,(0,0),NewZ). % all cases persistent except last -nandB_rel_(Z,(0,0),Y, NewZ,(0,0),Y, p) :- !, ^(Z,(1,1),NewZ). -nandB_rel_(Z,X,(0,0), NewZ,X,(0,0), p) :- !, ^(Z,(1,1),NewZ). -nandB_rel_((0,0),X,Y, (0,0),NewX,NewY, p) :- !, ^(X,(1,1),NewX), ^(Y,(1,1),NewY). -nandB_rel_((1,1),X,(1,1), (1,1),NewX,(1,1), p) :- !, ^(X,(0,0),NewX). -nandB_rel_((1,1),(1,1),Y, (1,1),(1,1),NewY, p) :- !, ^(Y,(0,0),NewY). -nandB_rel_(Z,X,Y, Z,X,Y, P). % still indeterminate - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X or Y boolean 'or' - -narrowing_op(or, P, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), booleanVal_(Y,YB), - orB_rel_(ZB,XB,YB, NewZ, NewX, NewY, P), !. - -orB_rel_(Z,(0,0),(0,0), NewZ,(0,0),(0,0), p) :- !, ^(Z,(0,0),NewZ). % all cases persistent (points) except last -orB_rel_(Z,(1,1),Y, NewZ,(1,1),Y, p) :- !, ^(Z,(1,1),NewZ). -orB_rel_(Z,X,(1,1), NewZ,X,(1,1), p) :- !, ^(Z,(1,1),NewZ). -orB_rel_((0,0),X,Y, (0,0),NewX,NewY, p) :- !, ^(X,(0,0),NewX), ^(Y,(0,0),NewY). -orB_rel_((1,1),X,(0,0), (1,1),NewX,(0,0), p) :- !, ^(X,(1,1),NewX). -orB_rel_((1,1),(0,0),Y, (1,1),(0,0),NewY, p) :- !, ^(Y,(1,1),NewY). -orB_rel_(Z,X,Y, Z,X,Y, P). % still indeterminate - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X nor Y boolean 'nor' - -narrowing_op(nor, P, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), booleanVal_(Y,YB), - norB_rel_(ZB,XB,YB, NewZ, NewX, NewY, P), !. - -norB_rel_(Z,(0,0),(0,0), NewZ,(0,0),(0,0), p) :- !, ^(Z,(1,1),NewZ). % all cases persistent (points) except last -norB_rel_(Z,(1,1),Y, NewZ,(1,1),Y, p) :- !, ^(Z,(0,0),NewZ). -norB_rel_(Z,X,(1,1), NewZ,X,(1,1), p) :- !, ^(Z,(0,0),NewZ). -norB_rel_((1,1),X,Y, (1,1),NewX,NewY, p) :- !, ^(X,(0,0),NewX), ^(Y,(0,0),NewY). -norB_rel_((0,0),X,(0,0), (0,0),NewX,(0,0), p) :- !, ^(X,(1,1),NewX). -norB_rel_((0,0),(0,0),Y, (0,0),(0,0),NewY, p) :- !, ^(Y,(1,1),NewY). -norB_rel_(Z,X,Y, Z,X,Y, P). % still indeterminate - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X xor Y boolean 'xor' - -narrowing_op(xor, P, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), booleanVal_(Y,YB), - xorB_rel_(ZB,XB,YB, NewZ, NewX, NewY, P), !. - -xorB_rel_(Z,(B,B),(B,B), NewZ,(B,B),(B,B), p) :- !, ^(Z,(0,0),NewZ). % all cases persistent (points) except last -xorB_rel_(Z,(X,X),(Y,Y), NewZ,(X,X),(Y,Y), p) :- !, ^(Z,(1,1),NewZ). -xorB_rel_((B,B),X,(B,B), (B,B),NewX,(B,B), p) :- !, ^(X,(0,0),NewX). -xorB_rel_((Z,Z),X,(Y,Y), (Z,Z),NewX,(Y,Y), p) :- !, ^(X,(1,1),NewX). -xorB_rel_((B,B),(B,B),Y, (B,B),(B,B),NewY, p) :- !, ^(Y,(0,0),NewY). -xorB_rel_((Z,Z),(X,X),Y, (Z,Z),(X,X),NewY, p) :- !, ^(Y,(1,1),NewY). -xorB_rel_(Z,X,Y, Z,X,Y, P). % still indeterminate - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Z==X -> Y boolean 'implies' - -narrowing_op(imB, P, $(Z,X,Y), $(NewZ, NewX, NewY)) :- - booleanVal_(Z,ZB), booleanVal_(X,XB), booleanVal_(Y,YB), - imB_rel_(ZB,XB,YB, NewZ, NewX, NewY, P), !. - -imB_rel_(Z,(1,1),Y, New,(1,1),New, P) :- !, ^(Z,Y,New), (New=(B,B) -> P=p ; true). % X=1, Z=Y, persistant if point -imB_rel_(Z,(0,0),Y, NewZ,(0,0),Y, p) :- !, ^(Z,(1,1),NewZ). % X=0, Z=1, persistant -imB_rel_(Z,X,(0,0), NewZ,NewX,(0,0), P) :- !, notB_(X,Z,NewZ,P), notB_(NewZ,X,NewX,P). % Y=0, Z=~X, persistant if point -imB_rel_(Z,X,(1,1), NewZ,X,(1,1), P) :- !, ^(Z,(1,1),NewZ). % Y=1, Z=1, persistant -imB_rel_((0,0),X,Y, (0,0),NewX,NewY, p) :- !, ^(X,(1,1),NewX), ^(Y,(0,0),NewY). % Z=0,X=1,Y=0, persistant -imB_rel_(Z,X,Y, Z,X,Y, P). % still indeterminate diff --git a/docs/Package/clpBNR-0.9.4/prolog/ia_simplify.pl b/docs/Package/clpBNR-0.9.4/prolog/ia_simplify.pl deleted file mode 100644 index 2d8d9e7..0000000 --- a/docs/Package/clpBNR-0.9.4/prolog/ia_simplify.pl +++ /dev/null @@ -1,386 +0,0 @@ -/* The MIT License (MIT) - * - * Copyright (c) 2019,2020 Rick Workman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -% -% Expression variables are Prolog var's; numeric constants are precise. -% Note floats are treated like variables and no arithmetic is performed on them -% - -% negatable operators -negate_op_(+,-). -negate_op_(-,+). - -% power operators -invert_op_(*,/). -invert_op_(/,*). - -% signed multiplier and power values -sign_val_(+,C,C) :- C>=0. -sign_val_(-,C,N) :- N is -C. - -pwr_val_(*,C,C) :- C>=0. -pwr_val_(/,C,N) :- N is -C. - - -% utility to distribute A*(B1+B2) if they have variables in common or A is a constant -% former is safe for intervals (sub-distributive law), latter is valid -distribute_(C,B,Exp) :- - number(C), !, - B=..[AddOp,B1,B2], negate_op_(AddOp,_), % watch out for vars - DExp=..[AddOp,C*B1,C*B2], - simplify(DExp,Exp). -distribute_(A,B,Exp) :- % not always a good thing, e.g., X*(X-1) may be better than X**2-X - B=..[Op,B1,B2], negate_op_(Op,_), % watch out for vars - shared_vars_(A,B), !, % any shared vars - DExp=..[Op,A*B1,A*B2], - simplify(DExp,Exp). - -% utility for (in)equality reduction -normalize_(A,B,Op,ROp,Exp) :- - B==0, !, % RHS = 0 - n_build_(Op, A, 0, Exp). -normalize_(A,B,Op,ROp,Exp) :- - A==0, !, % LHS = 0 - n_build_(ROp, B, 0, Exp). -normalize_(A,B,Op,ROp,Exp) :- - occurs_in_(A,B), !, % RHS is shared var - n_build_(Op, A-B, 0, Exp). -normalize_(A,B,Op,ROp,Exp) :- - occurs_in_(B,A), !, % LHS is shared var - n_build_(ROp, B-A, 0, Exp). -normalize_(A,B,Op,ROp,Exp) :- - compound(A), compound(B), % LHS and RHS are expressions with shared vars - shared_vars_(A,B), !, - n_build_(Op, A-B, 0, Exp). -normalize_(A,B,Op,ROp,Exp) :- % everything else, leave LHS and RHS alone - simplify(B,RHS), - n_build_(Op, A, RHS, Exp). - -occurs_in_(Exp, V) :- var(V), term_variables(Exp,Vs), shared_var_(Vs,V). - -n_build_(Op, L, RHS, Exp) :- simplify(L,LHS), Exp=..[Op,LHS,RHS]. - -shared_vars_(A,B) :- - term_variables(A,AVs), - term_variables(B,BVs), - shared_vars_in_(AVs,BVs). - -shared_vars_in_([AV|_AVs],BVs) :- - shared_var_(BVs,AV), !. -shared_vars_in_([_AV|AVs],BVs) :- - shared_vars_in_(AVs,BVs). - -shared_var_([BV|_BVs],AV) :- - AV == BV, !. -shared_var_([_BV|BVs],AV) :- - shared_var_(BVs,AV). - - -% -% simplify/2 -% -simplify(A,A) :- var(A),!. - -simplify(C,C) :- rational(C),!. % includes integers - -% possible distribute -simplify(A*B,Exp) :- - compound(B), - distribute_(A,B,Exp), !. -simplify(A*B,Exp) :- - compound(A), - distribute_(B,A,Exp), !. - -% simplify equalities and inequalities -simplify(A==B,Exp) :- - normalize_(A,B,==,==,Exp), !. - -simplify(A==,Exp), !. - -simplify(A>=B,Exp) :- - normalize_(A,B,>=,=<,Exp), !. - -simplify(A,Exp), !. - -simplify(A>B,Exp) :- - normalize_(A,B,>,<,Exp), !. -/* -% simplify "cascaded" divisions A/B/C = (A/B)/C = A*C/B -simplify(A/B,Exp) :- -% compound(B), B=Bn/Bd, !, -% simplify(A*Bd/Bn,Exp). - compound(A), A=An/Ad, !, - simplify(An*B, E1), - simplify(E1/Ad,Exp). -*/ -% -% General purpose simplify -% -simplify(E,Exp) :- - collect_exp_(E, L/L, Es/[]), % collect terms in a difference list - collect_exp_items(Es,Is), % collect like terms - reduce_exp_items_(Is,Exp), % and reduce back to expression - !. - -% use difference list to collect terms of an expression -collect_exp_(A, List, Head/NewT) :- - var(A), !, - List=Head/[term(A,1)|NewT]. % separate to keep head unification cheap - -collect_exp_(C, List, Head/NewT) :- - rational(C), !, - List=Head/[C|NewT]. - -collect_exp_(A, List, Head/NewT) :- % floats as terms, can collect but not do arithmetic - float(A), !, - List=Head/[term(A,1)|NewT]. - -collect_exp_(A+B, List, NewList) :- - !, - left_exp_(A,AE), - collect_exp_(AE,List,ListA), - simplify(B,BT), - collect_exp_(BT,ListA,NewList). - -collect_exp_(A-B,List,NewList) :- - !, - left_exp_(A,AE), - collect_exp_(AE,List,ListA), - simplify(B,BT), - collect_neg_(BT,ListA,NewList). - -collect_exp_(-B,List,NewList) :- - simplify(B,BT), - collect_neg_(BT,List,NewList). - -collect_exp_(T, List/[Term|NewT], List/NewT) :- - simplify_term(T,Term). - -left_exp_(A,A) :- var(A), !. -left_exp_(A,A) :- A=..[AOp|_], negate_op_(AOp,_), !. -left_exp_(A,AE) :- simplify(A,AE). - -collect_neg_(BT,List/[N|NewT], List/NewT) :- - rational(BT), - N is -BT. % rational constant expressed as AT-BT -collect_neg_(BT,ListA/T,ListA/NewT) :- - collect_exp_(BT,P/P,ListB), - negate_term_(ListB,T/NewT). - -negate_term_(T/T,NewT/NewT) :- var(T). -negate_term_([term(V,N)|Es]/T,[term(V,NN)|NEs]/NewT) :- - NN is -N, - negate_term_(Es/T,NEs/NewT). -negate_term_([N|Es]/T,[NN|NEs]/NewT) :- - NN is -N, - negate_term_(Es/T,NEs/NewT). - -collect_exp_items([],[]). -collect_exp_items([E|Es],[NE|NEs]) :- - collect_exp_item_(Es,E,NE,ENxt), !, - collect_exp_items(ENxt,NEs). - -collect_exp_item_([],E,E,[]). -collect_exp_item_([V|Es],U,Eo,EsNxt) :- - rational(U), rational(V), % constant values must be precise to add - S is U+V, - collect_exp_item_(Es,S,Eo,EsNxt). -collect_exp_item_([term(V,N1)|Es],term(U,N2),Eo,EsNxt) :- - V==U, - N is N1+N2, - collect_exp_item_(Es,term(V,N),Eo,EsNxt). -collect_exp_item_([Ei|Es],E,Eo,[Ei|EsNxt]) :- % Note that imprecise floats are not added - collect_exp_item_(Es,E,Eo,EsNxt). - -reduce_exp_items_([V],V) :- % terminate: var - var(V), !. -reduce_exp_items_([C],C) :- % terminate: constant - rational(C), !. -reduce_exp_items_([term(V,N)],Exp) :- !, % terminate: single term(_..) - reduce_exp_items_([0,term(V,N)],Exp). -reduce_exp_items_([Exp],Exp). % terminate: final expression -reduce_exp_items_([T1,T2|Ts],Exp) :- % 2 or more terms, combine and continue - reduce_exp_item_(T1,Op1,Exp1), - reduce_exp_item_(T2,Op2,Exp2), - build_exp_(Exp1,Exp2,Op1,Op2,ExpN), !, % ExpN =.. [Op,Exp1,Exp2], !, - reduce_exp_items_([ExpN|Ts],Exp). - -build_exp_(Z,Exp2,Op1,+,Exp2) :- Z==0. -build_exp_(Z,Exp2,Op1,-,NExp2) :- Z==0, build_Nexp_(Exp2,NExp2). -build_exp_(Exp1,Z,+,Op2,Exp1) :- Z==0. -build_exp_(Exp1,Z,-,Op2,NExp1) :- Z==0, build_Nexp_(Exp1,NExp1). -build_exp_(Exp1,Exp2,+,+,Exp1+Exp2). -build_exp_(Exp1,Exp2,+,-,Exp1-Exp2). -build_exp_(Exp1,Exp2,-,+,Exp2-Exp1). -build_exp_(Exp1,Exp2,-,-,NExp1-Exp2) :- build_Nexp_(Exp1,NExp1). - -build_Nexp_(Exp, NExp) :- % constant - rational(Exp), - NExp is -Exp. -build_Nexp_(Exp, NExp) :- % * or / expression, find head - nonvar(Exp), Exp =.. [Op,A1,A2], invert_op_(Op,_), - build_Nexp_(A1,NA1), - NExp =.. [Op,NA1,A2]. -build_Nexp_(Exp, -Exp). % other expression or var - - -reduce_exp_item_(V, +, V) :- var(V). -reduce_exp_item_(term(V,0), +, 0). -reduce_exp_item_(term(V,1), +, V). -reduce_exp_item_(term(V,-1), -, V). -reduce_exp_item_(term(V,N), Op, T) :- mult_term_(V, N, Op, T). -reduce_exp_item_(R, Op, M) :- rational(R), val_sign_(R,Op,M). % constants -reduce_exp_item_(-Exp, -, Exp). -reduce_exp_item_(Exp, +, Exp). - -mult_term_(T, N, Op, M*T) :- var(T), val_sign_(N,Op,M). -mult_term_(T, N, Op, V) :- ground(V), T is V*N. -mult_term_(X*Y, N, Op, Exp*Y) :- mult_term_(X,N,Op,Exp). % maintain Op associativity -mult_term_(X/Y, N, Op, Exp/Y) :- mult_term_(X,N,Op,Exp). -mult_term_(T, N, Op, M*T) :- val_sign_(N,Op,M). - -val_sign_(V,Op,Vp) :- Vp is abs(V), (V<0 -> Op = - ; Op = +). - -% -% simplify a term to an "expression" of term structures and constants -% -simplify_term(T,Term) :- - collect_term_(T, L/L, Ts/[]), % collect in a difference list - collect_term_items_([1|Ts],[C|Is]), % ensure there's a constant multiplier and collect like terms - sort(0, @=<, Is, SIs), - reduce_term_items_([1|SIs],ITerm), % reduce back to expression - % this does constant folding if reduction resulted in a constant - (rational(ITerm) -> Term is ITerm*C ; Term = term(ITerm,C)), - !. - -collect_term_(A, List, Head/NewT) :- - var(A), !, - List=Head/[elem(A,1)|NewT]. - -collect_term_(A, List, Head/NewT) :- - rational(A), !, - List=Head/[A|NewT]. - -collect_term_(A, List, Head/NewT) :- - float(A), !, - List=Head/[elem(A,1)|NewT]. - -collect_term_(-A, List, ListA/NewT) :- % -Term as Term * -1 for reducing signs - simplify(A,AT), collect_term_(AT,List,ListA/[-1|NewT]). - -collect_term_(A**N, List, Head/NewT) :- % possible special case of user written element - simplify(N,NT), rational(NT), - simplify(A,AT), - simplify_pwr_(AT,NT,Term), - List=Head/[Term|NewT]. - -collect_term_(A*B,List,NewList) :- - !, - left_term_(A,AE), - collect_term_(AE,List,ListA), - simplify(B,BT), - collect_term_(BT,ListA,NewList). - -collect_term_(A/B,List,ListA/NewT) :- - !, - left_term_(A,AE), - simplify(B,BT), - collect_term_(AE,List,ListA/T), - collect_term_(BT,P/P,ListB), - invert_term_(ListB,T/NewT). - -collect_term_(E,List/[elem(Exp,1)|NewT], List/NewT) :- - E =.. [F|IArgs], - simplify_list_(IArgs,OArgs), - Exp =.. [F|OArgs]. - -% simplify_pwr_: NT rational, -simplify_pwr_(AT,NT,Term) :- rational(AT), !, % constant folding - Term is AT**NT. -simplify_pwr_(Exp**P,NT,elem(Exp,Pwr)) :- integer(NT), rational(P), !, % (X**P)**NT - Pwr is NT*P. -simplify_pwr_(AT,NT,elem(AT,NT)). - -left_term_(A,A) :- var(A), !. -left_term_(A,A) :- A=..[AOp|_], invert_op_(AOp,_), !. -left_term_(A,AE) :- simplify(A,AE). - -simplify_list_([],[]). -simplify_list_([I|IArgs],[O|OArgs]) :- - simplify(I,O), - simplify_list_(IArgs,OArgs). - -invert_term_(T/T,NewT/NewT) :- var(T),!. -invert_term_([elem(V,N)|Es]/T,[elem(V,NN)|NEs]/NewT) :- !, - NN is -N, - invert_term_(Es/T,NEs/NewT). -invert_term_([N|Es]/T,[NN|NEs]/NewT) :- - NN is 1/N, - invert_term_(Es/T,NEs/NewT). - -collect_term_items_([],[]). -collect_term_items_([E|Es],[NE|NEs]) :- - collect_term_item_(Es,E,NE,ENxt), - collect_term_items_(ENxt,NEs). - -collect_term_item_([],E,E,[]). -collect_term_item_([V|Es],U,Eo,EsNxt) :- - rational(U), rational(V), % precise for multiply - S is U*V, - collect_term_item_(Es,S,Eo,EsNxt). -collect_term_item_([elem(V,N1)|Es],elem(U,N2),Eo,EsNxt) :- - V==U, - N is N1+N2, - collect_term_item_(Es,elem(V,N),Eo,EsNxt). -collect_term_item_([Ei|Es],E,Eo,[Ei|EsNxt]) :- - collect_term_item_(Es,E,Eo,EsNxt). - -reduce_term_items_([Exp],Exp) :- % terminating variable - var(Exp), !. -reduce_term_items_([Exp],Exp) :- % terminating constant - rational(Exp), !. -reduce_term_items_([elem(V,N)],Exp) :- !, % terminating single elem(_..) - reduce_term_items_([1,elem(V,N)],Exp). -reduce_term_items_([Exp],Exp). % terminating final expression -reduce_term_items_([T1,T2|Ts],Exp) :- - reduce_term_item_(T1,Exp1,_), - reduce_term_item_(T2,Exp2,Op), - build_term_(Exp1,Exp2,Op,ExpN), % ExpN =.. [Op,Exp1,Exp2], - !, - reduce_term_items_([ExpN|Ts],Exp). - - -build_term_(E, C, Op, Exp) :- var(E), Exp =.. [Op,E,C]. -build_term_(1, A**B,/, A**NB) :- rational(B), NB is -B . -build_term_(1, Exp, *, Exp). -build_term_(1, Exp, /, 1/Exp). -build_term_(One/B,C, *, C/B) :- One==1. -build_term_(E1, E2, Op, Exp) :- Exp =.. [Op,E1,E2]. - -reduce_term_item_(V, V, *) :- var(V),!. % already reduced to var -reduce_term_item_(elem(_, 0), 1, *). -reduce_term_item_(elem(V, 1), V, *). -reduce_term_item_(elem(V,-1), V, /). -reduce_term_item_(elem(V, E), V**P, Op) :- P is abs(E), (E>0 -> Op= * ; Op= /). -reduce_term_item_(R, R, *). % catchall: constant or expression diff --git a/docs/Package/clpBNR-0.9.4/prolog/ia_utilities.pl b/docs/Package/clpBNR-0.9.4/prolog/ia_utilities.pl deleted file mode 100755 index ac77e09..0000000 --- a/docs/Package/clpBNR-0.9.4/prolog/ia_utilities.pl +++ /dev/null @@ -1,797 +0,0 @@ -/* The MIT License (MIT) - * - * Copyright (c) 2019,2020 Rick Workman - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -% -% compatability predicates -% - -% list filter -list(X) :- is_list(X). - -% -% print_interval(Term), print_interval(Stream,Term) -% prints Term to optional Stream with intervals expanded to domains -% uses format/3 so extended Stream options, e.g., atom(A), are supported -% -print_interval(Term) :- print_interval(current_output,Term). - -print_interval(Stream,Term) :- - copy_term_nat(Term,Out), % copy of Term without attributes for output - term_variables(Term,TVars), - term_variables(Out,OVars), - name_vars_(TVars,OVars,0), % name variables, intervals replaced by declarations - format(Stream,'~w',[Out]). - -name_vars_([],[],_). -name_vars_([TVar|TVars],[OVar|OVars],N) :- - (domain(TVar,Dom) - -> OVar = (V::Dom) - ; OVar = V - ), - number_chars(N,C),atom_chars(V,['V'|C]), - N1 is N+1, - name_vars_(TVars,OVars,N1). - -% -% SWIP attribute portray hook - used if write_attributes=portray -% -:- set_prolog_flag(write_attributes, portray). % generally useful - -attr_portray_hook(interval(Type,Val,N,F),_Int) :- - interval_domain_(Type,Val,Dom), - write(Dom). - -% -% SWIP hook for top level output (ignores flags) -% two modes : -% Verbose=true, output all interval domains and associated constraints -% Verbose=false, only output query vars with no constraints -% -project_attributes(QueryVars, _) :- % mark QueryVars for output when Verbose=false - flag_query_vars_(QueryVars). - -flag_query_vars_([]). -flag_query_vars_([QV|QueryVars]) :- - get_interval_flags_(QV,Flags), - set_interval_flags_(QV,[queryVar|Flags]), !, % add 'queryVar' to Flags - flag_query_vars_(QueryVars). -flag_query_vars_([QV|QueryVars]) :- - flag_query_vars_(QueryVars). - -attribute_goals(X) --> - {current_prolog_flag(clpBNR_verbose,Verbose), - domain_goals_(Verbose,X,Goals) - }, - Goals. - -domain_goals_(true,X,Cs) :- % Verbose=true, QueryVars and constraints output - interval_object(X, Type, Val, Nodes), !, - interval_domain_(Type, Val, Dom), - constraints_(Nodes,X,NCs), % reverse map to list of original constraint - to_comma_exp_(NCs,X::Dom,Cs). -domain_goals_(false,X,[X::Dom]) :- % Verbose=false, only QueryVars output - get_interval_flags_(X,Flags), - memberchk(queryVar,Flags), !, % set by project_attributes - interval_object(X, Type, Val, _), - intValue_(Val,Type,Dom). -domain_goals_(_,X,[]). % catchall but normally non-query attvar, Verbose=false - -constraints_([Node],_,[]) :- var(Node), !. % end of indefinite list -constraints_([node(COp,P,_,Args)|Nodes],X,[C|Cs]) :- - var(P), % skip persistent nodes (already in value) - term_variables(Args,[V|_]), % this ensures constraints only get output once - V==X, - fmap_(Op,COp,_,_,_), !, - remap_(Op,Args,C), - constraints_(Nodes,X,Cs). -constraints_([_|Nodes],X,Cs) :- - constraints_(Nodes,X,Cs). - -to_comma_exp_([],Decl,[Decl]). -to_comma_exp_([N|NCs],Decl,[(Decl,{Cs})]) :- - to_comma_cexp_(NCs,N,Cs). - -to_comma_cexp_([],In,In). -to_comma_cexp_([C|Cs],In,Out) :- - to_comma_cexp_(Cs,(In,C),Out). - -% -% Simplified output format for interval ranges -% -% 1. Any 'real' rational bounds output as floats (conservatively rounded). -% 2. Any subnormal bounds converted to zero. -% 3. Sufficiently narrow reals output in elipsis format. -% 4. Any real intervals with bounds zero or subnormal output as 0.0... -% 5. Query interval variables output as V = V::Domain -% 6. Subterm intervals as sub-terms printed as domain (Type(L,H)). -% -:- ( % to avoid quoting ellipsis postfix format, also increase answer depth a bit - current_prolog_flag(answer_write_options,Opts), - lists:subtract(Opts,[quoted(_)],NOpts0), - lists:subtract(NOpts0,[max_depth(D)],NOpts), - (var(D) -> ND=20 ; ND is max(D,20)), - set_prolog_flag(answer_write_options, [quoted(false),max_depth(ND)|NOpts]) - ). - -intValue_((0,1),integer,boolean). % boolean -intValue_((L,H),real,Out...) :- % virtual zero (zero or subnormal) - zero_float_(L), - zero_float_(H), !, - format(chars(Zero),"~16f",0.0), - string_chars(Out,[' '|Zero]). % space prefix -intValue_((L,H),real,Out...) :- % two floats with minimal leading match - float_chars_(L,LC), - float_chars_(H,HC), - sign_chars_(LC,HC,ULC,UHC,Codes/Match), - leading_zero(ULC,UHC,ZLC), - matching_(ZLC,UHC,Match,0,Dec,MLen), - MLen>Dec+1, !, % minimum of one matching digit after decimal point - string_codes(Out,Codes). -intValue_((L,H),Type,Dom) :- % default, just convert rationals - rational_fraction_(L,FL), - rational_fraction_(H,FH), - interval_domain_(Type, (FL,FH), Dom). - -zero_float_(B) :- float(B), float_class(B,C), (C=zero ; C=subnormal). - -float_chars_(B,Cs) :- - rational_fraction_(B,F), - float(F), float_class(F, normal), - format(chars(Cs),'~16f',F), % same length after '.' (pads with trailing 0's) - length(Cs,Len), Len=<32. % reverts to precise format if too long - -rational_fraction_(B,FB) :- - rational(B,_,D), D \= 1, !, % non-integer rational - FB is float(B). -rational_fraction_(F,0.0) :- - float(F), - float_class(F,subnormal), !. -rational_fraction_(B,B). - -sign_chars_(['-'|LC],['-'|HC],HC,LC,[' ','-'|T]/T) :- !. % negate, save sign and reverse bounds -sign_chars_(LC,HC,LC,HC,[' '|T]/T). % need a character that doesn't print: 2=STX (Start of Text) - -leading_zero(['9'|ULC],['1','0'|_],['0','9'|ULC]) :- !. -leading_zero(ULC,_,ULC). - -% Note: match should never be exact (L=H) so [] case not required -% matching_([],[],[],N,Dec,N). -matching_([C,'.'|LCs],[C,'.'|HCs],[C,'.'|Cs],N,Dec,Nout) :- !, % absorbing "." - digit_(C,_), - Dec is N+1, - N1 is N+2, - matching_(LCs,HCs,Cs,N1,Dec,Nout). -matching_([LC,'.',LC1|LCs],[HC,'.',HC1|HCs],[HC,'.'|Cs],N,Dec,Nout) :- !, % absorbing "." - digit_match_(LC,LC1,HC,HC1), - Dec is N+1, - N1 is N+2, - matching_([LC1|LCs],[HC1|HCs],Cs,N1,Dec,Nout). -matching_([C|LCs],[C|HCs],[C|Cs],N,Dec,Nout) :- !, % matching digit - digit_(C,_), - N1 is N+1, - matching_(LCs,HCs,Cs,N1,Dec,Nout). -matching_([LC,LC1|LCs],[HC,HC1|HCs],[HC|Cs],N,Dec,Nout) :- % match after rounding - digit_match_(LC,LC1,HC,HC1), !, - N1 is N+1, - matching_([LC1|LCs],[HC1|HCs],Cs,N1,Dec,Nout). -matching_(LCs,HCs,[],N,Dec,N) :- % non-matching after '.' - nonvar(Dec). - -digit_match_(LC,LC1,HC,HC1) :- % rounding test if first digits different - digit_(LC,L), digit_(LC1,L1), digit_(HC,H), digit_(HC1,H1), - H is (L+1) mod 10, - L1 >= 5, H1 < 5. - -% char test for properly formatted number -digit_(DC,D) :- atom_number(DC,D), integer(D), 0==pt(XfMid),V2), % Step 6., 7. & 8. for V2 - tree_insert(ZTree1,V2,ZTree2), % Step 10. for V2 - select_min(ZTree2,NxtY,ZTreeY), % Step 9. and 11., remove Y from tree - iterate_MS(Z,Xs,P,NxtY,ZTreeY). % Step 13. -iterate_MS(Z,Xs,P,Zl-(Zh,XVs),ZTree) :- % termination criteria (Step 12.) met - {Zl=K,!, - tree_insert(R, NK-NData, NewR). -tree_insert(n(L,R,K-(U,Data)), K-(NU,NData), n(NewL,R,K-(U,Data))) :- NU=U - tree_insert(R, NData, NewR). - -select_min(n(L,R,Min),Min,R) :- var(L), !, - nonvar(Min). % fail if tree was empty -select_min(n(L,R,KData),Min,n(NewL,R,KData)) :- - select_min(L,Min,NewL). - -% construct box from interval bounds -box_([],[]). -box_([X|Xs],[R|Rs]) :- - getValue(X,R), - box_(Xs,Rs). - -% find widest interval and its midpoint -widest_MS([X|Xs],[XV|XVs],Xf,XfMid) :- - widest1_MS(Xs,XVs,XV,X,Xf,XfMid). - -widest1_MS([],[],(L,H),Xf,Xf,XfMid) :- - midpoint_(L,H,XfMid), !. -widest1_MS([X|Xs],[(L,H)|XVs],(L0,H0),X0,Xf,XfMid) :- - (H-L) > (H0-L0), !, - widest1_MS(Xs,XVs,(L,H),X,Xf,XfMid). -widest1_MS([X|Xs],[XV|XVs],W0,X0,Xf,XfMid) :- - widest1_MS(Xs,XVs,W0,X0,Xf,XfMid). - -% Midpoint test, Step 11+: -% Discard all pairs (Z,z) from the list that satisfy F(C) geometric/arithmetic mean -% M is min(sqrt(abs(L)),abs(L)/2)*sign(L)+min(sqrt(abs(H)),abs(H)/2)*sign(H). - -% -% splitsolve(Int) - joint search on list of intervals -% simple split, e.g., no filtering on splutions, etc. -% -splitsolve(X) :- - current_prolog_flag(clpBNR_default_precision,P), - splitsolve(X,P). - -splitsolve(X,P) :- - number(X), !. % already a point value -splitsolve(X,P) :- - interval(X), !, % if single interval, put it into a list - Err is 10**(-P), - simplesolveall_([X],Err). -splitsolve(X,P) :- % assumed to be a list - flatten_list(X,[],XF), % flatten before iteration - Err is 10**(-P), - simplesolveall_(XF,Err). - -% flatten list(s) using difference lists -flatten_list(V,Tail,[V|Tail]) :- var(V), !. -flatten_list([],Tail,Tail) :- !. -flatten_list([H|T], Tail, List) :- !, - flatten_list(H, HTail, List), - flatten_list(T, Tail, HTail). -flatten_list(N,Tail,[N|Tail]). - -simplesolveall_(Xs,Err) :- - select_wide_(Xs,D1,X), - interval_object(X, Type, (Xl,Xh), _), - midpoint_(Xl,Xh,Xmid), - choice_generator_(Type,X,(Xl,Xh),Xmid,Err,Choices), - !, - Choices, % generate alternatives - simplesolveall_(Xs,Err). -simplesolveall_(Xs,Err). % terminated - -select_wide_([X],_,X) :- !. % select last remaining element -select_wide_([X1,X2|Xs],D1,X) :- % compare widths and discard one interval - (var(D1) -> delta(X1,D1) ; true), - delta(X2,D2), - (D1 >= D2 - -> select_wide_([X1|Xs],D1,X) - ; select_wide_([X2|Xs],D2,X) - ). - -% bisect_interval(real,X,[Xl,Xh],Xmid,Err,({X= true ; absolve_l(X,Type,Delta,1,Limit)), - (not(not(upper_bound(X))) -> true ; absolve_r(X,Type,Delta,1,Limit)). - -absolve([],_). % extends to lists -absolve([X|Xs],Lim):- absolve(X,Lim),!, absolve(Xs,Lim). - -delta_(integer,(L,U),D) :- D is U div 2 - L div 2. -delta_(real, (L,U),D) :- D is U/2 - L/2. - -absolve_l(X, Type, DL, NL, Limit):- NL=pt(Split)}, % so X must be > - absolve_l(X,Type, DL1, NL1, Limit). -absolve_l(_,_,_,_,_). % final result - -absolve_r(X, Type, DU, NU, Limit):- NU=pt(Split)}),!, - {X= NPt=SPt ; split_real_lo(X,(L,SPt),NPt,Err)). - -split_real_hi(X,(Pt,H),NPt,Err) :- % search upper range for a split point - splitinterval_real_((Pt,H),SPt,Err), !, - (X\=SPt -> NPt=SPt ; split_real_hi(X,(SPt,H),NPt,Err)). - - -% -% splitinterval_integer_ and splitinterval_real_ require ! at point of call. -% -splitinterval_integer_((L,H),0) :- - L < 0, H > 0. % contains 0 but not bounded by 0 -splitinterval_integer_((-1.0Inf,H),Pt) :- - Pt is H*10-5. % subtract 5 in case H is 0. (-5, -15, -105, -1005, ...) -splitinterval_integer_((L,-1.0Inf),Pt) :- - Pt is L*10+5. % add 5 in case L is 0. (5, 15, 105, 1005, ...) -splitinterval_integer_((L,H),Pt) :- - H-L >= 16, % don't split ranges smaller than 16 - Pt is (L div 2) + (H div 2). % avoid overflow - -splitinterval_real_((L,H),0,E) :- % if interval contains 0, split on (precisely) 0. - L < 0, H > 0, !, % cut in case error criteria fails - (H-L) > E. % fail if width is less than error criteria, overflow is OK - -splitinterval_real_((-1.0Inf,H),Pt,_) :- % neg. infinity to H=<0 - !, % if following overflows, split failed - Pt is H*10-1, % subtract 1 in case H is 0. (-1, -11, -101, -1001, ...) - Pt > -1.0Inf. % Pt must be finite -splitinterval_real_((L,1.0Inf),Pt,_) :- % L>=0 to pos. infinity - !, % if following overflows, split failed - Pt is L*10+1, - Pt < 1.0Inf. % Pt must be finite - -splitinterval_real_((L,H),Pt,E) :- % finite L,H, positive or negative but not split, Pt\=0. - \+ chk_small(L,H,E), % only split if not small - splitMean_(L,H,Pt), !. - -%splitinterval_real_([L,H],Pt,E) :- -% writeln('FAIL'([L,H],Pt,E)),fail. - -% (approx.) geometric mean of L and H (same sign) -splitMean_(L,H,M) :- L >=0, !, % positive range - (L=:=0 -> M is min(H/2, sqrt( H)) ; M is sqrt(L)*sqrt(H)). -splitMean_(L,H,M) :- % negative range - (H=:=0 -> M is max(L/2,-sqrt(-L)) ; M is -sqrt(-L)*sqrt(-H)). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% partial_derivative(E, X, D) -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Perform symbolic differentiation followed by simplify/2: D = dE/dX -% -% located in utilities as it's a common requirement for applying series expansion -% to improve convergance. Avoids necessity of exposing simplify/2. -% Note that the set of rules only covers functions supported by {}. -% -partial_derivative(F,X,DFX) :- - pd(F,X,DD), - simplify(DD,DFX). - % simplify(DD,DX), - % simplify(DX,DFX). % post re-simplify for insurance?? - -pd(Y,X,D) :- - var(Y), (X==Y -> D=1 ; D=0), !. - -pd(C,_,0) :- % DX = 0 - atomic(C), !. % atom, number, .. - -pd(-U,X,DX) :- % DX = -DU - pd(U,X,DU), - pd_minus(DU,DX). - -pd(U+V,X,DX) :- % DX = DU+DV - pd(U,X,DU), pd(V,X,DV), - pd_add(DU,DV,DX). - -pd(U-V,X,DX) :- % DX = DU-DV - pd(U,X,DU), pd(V,X,DV), - pd_sub(DU,DV,DX). - -pd(U*V,X,DX) :- % DX = V*DU+U*DV - pd(U,X,DU), pd(V,X,DV), - pd_mul(V,DU,VDU), - pd_mul(U,DV,UDV), - pd_add(VDU,UDV,DX). - -pd(U/V,X,DX) :- % DX = (V*DU-U*DV)/(V**2) - pd(U,X,DU), pd(V,X,DV), - pd_mul(V,DU,VDU), - pd_mul(U,DV,UDV), - pd_sub(VDU,UDV,DXN), - pd_pow(V,2,DXD), - pd_div(DXN,DXD,DX). - -pd(U**N,X,DX) :- % DX = (N*U**(N-1))*DU - pd(U,X,DU), - pd_sub(N,1,N1), %N1 is N-1, - pd_pow(U,N1,UN1), - pd_mul(N,UN1,DX1), - pd_mul(DX1,DU,DX). - -pd(log(U),X,DX) :- % DX = DU/U - pd(U,X,DU), - pd_div(DU,U,DX). - -pd(exp(U),X,DX) :- % DX = exp(U)*DU - pd(U,X,DU), - pd_exp(U,ExpU), - pd_mul(ExpU,DU,DX). - -pd(sqrt(U),X,DX) :- % DX = DU/(2*sqrt(U)) - pd(U,X,DU), - pd_sqrt(U,SqrtU), - pd_mul(2,SqrtU,DXD), - pd_div(DU,DXD,DX). - -pd(sin(U),X,DX) :- % DX = cos(U)*DU - pd(U,X,DU), - pd_cos(U,CosU), - pd_mul(CosU,DU,DX). - -pd(cos(U),X,DX) :- % DX = -sin(U)*DU - pd(U,X,DU), - pd_sin(U,SinU), - pd_mul(SinU,DU,DSU), - pd_minus(DSU,DX). - -pd(tan(U),X,DX) :- % DX = DU/cos(U)**2 - pd(U,X,DU), - pd_cos(U,CosU), - pd_pow(CosU,2,DXD), - pd_div(DU,DXD,DX). - -pd(asin(U),X,DX) :- % DX = DU/sqrt(1-U**2) - pd(U,X,DU), - pd_pow(U,2,USQ), - pd_sub(1,USQ,USQ1), - pd_sqrt(USQ1,DXD), - pd_div(DU,DXD,DX). - -pd(acos(U),X,DX) :- % DX = -DU/sqrt(1-U**2) = -D(asin(U)) - pd(asin(U),X,DasinX), - pd_minus(DasinX,DX). - -pd(atan(U),X,DX) :- % DX = DU/(1+U**2) - pd(U,X,DU), - pd_pow(U,2,USQ), - pd_add(1,USQ,USQ1), - pd_div(DU,USQ1,DX). - - -% optimizations -% also facilitates compiled arithmetic, avoids using catch/3 for instantiation errors -pd_minus(DU,DX) :- ground(DU) -> DX is -DU ; DX = -DU. - -pd_add(DU,DV,DV) :- DU==0, !. -pd_add(DU,DV,DU) :- DV==0, !. -pd_add(DU,DV,DX) :- ground((DU,DV)) -> DX is DU+DV ; DX = DU+DV. - -pd_sub(DU,DV,DX) :- DU==0, !, pd_minus(DV,DX). -pd_sub(DU,DV,DU) :- DV==0, !. -pd_sub(DU,DV,DX) :- ground((DU,DV)) -> DX is DU-DV ; DX = DU-DV. - -pd_mul(DU,DV,0) :- DU==0, !. -pd_mul(DU,DV,0) :- DV==0, !. -pd_mul(DU,DV,DV) :- DU==1, !. -pd_mul(DU,DV,DU) :- DV==1, !. -pd_mul(DU,DV,DX) :- DU== -1, !, pd_minus(DV,DX). -pd_mul(DU,DV,DX) :- DV== -1, !, pd_minus(DU,DX). -pd_mul(DU,DV,DX) :- ground((DU,DV)) -> DX is DU*DV ; DX = DU*DV. - -pd_div(DU,DV,0) :- DU==0, !. -pd_div(DU,DV,0) :- DV==0, !, fail. -pd_div(DU,DV,DU) :- DV==1, !. -pd_div(DU,DV,DU) :- DV== -1, !, pd_minus(DU,DX). -pd_div(DU,DV,DX) :- ground((DU,DV)) -> DX is DU/DV ; DX = DU/DV. - -pd_pow(DU,DV,0) :- DU==0, !. -pd_pow(DU,DV,1) :- DV==0, !. -pd_pow(DU,DV,1) :- DU==1, !. -pd_pow(DU,DV,DU) :- DV==1, !. -pd_pow(DU,DV,DX) :- ground((DU,DV)) -> DX is DU**DV ; DX = DU**DV. - -pd_exp(DU,DX) :- ground(DU) -> DX is exp(DU) ; DX = exp(DU). - -pd_sqrt(DU,DX) :- ground(DU) -> DX is sqrt(DU) ; DX = sqrt(DU). - -pd_sin(DU,DX) :- ground(DU) -> DX is sin(DU) ; DX = sin(DU). - -pd_cos(DU,DX) :- ground(DU) -> DX is cos(DU) ; DX = cos(DU). - -% -% safe declarations must be after the predicate definitions -% -% the following use meta-predicates -sandbox:safe_primitive(clpBNR:solve(_)). -sandbox:safe_primitive(clpBNR:solve(_,_)). -sandbox:safe_primitive(clpBNR:splitsolve(_)). -sandbox:safe_primitive(clpBNR:splitsolve(_,_)). -sandbox:safe_primitive(clpBNR:global_minimum(_,_)). -sandbox:safe_primitive(clpBNR:global_minimum(_,_,_)). -sandbox:safe_primitive(clpBNR:global_maximum(_,_)). -sandbox:safe_primitive(clpBNR:global_maximum(_,_,_)). -sandbox:safe_primitive(clpBNR:partial_derivative(_,_,_)). From d99af1f8a33b361f12b8db0d556edad99a58492b Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 13:43:08 +0100 Subject: [PATCH 3/7] Fixed modes of files to 644 --- docs/CLP_BNR_Guide/CLP_BNR_Guide.html | 0 docs/CLP_BNR_Guide/CLP_BNR_Guide.myw | 0 docs/CLP_BNR_Guide/lib/commonmark.min.js | 0 docs/CLP_BNR_Guide/lib/grit.js | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 docs/CLP_BNR_Guide/CLP_BNR_Guide.html mode change 100755 => 100644 docs/CLP_BNR_Guide/CLP_BNR_Guide.myw mode change 100755 => 100644 docs/CLP_BNR_Guide/lib/commonmark.min.js mode change 100755 => 100644 docs/CLP_BNR_Guide/lib/grit.js diff --git a/docs/CLP_BNR_Guide/CLP_BNR_Guide.html b/docs/CLP_BNR_Guide/CLP_BNR_Guide.html old mode 100755 new mode 100644 diff --git a/docs/CLP_BNR_Guide/CLP_BNR_Guide.myw b/docs/CLP_BNR_Guide/CLP_BNR_Guide.myw old mode 100755 new mode 100644 diff --git a/docs/CLP_BNR_Guide/lib/commonmark.min.js b/docs/CLP_BNR_Guide/lib/commonmark.min.js old mode 100755 new mode 100644 diff --git a/docs/CLP_BNR_Guide/lib/grit.js b/docs/CLP_BNR_Guide/lib/grit.js old mode 100755 new mode 100644 From ffc19ce9e7ed5d4ed887ba79cfbe9a4e6085ec8f Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 14:00:35 +0100 Subject: [PATCH 4/7] Move helper files to a subdirectory to avoid them being available as direct libraries. --- prolog/clpBNR.pl | 92 ++++++++++++++-------------- prolog/{ => clpBNR}/ia_primitives.pl | 0 prolog/{ => clpBNR}/ia_simplify.pl | 0 prolog/{ => clpBNR}/ia_utilities.pl | 0 4 files changed, 46 insertions(+), 46 deletions(-) rename prolog/{ => clpBNR}/ia_primitives.pl (100%) rename prolog/{ => clpBNR}/ia_simplify.pl (100%) rename prolog/{ => clpBNR}/ia_utilities.pl (100%) diff --git a/prolog/clpBNR.pl b/prolog/clpBNR.pl index f804a44..c56b780 100644 --- a/prolog/clpBNR.pl +++ b/prolog/clpBNR.pl @@ -121,8 +121,8 @@ g_incb(G) :- nb_getval(G,N), N1 is N+1, b_setval(G,N1). % undone on backtrack g_read(G,V) :- nb_getval(G,V). -:- discontiguous - clpBNR:clpStatistics/0, clpBNR:clpStatistic/1, +:- discontiguous + clpBNR:clpStatistics/0, clpBNR:clpStatistic/1, sandbox:safe_global_variable/1. sandbox:safe_global_variable('clpBNR:userTime'). @@ -149,7 +149,7 @@ clpStatistic(inferences(I)) :- statistics(inferences,I1), g_read('clpBNR:inferences',I0), I is I1-I0. -:- include(ia_primitives). % interval arithmetic relations via evalNode/4. +:- include(clpBNR/ia_primitives). % interval arithmetic relations via evalNode/4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -172,7 +172,7 @@ % flags (list) abstraction get_interval_flags_(Int,Flags) :- get_attr(Int, clpBNR, interval(Type, Val, Nodelist, Flags)). - + set_interval_flags_(Int,Flags) :- % flags assumed to be ground so no copy required get_attr(Int, clpBNR, interval(Type, Val, Nodelist, _)), put_attr(Int, clpBNR, interval(Type, Val, Nodelist, Flags)). @@ -182,7 +182,7 @@ % universal_interval((-1.0Inf,1.0Inf)). -% Finite intervals - 64 bit IEEE reals, +% Finite intervals - 64 bit IEEE reals, finite_interval(real, (-1.0e+16,1.0e+16)). finite_interval(integer, (L,H)) :- %% SWIP: current_prolog_flag(bounded,false),!, % integers are unbounded, but use tagged limits for finite default @@ -196,7 +196,7 @@ % % non-backtracking set bounds for use with branch and bound % -nb_setbounds(Int, [L,U]) :- +nb_setbounds(Int, [L,U]) :- get_attr(Int, clpBNR, Def), Def = interval(_, Val, _, _), ^(Val,(L,U),NewVal), % new range is intersection (from ia_primitives) @@ -205,7 +205,7 @@ % % get current value % -getValue(Int, Val) :- +getValue(Int, Val) :- number(Int) -> Val=(Int,Int) % numeric point value ; get_attr(Int, clpBNR, interval(_, Val, _, _)). % interval, optimized for SWIP @@ -214,10 +214,10 @@ % set monitor action on an interval % watch(Int,Action) :- - atom(Action), + atom(Action), get_interval_flags_(Int,Flags), !, lists:subtract(Flags,[watch(_)],Flags1), % remove any previous setting - (Action = none -> true ; set_interval_flags_(Int,[watch(Action)|Flags1])). + (Action = none -> true ; set_interval_flags_(Int,[watch(Action)|Flags1])). watch(Ints,Action) :- is_list(Ints), watch_list_(Ints,Action). @@ -254,7 +254,7 @@ queue_nodes_(real,_,_,Nodes,Nodes). % type real - just use Nodes queue_nodes_(integer,(L,H),_,Nodes,Nodes) :- % type integer #1 with integral bounds - integral_(L), integral_(H), !. % run Nodes if bounds integers or infinities + integral_(L), integral_(H), !. % run Nodes if bounds integers or infinities queue_nodes_(integer,_,Int,_,[node(integral,_,0,$(Int))|_]). % type integer #2 % schedule an "integral" node to re-adjust bounds (Nodes run on adjustment) @@ -263,7 +263,7 @@ integral_(B) :- integer(B). % -% range(Int, Bounds) for compatability +% range(Int, Bounds) for compatability % % for interval(Int) and number(Int), check if value is (always) in specified range, unifying any vars with current value range(Int, [L,H]) :- getValue(Int, (IL,IH)), number(IL), !, % existing interval @@ -275,7 +275,7 @@ getValue(Int, (L,H)). % will bind any intput var's to values % -% domain(Int, Dom) for interval(Int) for compatability +% domain(Int, Dom) for interval(Int) for compatability % domain(Int, Dom) :- interval_object(Int, Type, Val, _), @@ -296,7 +296,7 @@ % % midpoint(Int, Wid) midpoint of an interval or numeric value % based on: -% Frédéric Goualard. How do you compute the midpoint of an interval?. +% Frédéric Goualard. How do you compute the midpoint of an interval?. % ACM Transactions on Mathematical Software, Association for Computing Machinery, 2014, % 40 (2), 10.1145/2493882. hal-00576641v1 % Exception, single infinite bound treated as largest finite FP value @@ -323,7 +323,7 @@ median_bound_(lo,L,FL), median_bound_(hi,H,FH), median_(FL,FH,Med), !. - + median_bound_(lo,B,FB) :- B=:=0, FB is nexttoward(B,1.0). median_bound_(lo,-1.0Inf,FB) :- FB is nexttoward(-1.0Inf,0.0). median_bound_(lo,B,FB) :- FB is roundtoward(float(B), to_negative). @@ -353,22 +353,22 @@ Ints::Dom :- is_list(Ints),!, intervals_(Ints,Dom). - -R::Dom :- var(R), var(Dom), !, % declare R = real(L,H), Note: R can be interval + +R::Dom :- var(R), var(Dom), !, % declare R = real(L,H), Note: R can be interval int_decl_(real,(_,_),R), domain(R,Dom). R::Dom :- var(Dom), !, % domain query (if interval(R) else fail) domain(R,Dom). % "domain" query, unify interval Type and Bounds -R::Dom :- % interval(R) or number(R) and nonvar(Dom) +R::Dom :- % interval(R) or number(R) and nonvar(Dom) Dom=..[Type|Bounds], (Bounds=[] -> Val=(_,_) ; Val=..[,|Bounds]), int_decl_(Type,Val,R). int_decl_(boolean,_,R) :- !, % boolean is integer; 0=false, 1=true, ignore any bounds. int_decl_(integer,(0,1),R). - + int_decl_(Type,(L,H),R) :- interval_object(R,IType,CVal,_NL), !, % already interval lower_bound_val_(Type,L,IL), % changing type,bounds? upper_bound_val_(Type,H,IH), @@ -381,7 +381,7 @@ lower_bound_val_(Type,L,IL), upper_bound_val_(Type,H,IH), IL= + (IL=IH -> R=IL ; % point range, can unify now put_attr(R, clpBNR, interval(Type, (IL,IH), _NL, [])) % attach clpBNR attribute ). @@ -422,7 +422,7 @@ upper_bound_val_(integer,H,IH), (IL=IH -> Int=IL % narrowed to point - ; (put_attr(Int,clpBNR,interval(integer,(IL,IH),NodeList,Flags)), % set Type (only case allowed) + ; (put_attr(Int,clpBNR,interval(integer,(IL,IH),NodeList,Flags)), % set Type (only case allowed) linkNodeList_(NodeList, Agenda, NewAgenda) ) ). @@ -470,7 +470,7 @@ mergeFlags_(Flags1,[],Flags1) :- !. mergeFlags_(Flags1,Flags2,Flags) :- lists:union(Flags1,Flags2,Flags). % ambiguous if both have same flag set to different values - + mergeNodes_([N],NodeList,NodeList) :- var(N),!. mergeNodes_([N|Ns],NodeList,[N|NewList]) :- N=node(Op,_,_,Ops), @@ -479,7 +479,7 @@ mergeNodes_([N|Ns],NodeList,NewList) :- mergeNodes_(Ns,NodeList,NewList). -notIn_([node(NOp,_,_,NOps)|Ns],Op,Ops) :- % equivalent node(Op, _, _,Ops) ==> failure +notIn_([node(NOp,_,_,NOps)|Ns],Op,Ops) :- % equivalent node(Op, _, _,Ops) ==> failure NOp==Op, NOps==Ops, % avoid unification of ops and operands (Op may be more than just an atom) !, fail. notIn_([N|Ns],Op,Ops) :- % keep searching @@ -509,16 +509,16 @@ addConstraints_(C,Agenda,NextAgenda), !, addConstraints_(Cs,NextAgenda,NewAgenda). -% low overhead version for internal use -constrain_(C) :- +% low overhead version for internal use +constrain_(C) :- buildConstraint_(C,T/T,Agenda), stable_(Agenda). - + buildConstraint_(C,Agenda,NewAgenda) :- debug_clpBNR_('Add ~p',{C}), build_(C, 1, boolean, Agenda, NewAgenda), !. -:- include(ia_simplify). % simplifies constraints to a hopefully more efficient equivalent +:- include(clpBNR/ia_simplify). % simplifies constraints to a hopefully more efficient equivalent % % build a node from an expression @@ -539,9 +539,9 @@ number(Num), !. build_(Exp, Num, VarType, Agenda, Agenda) :- % pre-compile ground Exp (including pi and e) ground(Exp), - safe_(Exp), % safe to evaluate + safe_(Exp), % safe to evaluate L is roundtoward(Exp,to_negative), % rounding only affects float evaluation - (float(L) % not precise -> interval + (float(L) % not precise -> interval -> (H is roundtoward(Exp,to_positive), int_decl_(VarType,(L,H),Num)) % if precise use L ; Num=L % else use precise value ), !. @@ -561,18 +561,18 @@ safe_([A|As]) :- !, safe_(A), safe_(As). -safe_(F) :- +safe_(F) :- current_arithmetic_function(F), % evaluable by is/2 F =.. [Op|Args], \+memberchk(Op,[**,sin,cos,tan,asin,acos,atan]), % unsafe operations due to rounding safe_(Args). -% a constraint must evaluate to a boolean +% a constraint must evaluate to a boolean constraint_(C) :- nonvar(C), C =..[Op|_], fmap_(Op,_,_,_,[boolean|_]), !. % map constraint operator to primitive/arity/types fmap_(+, add, ZXY, ZXY, [real,real,real]). -fmap_(-, add, [Z,X,Y], [X,Z,Y], [real,real,real]). % note subtract before minus +fmap_(-, add, [Z,X,Y], [X,Z,Y], [real,real,real]). % note subtract before minus fmap_(*, mul, ZXY, ZXY, [real,real,real]). fmap_(/, mul, [Z,X,Y], [X,Z,Y], [real,real,real]). fmap_(**, pow, ZXY, ZXY, [real,real,real]). @@ -612,7 +612,7 @@ % reverse map from Op and Args (used by "verbose" top level output to reverse compile constraints) remap_(Op,$(Z,X,Y),C) :- constraint_(Op), Z==1, !, % simplification for constraints - C=..[Op,X,Y]. + C=..[Op,X,Y]. remap_(Op,$(Z,X,Y),Z==C) :- !, C=..[Op,X,Y]. remap_(Op,$(Z,X),Z==C) :- @@ -642,7 +642,7 @@ g_read('clpBNR:node_count',C). % extend list with X -newmember([X|Xs],N) :- +newmember([X|Xs],N) :- nonvar(X), !, % not end of (indefinite) list newmember(Xs,N). newmember([N|_],N). % end of list @@ -669,7 +669,7 @@ sandbox:safe_global_variable('clpBNR:iterations'). clpStatistics :- - current_prolog_flag(clpBNR_iteration_limit,L), + current_prolog_flag(clpBNR_iteration_limit,L), g_assign('clpBNR:iterations',L), % set "low" water mark to upper limit fail. % backtrack to reset other statistics. @@ -680,7 +680,7 @@ % % Execute a node on the queue -% Note: "special" ops like instantiate and integral not counted as narrowing op in clpStatistics +% Note: "special" ops like instantiate and integral not counted as narrowing op in clpStatistics % % Comment out the following to enable Op tracing: goal_expansion(traceIntOp_(Op, Args, PrimArgs, New),true). @@ -693,9 +693,9 @@ getValue(YArg,YVal), evalNode(Op, P, $(ZVal,XVal,YVal), $(NZVal,NXVal,NYVal)), % can fail causing stable_ to fail => backtracking traceIntOp_(Op, [ZArg,XArg,YArg], [ZVal,XVal,YVal], [NZVal,NXVal,NYVal]), % in ia_utilities - updateValue_(ZVal, NZVal, ZArg, OpsLeft, Agenda, AgendaZ), - updateValue_(XVal, NXVal, XArg, OpsLeft, AgendaZ, AgendaZX), - updateValue_(YVal, NYVal, YArg, OpsLeft, AgendaZX, NewAgenda). + updateValue_(ZVal, NZVal, ZArg, OpsLeft, Agenda, AgendaZ), + updateValue_(XVal, NXVal, XArg, OpsLeft, AgendaZ, AgendaZX), + updateValue_(YVal, NYVal, YArg, OpsLeft, AgendaZX, NewAgenda). doNode_($(ZArg,XArg), Op, P, OpsLeft, Agenda, NewAgenda) :- % Arity 2 Op var(P), !, % check persistent bit @@ -713,7 +713,7 @@ getValue(Arg,Val), evalNode(Op, P, $(Val), $(NVal)), % can fail causing stable_ to fail => backtracking traceIntOp_(Op, [Arg], [Val], [NVal]), % in ia_utilities - updateValue_(Val, NVal, Arg, 1, Agenda,NewAgenda). % always update value regardless of OpsLeft limiter + updateValue_(Val, NVal, Arg, 1, Agenda,NewAgenda). % always update value regardless of OpsLeft limiter doNode_(Args, Op, p, _, Agenda, Agenda) :- % persistent bit "set", skip node and trim trim_ops_(Args). @@ -733,14 +733,14 @@ trim_op_(Op1). trim_op_(Arg) :- number(Arg), !. -trim_op_(Arg) :- +trim_op_(Arg) :- get_attr(Arg, clpBNR, Def), % an interval ? Def = interval(_, _, NList, _), trim_persistent_(NList,TrimList), % if trimmed list empty, set to a new unshared var to avoid cycles(?) on backtracking (var(TrimList) -> setarg(3,Def,_) ; setarg(3,Def,TrimList)). % write trimmed node list -trim_persistent_(T,T) :- var(T), !. % end of indefinite list +trim_persistent_(T,T) :- var(T), !. % end of indefinite list trim_persistent_([node(_,P,_,_)|Ns],TNs) :- nonvar(P), !, trim_persistent_(Ns,TNs). trim_persistent_([N|Ns],[N|TNs]) :- trim_persistent_(Ns,TNs). @@ -775,7 +775,7 @@ linkNode_(List/[X|NextTail], X, List/NextTail) :- % add to list setarg(3,X,1). % set linked bit -:- include(ia_utilities). % print,solve, etc. +:- include(clpBNR/ia_utilities). % print,solve, etc. % % Get all defined statistics @@ -789,7 +789,7 @@ :- initialization(( % restore "optimise" flag - (nb_current('clpBNR:temp',Opt) + (nb_current('clpBNR:temp',Opt) -> (nb_delete('clpBNR:temp'), set_prolog_flag(optimise,Opt)) ; true ), @@ -803,7 +803,7 @@ -> true ; write("Error: clpBNR requires support for IEEE arithmetic.\n") ), - + % Set required arithmetic flags set_prolog_flag(prefer_rationals, true), % enable rational arithmetic set_prolog_flag(max_rational_size, 16), % rational size in bytes before .. @@ -812,10 +812,10 @@ set_prolog_flag(float_overflow,infinity), % enable IEEE continuation values set_prolog_flag(float_zero_div,infinity), set_prolog_flag(float_undefined,nan), - + once(prolog_stack_property(global,min_free(Free))), % minimum free cells (8 bytes/cell) (Free < 8196 -> set_prolog_stack(global,min_free(8196)) ; true), - + % create clpBNR specific flags create_prolog_flag(clpBNR_iteration_limit,3000,[type(integer),keep(true)]), create_prolog_flag(clpBNR_default_precision,6,[type(integer),keep(true)]), diff --git a/prolog/ia_primitives.pl b/prolog/clpBNR/ia_primitives.pl similarity index 100% rename from prolog/ia_primitives.pl rename to prolog/clpBNR/ia_primitives.pl diff --git a/prolog/ia_simplify.pl b/prolog/clpBNR/ia_simplify.pl similarity index 100% rename from prolog/ia_simplify.pl rename to prolog/clpBNR/ia_simplify.pl diff --git a/prolog/ia_utilities.pl b/prolog/clpBNR/ia_utilities.pl similarity index 100% rename from prolog/ia_utilities.pl rename to prolog/clpBNR/ia_utilities.pl From 14d82794af7dd328e26df5f8b098eaa20c1020e5 Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 14:02:40 +0100 Subject: [PATCH 5/7] Remove printing ``*** clpBNR v~walpha ***`` as this may clobber output. --- prolog/clpBNR.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/prolog/clpBNR.pl b/prolog/clpBNR.pl index c56b780..ea3c157 100644 --- a/prolog/clpBNR.pl +++ b/prolog/clpBNR.pl @@ -794,7 +794,6 @@ ; true ), - clpBNR_version_(Version), format("*** clpBNR v~walpha ***\n\n",[Version]), (current_prolog_flag(bounded,true) -> write("Error: clpBNR requires unbounded integers and rationals.\n") ; true From 27edc98c72a051c6d985e6b6b1bcae31ae3f5d90 Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 14:13:55 +0100 Subject: [PATCH 6/7] Cleanup declarations and modularize initialization of the library. --- prolog/clpBNR.pl | 67 +++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/prolog/clpBNR.pl b/prolog/clpBNR.pl index ea3c157..a69ad00 100644 --- a/prolog/clpBNR.pl +++ b/prolog/clpBNR.pl @@ -91,6 +91,10 @@ :- style_check([-singleton, -discontiguous]). % :- discontiguous ... not reliable. +:- create_prolog_flag(clpBNR_iteration_limit,3000,[type(integer),keep(true)]). +:- create_prolog_flag(clpBNR_default_precision,6,[type(integer),keep(true)]). +:- create_prolog_flag(clpBNR_verbose,false,[type(boolean),keep(true)]). + % % SWIP optimise control - set flag to true for compiled arithmetic % @@ -787,38 +791,53 @@ clpBNR_version_("0.9.4"). -:- initialization(( - % restore "optimise" flag - (nb_current('clpBNR:temp',Opt) - -> (nb_delete('clpBNR:temp'), set_prolog_flag(optimise,Opt)) - ; true - ), - - (current_prolog_flag(bounded,true) - -> write("Error: clpBNR requires unbounded integers and rationals.\n") - ; true - ), - (current_prolog_flag(float_overflow,_) - -> true - ; write("Error: clpBNR requires support for IEEE arithmetic.\n") +check_features :- + ( current_prolog_flag(bounded,true) + -> print_message(error, clpBNR(bounded)) + ; true ), + ( current_prolog_flag(float_overflow,_) + -> true + ; print_message(error, clpBNR(no_IEEE)) + ). - % Set required arithmetic flags +clp_set_prolog_flags :- set_prolog_flag(prefer_rationals, true), % enable rational arithmetic set_prolog_flag(max_rational_size, 16), % rational size in bytes before .. set_prolog_flag(max_rational_size_action, float), % conversion to float set_prolog_flag(float_overflow,infinity), % enable IEEE continuation values set_prolog_flag(float_zero_div,infinity), - set_prolog_flag(float_undefined,nan), + set_prolog_flag(float_undefined,nan). + +set_min_free(Amount) :- + ( prolog_stack_property(global,min_free(Free)) + -> ( Free < Amount + -> set_prolog_stack(global,min_free(Amount)) + ; true + ) + ; true + ). + +restore_optimise :- + ( nb_current('clpBNR:temp',Opt) + -> nb_delete('clpBNR:temp'), + set_prolog_flag(optimise,Opt) + ; true + ). + +finish_up :- + check_features, + clp_set_prolog_flags, + set_min_free(8196), + restore_optimise, + clpStatistics. - once(prolog_stack_property(global,min_free(Free))), % minimum free cells (8 bytes/cell) - (Free < 8196 -> set_prolog_stack(global,min_free(8196)) ; true), +:- initialization(finish_up, now). - % create clpBNR specific flags - create_prolog_flag(clpBNR_iteration_limit,3000,[type(integer),keep(true)]), - create_prolog_flag(clpBNR_default_precision,6,[type(integer),keep(true)]), - create_prolog_flag(clpBNR_verbose,false,[type(boolean),keep(true)]), +:- multifile prolog:message//1. - clpStatistics % initialize statistics -)). +prolog:message(clpBNR(bounded)) --> + [ 'clpBNR requires unbounded integers and rationals.'-[] ]. +prolog:message(clpBNR(no_IEEE)) --> + [ 'clpBNR requires support for IEEE arithmetic.'-[] ]. From 0908ad7b86ce5dfa0d954b712d9068a4f3d67b91 Mon Sep 17 00:00:00 2001 From: Jan Wielemaker Date: Thu, 14 Jan 2021 14:16:42 +0100 Subject: [PATCH 7/7] Initialize global variables using an exception hook to allow usage from any thread. --- prolog/clpBNR.pl | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/prolog/clpBNR.pl b/prolog/clpBNR.pl index a69ad00..6a6e191 100644 --- a/prolog/clpBNR.pl +++ b/prolog/clpBNR.pl @@ -95,6 +95,18 @@ :- create_prolog_flag(clpBNR_default_precision,6,[type(integer),keep(true)]). :- create_prolog_flag(clpBNR_verbose,false,[type(boolean),keep(true)]). +% Provide exception hooks for the global variables used by this library. +% This allows running the library in any thread. + +user:exception(undefined_global_variable, Var, retry) :- + init_gvar(Var, Value), + nb_setval(Var, Value). + +init_gvar('clpBNR:node_count', 0). +init_gvar('clpBNR:evalNode', 0). +init_gvar('clpBNR:evalNodeFail', 0). +init_gvar('clpBNR:iterations', 0). + % % SWIP optimise control - set flag to true for compiled arithmetic % @@ -830,8 +842,7 @@ check_features, clp_set_prolog_flags, set_min_free(8196), - restore_optimise, - clpStatistics. + restore_optimise. :- initialization(finish_up, now).