{ [A,C:Type]. [n:]. [B:n + 2  Type]. [ds:k:n + 2  dataflow(A;B[k])].
  [F:k:n + 2  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.<s 0, s 1>)
               else ds (k + 1)
               fi ;
      g.(F 
          (k.if (k = 0) then fst((g 0))
              if (k = 1) then snd((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] pair: <a, b> subtract: n - m add: n + m natural_number: $n universe: Type equal: s = t
Definitions :  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) pi1: fst(t) pair: <a, b> 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 function: x:A  B[x] dataflow: dataflow(A;B) so_apply: x[s] apply: f a int_seg: {i..j} 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: bag: Error :bag,  true: True fpf-sub: f  g fpf-dom: x  dom(f) deq: EqDecider(T) ma-state: State(ds) fpf-cap: f(x)?z sq_type: SQType(T) minus: -n 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: union: left + right or: P  Q guard: {T} assert: b decide: case b of inl(x) =s[x] | inr(y) =t[y] l_member: (x  l) suptype: suptype(S; T) p-outcome: Outcome lelt: i  j < k tactic: Error :tactic,  MaAuto: Error :MaAuto,  squash: T 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 :  bool_subtype_base btrue_wf bfalse_wf unit_wf intensional-universe_wf eq_int_eq_true true_wf squash_wf subtype_rel_self nat_properties int_seg_properties eq_int_wf ifthenelse_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 subtype_rel_simple_product subtype_base_sq int_subtype_base pi2_wf upto_wf data-stream_wf map_wf top_wf member_wf parallel-data-stream le_wf false_wf not_wf dataflow-extensionality better-parallel-data-stream int_seg_wf dataflow_wf nat_wf uall_wf parallel-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;B[k])].
\mforall{}[F:k:\mBbbN{}n  +  2  {}\mrightarrow{}  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.<s  0,  s  1>)  else  ds  (k  +  1)  fi  ;
        \mlambda{}g.(F  (\mlambda{}k.if  (k  =\msubz{}  0)  then  fst((g  0))  if  (k  =\msubz{}  1)  then  snd((g  0))  else  g  (k  -  1)  fi  ))))


Date html generated: 2011_08_10-AM-08_23_21
Last ObjectModification: 2011_06_18-AM-08_32_52

Home Index