Nuprl Definition : mul-polynom

mul-polynom(p;q)
==r if tree_leaf?(p)
      then if tree_leaf-value(p)=0
              then polyconst(0)
              else if tree_leaf-value(p)=1
                      then q
                      else if tree_leaf?(q)
                           then eval tree_leaf-value(p) tree_leaf-value(q) in
                                tree_leaf(a)
                           else eval mul-polynom(p;tree_node-left(q)) in
                                eval mul-polynom(p;tree_node-right(q)) in
                                  tree_node(a;b)
                           fi 
    if tree_leaf?(q)
      then if tree_leaf-value(q)=0
              then polyconst(0)
              else if tree_leaf-value(q)=1
                      then p
                      else eval mul-polynom(tree_node-left(p);q) in
                           eval mul-polynom(tree_node-right(p);q) in
                             tree_node(a;b)
    else eval aa mul-polynom(tree_node-left(p);tree_node-left(q)) in
         eval ab mul-polynom(tree_node(tree_node-left(p);polyconst(0));tree_node-right(q)) in
         eval ba mul-polynom(tree_node-right(p);tree_node(tree_node-left(q);polyconst(0))) in
         eval bb mul-polynom(tree_node-right(p);tree_node-right(q)) in
         eval mid add-polynom(ab;ba) in
         eval bb' add-polynom(mid;tree_node(polyconst(0);bb)) in
           tree_node(aa;bb')
    fi 

mul-polynom(p;q) ==
  fix((λmul-polynom,p,q. if tree_leaf?(p)
                           then if tree_leaf-value(p)=0
                                   then polyconst(0)
                                   else if tree_leaf-value(p)=1
                                           then q
                                           else if tree_leaf?(q)
                                                then eval tree_leaf-value(p) tree_leaf-value(q) in
                                                     tree_leaf(a)
                                                else eval mul-polynom tree_node-left(q) in
                                                     eval mul-polynom tree_node-right(q) in
                                                       tree_node(a;b)
                                                fi 
                        if tree_leaf?(q)
                          then if tree_leaf-value(q)=0
                                  then polyconst(0)
                                  else if tree_leaf-value(q)=1
                                          then p
                                          else eval mul-polynom tree_node-left(p) in
                                               eval mul-polynom tree_node-right(p) in
                                                 tree_node(a;b)
                        else eval aa mul-polynom tree_node-left(p) tree_node-left(q) in
                             eval ab mul-polynom tree_node(tree_node-left(p);polyconst(0)) tree_node-right(q) in
                             eval ba mul-polynom tree_node-right(p) tree_node(tree_node-left(q);polyconst(0)) in
                             eval bb mul-polynom tree_node-right(p) tree_node-right(q) in
                             eval mid add-polynom(ab;ba) in
                             eval bb' add-polynom(mid;tree_node(polyconst(0);bb)) in
                               tree_node(aa;bb')
                        fi )) 
  
  q



Wellformedness Lemmas :  mul-polynom_wf2 mul-polynom_wf
Definitions occuring in Statement :  add-polynom: add-polynom(p;q) polyconst: polyconst(k) tree_node-right: tree_node-right(v) tree_node-left: tree_node-left(v) tree_leaf-value: tree_leaf-value(v) tree_leaf?: tree_leaf?(v) tree_node: tree_node(left;right) tree_leaf: tree_leaf(value) callbyvalue: callbyvalue ifthenelse: if then else fi  int_eq: if a=b  then c  else d apply: a fix: fix(F) lambda: λx.A[x] multiply: m natural_number: $n
Definitions occuring in definition :  fix: fix(F) lambda: λx.A[x] multiply: m tree_leaf: tree_leaf(value) ifthenelse: if then else fi  tree_leaf?: tree_leaf?(v) int_eq: if a=b  then c  else d tree_leaf-value: tree_leaf-value(v) tree_node-left: tree_node-left(v) apply: a tree_node-right: tree_node-right(v) callbyvalue: callbyvalue add-polynom: add-polynom(p;q) polyconst: polyconst(k) natural_number: $n tree_node: tree_node(left;right)
FDL editor aliases :  mul-polynom
Latex:
mul-polynom(p;q)
==r  if  tree\_leaf?(p)
            then  if  tree\_leaf-value(p)=0
                            then  polyconst(0)
                            else  if  tree\_leaf-value(p)=1
                                            then  q
                                            else  if  tree\_leaf?(q)
                                                      then  eval  a  =  tree\_leaf-value(p)  *  tree\_leaf-value(q)  in
                                                                tree\_leaf(a)
                                                      else  eval  a  =  mul-polynom(p;tree\_node-left(q))  in
                                                                eval  b  =  mul-polynom(p;tree\_node-right(q))  in
                                                                    tree\_node(a;b)
                                                      fi 
        if  tree\_leaf?(q)
            then  if  tree\_leaf-value(q)=0
                            then  polyconst(0)
                            else  if  tree\_leaf-value(q)=1
                                            then  p
                                            else  eval  a  =  mul-polynom(tree\_node-left(p);q)  in
                                                      eval  b  =  mul-polynom(tree\_node-right(p);q)  in
                                                          tree\_node(a;b)
        else  eval  aa  =  mul-polynom(tree\_node-left(p);tree\_node-left(q))  in
                  eval  ab  =  mul-polynom(tree\_node(tree\_node-left(p);polyconst(0));tree\_node-right(q))  in
                  eval  ba  =  mul-polynom(tree\_node-right(p);tree\_node(tree\_node-left(q);polyconst(0)))  in
                  eval  bb  =  mul-polynom(tree\_node-right(p);tree\_node-right(q))  in
                  eval  mid  =  add-polynom(ab;ba)  in
                  eval  bb'  =  add-polynom(mid;tree\_node(polyconst(0);bb))  in
                      tree\_node(aa;bb')
        fi 


Latex:
mul-polynom(p;q)  ==
    fix((\mlambda{}mul-polynom,p,q.  if  tree\_leaf?(p)
                                                      then  if  tree\_leaf-value(p)=0
                                                                      then  polyconst(0)
                                                                      else  if  tree\_leaf-value(p)=1
                                                                                      then  q
                                                                                      else  if  tree\_leaf?(q)
                                                                                                then  eval  a  =  tree\_leaf-value(p)
                                                                                                          *  tree\_leaf-value(q)  in
                                                                                                          tree\_leaf(a)
                                                                                                else  eval  a  =  mul-polynom  p  tree\_node-left(q)  in
                                                                                                          eval  b  =  mul-polynom  p  tree\_node-right(q)  in
                                                                                                              tree\_node(a;b)
                                                                                                fi 
                                                if  tree\_leaf?(q)
                                                    then  if  tree\_leaf-value(q)=0
                                                                    then  polyconst(0)
                                                                    else  if  tree\_leaf-value(q)=1
                                                                                    then  p
                                                                                    else  eval  a  =  mul-polynom  tree\_node-left(p)  q  in
                                                                                              eval  b  =  mul-polynom  tree\_node-right(p)  q  in
                                                                                                  tree\_node(a;b)
                                                else  eval  aa  =  mul-polynom  tree\_node-left(p)  tree\_node-left(q)  in
                                                          eval  ab  =  mul-polynom  tree\_node(tree\_node-left(p);polyconst(0)) 
                                                                              tree\_node-right(q)  in
                                                          eval  ba  =  mul-polynom  tree\_node-right(p) 
                                                                              tree\_node(tree\_node-left(q);polyconst(0))  in
                                                          eval  bb  =  mul-polynom  tree\_node-right(p)  tree\_node-right(q)  in
                                                          eval  mid  =  add-polynom(ab;ba)  in
                                                          eval  bb'  =  add-polynom(mid;tree\_node(polyconst(0);bb))  in
                                                              tree\_node(aa;bb')
                                                fi  )) 
    p 
    q



Date html generated: 2017_10_01-AM-08_33_02
Last ObjectModification: 2017_05_03-AM-11_09_46

Theory : integer!polynomial!trees


Home Index