Step
*
1
2
2
of Lemma
add-ipoly-wf1
1. ∀u,u':ℤ × (ℤ List).  (imonomial-le(u;u') ∈ 𝔹)
2. u : ℤ × (ℤ List)
3. v : (ℤ × (ℤ List)) List
4. ∀q:(ℤ × (ℤ List)) List. (add-ipoly(v;q) ∈ (ℤ × (ℤ List)) List)
5. u1 : ℤ × (ℤ List)
6. v1 : (ℤ × (ℤ List)) List
7. add-ipoly([u / v];v1) ∈ (ℤ × (ℤ List)) List
⊢ if null([u / v]) then [u1 / v1]
  if null([u1 / v1]) then [u / v]
  else let p1,ps = [u / v] 
       in let q1,qs = [u1 / v1] 
          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 c = 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  ∈ (ℤ × (ℤ List)) List
BY
{ (Reduce 0
   THEN (Assert add-ipoly(v;v1) ∈ (ℤ × (ℤ List)) List BY
               BackThruSomeHyp)
   THEN (CallByValueReduceOn ⌜add-ipoly(v;v1)⌝ 0⋅ THENA Auto)
   THEN (Assert add-ipoly(v;[u1 / v1]) ∈ (ℤ × (ℤ List)) List BY
               BackThruSomeHyp)
   THEN (CallByValueReduceOn ⌜add-ipoly(v;[u1 / v1])⌝ 0⋅ THENA Auto)
   THEN (Assert add-ipoly([u / v];v1) ∈ (ℤ × (ℤ List)) List BY
               BackThruSomeHyp)
   THEN (CallByValueReduceOn ⌜add-ipoly([u / v];v1)⌝ 0⋅ THENA Auto)) }
1
1. ∀u,u':ℤ × (ℤ List).  (imonomial-le(u;u') ∈ 𝔹)
2. u : ℤ × (ℤ List)
3. v : (ℤ × (ℤ List)) List
4. ∀q:(ℤ × (ℤ List)) List. (add-ipoly(v;q) ∈ (ℤ × (ℤ List)) List)
5. u1 : ℤ × (ℤ List)
6. v1 : (ℤ × (ℤ List)) List
7. add-ipoly([u / v];v1) ∈ (ℤ × (ℤ List)) List
8. add-ipoly(v;v1) ∈ (ℤ × (ℤ List)) List
9. add-ipoly(v;[u1 / v1]) ∈ (ℤ × (ℤ List)) List
10. add-ipoly([u / v];v1) ∈ (ℤ × (ℤ List)) List
⊢ if imonomial-le(u;u1)
  then if imonomial-le(u1;u)
       then let cp,vs = u 
            in eval c = cp + (fst(u1)) in
               if c=0  then add-ipoly(v;v1)  else [<c, vs> / add-ipoly(v;v1)]
       else [u / add-ipoly(v;[u1 / v1])]
       fi 
  else [u1 / add-ipoly([u / v];v1)]
  fi  ∈ (ℤ × (ℤ List)) List
Latex:
Latex:
1.  \mforall{}u,u':\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List).    (imonomial-le(u;u')  \mmember{}  \mBbbB{})
2.  u  :  \mBbbZ{}  \mtimes{}  (\mBbbZ{}  List)
3.  v  :  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List
4.  \mforall{}q:(\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List.  (add-ipoly(v;q)  \mmember{}  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List)
5.  u1  :  \mBbbZ{}  \mtimes{}  (\mBbbZ{}  List)
6.  v1  :  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List
7.  add-ipoly([u  /  v];v1)  \mmember{}  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List
\mvdash{}  if  null([u  /  v])  then  [u1  /  v1]
    if  null([u1  /  v1])  then  [u  /  v]
    else  let  p1,ps  =  [u  /  v] 
              in  let  q1,qs  =  [u1  /  v1] 
                    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    \mmember{}  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List
By
Latex:
(Reduce  0
  THEN  (Assert  add-ipoly(v;v1)  \mmember{}  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List  BY
                          BackThruSomeHyp)
  THEN  (CallByValueReduceOn  \mkleeneopen{}add-ipoly(v;v1)\mkleeneclose{}  0\mcdot{}  THENA  Auto)
  THEN  (Assert  add-ipoly(v;[u1  /  v1])  \mmember{}  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List  BY
                          BackThruSomeHyp)
  THEN  (CallByValueReduceOn  \mkleeneopen{}add-ipoly(v;[u1  /  v1])\mkleeneclose{}  0\mcdot{}  THENA  Auto)
  THEN  (Assert  add-ipoly([u  /  v];v1)  \mmember{}  (\mBbbZ{}  \mtimes{}  (\mBbbZ{}  List))  List  BY
                          BackThruSomeHyp)
  THEN  (CallByValueReduceOn  \mkleeneopen{}add-ipoly([u  /  v];v1)\mkleeneclose{}  0\mcdot{}  THENA  Auto))
Home
Index