Step * 1 1 of Lemma sqle-list_ind-list_accum


1. Base
2. strict1(λx.F[x])
3. Base
4. ∀z:Base. strict1(λx.G[z;x])
5. Base
6. Base
7. ∀a,b,c:Base.  (G[b;J[a;c]] ≤ G[H[b;a];c])
8. b2 Base@i
9. ∀x:Base. (G[x;b2] ≤ F[x])
10. : ℤ
11. 0 < j
12. ∀as,x:Base.
      (G[x;λlist_ind,L. eval in
                        if is pair then let h,t 
                                            in J[h;list_ind t] otherwise if Ax then b2 otherwise ⊥^j 
           ⊥ 
           as] ≤ 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 \000C- 
                   ⊥ 
                   
                   as])
13. as Base@i
14. Base@i
⊢ G[x;λlist_ind,L. eval in
                   if is pair then let h,t 
                                       in J[h;list_ind t] otherwise if Ax then b2 otherwise ⊥^j 
      ⊥ 
      as] ≤ 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 
              ⊥ 
              
              as]
BY
(RenameVar `b1' (-1)
   THEN (RWO "fun_exp_unroll_1" THENA Auto)
   THEN Reduce 0
   THEN ((InstLemma `lifting-strict-callbyvalue` 
          [⌜so_lambda(x,y,z,w.F[x])⌝;⌜⋅⌝;⌜⋅⌝;⌜⋅⌝]⋅
          THENA (Auto THEN BLemma `strict1-strict4` THEN Auto)
          )
   THENM (RWW "-1" THENA Auto)
   )
   THEN (InstLemma `lifting-strict-callbyvalue` 
         [⌜so_lambda(x,y,z,w.G[b1;x])⌝;⌜⋅⌝;⌜⋅⌝;⌜⋅⌝]⋅
         THENA (Auto THEN BLemma `strict1-strict4` THEN Auto)
         )
   THEN (RWW "-1" THENA Auto)
   THEN UseCbvSqle
   THEN ((InstLemma `lifting-strict-ispair` 
          [⌜so_lambda(x,y,z,w.F[x])⌝;⌜⋅⌝;⌜⋅⌝;⌜⋅⌝]⋅
          THENA (Auto THEN BLemma `strict1-strict4` THEN Auto)
          )
   THENM (RWO "-1" THENA Auto)
   )
   THEN ((InstLemma `lifting-strict-ispair` 
          [⌜so_lambda(x,y,z,w.G[b1;x])⌝;⌜⋅⌝;⌜⋅⌝;⌜⋅⌝]⋅
          THENA (Auto THEN BLemma `strict1-strict4` THEN Auto)
          )
   THENM (RWO "-1" THENA Auto)
   )
   THEN ((InstLemma `lifting-strict-isaxiom` 
          [⌜so_lambda(x,y,z,w.F[x])⌝;⌜⋅⌝;⌜⋅⌝;⌜⋅⌝]⋅
          THENA (Auto THEN BLemma `strict1-strict4` THEN Auto)
          )
   THENM (RWO "-1" THENA Auto)
   )
   THEN ((InstLemma `lifting-strict-isaxiom` 
          [⌜so_lambda(x,y,z,w.G[b1;x])⌝;⌜⋅⌝;⌜⋅⌝;⌜⋅⌝]⋅
          THENA (Auto THEN BLemma `strict1-strict4` THEN Auto)
          )
   THENM (RWO "-1" THENA Auto)
   )) }

1
1. Base
2. strict1(λx.F[x])
3. Base
4. ∀z:Base. strict1(λx.G[z;x])
5. Base
6. Base
7. ∀a,b,c:Base.  (G[b;J[a;c]] ≤ G[H[b;a];c])
8. b2 Base@i
9. ∀x:Base. (G[x;b2] ≤ F[x])
10. : ℤ
11. 0 < j
12. ∀as,x:Base.
      (G[x;λlist_ind,L. eval in
                        if is pair then let h,t 
                                            in J[h;list_ind t] otherwise if Ax then b2 otherwise ⊥^j 
           ⊥ 
           as] ≤ 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 \000C- 
                   ⊥ 
                   
                   as])
13. as Base@i
14. b1 Base@i
15. ∀[a,B:Top].  (F[eval in B[x]] eval in F[B[x]])
16. ∀[a,B:Top].  (G[b1;eval in B[x]] eval in G[b1;B[x]])
17. (as)↓@i
18. ∀[a,b,c:Top].  (F[if is pair then otherwise c] if is pair then F[b] otherwise F[c])
19. ∀[a,b,c:Top].  (G[b1;if is pair then otherwise c] if is pair then G[b1;b] otherwise G[b1;c])
20. ∀[a,b,c:Top].  (F[if Ax then otherwise c] if Ax then F[b] otherwise F[c])
21. ∀[a,b,c:Top].  (G[b1;if Ax then otherwise c] if Ax then G[b1;b] otherwise G[b1;c])
⊢ if as is pair then G[b1;let h,t as 
                            in J[h;λlist_ind,L. eval in
                                                if is pair then let h,t 
                                                                    in J[h;list_ind t]
                                                otherwise if Ax then b2 otherwise ⊥^j 
                                   ⊥ 
                                   t]] otherwise if as Ax then G[b1;b2] otherwise G[b1;⊥
  ≤ if as is pair then F[let h,t as 
                           in λlist_accum,y,L. eval in
                                               if is pair then let h,t 
                                                                   in list_accum H[y;h] t
                                               otherwise if Ax then otherwise ⊥^j 
                              ⊥ 
                              H[b1;h] 
                              t] otherwise if as Ax then F[b1] otherwise F[⊥]


Latex:


Latex:

1.  F  :  Base
2.  strict1(\mlambda{}x.F[x])
3.  G  :  Base
4.  \mforall{}z:Base.  strict1(\mlambda{}x.G[z;x])
5.  H  :  Base
6.  J  :  Base
7.  \mforall{}a,b,c:Base.    (G[b;J[a;c]]  \mleq{}  G[H[b;a];c])
8.  b2  :  Base@i
9.  \mforall{}x:Base.  (G[x;b2]  \mleq{}  F[x])
10.  j  :  \mBbbZ{}
11.  0  <  j
12.  \mforall{}as,x:Base.
            (G[x;\mlambda{}list$_{ind}$,L.  eval  v  =  L  in
                                              if  v  is  a  pair  then  let  h,t  =  v 
                                                                                      in  J[h;list$_{ind}$  t]  otherwise  if  v\000C  =  Ax  then  b2  otherwise  \mbot{}\^{}j  -  1 
                      \mbot{} 
                      as]  \mleq{}  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]  \000Ct
                                                                      otherwise  if  v  =  Ax  then  y  otherwise  \mbot{}\^{}j  -  1 
                                      \mbot{} 
                                      x 
                                      as])
13.  as  :  Base@i
14.  x  :  Base@i
\mvdash{}  G[x;\mlambda{}list$_{ind}$,L.  eval  v  =  L  in
                                    if  v  is  a  pair  then  let  h,t  =  v 
                                                                            in  J[h;list$_{ind}$  t]  otherwise  if  v  =  Ax\000C  then  b2  otherwise  \mbot{}\^{}j 
            \mbot{} 
            as]  \mleq{}  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{} 
                            x 
                            as]


By


Latex:
(RenameVar  `b1'  (-1)
  THEN  (RWO  "fun\_exp\_unroll\_1"  0  THENA  Auto)
  THEN  Reduce  0
  THEN  ((InstLemma  `lifting-strict-callbyvalue` 
                [\mkleeneopen{}so\_lambda(x,y,z,w.F[x])\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{}]\mcdot{}
                THENA  (Auto  THEN  BLemma  `strict1-strict4`  THEN  Auto)
                )
  THENM  (RWW  "-1"  0  THENA  Auto)
  )
  THEN  (InstLemma  `lifting-strict-callbyvalue` 
              [\mkleeneopen{}so\_lambda(x,y,z,w.G[b1;x])\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{}]\mcdot{}
              THENA  (Auto  THEN  BLemma  `strict1-strict4`  THEN  Auto)
              )
  THEN  (RWW  "-1"  0  THENA  Auto)
  THEN  UseCbvSqle
  THEN  ((InstLemma  `lifting-strict-ispair` 
                [\mkleeneopen{}so\_lambda(x,y,z,w.F[x])\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{}]\mcdot{}
                THENA  (Auto  THEN  BLemma  `strict1-strict4`  THEN  Auto)
                )
  THENM  (RWO  "-1"  0  THENA  Auto)
  )
  THEN  ((InstLemma  `lifting-strict-ispair` 
                [\mkleeneopen{}so\_lambda(x,y,z,w.G[b1;x])\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{}]\mcdot{}
                THENA  (Auto  THEN  BLemma  `strict1-strict4`  THEN  Auto)
                )
  THENM  (RWO  "-1"  0  THENA  Auto)
  )
  THEN  ((InstLemma  `lifting-strict-isaxiom` 
                [\mkleeneopen{}so\_lambda(x,y,z,w.F[x])\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{}]\mcdot{}
                THENA  (Auto  THEN  BLemma  `strict1-strict4`  THEN  Auto)
                )
  THENM  (RWO  "-1"  0  THENA  Auto)
  )
  THEN  ((InstLemma  `lifting-strict-isaxiom` 
                [\mkleeneopen{}so\_lambda(x,y,z,w.G[b1;x])\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{};\mkleeneopen{}\mcdot{}\mkleeneclose{}]\mcdot{}
                THENA  (Auto  THEN  BLemma  `strict1-strict4`  THEN  Auto)
                )
  THENM  (RWO  "-1"  0  THENA  Auto)
  ))




Home Index