Step * 2 of Lemma sqle-list_accum


1. Base
2. strict1(λx.F[x])
3. Base
4. strict1(λx.G[x])
5. Base
6. Base
7. ∀a,r1,r2:Base.  ((F[r1] ≤ G[r2])  (F[H[r1;a]] ≤ G[J[r2;a]]))
8. as Base@i
9. b1 Base@i
10. b2 Base@i
11. F[b1] ≤ G[b2]
12. ∀j:ℕ. ∀as,b1,b2:Base.
      ((F[b1] ≤ G[b2])
       (F[λlist_accum,y,L. eval in
                             if is pair then let h,t 
                                                 in list_accum H[y;h] otherwise if Ax then otherwise ⊥^j 
            ⊥ 
            b1 
            as] ≤ G[λlist_accum,y,L. eval in
                                     if is pair then let h,t 
                                                         in list_accum J[y;h] otherwise if Ax then otherwise ⊥^j\000C 
                    ⊥ 
                    b2 
                    as]))
⊢ F[accumulate (with value and list item a):
     H[v;a]
    over list:
      as
    with starting value:
     b1)] ≤ G[accumulate (with value and list item a):
               J[v;a]
              over list:
                as
              with starting value:
               b2)]
BY
(RW (AddrC [1;2] UnfoldTopAbC) 0
   THEN OneFixpointLeast⋅
   THEN (InstHyp [⌜j⌝;⌜as⌝;⌜b1⌝;⌜b2⌝(-2)⋅ THENA Auto)
   THEN SqLeTrans (-1)
   THEN Try (Trivial)
   THEN SqLeCD
   THEN Try (SqLeCD)
   THEN All Thin
   THEN Unfold `list_accum` 0
   THEN NatInd (-1)
   THEN Reduce 0
   THEN Strictness
   THEN Auto) }


Latex:


Latex:

1.  F  :  Base
2.  strict1(\mlambda{}x.F[x])
3.  G  :  Base
4.  strict1(\mlambda{}x.G[x])
5.  H  :  Base
6.  J  :  Base
7.  \mforall{}a,r1,r2:Base.    ((F[r1]  \mleq{}  G[r2])  {}\mRightarrow{}  (F[H[r1;a]]  \mleq{}  G[J[r2;a]]))
8.  as  :  Base@i
9.  b1  :  Base@i
10.  b2  :  Base@i
11.  F[b1]  \mleq{}  G[b2]
12.  \mforall{}j:\mBbbN{}.  \mforall{}as,b1,b2:Base.
            ((F[b1]  \mleq{}  G[b2])
            {}\mRightarrow{}  (F[\mlambda{}list$_{accum}$,y,L.  eval  v  =  L  in
                                                        if  v  is  a  pair  then  let  h,t  =  v 
                                                                                                in  list$_{accum}$  H[y;h]  t
                                                        otherwise  if  v  =  Ax  then  y  otherwise  \mbot{}\^{}j 
                        \mbot{} 
                        b1 
                        as]  \mleq{}  G[\mlambda{}list$_{accum}$,y,L.  eval  v  =  L  in
                                                                        if  v  is  a  pair  then  let  h,t  =  v 
                                                                                                                in  list$_{accum}$  J[y;h]\000C  t
                                                                        otherwise  if  v  =  Ax  then  y  otherwise  \mbot{}\^{}j 
                                        \mbot{} 
                                        b2 
                                        as]))
\mvdash{}  F[accumulate  (with  value  v  and  list  item  a):
          H[v;a]
        over  list:
            as
        with  starting  value:
          b1)]  \mleq{}  G[accumulate  (with  value  v  and  list  item  a):
                              J[v;a]
                            over  list:
                                as
                            with  starting  value:
                              b2)]


By


Latex:
(RW  (AddrC  [1;2]  UnfoldTopAbC)  0
  THEN  OneFixpointLeast\mcdot{}
  THEN  (InstHyp  [\mkleeneopen{}j\mkleeneclose{};\mkleeneopen{}as\mkleeneclose{};\mkleeneopen{}b1\mkleeneclose{};\mkleeneopen{}b2\mkleeneclose{}]  (-2)\mcdot{}  THENA  Auto)
  THEN  SqLeTrans  (-1)
  THEN  Try  (Trivial)
  THEN  SqLeCD
  THEN  Try  (SqLeCD)
  THEN  All  Thin
  THEN  Unfold  `list\_accum`  0
  THEN  NatInd  (-1)
  THEN  Reduce  0
  THEN  Strictness
  THEN  Auto)




Home Index