{ [A,B,M:Type]. [ms:M List]. [P:dataflow(M;bag(A))].
  [Q:A  dataflow(M;bag(B))].
    (bind-dataflow(P;a.Q[a])*(ms)
    = bind-dataflow-aux(P*(ms);bag-map(df.df*(ms);{})
      + nupto(||ms||).bag-map(a.Q[a]*(nth_tl(n;ms));
                        snd(P*(firstn(n;ms))(ms[n])));a.Q[a])) }

{ Proof }



Definitions occuring in Statement :  bind-dataflow: bind-dataflow(P;a.Q[a]),  bind-dataflow-aux: bind-dataflow-aux(P;dfs;a.Q[a]),  iterate-dataflow: P*(inputs),  dataflow-ap: df(a),  dataflow: dataflow(A;B),  select: l[i],  firstn: firstn(n;as),  nth_tl: nth_tl(n;as),  length: ||as||,  uall: [x:A]. B[x],  so_apply: x[s],  pi2: snd(t),  lambda: x.A[x],  function: x:A  B[x],  list: type List,  universe: Type,  equal: s = t,  bag-combine: xbs.f[x],  bag-append: as + bs,  bag-map: bag-map(f;bs),  empty-bag: {},  bag: bag(T),  upto: upto(n)
Definitions :  all: x:A. B[x],  axiom: Ax,  select: l[i],  firstn: firstn(n;as),  dataflow-ap: df(a),  pi2: snd(t),  nth_tl: nth_tl(n;as),  length: ||as||,  upto: upto(n),  bag-combine: xbs.f[x],  lambda: x.A[x],  bag-map: bag-map(f;bs),  bag-append: as + bs,  bind-dataflow-aux: bind-dataflow-aux(P;dfs;a.Q[a]),  apply: f a,  so_apply: x[s],  bind-dataflow: bind-dataflow(P;a.Q[a]),  iterate-dataflow: P*(inputs),  member: t  T,  so_lambda: x.t[x],  equal: s = t,  function: x:A  B[x],  dataflow: dataflow(A;B),  bag: bag(T),  list: type List,  universe: Type,  uall: [x:A]. B[x],  isect: x:A. B[x],  Auto: Error :Auto,  CollapseTHEN: Error :CollapseTHEN,  RepeatFor: Error :RepeatFor,  RepUR: Error :RepUR,  empty-bag: {},  CollapseTHENA: Error :CollapseTHENA,  tactic: Error :tactic
Lemmas :  bag_wf,  dataflow_wf,  empty-bag_wf,  uall_wf,  iterate-bind-dataflow-aux

\mforall{}[A,B,M:Type].  \mforall{}[ms:M  List].  \mforall{}[P:dataflow(M;bag(A))].  \mforall{}[Q:A  {}\mrightarrow{}  dataflow(M;bag(B))].
    (bind-dataflow(P;a.Q[a])*(ms)
    =  bind-dataflow-aux(P*(ms);bag-map(\mlambda{}df.df*(ms);\{\})
        +  \mcup{}n\mmember{}upto(||ms||).bag-map(\mlambda{}a.Q[a]*(nth\_tl(n;ms));snd(P*(firstn(n;ms))(ms[n])));a.Q[a]))


Date html generated: 2011_08_16-AM-09_49_44
Last ObjectModification: 2011_05_09-PM-06_26_08

Home Index