Nuprl Lemma : parallel-2-equiv

[A,B,C,D,S1,S2:Type]. [F1:S1  A  (S1  C)]. [F2:S2  A  (S2  D)]. [G:C  D  B]. [s1:S1]. [s2:S2].
  (better-parallel-dataflow(
   2;k.[rec-dataflow(s1;s,a.F1[s;a]); rec-dataflow(s2;s,a.F2[s;a])][k];
   g.G[g 0;g 1])
  = rec-dataflow(<s1, s2>;s,a.let s1,s2 = s 
                              in let s1',out1 = F1[s1;a] 
                                 in let s2',out2 = F2[s2;a] 
                                    in <<s1', s2'>, G[out1;out2]>))


Proof not projected




Definitions occuring in Statement :  better-parallel-dataflow: better-parallel-dataflow rec-dataflow: rec-dataflow(s0;s,m.next[s; m]) dataflow: dataflow(A;B) select: l[i] uall: [x:A]. B[x] so_apply: x[s1;s2] apply: f a lambda: x.A[x] function: x:A  B[x] spread: spread def pair: <a, b> product: x:A  B[x] cons: [car / cdr] nil: [] natural_number: $n universe: Type equal: s = t
Definitions :  suptype: suptype(S; T) subtype: S  T top: Top so_lambda: x y.t[x; y] all: x:A. B[x] member: t  T so_apply: x[s1;s2] uall: [x:A]. B[x] btrue: tt bfalse: ff lt_int: i <z j bnot: b le_int: i z j ifthenelse: if b then t else f fi  ycomb: Y label: ...$L... t ge: i  j  and: P  Q lelt: i  j < k length: ||as|| so_lambda: x.t[x] false: False implies: P  Q not: A le: A  B int_seg: {i..j} nat: select: l[i] uimplies: b supposing a guard: {T} sq_type: SQType(T) or: P  Q decidable: Dec(P) prop: so_apply: x[s]
Lemmas :  data-stream_wf parallel-2-rec-dataflow rec-dataflow_wf dataflow-extensionality lelt_wf dataflow_wf int_subtype_base subtype_base_sq decidable__equal_int int_seg_wf length_wf_nat non_neg_length length_cons length_wf_nil length_nil length_wf select_wf le_wf better-parallel-dataflow_wf

\mforall{}[A,B,C,D,S1,S2:Type].  \mforall{}[F1:S1  {}\mrightarrow{}  A  {}\mrightarrow{}  (S1  \mtimes{}  C)].  \mforall{}[F2:S2  {}\mrightarrow{}  A  {}\mrightarrow{}  (S2  \mtimes{}  D)].  \mforall{}[G:C  {}\mrightarrow{}  D  {}\mrightarrow{}  B].
\mforall{}[s1:S1].  \mforall{}[s2:S2].
    (better-parallel-dataflow(
      2;\mlambda{}k.[rec-dataflow(s1;s,a.F1[s;a]);  rec-dataflow(s2;s,a.F2[s;a])][k];
      \mlambda{}g.G[g  0;g  1])
    =  rec-dataflow(<s1,  s2>s,a.let  s1,s2  =  s 
                                                            in  let  s1',out1  =  F1[s1;a] 
                                                                  in  let  s2',out2  =  F2[s2;a] 
                                                                        in  <<s1',  s2'>,  G[out1;out2]>))


Date html generated: 2012_01_23-AM-11_57_34
Last ObjectModification: 2011_12_12-PM-06_57_05

Home Index