Nuprl Lemma : C_Struct_vs_DVALp

store:C_STOREp(). ∀ctyp:C_TYPE(). ∀env:C_TYPE_env(). ∀dval:C_DVALUEp().
  (C_STOREp-welltyped(env;store)
   (↑C_Struct?(ctyp))
   C_TYPE_vs_DVALp(env;ctyp) dval 
     if DVp_Struct?(dval)
       then let map(λp.<fst(p), C_TYPE_vs_DVALp(env;snd(p))>;C_Struct-fields(ctyp)) in
             let lbls DVp_Struct-lbls(dval) in
             let DVp_Struct-struct(dval) in
             (∀p∈r.let a,wt 
                   in a ∈b lbls) ∧b (wt (g a)))_b
       else ff
       fi )


Proof




Definitions occuring in Statement :  C_STOREp-welltyped: C_STOREp-welltyped(env;store) C_STOREp: C_STOREp() C_TYPE_vs_DVALp: C_TYPE_vs_DVALp(env;ctyp) DVp_Struct-struct: DVp_Struct-struct(v) DVp_Struct-lbls: DVp_Struct-lbls(v) DVp_Struct?: DVp_Struct?(v) C_DVALUEp: C_DVALUEp() C_TYPE_env: C_TYPE_env() C_Struct-fields: C_Struct-fields(v) C_Struct?: C_Struct?(v) C_TYPE: C_TYPE() deq-member: x ∈b L) atom-deq: AtomDeq bl-all: (∀x∈L.P[x])_b map: map(f;as) band: p ∧b q assert: b ifthenelse: if then else fi  bfalse: ff bool: 𝔹 let: let pi1: fst(t) pi2: snd(t) all: x:A. B[x] implies:  Q apply: a lambda: λx.A[x] spread: spread def pair: <a, b> equal: t ∈ T
Lemmas :  iff_imp_equal_bool bdd-all_wf length_wf_nat C_TYPE_wf value-type-has-value atom-value-type select_wf sq_stable__le deq-member_wf atom-deq_wf DVp_Struct-lbls_wf bool_wf eqtt_to_assert assert-deq-member C_TYPE_vs_DVALp_wf DVp_Struct-struct_wf l_member_wf int_seg_wf length_wf bl-all_wf C_DVALUEp_wf map_wf C_DVALUEp-ext eq_atom_wf assert_of_eq_atom subtype_base_sq atom_subtype_base unit_wf2 unit_subtype_base it_wf eqff_to_assert equal_wf bool_cases_sqequal bool_subtype_base assert-bnot neg_assert_of_eq_atom assert-bdd-all assert-bl-all assert_wf iff_wf all_wf l_all_wf2 list_induction list_wf length_of_nil_lemma stuck-spread base_wf map_nil_lemma length_of_cons_lemma map_cons_lemma l_all_nil less_than_transitivity1 less_than_irreflexivity nil_wf l_all_cons cons_wf length_cons non_neg_length false_wf lelt_wf decidable__le not-le-2 condition-implies-le minus-add minus-one-mul zero-add add-associates add-swap add-commutes add_functionality_wrt_le add-zero le-add-cancel decidable__lt less-iff-le le-add-cancel2 select_cons_tl_sq decidable__equal_int int_subtype_base product_subtype_base C_TYPE_subtype_base select-cons-tl not-equal-2 minus-zero subtract_wf minus-minus
\mforall{}store:C\_STOREp().  \mforall{}ctyp:C\_TYPE().  \mforall{}env:C\_TYPE\_env().  \mforall{}dval:C\_DVALUEp().
    (C\_STOREp-welltyped(env;store)
    {}\mRightarrow{}  (\muparrow{}C\_Struct?(ctyp))
    {}\mRightarrow{}  C\_TYPE\_vs\_DVALp(env;ctyp)  dval 
          =  if  DVp\_Struct?(dval)
              then  let  r  =  map(\mlambda{}p.<fst(p),  C\_TYPE\_vs\_DVALp(env;snd(p))>C\_Struct-fields(ctyp))  in
                          let  lbls  =  DVp\_Struct-lbls(dval)  in
                          let  g  =  DVp\_Struct-struct(dval)  in
                          (\mforall{}p\mmember{}r.let  a,wt  =  p 
                                      in  a  \mmember{}\msubb{}  lbls)  \mwedge{}\msubb{}  (wt  (g  a)))\_b
              else  ff
              fi  )



Date html generated: 2015_07_17-AM-07_45_26
Last ObjectModification: 2015_01_29-PM-04_39_43

Home Index