{ 
[A,B,S:Type]. 
[F:S 
 A 
 (S 
 bag(B))]. 
[s:S]. 
[buf:bag(B)].
    (seq-dataflow(rec-dataflow(s;s,a.F s 
                                     a);buffer-dataflow(buf;x.0 <z bag-size(x)))
    = rec-dataflow(<s, buf>s,a.let s1,buf = s 
                                in let s',out = F s1 a 
                                   in <<s'
                                       , if 0 <z bag-size(out)
                                         then out
                                         else buf
                                         fi 
                                       >
                                      , buf
                                      >)) }
{ Proof }
Definitions occuring in Statement : 
buffer-dataflow: buffer-dataflow(s;x.P[x]), 
seq-dataflow: seq-dataflow(P;Q), 
rec-dataflow: rec-dataflow(s0;s,m.next[s; m]), 
dataflow: dataflow(A;B), 
lt_int: i <z j, 
ifthenelse: if b then t else f fi , 
uall:
[x:A]. B[x], 
apply: f a, 
function: x:A 
 B[x], 
spread: spread def, 
pair: <a, b>, 
product: x:A 
 B[x], 
natural_number: $n, 
universe: Type, 
equal: s = t
Lemmas : 
member_wf, 
top_wf, 
data-stream-cons, 
data-stream_wf, 
squash_wf, 
true_wf, 
ifthenelse_wf, 
dataflow_wf, 
dataflow-extensionality, 
seq-dataflow_wf, 
rec-dataflow_wf, 
buffer-dataflow_wf, 
lt_int_wf, 
Error :bag-size_wf, 
nat_wf, 
Error :bag_wf
\mforall{}[A,B,S:Type].  \mforall{}[F:S  {}\mrightarrow{}  A  {}\mrightarrow{}  (S  \mtimes{}  bag(B))].  \mforall{}[s:S].  \mforall{}[buf:bag(B)].
    (seq-dataflow(rec-dataflow(s;s,a.F  s  a);buffer-dataflow(buf;x.0  <z  bag-size(x)))
    =  rec-dataflow(<s,  buf>s,a.let  s1,buf  =  s 
                                                            in  let  s',out  =  F  s1  a 
                                                                  in  <<s',  if  0  <z  bag-size(out)  then  out  else  buf  fi  >,  buf>))
Date html generated:
2011_08_10-AM-08_21_16
Last ObjectModification:
2011_06_29-PM-03_19_01
Home
Index