Nuprl Definition : gcd-reduce-ineq-constraints

Each inequality constraint is a list [c,a1,a2,...] and represents the
constraint  c + a1*v1 + a2*v2 + ....  >= 0 (on variables v1, v2, ...).
If g = gcd(a1,a2,...) is greater than 1 then we
divide all the a1,a2,... by g and replace c by the "floor" of ⌜c ÷ g⌝.
This preserves the satisfiability of the inequality.⋅

gcd-reduce-ineq-constraints(sat;LL) ==
  accumulate_abort(L,Ls.let h,t = L 
                        in if t = Ax then if (h) < (0)  then inr ⋅   else (inl [L / Ls])
                           otherwise eval g = |gcd-list(t)| in
                                     if (1) < (g)
                                        then eval h' = h ÷↓ g in
                                             eval t' = eager-map(λx.(x ÷ g);t) in
                                               inl [[h' / t'] / Ls]
                                        else (inl [L / Ls]);inl sat;LL)



Definitions occuring in Statement :  gcd-list: gcd-list(L),  accumulate_abort: accumulate_abort(x,sofar.F[x; sofar];s;L),  eager-map: eager-map(f;as),  cons: [a / b],  div_floor: a ÷↓ n,  absval: |i|,  callbyvalue: callbyvalue,  it: ⋅,  isaxiom: if z = Ax then a otherwise b,  less: if (a) < (b)  then c  else d,  lambda: λx.A[x],  spread: spread def,  inr: inr x ,  inl: inl x,  divide: n ÷ m,  natural_number: $n
Definitions occuring in definition :  accumulate_abort: accumulate_abort(x,sofar.F[x; sofar];s;L),  spread: spread def,  isaxiom: if z = Ax then a otherwise b,  inr: inr x ,  it: ⋅,  absval: |i|,  gcd-list: gcd-list(L),  less: if (a) < (b)  then c  else d,  natural_number: $n,  div_floor: a ÷↓ n,  callbyvalue: callbyvalue,  eager-map: eager-map(f;as),  lambda: λx.A[x],  divide: n ÷ m,  cons: [a / b],  inl: inl x
FDL editor aliases :  gcd-reduce-ineq-constraints

Latex:
gcd-reduce-ineq-constraints(sat;LL)  ==
    accumulate\_abort(L,Ls.let  h,t  =  L 
                                                in  if  t  =  Ax  then  if  (h)  <  (0)    then  inr  \mcdot{}      else  (inl  [L  /  Ls])
                                                      otherwise  eval  g  =  |gcd-list(t)|  in
                                                                          if  (1)  <  (g)
                                                                                then  eval  h'  =  h  \mdiv{}\mdownarrow{}  g  in
                                                                                          eval  t'  =  eager-map(\mlambda{}x.(x  \mdiv{}  g);t)  in
                                                                                              inl  [[h'  /  t']  /  Ls]
                                                                                else  (inl  [L  /  Ls]);inl  sat;LL)



Date html generated: 2016_07_08-PM-04_48_15
Last ObjectModification: 2015_12_14-PM-06_36_35

Theory : omega


Home Index