Step
*
of Lemma
C_DVALUEp-induction
∀[P:C_DVALUEp() ─→ ℙ]
  ((∀x:Unit. P[DVp_Null(x)])
  
⇒ (∀int:ℤ. P[DVp_Int(int)])
  
⇒ (∀ptr:C_LVALUE()?. P[DVp_Pointer(ptr)])
  
⇒ (∀lower,upper:ℤ. ∀arr:{lower..upper-} ─→ C_DVALUEp().
        ((∀u:{lower..upper-}. P[arr u]) 
⇒ P[DVp_Array(lower;upper;arr)]))
  
⇒ (∀lbls:Atom List. ∀struct:{a:Atom| (a ∈ lbls)}  ─→ C_DVALUEp().
        ((∀u:{a:Atom| (a ∈ lbls)} . P[struct u]) 
⇒ P[DVp_Struct(lbls;struct)]))
  
⇒ {∀v:C_DVALUEp(). P[v]})
BY
{ ProveDatatypeInd }
Latex:
\mforall{}[P:C\_DVALUEp()  {}\mrightarrow{}  \mBbbP{}]
    ((\mforall{}x:Unit.  P[DVp\_Null(x)])
    {}\mRightarrow{}  (\mforall{}int:\mBbbZ{}.  P[DVp\_Int(int)])
    {}\mRightarrow{}  (\mforall{}ptr:C\_LVALUE()?.  P[DVp\_Pointer(ptr)])
    {}\mRightarrow{}  (\mforall{}lower,upper:\mBbbZ{}.  \mforall{}arr:\{lower..upper\msupminus{}\}  {}\mrightarrow{}  C\_DVALUEp().
                ((\mforall{}u:\{lower..upper\msupminus{}\}.  P[arr  u])  {}\mRightarrow{}  P[DVp\_Array(lower;upper;arr)]))
    {}\mRightarrow{}  (\mforall{}lbls:Atom  List.  \mforall{}struct:\{a:Atom|  (a  \mmember{}  lbls)\}    {}\mrightarrow{}  C\_DVALUEp().
                ((\mforall{}u:\{a:Atom|  (a  \mmember{}  lbls)\}  .  P[struct  u])  {}\mRightarrow{}  P[DVp\_Struct(lbls;struct)]))
    {}\mRightarrow{}  \{\mforall{}v:C\_DVALUEp().  P[v]\})
By
ProveDatatypeInd
Home
Index