Nuprl Lemma : RankEx2_ind-unroll
∀[S,T,A:Type]. ∀[R:A ─→ RankEx2(S;T) ─→ ℙ]. ∀[LeafT,LeafS,Prod,Union,ListProd,UnionList:Top]. ∀[t:RankEx2(S;T)].
  (RankEx2_ind(t;
               RankEx2_LeafT(leaft)
⇒ LeafT[leaft];
               RankEx2_LeafS(leafs)
⇒ LeafS[leafs];
               RankEx2_Prod(prod)
⇒ rec1.Prod[prod;rec1];
               RankEx2_Union(union)
⇒ rec2.Union[union;rec2];
               RankEx2_ListProd(listprod)
⇒ rec3.ListProd[listprod;rec3];
               RankEx2_UnionList(unionlist)
⇒ rec4.UnionList[unionlist;rec4])  
  ~ let F = λt.RankEx2_ind(t;
                           RankEx2_LeafT(leaft)
⇒ LeafT[leaft];
                           RankEx2_LeafS(leafs)
⇒ LeafS[leafs];
                           RankEx2_Prod(prod)
⇒ rec1.Prod[prod;rec1];
                           RankEx2_Union(union)
⇒ rec2.Union[union;rec2];
                           RankEx2_ListProd(listprod)
⇒ rec3.ListProd[listprod;rec3];
                           RankEx2_UnionList(unionlist)
⇒ rec4.UnionList[unionlist;rec4])  in
        if RankEx2_LeafT?(t) then LeafT RankEx2_LeafT-leaft(t)
        if RankEx2_LeafS?(t) then LeafS RankEx2_LeafS-leafs(t)
        if RankEx2_Prod?(t) then Prod RankEx2_Prod-prod(t) (F (fst(fst(RankEx2_Prod-prod(t)))))
        if RankEx2_Union?(t)
          then Union RankEx2_Union-union(t) 
               case RankEx2_Union-union(t) of inl(x) => let x1,x2 = x in F x2 | inr(y) => F y
        if RankEx2_ListProd?(t)
          then ListProd RankEx2_ListProd-listprod(t) (λi.let u2,u3 = RankEx2_ListProd-listprod(t)[i] in F u3)
        else UnionList RankEx2_UnionList-unionlist(t) 
             case RankEx2_UnionList-unionlist(t) of inl(x) => Ax | inr(y) => λi.(F y[i])
        fi )
Proof
Definitions occuring in Statement : 
RankEx2_ind: RankEx2_ind, 
RankEx2_UnionList-unionlist: RankEx2_UnionList-unionlist(v)
, 
RankEx2_ListProd-listprod: RankEx2_ListProd-listprod(v)
, 
RankEx2_ListProd?: RankEx2_ListProd?(v)
, 
RankEx2_Union-union: RankEx2_Union-union(v)
, 
RankEx2_Union?: RankEx2_Union?(v)
, 
RankEx2_Prod-prod: RankEx2_Prod-prod(v)
, 
RankEx2_Prod?: RankEx2_Prod?(v)
, 
RankEx2_LeafS-leafs: RankEx2_LeafS-leafs(v)
, 
RankEx2_LeafS?: RankEx2_LeafS?(v)
, 
RankEx2_LeafT-leaft: RankEx2_LeafT-leaft(v)
, 
RankEx2_LeafT?: RankEx2_LeafT?(v)
, 
RankEx2: RankEx2(S;T)
, 
select: L[n]
, 
ifthenelse: if b then t else f fi 
, 
let: let, 
uall: ∀[x:A]. B[x]
, 
top: Top
, 
prop: ℙ
, 
so_apply: x[s1;s2]
, 
so_apply: x[s]
, 
pi1: fst(t)
, 
apply: f a
, 
lambda: λx.A[x]
, 
function: x:A ─→ B[x]
, 
spread: spread def, 
decide: case b of inl(x) => s[x] | inr(y) => t[y]
, 
universe: Type
, 
sqequal: s ~ t
, 
axiom: Ax
Lemmas : 
RankEx2-ext, 
eq_atom_wf, 
bool_wf, 
eqtt_to_assert, 
assert_of_eq_atom, 
subtype_base_sq, 
atom_subtype_base, 
eqff_to_assert, 
equal_wf, 
bool_cases_sqequal, 
bool_subtype_base, 
assert-bnot, 
neg_assert_of_eq_atom, 
RankEx2_wf, 
top_wf
\mforall{}[S,T,A:Type].  \mforall{}[R:A  {}\mrightarrow{}  RankEx2(S;T)  {}\mrightarrow{}  \mBbbP{}].  \mforall{}[LeafT,LeafS,Prod,Union,ListProd,UnionList:Top].
\mforall{}[t:RankEx2(S;T)].
    (RankEx2\_ind(t;
                              RankEx2\_LeafT(leaft){}\mRightarrow{}  LeafT[leaft];
                              RankEx2\_LeafS(leafs){}\mRightarrow{}  LeafS[leafs];
                              RankEx2\_Prod(prod){}\mRightarrow{}  rec1.Prod[prod;rec1];
                              RankEx2\_Union(union){}\mRightarrow{}  rec2.Union[union;rec2];
                              RankEx2\_ListProd(listprod){}\mRightarrow{}  rec3.ListProd[listprod;rec3];
                              RankEx2\_UnionList(unionlist){}\mRightarrow{}  rec4.UnionList[unionlist;rec4])   
    \msim{}  let  F  =  \mlambda{}t.RankEx2\_ind(t;
                                                      RankEx2\_LeafT(leaft){}\mRightarrow{}  LeafT[leaft];
                                                      RankEx2\_LeafS(leafs){}\mRightarrow{}  LeafS[leafs];
                                                      RankEx2\_Prod(prod){}\mRightarrow{}  rec1.Prod[prod;rec1];
                                                      RankEx2\_Union(union){}\mRightarrow{}  rec2.Union[union;rec2];
                                                      RankEx2\_ListProd(listprod){}\mRightarrow{}  rec3.ListProd[listprod;rec3];
                                                      RankEx2\_UnionList(unionlist){}\mRightarrow{}  rec4.UnionList[unionlist;rec4])    in
                if  RankEx2\_LeafT?(t)  then  LeafT  RankEx2\_LeafT-leaft(t)
                if  RankEx2\_LeafS?(t)  then  LeafS  RankEx2\_LeafS-leafs(t)
                if  RankEx2\_Prod?(t)  then  Prod  RankEx2\_Prod-prod(t)  (F  (fst(fst(RankEx2\_Prod-prod(t)))))
                if  RankEx2\_Union?(t)
                    then  Union  RankEx2\_Union-union(t) 
                              case  RankEx2\_Union-union(t)  of  inl(x)  =>  let  x1,x2  =  x  in  F  x2  |  inr(y)  =>  F  y
                if  RankEx2\_ListProd?(t)
                    then  ListProd  RankEx2\_ListProd-listprod(t) 
                              (\mlambda{}i.let  u2,u3  =  RankEx2\_ListProd-listprod(t)[i] 
                                      in  F  u3)
                else  UnionList  RankEx2\_UnionList-unionlist(t) 
                          case  RankEx2\_UnionList-unionlist(t)  of  inl(x)  =>  Ax  |  inr(y)  =>  \mlambda{}i.(F  y[i])
                fi  )
Date html generated:
2015_07_17-AM-07_50_29
Last ObjectModification:
2015_01_27-AM-09_36_54
Home
Index