Nuprl Definition : ml-term-to-poly

ml-term-to-poly(t) ==
  let ml_add_poly = λp,q.
                         let length fix((λlength,l. if null(l) then else let a.as in length(as) fi )) in
                          let lexaux fix((λlexaux,n,l1,l2. ((n =z 0)
                                                            ∨blet a.as l1 
                                                              in let b.bs l2 
                                                                 in a <b ∨b((a =z b) ∧b lexaux(n 1)(as)(bs))))) in
                          let ml_lex = λl1,l2. let n1 length(l1) in
                                                let n2 length(l2) in
                                                n1 <n2 ∨b((n1 =z n2) ∧b lexaux(n1)(l1)(l2)) in
                          let ml_monomial_le = λm1,m2. ml_lex(snd(m1))(snd(m2)) in
                          let revappend fix((λrevappend,l,x. if null(l)
                                                              then x
                                                              else let a.b 
                                                                   in revappend(b)([a x])
                                                              fi )) in
                          let ml_add_poly_prepend fix((λml_add_poly_prepend,l,p,q.
                                                                                    if null(p)
                                                                                      then revappend(l)(q)
                                                                                    if null(q)
                                                                                      then revappend(l)(p)
                                                                                    else let p1.ps 
                                                                                         in let q1.qs 
                                                                                            in if ml_monomial_le(p1)(q1)
                                                                                               then if ...(q1)(p1)
                                                                                                    then let cp,vs p1 
                                                                                                         in ...
                                                                                                    else ...(ps)([q1 
                                                                                                                  qs])
                                                                                                    fi 
                                                                                               else ...([q1 
                                                                                                         l])([p1 
                                                                                                              ps])(qs)
                                                                                               fi 
                                                                                    fi )) in
                          ml_add_poly_prepend([])(p)(q) in
   let ml_minus_poly = λp.let map fix((λmap,f,l. if null(l) then [] else let a.as in [f(a) map(f)(as)] fi )) in
                           let ml_minus_monomial = λx.let c,vs 
                                                      in <-c, vs> in
                           map(ml_minus_monomial)(p) in
   let ml_mul_poly = λp,q.
                          let accumulate fix((λaccumulate,f,b,l. if null(l)
                                                                  then b
                                                                  else let a.as 
                                                                       in accumulate(f)(f(b)(a))(as)
                                                                  fi )) in
                           let insert_int fix((λinsert_int,x,l. if null(l)
                                                                 then [x]
                                                                 else let a.as 
                                                                      in if x <1
                                                                         then [x l]
                                                                         else let insert_int(x)(as) in
                                                                                  [a y]
                                                                         fi 
                                                                 fi )) in
                           let reduce fix((λreduce,f,b,l. if null(l)
                                                           then b
                                                           else let a.as 
                                                                in f(a)(reduce(f)(b)(as))
                                                           fi )) in
                           let merge_int = λas,bs. reduce(insert_int)(as)(bs) in
                           let ml_mul_monomials = λx.let a,vs 
                                                     in λx1.let b,ws x1 
                                                            in <b, merge_int(vs)(ws)> in
                           let ml_mul_mono_poly fix((λml_mul_mono_poly,m,p. if null(p)
                                                                             then []
                                                                             else let h.t 
                                                                                  in let ml_mul_mono_poly(m)(t) in
                                                                                      let m' ml_mul_monomials(m)(h) in
                                                                                      [m' r]
                                                                             fi )) in
                           if null(p) then []
                           if null(q) then []
                           else let p1.ps 
                                in accumulate(λs,m. ml_add_poly(s)(ml_mul_mono_poly(m)(q)))(ml_mul_mono_poly(p1)(q))(ps)
                           fi  in
   let ml_rP_to_poly fix((λml_rP_to_poly,stack,L. if null(L)
                                                   then stack
                                                   else let op.more 
                                                        in if (op =z 1)
                                                             then let c.evenmore more 
                                                                  in let if (c =z 0) then [] else [<c, []>fi  in
                                                                         ml_rP_to_poly([x stack])(evenmore)
                                                           if (op =z 2)
                                                             then let v.evenmore more 
                                                                  in ml_rP_to_poly([[<1, [v]>stack])(evenmore)
                                                           if (op =z 3)
                                                             then let q.qq stack 
                                                                  in let p.s qq 
                                                                     in ml_rP_to_poly([ml_add_poly(p)(q) s])(more)
                                                           if (op =z 4)
                                                             then let q.qq stack 
                                                                  in let p.s qq 
                                                                     in ml_rP_to_poly([ml_add_poly(p)(...(q)) 
                                                                                       s])(more)
                                                           if (op =z 5)
                                                             then let q.qq stack 
                                                                  in let p.s qq 
                                                                     in ml_rP_to_poly([ml_mul_poly(p)(q) s])(more)
                                                           else let p.s stack 
                                                                in ml_rP_to_poly([ml_minus_poly(p) s])(more)
                                                           fi 
                                                   fi )) in
   hd(ml_rP_to_poly([])(int_term_to_rP(t)))



Definitions occuring in Statement :  int_term_to_rP: int_term_to_rP(t) spreadcons: spreadcons ml_apply: f(x) hd: hd(l) null: null(as) cons: [a b] nil: [] bor: p ∨bq band: p ∧b q ifthenelse: if then else fi  lt_int: i <j eq_int: (i =z j) let: let pi1: fst(t) pi2: snd(t) fix: fix(F) lambda: λx.A[x] spread: spread def pair: <a, b> multiply: m subtract: m add: m minus: -n natural_number: $n
Definitions occuring in definition :  ml_apply: f(x) pair: <a, b> cons: [a b] natural_number: $n eq_int: (i =z j) ifthenelse: if then else fi  let: let pi1: fst(t) add: m spread: spread def spreadcons: spreadcons null: null(as) lambda: λx.A[x] fix: fix(F) pi2: snd(t) band: p ∧b q lt_int: i <j bor: p ∨bq subtract: m nil: [] minus: -n multiply: m hd: hd(l) int_term_to_rP: int_term_to_rP(t)
FDL editor aliases :  ml-term-to-poly

Latex:
ml-term-to-poly(t)  ==
    let  ml\_add$_{poly}$  =  \mlambda{}p,q.
                                                let  length  =  fix((\mlambda{}length,l.  if  null(l)
                                                                                                        then  0
                                                                                                        else  let  a.as  =  l 
                                                                                                                  in  1  +  length(as)
                                                                                                        fi  ))  in
                                                  let  lexaux  =  fix((\mlambda{}lexaux,n,l1,l2.  ((n  =\msubz{}  0)
                                                                                                                      \mvee{}\msubb{}let  a.as  =  l1 
                                                                                                                          in  let  b.bs  =  l2 
                                                                                                                                in  a  <z  b
                                                                                                                                      \mvee{}\msubb{}((a  =\msubz{}  b)
                                                                                                                                          \mwedge{}\msubb{}  lexaux(n  -  1)(as)(bs)))))  in
                                                  let  ml$_{lex}$  =  \mlambda{}l1,l2.  let  n1  =  length(l1)  in
                                                                                            let  n2  =  length(l2)  in
                                                                                            n1  <z  n2  \mvee{}\msubb{}((n1  =\msubz{}  n2)  \mwedge{}\msubb{}  lexaux(n1)(l1)(l2))  in
                                                  let  ml\_monomial$_{le}$  =  \mlambda{}m1,m2.  ml$_{lex\mbackslash{}f\000Cf7d$(snd(m1))(snd(m2))  in
                                                  let  revappend  =  fix((\mlambda{}revappend,l,x.  if  null(l)
                                                                                                                          then  x
                                                                                                                          else  let  a.b  =  l 
                                                                                                                                    in  revappend(b)([a  /  x])
                                                                                                                          fi  ))  in
                                                  let  ml\_add\_poly$_{prepend}$  =  fix((\mlambda{}ml\_add\_poly$\mbackslash{}ff\000C5f{prepend}$,l,p,q.
                                                                                                                                                                  if  null(p)
                                                                                                                                                                      then  ...(l)(q)
                                                                                                                                                                  if  null(q)
                                                                                                                                                                      then  ...(l)(p)
                                                                                                                                                                  else  let  p1.ps  =  p 
                                                                                                                                                                            in  let  q1.qs  =
                                                                                                                                                                                    q 
                                                                                                                                                                                  in  if  ...
                                                                                                                                                                                        then  ...
                                                                                                                                                                                        else  ...
                                                                                                                                                                                        fi 
                                                                                                                                                                  fi  ))  in
                                                  ml\_add\_poly$_{prepend}$([])(p)(q)  in
      let  ml\_minus$_{poly}$  =  \mlambda{}p.let  map  =  fix((\mlambda{}map,f,l.  if  null(l)
                                                                                                  then  []
                                                                                                  else  let  a.as  =  l 
                                                                                                            in  [f(a)  /  map(f)(as)]
                                                                                                  fi  ))  in
                                                    let  ml\_minus$_{monomial}$  =  \mlambda{}x.let  c,vs  =  x 
                                                                                                        in  <-c,  vs>  in
                                                    map(ml\_minus$_{monomial}$)(p)  in
      let  ml\_mul$_{poly}$  =  \mlambda{}p,q.
                                                  let  accumulate  =  fix((\mlambda{}accumulate,f,b,l.  if  null(l)
                                                                                                                                  then  b
                                                                                                                                  else  let  a.as  =  l 
                                                                                                                                            in  accumulate(f)(f(b)(a))(as)
                                                                                                                                  fi  ))  in
                                                    let  insert$_{int}$  =  fix((\mlambda{}insert$_{int\mbackslash{}ff\000C7d$,x,l.  if  null(l)
                                                                                                                            then  [x]
                                                                                                                            else  let  a.as  =  l 
                                                                                                                                      in  if  x  <z  a  +  1
                                                                                                                                            then  [x  /  l]
                                                                                                                                            else  ...
                                                                                                                                            fi 
                                                                                                                            fi  ))  in
                                                    let  reduce  =  fix((\mlambda{}reduce,f,b,l.  if  null(l)
                                                                                                                    then  b
                                                                                                                    else  let  a.as  =  l 
                                                                                                                              in  f(a)(reduce(f)(b)(as))
                                                                                                                    fi  ))  in
                                                    let  merge$_{int}$  =  \mlambda{}as,bs.  reduce(insert$_\mbackslash{}ff\000C7bint}$)(as)(bs)  in
                                                    let  ml\_mul$_{monomials}$  =  \mlambda{}x.let  a,vs  =  x 
                                                                                                      in  \mlambda{}x1.let  b,ws  =  x1 
                                                                                                                    in  <a  *  b,  merge$_{int}\mbackslash{}ff\000C24(vs)(ws)>  in
                                                    let  ml\_mul\_mono$_{poly}$  =  fix((\mlambda{}ml\_mul\_mono$_\000C{poly}$,m,p.  if  null(p)
                                                                                                                                                    then  []
                                                                                                                                                    else  let  h.t  =  p 
                                                                                                                                                              in  ...
                                                                                                                                                    fi  ))  in
                                                    if  null(p)
                                                        then  []
                                                    if  null(q)
                                                        then  []
                                                    else  let  p1.ps  =  p 
                                                              in  accumulate(\mlambda{}s,m.  ml\_add$_{poly}$(s)(ml\_mul\_mon\000Co$_{poly}$(m)(q)))(...(p1)(q))(ps)
                                                    fi    in
      let  ml\_rP\_to$_{poly}$  =  fix((\mlambda{}ml\_rP\_to$_{poly}$,stack,L.  \000Cif  null(L)
                                                                                                  then  stack
                                                                                                  else  let  op.more  =  L 
                                                                                                            in  if  (op  =\msubz{}  1)
                                                                                                                      then  let  c.evenmore  =  more 
                                                                                                                                in  let  x  =  if  (c  =\msubz{}  0)
                                                                                                                                                      then  []
                                                                                                                                                      else  [<c,  []>]
                                                                                                                                                      fi    in
                                                                                                                                              ml\_rP\_to$_{poly\mbackslash{}f\000Cf7d$([x  / 
                                                                                                                                                                          stack])(...)
                                                                                                                  if  (op  =\msubz{}  2)
                                                                                                                      then  let  v.evenmore  =  more 
                                                                                                                                in  ml\_rP\_to$_{poly}\mbackslash{}\000Cff24([[ə,  [v]>]  / 
                                                                                                                                                                  stack])(evenmore)
                                                                                                                  if  (op  =\msubz{}  3)
                                                                                                                      then  let  q.qq  =  stack 
                                                                                                                                in  let  p.s  =  qq 
                                                                                                                                      in  ml\_rP\_to$_{poly\mbackslash{}ff\000C7d$([...(p)(q)  / 
                                                                                                                                                                        s])(more)
                                                                                                                  if  (op  =\msubz{}  4)
                                                                                                                      then  let  q.qq  =  stack 
                                                                                                                                in  let  p.s  =  qq 
                                                                                                                                      in  ml\_rP\_to$_{poly\mbackslash{}ff\000C7d$([...(p)(...)  / 
                                                                                                                                                                        s])(more)
                                                                                                                  if  (op  =\msubz{}  5)
                                                                                                                      then  let  q.qq  =  stack 
                                                                                                                                in  let  p.s  =  qq 
                                                                                                                                      in  ml\_rP\_to$_{poly\mbackslash{}ff\000C7d$([...(p)(q)  / 
                                                                                                                                                                        s])(more)
                                                                                                                  else  let  p.s  =  stack 
                                                                                                                            in  ml\_rP\_to$_{poly}\mbackslash{}ff\000C24([ml\_minus$_{poly}$(p)  / 
                                                                                                                                                              s])(more)
                                                                                                                  fi 
                                                                                                  fi  ))  in
      hd(ml\_rP\_to$_{poly}$([])(int\_term\_to\_rP(t)))



Date html generated: 2017_09_29-PM-05_55_19
Last ObjectModification: 2017_05_12-PM-11_47_48

Theory : omega


Home Index