Step * of 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 )
BY
((D THENA Auto)
   THEN BLemma `C_TYPE-induction`
   THEN Reduce 0
   THEN (RepUR ``let`` THEN Auto)
   THEN UnfoldAtAddr [2;1] 0⋅
   THEN Reduce 0
   THEN AutoSplit
   THEN Fold `C_TYPE_vs_DVALp` 0
   THEN RepUR ``let`` 0
   THEN Auto) }

1
1. store C_STOREp()@i
2. fields (Atom × C_TYPE()) List@i
3. (∀u∈fields.let u1,u2 
              in ∀env:C_TYPE_env(). ∀dval:C_DVALUEp().
                   (C_STOREp-welltyped(env;store)
                    (↑C_Struct?(u2))
                    C_TYPE_vs_DVALp(env;u2) dval 
                      if DVp_Struct?(dval)
                        then (∀p∈map(λp.<fst(p), C_TYPE_vs_DVALp(env;snd(p))>;C_Struct-fields(u2)).
                                let a,wt 
                                in a ∈b DVp_Struct-lbls(dval)) ∧b (wt (DVp_Struct-struct(dval) a)))_b
                        else ff
                        fi ))@i
4. env C_TYPE_env()@i
5. dval C_DVALUEp()@i
6. C_STOREp-welltyped(env;store)@i
7. True@i
8. ↑DVp_Struct?(dval)
⊢ bdd-all(||fields||;i.eval fst(fields[i]) in
                       a ∈b DVp_Struct-lbls(dval))
                       ∧b (let v2,v3 fields[i] in C_TYPE_vs_DVALp(env;v3) (DVp_Struct-struct(dval) a))) 
(∀p∈map(λp.<fst(p), C_TYPE_vs_DVALp(env;snd(p))>;fields).let a,wt 
                                                           in a ∈b DVp_Struct-lbls(dval))
                                                              ∧b (wt (DVp_Struct-struct(dval) a)))_b


Latex:


\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  )


By

((D  0  THENA  Auto)
  THEN  BLemma  `C\_TYPE-induction`
  THEN  Reduce  0
  THEN  (RepUR  ``let``  0  THEN  Auto)
  THEN  UnfoldAtAddr  [2;1]  0\mcdot{}
  THEN  Reduce  0
  THEN  AutoSplit
  THEN  Fold  `C\_TYPE\_vs\_DVALp`  0
  THEN  RepUR  ``let``  0
  THEN  Auto)




Home Index