{ 
[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);{})
      + 
n
upto(||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:
x
bs.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:
x
bs.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