Step
*
1
of Lemma
RankEx2-defop-extract
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)})})
BY
{ Trivial }
Latex:
1.  \mlambda{}\%,\%1,\%2,\%3,\%4,\%5,v.  (fix((\mlambda{}\%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  (\mlambda{}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  )  (\mlambda{}i.(\%6@0  y[i]))
                                                                                    else  fix((\mlambda{}x.x))
                                                                                    fi  )) 
                                                  v)  \mmember{}  \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>))\})))
                          {}\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)\})\})
\mvdash{}  \mlambda{}\%,\%1,\%2,\%3,\%4,\%5,v.  (fix((\mlambda{}\%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  (\mlambda{}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  )  (\mlambda{}i.(\%6@0  y[i]))
                                                                                  else  fix((\mlambda{}x.x))
                                                                                  fi  )) 
                                                v)  \mmember{}  \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>))\})))
                        {}\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
Trivial
Home
Index