Step * 1 2 1 1 1 2 1 of Lemma bind-class-program_wf


1. Info Type
2. Type
3. Type
4. valueall-type(B)
5. es EO+(Info)@i'
6. E@i
7. hdataflow(Info;A)@i
8. A ⟶ hdataflow(Info;B)@i
9. ∀e:E
     (simple-hdf-bind(X;λx.(Y x))*(map(λx.info(x);before(e)))
     mk-hdf(p,a.simple-bind-nxt(λx.(Y x); p; a);p.let X,ys 
                                                    in ff;<X*(map(λx.info(x);before(e)))
                                                          , ⋃e'∈before(e).
                                                            bag-map(λa.Y a*(map(λx.info(x);filter(λa.e' ≤loc a;
                                                                                                  before(e))));
                                                            snd(X*(map(λx.info(x);before(e')))(info(e'))))
                                                          >)
     ∈ hdataflow(Info;B))
⊢ ⋃e'∈≤loc(e).⋃a∈snd(X*(map(λx.info(x);before(e')))(info(e'))).snd(Y 
                                                                   a*(map(λx.info(x);filter(λa.e' ≤loc a;
                                                                                            before(e))))(info(e)))
(snd(mk-hdf(p,a.simple-bind-nxt(λx.(Y x); p; a);p.let X,ys 
                                                    in ff;<X*(map(λx.info(x);before(e)))
                                                          , ⋃e'∈before(e).
                                                            bag-map(λa.Y a*(map(λx.info(x);filter(λa.e' ≤loc a;
                                                                                                  before(e))));
                                                            snd(X*(map(λx.info(x);before(e')))(info(e'))))
                                                          >)(info(e))))
∈ bag(B)
BY
((Unfold `es-le-before` THEN Folds ``single-bag bag-append`` 0)
   THEN RecUnfold `mk-hdf` 0
   THEN RepUR ``hdf-ap hdf-run`` 0
   THEN RW (AddrC [3;1;1] (UnfoldC `simple-bind-nxt`)) 0
   THEN Reduce 0
   THEN Fold `hdf-ap` 0
   THEN (Assert ↓Info BY
               (D THEN UseWitness ⌜info(e)⌝⋅ THEN Auto))
   THEN (GenConcl ⌜before(e) L ∈ ({e':E| (e' <loc e)}  List)⌝⋅ THENA Auto)
   THEN GenConclAtAddr [3;1;1;1]⋅
   THEN -2
   THEN Reduce 0
   THEN RepeatFor ((CallByValueReduce THENA MaAuto))
   THEN Reduce 0) }

1
1. Info Type
2. Type
3. Type
4. valueall-type(B)
5. es EO+(Info)@i'
6. E@i
7. hdataflow(Info;A)@i
8. A ⟶ hdataflow(Info;B)@i
9. ∀e:E
     (simple-hdf-bind(X;λx.(Y x))*(map(λx.info(x);before(e)))
     mk-hdf(p,a.simple-bind-nxt(λx.(Y x); p; a);p.let X,ys 
                                                    in ff;<X*(map(λx.info(x);before(e)))
                                                          , ⋃e'∈before(e).
                                                            bag-map(λa.Y a*(map(λx.info(x);filter(λa.e' ≤loc a;
                                                                                                  before(e))));
                                                            snd(X*(map(λx.info(x);before(e')))(info(e'))))
                                                          >)
     ∈ hdataflow(Info;B))
10. ↓Info
11. {e':E| (e' <loc e)}  List@i
12. before(e) L ∈ ({e':E| (e' <loc e)}  List)@i
13. v1 hdataflow(Info;A)@i
14. v2 bag(A)@i
15. X*(map(λx.info(x);L))(info(e)) = <v1, v2> ∈ (hdataflow(Info;A) × bag(A))@i
⊢ ⋃e'∈{e}.⋃a∈snd(X*(map(λx.info(x);before(e')))(info(e'))).snd(Y 
                                                                   a*(map(λx.info(x);filter(λa.e' ≤loc a;L)))(info(e)))
= ⋃yb∈bag-map(λP.P(info(e));⋃e'∈L.bag-map(λa.Y a*(map(λx.info(x);filter(λa.e' ≤loc a;L)));
                                  snd(X*(map(λx.info(x);before(e')))(info(e'))))
      bag-map(λx.(Y x);v2)).snd(yb)
∈ bag(B)


Latex:


Latex:

1.  Info  :  Type
2.  A  :  Type
3.  B  :  Type
4.  valueall-type(B)
5.  es  :  EO+(Info)@i'
6.  e  :  E@i
7.  X  :  hdataflow(Info;A)@i
8.  Y  :  A  {}\mrightarrow{}  hdataflow(Info;B)@i
9.  \mforall{}e:E
          (simple-hdf-bind(X;\mlambda{}x.(Y  x))*(map(\mlambda{}x.info(x);before(e)))
          =  mk-hdf(p,a.simple-bind-nxt(\mlambda{}x.(Y  x);  p;  a);p.let  X,ys  =  p 
                                                                                                        in  ff;<X*(map(\mlambda{}x.info(x);before(e)))
                                                                                                                    ,  \mcup{}e'\mmember{}before(e).
                                                                                                                        bag-map(\mlambda{}a.Y  a*(map(\mlambda{}x.info(x);
                                                                                                                                                                filter(\mlambda{}a.e'  \mleq{}loc  a;
                                                                                                                                                                              before(e))));
                                                                                                                        snd(X*(map(\mlambda{}x.info(x);
                                                                                                                                              before(e')))(info(e'))))
                                                                                                                    >))
\mvdash{}  \mcup{}e'\mmember{}\mleq{}loc(e).\mcup{}a\mmember{}snd(X*(map(\mlambda{}x.info(x);before(e')))(info(e'))).
                            snd(Y  a*(map(\mlambda{}x.info(x);filter(\mlambda{}a.e'  \mleq{}loc  a;before(e))))(info(e)))
=  (snd(mk-hdf(p,a.simple-bind-nxt(\mlambda{}x.(Y  x);  p;  a);p.let  X,ys  =  p 
                                                                                                        in  ff;<X*(map(\mlambda{}x.info(x);before(e)))
                                                                                                                    ,  \mcup{}e'\mmember{}before(e).
                                                                                                                        bag-map(\mlambda{}a.Y  a*(map(\mlambda{}x.info(x);
                                                                                                                                                                filter(\mlambda{}a.e'  \mleq{}loc  a;
                                                                                                                                                                              before(e))));
                                                                                                                        snd(X*(map(\mlambda{}x.info(x);
                                                                                                                                              before(e')))(info(e'))))
                                                                                                                    >)(info(e))))


By


Latex:
((Unfold  `es-le-before`  0  THEN  Folds  ``single-bag  bag-append``  0)
  THEN  RecUnfold  `mk-hdf`  0
  THEN  RepUR  ``hdf-ap  hdf-run``  0
  THEN  RW  (AddrC  [3;1;1]  (UnfoldC  `simple-bind-nxt`))  0
  THEN  Reduce  0
  THEN  Fold  `hdf-ap`  0
  THEN  (Assert  \mdownarrow{}Info  BY
                          (D  0  THEN  UseWitness  \mkleeneopen{}info(e)\mkleeneclose{}\mcdot{}  THEN  Auto))
  THEN  (GenConcl  \mkleeneopen{}before(e)  =  L\mkleeneclose{}\mcdot{}  THENA  Auto)
  THEN  GenConclAtAddr  [3;1;1;1]\mcdot{}
  THEN  D  -2
  THEN  Reduce  0
  THEN  RepeatFor  3  ((CallByValueReduce  0  THENA  MaAuto))
  THEN  Reduce  0)




Home Index