Nuprl Definition : add-ipoly

add-ipoly(p;q)
==r eval pp in
    eval qq in
      if null(pp) then qq
      if null(qq) then pp
      else let p1,ps pp 
           in let q1,qs qq 
              in if imonomial-le(p1;q1)
                 then if imonomial-le(q1;p1)
                      then let x ⟵ add-ipoly(ps;qs)
                           in let cp,vs p1 
                              in eval cp (fst(q1)) in
                                 if c=0  then x  else [<c, vs> x]
                      else let x ⟵ add-ipoly(ps;[q1 qs])
                           in [p1 x]
                      fi 
                 else let x ⟵ add-ipoly([p1 ps];qs)
                      in [q1 x]
                 fi 
      fi 

add-ipoly(p;q) ==
  fix((λadd-ipoly,p,q. eval pp in
                       eval qq in
                         if null(pp) then qq
                         if null(qq) then pp
                         else let p1,ps pp 
                              in let q1,qs qq 
                                 in if imonomial-le(p1;q1)
                                    then if imonomial-le(q1;p1)
                                         then let x ⟵ add-ipoly ps qs
                                              in let cp,vs p1 
                                                 in eval cp (fst(q1)) in
                                                    if c=0  then x  else [<c, vs> x]
                                         else let x ⟵ add-ipoly ps [q1 qs]
                                              in [p1 x]
                                         fi 
                                    else let x ⟵ add-ipoly [p1 ps] qs
                                         in [q1 x]
                                    fi 
                         fi )) 
  
  q



Definitions occuring in Statement :  imonomial-le: imonomial-le(m1;m2) null: null(as) cons: [a b] callbyvalueall: callbyvalueall callbyvalue: callbyvalue ifthenelse: if then else fi  pi1: fst(t) int_eq: if a=b  then c  else d apply: a fix: fix(F) lambda: λx.A[x] spread: spread def pair: <a, b> add: m natural_number: $n
Definitions occuring in definition :  cons: [a b] apply: a callbyvalueall: callbyvalueall pair: <a, b> natural_number: $n int_eq: if a=b  then c  else d pi1: fst(t) add: m callbyvalue: callbyvalue spread: spread def imonomial-le: imonomial-le(m1;m2) ifthenelse: if then else fi  null: null(as) lambda: λx.A[x] fix: fix(F)
FDL editor aliases :  add-ipoly add-ipoly add-ipoly
Latex:
add-ipoly(p;q)
==r  eval  pp  =  p  in
        eval  qq  =  q  in
            if  null(pp)  then  qq
            if  null(qq)  then  pp
            else  let  p1,ps  =  pp 
                      in  let  q1,qs  =  qq 
                            in  if  imonomial-le(p1;q1)
                                  then  if  imonomial-le(q1;p1)
                                            then  let  x  \mleftarrow{}{}  add-ipoly(ps;qs)
                                                      in  let  cp,vs  =  p1 
                                                            in  eval  c  =  cp  +  (fst(q1))  in
                                                                  if  c=0    then  x    else  [<c,  vs>  /  x]
                                            else  let  x  \mleftarrow{}{}  add-ipoly(ps;[q1  /  qs])
                                                      in  [p1  /  x]
                                            fi 
                                  else  let  x  \mleftarrow{}{}  add-ipoly([p1  /  ps];qs)
                                            in  [q1  /  x]
                                  fi 
            fi 


Latex:
add-ipoly(p;q)  ==
    fix((\mlambda{}add-ipoly,p,q.  eval  pp  =  p  in
                                              eval  qq  =  q  in
                                                  if  null(pp)  then  qq
                                                  if  null(qq)  then  pp
                                                  else  let  p1,ps  =  pp 
                                                            in  let  q1,qs  =  qq 
                                                                  in  if  imonomial-le(p1;q1)
                                                                        then  if  imonomial-le(q1;p1)
                                                                                  then  let  x  \mleftarrow{}{}  add-ipoly  ps  qs
                                                                                            in  let  cp,vs  =  p1 
                                                                                                  in  eval  c  =  cp  +  (fst(q1))  in
                                                                                                        if  c=0    then  x    else  [<c,  vs>  /  x]
                                                                                  else  let  x  \mleftarrow{}{}  add-ipoly  ps  [q1  /  qs]
                                                                                            in  [p1  /  x]
                                                                                  fi 
                                                                        else  let  x  \mleftarrow{}{}  add-ipoly  [p1  /  ps]  qs
                                                                                  in  [q1  /  x]
                                                                        fi 
                                                  fi  )) 
    p 
    q



Date html generated: 2017_04_14-AM-08_58_03
Last ObjectModification: 2017_04_12-PM-06_35_38

Theory : omega


Home Index