Step * 2 of Lemma hdf-compose2-transformation2


1. m1 : ℕ
2. m2 : ℕ
3. : ℤ
4. j ≠ 0
5. 0 < j
6. ∀L1,L2,G1,G2,init,S:Top.
     mk-hdf,s. (inl a.cbva_seq(λn.if (n) < (m1)
                                         then L1 n
                                         else if (n) < (m1 m2)
                                                 then mk_lambdas(L2 (n m1);m1)
                                                 else mk_lambdas_fun(λg1.mk_lambdas_fun(λg2.⋃f∈G1 g1.⋃b∈G2 g2 s.
                                                                                                     b;m2);m1);
                                   λg.<mk-hdf (S partial_ap_gen(g;(m1 m2) 1;m1;m2) s), select_fun_last(g;m1 m2)>;
                                   (m1 m2) 1)))^j 
      ⊥ 
      init ≤ fix((λmk-hdf,s0. let X,Y s0 
                              in case X
                                  of inl(y) =>
                                  case Y
                                   of inl(y1) =>
                                   inl a.let X',fs 
                                           in let Y',bs y1 
                                              in let out ⟵ ⋃f∈fs.⋃b∈bs.f b
                                                 in <mk-hdf <X', Y'>out>)
                                   inr(y1) =>
                                   inr ⋅ 
                                  inr(y) =>
                                  inr ⋅ )) 
             <fix((λmk-hdf.(inl a.cbva_seq(L1 a; λg.<mk-hdf, G1 g>m1)))))
             fix((λmk-hdf,s. (inl a.cbva_seq(L2 a; λg.<mk-hdf (S s), G2 s>m2))))) init
             >)
7. L1 Top@i
8. L2 Top@i
9. G1 Top@i
10. G2 Top@i
11. init Top@i
12. Top@i
⊢ inl a.cbva_seq(λn.if (n) < (m1)
                         then L1 n
                         else if (n) < (m1 m2)
                                 then mk_lambdas(L2 init (n m1);m1)
                                 else mk_lambdas_fun(λg1.mk_lambdas_fun(λg2.⋃f∈G1 g1.⋃b∈G2 g2 init.f b;m2);m1);
                   λg.<λmk-hdf,s.
                                 (inl a.cbva_seq(λn.if (n) < (m1)
                                                         then L1 n
                                                         else if (n) < (m1 m2)
                                                                 then mk_lambdas(L2 (n m1);m1)
                                                                 else mk_lambdas_fun(λg1.mk_lambdas_fun(λg2.⋃f∈G1 g1.
                                                                                                            ⋃b∈G2 g2 s.
                                                                                                            b;m2);m1);
                                                   λg.<mk-hdf (S partial_ap_gen(g;(m1 m2) 1;m1;m2) s)
                                                      select_fun_last(g;m1 m2)
                                                      >(m1 m2) 1)))^j 
                       ⊥ 
                       (S partial_ap_gen(g;(m1 m2) 1;m1;m2) init)
                      select_fun_last(g;m1 m2)
                      >(m1 m2) 1)) ≤ fix((λmk-hdf,s0. let X,Y s0 
                                                            in case X
                                                                of inl(y) =>
                                                                case Y
                                                                 of inl(y1) =>
                                                                 inl a.let X',fs 
                                                                         in let Y',bs y1 
                                                                            in let out ⟵ ⋃f∈fs.⋃b∈bs.f b
                                                                               in <mk-hdf <X', Y'>out>)
                                                                 inr(y1) =>
                                                                 inr ⋅ 
                                                                inr(y) =>
                                                                inr ⋅ )) 
                                           <fix((λmk-hdf.(inl a.cbva_seq(L1 a; λg.<mk-hdf, G1 g>m1)))))
                                           fix((λmk-hdf,s. (inl a.cbva_seq(L2 a; λg.<mk-hdf (S s), G2 s>;
                                                                               m2))))) 
                                             init
                                           >
BY
(RW (AddrC [2;1] (UnrollLoopsOnceExceptC SqequalProcTransLst)) 0
   THEN Reduce 0
   THEN RepeatFor ((SqLeCD THEN Try (Complete (Auto))))
   THEN Repeat ((RWO "cbva_seq-spread" THENA Auto))
   THEN Repeat ((RWO "cbva_seq_extend" THENA Auto))
   THEN (RWO "cbva_seq-combine" THENA Auto)
   THEN RepUR ``ifthenelse eq_int btrue bfalse bag-map bag-null lt_int`` 0
   THEN (RW (AddrC [2;1] LiftAllC) THENA Auto)
   THEN Reduce 0
   THEN (Subst ⌜m1 m2 (m1 m2) 1⌝ 0⋅ THENA Auto)
   THEN (RWO "cbva_seq-list-case2" THENA Auto)
   THEN Fold `select_fun_last` 0
   THEN (RWO "select_fun_last_partial_ap_gen1" THENA Auto)
   THEN (RWO "partial_ap_of_partial_ap_gen1" THENA Auto)
   THEN RepeatFor ((SqLeCD THEN Try (Complete (Auto))))
   THEN BackThruSomeHyp) }


Latex:


Latex:

1.  m1  :  \mBbbN{}
2.  m2  :  \mBbbN{}
3.  j  :  \mBbbZ{}
4.  j  \mneq{}  0
5.  0  <  j
6.  \mforall{}L1,L2,G1,G2,init,S:Top.
          (\mlambda{}mk-hdf,s.
                                (inl  (\mlambda{}a.cbva\_seq(\mlambda{}n.if  (n)  <  (m1)
                                                                                then  L1  a  n
                                                                                else  if  (n)  <  (m1  +  m2)
                                                                                                then  mk\_lambdas(L2  s  a  (n  -  m1);m1)
                                                                                                else  mk\_lambdas\_fun(...;m1);
                                                                    \mlambda{}g.<mk-hdf  (S  partial\_ap\_gen(g;(m1  +  m2)  +  1;m1;m2)  s)
                                                                          ,  select\_fun\_last(g;m1  +  m2)
                                                                          >  (m1  +  m2)  +  1)))\^{}j  -  1 
            \mbot{} 
            init  \mleq{}  fix((\mlambda{}mk-hdf,s0.  let  X,Y  =  s0 
                                                            in  case  X
                                                                    of  inl(y)  =>
                                                                    case  Y
                                                                      of  inl(y1)  =>
                                                                      inl  (\mlambda{}a.let  X',fs  =  y  a 
                                                                                      in  let  Y',bs  =  y1  a 
                                                                                            in  let  out  \mleftarrow{}{}  \mcup{}f\mmember{}fs.\mcup{}b\mmember{}bs.f  b
                                                                                                  in  <mk-hdf  <X',  Y'>,  out>)
                                                                      |  inr(y1)  =>
                                                                      inr  \mcdot{} 
                                                                    |  inr(y)  =>
                                                                    inr  \mcdot{}  )) 
                          <fix((\mlambda{}mk-hdf.(inl  (\mlambda{}a.cbva\_seq(L1  a;  \mlambda{}g.<mk-hdf,  G1  g>  m1)))))
                          ,  fix((\mlambda{}mk-hdf,s.  (inl  (\mlambda{}a.cbva\_seq(L2  s  a;  \mlambda{}g.<mk-hdf  (S  g  s),  G2  g  s>  m2)))))  init
                          >)
7.  L1  :  Top@i
8.  L2  :  Top@i
9.  G1  :  Top@i
10.  G2  :  Top@i
11.  init  :  Top@i
12.  S  :  Top@i
\mvdash{}  inl  (\mlambda{}a.cbva\_seq(\mlambda{}n.if  (n)  <  (m1)
                                                  then  L1  a  n
                                                  else  if  (n)  <  (m1  +  m2)
                                                                  then  mk\_lambdas(L2  init  a  (n  -  m1);m1)
                                                                  else  mk\_lambdas\_fun(\mlambda{}g1.mk\_lambdas\_fun(\mlambda{}g2.\mcup{}f\mmember{}G1  g1.\mcup{}b\mmember{}G2  g2  init.
                                                                                                                                                                          f  b;m2);m1);
                                      \mlambda{}g.<\mlambda{}mk-hdf,s.
                                                                  (inl  (\mlambda{}a.cbva\_seq(\mlambda{}n.if  (n)  <  (m1)
                                                                                                                  then  L1  a  n
                                                                                                                  else  if  (n)  <  (m1  +  m2)
                                                                                                                                  then  mk\_lambdas(L2  s  a  (n  -  m1);m1)
                                                                                                                                  else  mk\_lambdas\_fun(\mlambda{}g1....;m1);
                                                                                                      \mlambda{}g.<mk-hdf 
                                                                                                              (S  partial\_ap\_gen(g;(m1  +  m2)  +  1;m1;m2)  s)
                                                                                                            ,  select\_fun\_last(g;m1  +  m2)
                                                                                                            >  (m1  +  m2)  +  1)))\^{}j  -  1 
                                              \mbot{} 
                                              (S  partial\_ap\_gen(g;(m1  +  m2)  +  1;m1;m2)  init)
                                            ,  select\_fun\_last(g;m1  +  m2)
                                            >  (m1  +  m2)  +  1))  \mleq{}  fix((\mlambda{}mk-hdf,s0.  let  X,Y  =  s0 
                                                                                                                        in  case  X
                                                                                                                                of  inl(y)  =>
                                                                                                                                case  Y
                                                                                                                                  of  inl(y1)  =>
                                                                                                                                  inl  (\mlambda{}a.let  X',fs  =  y  a 
                                                                                                                                                  in  let  Y',bs  =  y1  a 
                                                                                                                                                        in  let  out  \mleftarrow{}{}
                                                                                                                                                                \mcup{}f\mmember{}fs.\mcup{}b\mmember{}bs.f  b
                                                                                                                                                              in  <mk-hdf  <X',  Y'>,  \000Cout>)
                                                                                                                                  |  inr(y1)  =>
                                                                                                                                  inr  \mcdot{} 
                                                                                                                                |  inr(y)  =>
                                                                                                                                inr  \mcdot{}  )) 
                                                                                      <fix((\mlambda{}mk-hdf.(inl  (\mlambda{}a.cbva\_seq(L1  a;  \mlambda{}g.<mk-hdf,  G1  g>
                                                                                                                                                      m1)))))
                                                                                      ,  fix((\mlambda{}mk-hdf,s.  (inl  (\mlambda{}a.cbva\_seq(L2  s  a;  \mlambda{}g.<mk-hdf 
                                                                                                                                                                                      (S  g  s)
                                                                                                                                                                                    ,  G2  g  s
                                                                                                                                                                                    >  m2)))))\000C 
                                                                                          init
                                                                                      >


By


Latex:
(RW  (AddrC  [2;1]  (UnrollLoopsOnceExceptC  SqequalProcTransLst))  0
  THEN  Reduce  0
  THEN  RepeatFor  2  ((SqLeCD  THEN  Try  (Complete  (Auto))))
  THEN  Repeat  ((RWO  "cbva\_seq-spread"  0  THENA  Auto))
  THEN  Repeat  ((RWO  "cbva\_seq\_extend"  0  THENA  Auto))
  THEN  (RWO  "cbva\_seq-combine"  0  THENA  Auto)
  THEN  RepUR  ``ifthenelse  eq\_int  btrue  bfalse  bag-map  bag-null  lt\_int``  0
  THEN  (RW  (AddrC  [2;1]  LiftAllC)  0  THENA  Auto)
  THEN  Reduce  0
  THEN  (Subst  \mkleeneopen{}m1  +  m2  +  1  \msim{}  (m1  +  m2)  +  1\mkleeneclose{}  0\mcdot{}  THENA  Auto)
  THEN  (RWO  "cbva\_seq-list-case2"  0  THENA  Auto)
  THEN  Fold  `select\_fun\_last`  0
  THEN  (RWO  "select\_fun\_last\_partial\_ap\_gen1"  0  THENA  Auto)
  THEN  (RWO  "partial\_ap\_of\_partial\_ap\_gen1"  0  THENA  Auto)
  THEN  RepeatFor  3  ((SqLeCD  THEN  Try  (Complete  (Auto))))
  THEN  BackThruSomeHyp)




Home Index