123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263(** This file is an extension for the Tcons1 module from the Apron
library *)(** Note : It only adds function, nothing is removed. Extensions are at
the end of the module *)openApronincludeTcons1includeArray_maker.TconsExt(***********************)(* Useful constructors *)(***********************)leteq?typ?rounde1e2=letexpr=Texprext.sub?typ?rounde1e2inTcons1.makeexprTcons1.EQletdiseq?typ?rounde1e2=letexpr=Texprext.sub?typ?rounde1e2inTcons1.makeexprTcons1.DISEQletleq?typ?rounde1e2=letexpr=Texprext.sub?typ?rounde2e1inTcons1.makeexprTcons1.SUPEQletgeq?typ?rounde1e2=letexpr=Texprext.sub?typ?rounde1e2inTcons1.makeexprTcons1.SUPEQletlt?typ?rounde1e2=letexpr=Texprext.sub?typ?rounde2e1inTcons1.makeexprTcons1.SUPletgt?typ?rounde1e2=letexpr=Texprext.sub?typ?rounde1e2inTcons1.makeexprTcons1.SUP(***********************)(** Negation utilities *)(***********************)(** constraints negation; e.g : a >= b -> a < b *)letnegd=letneg_typ=function|EQ->DISEQ|SUP->SUPEQ|SUPEQ->SUP|DISEQ->EQ|_->assertfalseinlettyp=get_typd|>neg_typinmake(Texprext.neg(get_texpr1d))typ(** split a = into a > b or a < b*)letsplitdiseq(c:t):(t*t)=letopenAproninletc1=copycinset_typc1SUP;lettexpr=get_texpr1cinlettexpr'=Texpr1.unopTexpr0.NegtexprTexpr0.RealTexpr0.Nearinletc2=Tcons1.maketexpr'SUPinc1,c2