Step
*
of Lemma
RankEx2-defop-extract
∀[T,S,P:Type]. ∀[R:P ─→ RankEx2(S;T) ─→ ℙ].
  ((∀t:T. (∃x:{P| (R x RankEx2_LeafT(t))}))
  
⇒ (∀s:S. (∃x:{P| (R x RankEx2_LeafS(s))}))
  
⇒ (∀d:RankEx2(S;T). ∀s:S. ∀t:T.  ((∃x:{P| (R x d)}) 
⇒ (∃x:{P| (R x RankEx2_Prod(<<d, s>, t>))})))
  
⇒ (∀z:S × RankEx2(S;T) + RankEx2(S;T)
        (case z of inl(p) => ∃x:{P| (R x (snd(p)))} | inr(d) => ∃x:{P| (R x d)} 
⇒ (∃x:{P| (R x RankEx2_Union(z))})))
  
⇒ (∀L:(S × RankEx2(S;T)) List. ((∀p∈L.∃x:{P| (R x (snd(p)))}) 
⇒ (∃x:{P| (R x RankEx2_ListProd(L))})))
  
⇒ (∀z:T + (RankEx2(S;T) List)
        (case z of inl(p) => True | inr(L) => (∀p∈L.∃x:{P| (R x p)}) 
⇒ (∃x:{P| (R x RankEx2_UnionList(z))})))
  
⇒ {∀t:RankEx2(S;T). (∃x:{P| (R x 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 = v 
                                       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 = x 
                                                  in %3 (inl <x1, x2>) (%6@0 x2)
                                                  | inr(y) =>
                                                  %3 (inr y ) (%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 y ) (λ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 x RankEx2_LeafT(t))}))
             
⇒ (∀s:S. (∃x:{P| (R x RankEx2_LeafS(s))}))
             
⇒ (∀d:RankEx2(S;T). ∀s:S. ∀t:T.  ((∃x:{P| (R x d)}) 
⇒ (∃x:{P| (R x RankEx2_Prod(<<d, s>, t>))})))
             
⇒ (∀z:S × RankEx2(S;T) + RankEx2(S;T)
                   (case z of inl(p) => ∃x:{P| (R x (snd(p)))} | inr(d) => ∃x:{P| (R x d)}
                   
⇒ (∃x:{P| (R x RankEx2_Union(z))})))
             
⇒ (∀L:(S × RankEx2(S;T)) List. ((∀p∈L.∃x:{P| (R x (snd(p)))}) 
⇒ (∃x:{P| (R x RankEx2_ListProd(L))})))
             
⇒ (∀z:T + (RankEx2(S;T) List)
                   (case z of inl(p) => True | inr(L) => (∀p∈L.∃x:{P| (R x p)})
                   
⇒ (∃x:{P| (R x RankEx2_UnionList(z))})))
             
⇒ {∀t:RankEx2(S;T). (∃x:{P| (R x t)})})
⊢ λ%,%1,%2,%3,%4,%5,v. (fix((λ%6@0,v. let lbl,v1 = v 
                                      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 = x 
                                                 in %3 (inl <x1, x2>) (%6@0 x2)
                                                 | inr(y) =>
                                                 %3 (inr y ) (%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 y ) (λ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 x RankEx2_LeafT(t))}))
            
⇒ (∀s:S. (∃x:{P| (R x RankEx2_LeafS(s))}))
            
⇒ (∀d:RankEx2(S;T). ∀s:S. ∀t:T.  ((∃x:{P| (R x d)}) 
⇒ (∃x:{P| (R x RankEx2_Prod(<<d, s>, t>))})))
            
⇒ (∀z:S × RankEx2(S;T) + RankEx2(S;T)
                  (case z of inl(p) => ∃x:{P| (R x (snd(p)))} | inr(d) => ∃x:{P| (R x d)}
                  
⇒ (∃x:{P| (R x RankEx2_Union(z))})))
            
⇒ (∀L:(S × RankEx2(S;T)) List. ((∀p∈L.∃x:{P| (R x (snd(p)))}) 
⇒ (∃x:{P| (R x RankEx2_ListProd(L))})))
            
⇒ (∀z:T + (RankEx2(S;T) List)
                  (case z of inl(p) => True | inr(L) => (∀p∈L.∃x:{P| (R x p)}) 
⇒ (∃x:{P| (R x RankEx2_UnionList(z))})))
            
⇒ {∀t:RankEx2(S;T). (∃x:{P| (R x 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