{ [A,B,M:Type]. [dfs:bag(dataflow(M;bag(B)))]. [ms:M List].
  [P:dataflow(M;bag(A))]. [Q:A  dataflow(M;bag(B))].
    (bind-dataflow-aux(P;dfs;a.Q[a])*(ms)
    = bind-dataflow-aux(P*(ms);bag-map(df.df*(ms);dfs)
      + 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-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) bag: bag(T) upto: upto(n)
Definitions :  union: left + right or: P  Q assert: b divides: b | a assoced: a ~ b set_leq: a  b set_lt: a <p b grp_lt: a < b cand: A c B l_member: (x  l) l_contains: A  B cmp-le: cmp-le(cmp;x;y) inject: Inj(A;B;f) reducible: reducible(a) prime: prime(a) squash: T l_exists: (xL. P[x]) l_all: (xL.P[x]) infix_ap: x f y fun-connected: y is f*(x) qle: r  s qless: r < s q-rel: q-rel(r;x) sq_exists: x:{A| B[x]} product: x:A  B[x] exists: x:A. B[x] i-finite: i-finite(I) i-closed: i-closed(I) p-outcome: Outcome fset-member: a  s f-subset: xs  ys fset-closed: (s closed under fs) l_disjoint: l_disjoint(T;l1;l2) decidable: Dec(P) void: Void top: Top uimplies: b supposing a set: {x:A| B[x]}  real: grp_car: |g| subtype: S  T int: nat: le: A  B prop: guard: {T} implies: P  Q all: x:A. B[x] quotient: x,y:A//B[x; y] primrec: primrec(n;b;c) corec: corec(T.F[T]) pair: <a, b> bool: axiom: Ax select: l[i] firstn: firstn(n;as) dataflow-ap: df(a) pi2: snd(t) nth_tl: nth_tl(n;as) upto: upto(n) bag-combine: xbs.f[x] lambda: x.A[x] bag-map: bag-map(f;bs) bag-append: as + bs apply: f a so_apply: x[s] bind-dataflow-aux: bind-dataflow-aux(P;dfs;a.Q[a]) iterate-dataflow: P*(inputs) member: t  T isect: x:A. B[x] uall: [x:A]. B[x] so_lambda: x.t[x] equal: s = t function: x:A  B[x] list: type List dataflow: dataflow(A;B) bag: bag(T) universe: Type ge: i  j  false: False not: A minus: -n add: n + m subtract: n - m length: ||as|| natural_number: $n less_than: a < b nil: [] last: last(L) cons: [car / cdr] append: as @ bs sqequal: s ~ t fpf: a:A fp-B[a] iter_df_nil: iter_df_nil{iter_df_nil_compseq_tag_def:o}(P) iter_df_cons: iter_df_cons{iter_df_cons_compseq_tag_def:o}(as; a; P) tl: tl(l) hd: hd(l) strong-subtype: strong-subtype(A;B) and: P  Q uiff: uiff(P;Q) subtype_rel: A r B base: Base data-stream: data-stream(P;L) true: True rev_implies: P  Q iff: P  Q pi1: fst(t) map: map(f;as) rationals: int_iseg: {i...j} lelt: i  j < k int_seg: {i..j} rec_dataflow_ap: rec_dataflow_ap_compseq_tag_def let: let single-bag: {x} compose: f o g label: ...$L... t stream: stream(A) b-union: A  B fpf-sub: f  g deq: EqDecider(T) ma-state: State(ds) fpf-cap: f(x)?z permutation: permutation(T;L1;L2) bfalse: ff limited-type: LimitedType btrue: tt le_int: i z j eq_int: (i = j) eq_atom: x =a y null: null(as) set_blt: a < b grp_blt: a < b dcdr-to-bool: [d] bl-all: (xL.P[x])_b bl-exists: (xL.P[x])_b b-exists: (i<n.P[i])_b eq_type: eq_type(T;T') eq_atom: eq_atom$n(x;y) qeq: qeq(r;s) q_less: q_less(r;s) q_le: q_le(r;s) deq-member: deq-member(eq;x;L) deq-disjoint: deq-disjoint(eq;as;bs) deq-all-disjoint: deq-all-disjoint(eq;ass;bs) eq_id: a = b eq_lnk: a = b bimplies: p  q band: p  q bor: p q bnot: b unit: Unit lt_int: i <z j ifthenelse: if b then t else f fi  sq_type: SQType(T) bag-union: bag-union(bbs)
Lemmas :  bag-subtype-list nth_tl_append firstn_append int_subtype_base set_subtype_base subtype_base_sq select_append_back bag-combine-single-left ifthenelse_wf nth_tl-append bool_wf uiff_transitivity eqtt_to_assert assert_of_lt_int eqff_to_assert assert_functionality_wrt_uiff bnot_of_lt_int assert_of_le_int le_int_wf bnot_wf lt_int_wf firstn-append bnot_of_le_int bag-map-combine select_append_front bag-combine-append-left permutation_wf subtype_rel_wf subtype_rel_bag int_seg_properties length_nil length_cons length_append bag-map-map bag-map-append single-bag_wf bag-append-assoc upto_add_1 length-append bag_qinc bag-combine_wf int_seg_wf length_firstn non_neg_length true_wf squash_wf dataflow-ap_wf pi1_wf_top rev_implies_wf iff_wf assert_wf not_wf false_wf pos_length2 pi1_wf bag-append_wf bag-map_wf upto_wf append_wf select_wf pi2_wf nth_tl_wf bind-dataflow-aux_wf iterate-dataflow_wf firstn_wf last_wf iterate-dataflow-append firstn_all firstn_decomp ge_wf nat_properties nat_ind_tp bag_wf dataflow_wf uall_wf guard_wf le_wf nat_wf comp_nat_ind_tp length_wf1 length_wf_nat top_wf member_wf decidable__lt

\mforall{}[A,B,M:Type].  \mforall{}[dfs:bag(dataflow(M;bag(B)))].  \mforall{}[ms:M  List].  \mforall{}[P:dataflow(M;bag(A))].
\mforall{}[Q:A  {}\mrightarrow{}  dataflow(M;bag(B))].
    (bind-dataflow-aux(P;dfs;a.Q[a])*(ms)
    =  bind-dataflow-aux(P*(ms);bag-map(\mlambda{}df.df*(ms);dfs)
        +  \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_30
Last ObjectModification: 2011_05_09-PM-06_25_20

Home Index