Step * of Lemma RankEx2-defop-extract

[T,S,P:Type]. ∀[R:P ─→ RankEx2(S;T) ─→ ℙ].
  ((∀t:T. (∃x:{P| (R RankEx2_LeafT(t))}))
   (∀s:S. (∃x:{P| (R RankEx2_LeafS(s))}))
   (∀d:RankEx2(S;T). ∀s:S. ∀t:T.  ((∃x:{P| (R d)})  (∃x:{P| (R RankEx2_Prod(<<d, s>t>))})))
   (∀z:S × RankEx2(S;T) RankEx2(S;T)
        (case of inl(p) => ∃x:{P| (R (snd(p)))} inr(d) => ∃x:{P| (R d)}  (∃x:{P| (R RankEx2_Union(z))})))
   (∀L:(S × RankEx2(S;T)) List. ((∀p∈L.∃x:{P| (R (snd(p)))})  (∃x:{P| (R RankEx2_ListProd(L))})))
   (∀z:T (RankEx2(S;T) List)
        (case of inl(p) => True inr(L) => (∀p∈L.∃x:{P| (R p)})  (∃x:{P| (R RankEx2_UnionList(z))})))
   {∀t:RankEx2(S;T). (∃x:{P| (R t)})})
BY
(NewUseNormalizedExtract ``select`` false (ioid Obid: RankEx2-defop)⋅ THEN All (Unfold `genrec-ap`)) }

1
1. λ%,%1,%2,%3,%4,%5,v. (fix((λ%6@0,v. let lbl,v1 
                                       in if lbl="LeafT" then v1
                                          if lbl="LeafS" then %1 v1
                                          if lbl="Prod" then let v2,v3 v1 in let v4,v5 v2 in %2 v4 v5 v3 (%6@0 v4)
                                          if lbl="Union"
                                            then case v1
                                                  of inl(x) =>
                                                  let x1,x2 
                                                  in %3 (inl <x1, x2>(%6@0 x2)
                                                  inr(y) =>
                                                  %3 (inr (%6@0 y)
                                          if lbl="ListProd" then %4 v1 i.let v2,y v1[i] in %6@0 y)
                                          if lbl="UnionList"
                                            then case v1
                                                  of inl(x) =>
                                                  %5 (inl x) Ax
                                                  inr(y) =>
                                                  %5 (inr i.(%6@0 y[i]))
                                          else fix((λx.x))
                                          fi )) 
                         v) ∈ ∀[T,S,P:Type]. ∀[R:P ─→ RankEx2(S;T) ─→ ℙ].
             ((∀t:T. (∃x:{P| (R RankEx2_LeafT(t))}))
              (∀s:S. (∃x:{P| (R RankEx2_LeafS(s))}))
              (∀d:RankEx2(S;T). ∀s:S. ∀t:T.  ((∃x:{P| (R d)})  (∃x:{P| (R RankEx2_Prod(<<d, s>t>))})))
              (∀z:S × RankEx2(S;T) RankEx2(S;T)
                   (case of inl(p) => ∃x:{P| (R (snd(p)))} inr(d) => ∃x:{P| (R d)}
                    (∃x:{P| (R RankEx2_Union(z))})))
              (∀L:(S × RankEx2(S;T)) List. ((∀p∈L.∃x:{P| (R (snd(p)))})  (∃x:{P| (R RankEx2_ListProd(L))})))
              (∀z:T (RankEx2(S;T) List)
                   (case of inl(p) => True inr(L) => (∀p∈L.∃x:{P| (R p)})
                    (∃x:{P| (R RankEx2_UnionList(z))})))
              {∀t:RankEx2(S;T). (∃x:{P| (R t)})})
⊢ λ%,%1,%2,%3,%4,%5,v. (fix((λ%6@0,v. let lbl,v1 
                                      in if lbl="LeafT" then v1
                                         if lbl="LeafS" then %1 v1
                                         if lbl="Prod" then let v2,v3 v1 in let v4,v5 v2 in %2 v4 v5 v3 (%6@0 v4)
                                         if lbl="Union"
                                           then case v1
                                                 of inl(x) =>
                                                 let x1,x2 
                                                 in %3 (inl <x1, x2>(%6@0 x2)
                                                 inr(y) =>
                                                 %3 (inr (%6@0 y)
                                         if lbl="ListProd" then %4 v1 i.let v2,y v1[i] in %6@0 y)
                                         if lbl="UnionList"
                                           then case v1
                                                 of inl(x) =>
                                                 %5 (inl x) Ax
                                                 inr(y) =>
                                                 %5 (inr i.(%6@0 y[i]))
                                         else fix((λx.x))
                                         fi )) 
                        v) ∈ ∀[T,S,P:Type]. ∀[R:P ─→ RankEx2(S;T) ─→ ℙ].
            ((∀t:T. (∃x:{P| (R RankEx2_LeafT(t))}))
             (∀s:S. (∃x:{P| (R RankEx2_LeafS(s))}))
             (∀d:RankEx2(S;T). ∀s:S. ∀t:T.  ((∃x:{P| (R d)})  (∃x:{P| (R RankEx2_Prod(<<d, s>t>))})))
             (∀z:S × RankEx2(S;T) RankEx2(S;T)
                  (case of inl(p) => ∃x:{P| (R (snd(p)))} inr(d) => ∃x:{P| (R d)}
                   (∃x:{P| (R RankEx2_Union(z))})))
             (∀L:(S × RankEx2(S;T)) List. ((∀p∈L.∃x:{P| (R (snd(p)))})  (∃x:{P| (R RankEx2_ListProd(L))})))
             (∀z:T (RankEx2(S;T) List)
                  (case of inl(p) => True inr(L) => (∀p∈L.∃x:{P| (R p)})  (∃x:{P| (R RankEx2_UnionList(z))})))
             {∀t:RankEx2(S;T). (∃x:{P| (R t)})})


Latex:


\mforall{}[T,S,P:Type].  \mforall{}[R:P  {}\mrightarrow{}  RankEx2(S;T)  {}\mrightarrow{}  \mBbbP{}].
    ((\mforall{}t:T.  (\mexists{}x:\{P|  (R  x  RankEx2\_LeafT(t))\}))
    {}\mRightarrow{}  (\mforall{}s:S.  (\mexists{}x:\{P|  (R  x  RankEx2\_LeafS(s))\}))
    {}\mRightarrow{}  (\mforall{}d:RankEx2(S;T).  \mforall{}s:S.  \mforall{}t:T.    ((\mexists{}x:\{P|  (R  x  d)\})  {}\mRightarrow{}  (\mexists{}x:\{P|  (R  x  RankEx2\_Prod(<<d,  s>,  t>))\}))\000C)
    {}\mRightarrow{}  (\mforall{}z:S  \mtimes{}  RankEx2(S;T)  +  RankEx2(S;T)
                (case  z  of  inl(p)  =>  \mexists{}x:\{P|  (R  x  (snd(p)))\}  |  inr(d)  =>  \mexists{}x:\{P|  (R  x  d)\}
                {}\mRightarrow{}  (\mexists{}x:\{P|  (R  x  RankEx2\_Union(z))\})))
    {}\mRightarrow{}  (\mforall{}L:(S  \mtimes{}  RankEx2(S;T))  List
                ((\mforall{}p\mmember{}L.\mexists{}x:\{P|  (R  x  (snd(p)))\})  {}\mRightarrow{}  (\mexists{}x:\{P|  (R  x  RankEx2\_ListProd(L))\})))
    {}\mRightarrow{}  (\mforall{}z:T  +  (RankEx2(S;T)  List)
                (case  z  of  inl(p)  =>  True  |  inr(L)  =>  (\mforall{}p\mmember{}L.\mexists{}x:\{P|  (R  x  p)\})
                {}\mRightarrow{}  (\mexists{}x:\{P|  (R  x  RankEx2\_UnionList(z))\})))
    {}\mRightarrow{}  \{\mforall{}t:RankEx2(S;T).  (\mexists{}x:\{P|  (R  x  t)\})\})


By

(NewUseNormalizedExtract  ``select``  false  (ioid  Obid:  RankEx2-defop)\mcdot{}  THEN  All  (Unfold  `genrec-ap`))




Home Index