{ [A,C:Type]. [n:]. [B:n + 2  Type].
  [ds:k:n + 2  dataflow(A;bag(B[k]))]. [F:k:n + 2  bag(B[k])  C].
    (better-parallel-dataflow(
     n + 2;ds;
     F)
    = better-parallel-dataflow(
      n + 1;k.if (k = 0)
               then better-parallel-dataflow(
                    2;ds;
                    s.bag-merge(s 0;s 1))
               else ds (k + 1)
               fi ;
      g.(F 
          (k.if (k = 0) then fst(bag-separate(g 0))
              if (k = 1) then snd(bag-separate(g 0))
              else g (k - 1)
              fi )))) }

{ Proof }



Definitions occuring in Statement :  better-parallel-dataflow: better-parallel-dataflow dataflow: dataflow(A;B) eq_int: (i = j) ifthenelse: if b then t else f fi  int_seg: {i..j} nat: uall: [x:A]. B[x] so_apply: x[s] pi1: fst(t) pi2: snd(t) apply: f a lambda: x.A[x] function: x:A  B[x] subtract: n - m add: n + m natural_number: $n universe: Type equal: s = t
Definitions :  pair: <a, b> fpf: a:A fp-B[a] strong-subtype: strong-subtype(A;B) ge: i  j  less_than: a < b uimplies: b supposing a product: x:A  B[x] and: P  Q uiff: uiff(P;Q) subtype_rel: A r B implies: P  Q false: False not: A le: A  B limited-type: LimitedType prop: parallel-dataflow: parallel-dataflow set: {x:A| B[x]}  real: grp_car: |g| subtype: S  T all: x:A. B[x] int: axiom: Ax subtract: n - m pi2: snd(t) bag-separate: Error :bag-separate,  pi1: fst(t) bag-merge: Error :bag-merge,  eq_int: (i = j) ifthenelse: if b then t else f fi  lambda: x.A[x] natural_number: $n add: n + m better-parallel-dataflow: better-parallel-dataflow member: t  T nat: universe: Type isect: x:A. B[x] uall: [x:A]. B[x] so_lambda: x.t[x] equal: s = t bag: Error :bag,  so_apply: x[s] apply: f a int_seg: {i..j} function: x:A  B[x] dataflow: dataflow(A;B) Auto: Error :Auto,  CollapseTHEN: Error :CollapseTHEN,  RepeatFor: Error :RepeatFor,  upto: upto(n) map: map(f;as) top: Top sqequal: s ~ t data-stream: data-stream(P;L) list: type List void: Void rationals: true: True squash: T deq: EqDecider(T) ma-state: State(ds) fpf-cap: f(x)?z minus: -n refl: Refl(T;x,y.E[x; y]) sym: Sym(T;x,y.E[x; y]) trans: Trans(T;x,y.E[x; y]) equiv_rel: EquivRel(T;x,y.E[x; y]) so_lambda: x y.t[x; y] filter: filter(P;l) permutation: permutation(T;L1;L2) sq_type: SQType(T) sq_stable: SqStable(P) IdLnk: IdLnk Id: Id append: as @ bs locl: locl(a) Knd: Knd lt_int: i <z j le_int: i z j bfalse: ff btrue: tt eq_atom: x =a y null: null(as) set_blt: a < b grp_blt: a < b infix_ap: x f y 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 bool: or: P  Q guard: {T} l_member: (x  l) assert: b quotient: x,y:A//B[x; y] decide: case b of inl(x) =s[x] | inr(y) =t[y] suptype: suptype(S; T) p-outcome: Outcome lelt: i  j < k MaAuto: Error :MaAuto,  union: left + right fpf-dom: x  dom(f) intensional-universe: IType inr: inr x  inl: inl x  int_eq: if a=b  then c  else d corec: corec(T.F[T]) SplitOn: Error :SplitOn,  Try: Error :Try
Lemmas :  subtype_base_sq bool_subtype_base btrue_wf bfalse_wf unit_wf intensional-universe_wf eq_int_eq_true subtype_rel_self nat_properties int_seg_properties eq_int_wf ifthenelse_wf Error :bag-merge_wf,  subtype_rel_wf bool_wf uiff_transitivity eqtt_to_assert assert_of_eq_int assert_wf eqff_to_assert assert_of_bnot not_functionality_wrt_uiff bnot_wf pi1_wf_top permutation_wf quotient_wf equiv_rel_wf trans_wf sym_wf refl_wf true_wf squash_wf Error :bag-separate_wf,  subtype_rel_simple_product pi2_wf top_wf member_wf parallel-data-stream data-stream_wf le_wf false_wf not_wf dataflow-extensionality upto_wf map_wf better-parallel-data-stream uall_wf nat_wf int_seg_wf dataflow_wf Error :bag_wf,  parallel-bag-dataflow-recode better-parallel-dataflow_wf parallel-dataflow_wf

\mforall{}[A,C:Type].  \mforall{}[n:\mBbbN{}].  \mforall{}[B:\mBbbN{}n  +  2  {}\mrightarrow{}  Type].  \mforall{}[ds:k:\mBbbN{}n  +  2  {}\mrightarrow{}  dataflow(A;bag(B[k]))].
\mforall{}[F:k:\mBbbN{}n  +  2  {}\mrightarrow{}  bag(B[k])  {}\mrightarrow{}  C].
    (better-parallel-dataflow(
      n  +  2;ds;
      F)
    =  better-parallel-dataflow(
        n  +  1;\mlambda{}k.if  (k  =\msubz{}  0)
                          then  better-parallel-dataflow(
                                    2;ds;
                                    \mlambda{}s.bag-merge(s  0;s  1))
                          else  ds  (k  +  1)
                          fi  ;
        \mlambda{}g.(F 
                (\mlambda{}k.if  (k  =\msubz{}  0)  then  fst(bag-separate(g  0))
                        if  (k  =\msubz{}  1)  then  snd(bag-separate(g  0))
                        else  g  (k  -  1)
                        fi  ))))


Date html generated: 2011_08_10-AM-08_23_35
Last ObjectModification: 2011_06_18-AM-08_32_55

Home Index