Nuprl Lemma : parallel-bag-dataflow-recode

[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].
  (parallel-dataflow(
   ds;
   F)
  = parallel-dataflow(
    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 not projected




Definitions occuring in Statement :  better-parallel-dataflow: better-parallel-dataflow parallel-dataflow: 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 bag-separate: bag-separate(bs) bag-merge: bag-merge(as;bs) bag: bag(T)
Definitions :  uall: [x:A]. B[x] nat: int_seg: {i..j} so_apply: x[s] parallel-dataflow: parallel-dataflow ifthenelse: if b then t else f fi  pi1: fst(t) pi2: snd(t) member: t  T prop: all: x:A. B[x] implies: P  Q lelt: i  j < k and: P  Q le: A  B not: A false: False so_lambda: x y.t[x; y] top: Top subtype: S  T btrue: tt bfalse: ff guard: {T} squash: T true: True so_lambda: x.t[x] suptype: suptype(S; T) uimplies: b supposing a so_apply: x[s1;s2] bool: unit: Unit uiff: uiff(P;Q) sq_type: SQType(T) or: P  Q it:
Lemmas :  and_wf rec-dataflow-equal int_seg_wf dataflow_wf bag_wf ifthenelse_wf eq_int_wf lelt_wf pi1_wf_top dataflow-ap_wf dataflow-out_wf bool_wf uiff_transitivity equal_wf assert_wf eqtt_to_assert assert_of_eq_int bnot_wf not_wf eqff_to_assert assert_of_bnot not_functionality_wrt_uiff squash_wf true_wf better-parallel-dataflow_wf le_wf bag-merge_wf nat_wf eq_int_eq_true bool_subtype_base subtype_base_sq bool_cases

\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].
    (parallel-dataflow(
      ds;
      F)
    =  parallel-dataflow(
        \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: 2012_01_23-AM-11_57_51
Last ObjectModification: 2011_12_17-PM-04_32_37

Home Index