{ [A,B,S1,S2:Type]. [next1:S1  A  (S1  B)]. [next2:S2  A  (S2  B)].
  [s1:S1]. [s2:S2].
    rec-dataflow(s1;s,a.next1[s;a]) = rec-dataflow(s2;s,a.next2[s;a]) 
    supposing R:S1  S2  
               (R[s1;s2]
                (s1:S1. s2:S2.
                    (R[s1;s2]  (a:A. R[fst(next1[s1;a]);fst(next2[s2;a])])))
                (s1:S1. s2:S2.
                    (R[s1;s2]
                     (a:A. ((snd(next1[s1;a])) = (snd(next2[s2;a]))))))) }

{ Proof }



Definitions occuring in Statement :  rec-dataflow: rec-dataflow(s0;s,m.next[s; m]) dataflow: dataflow(A;B) uimplies: b supposing a uall: [x:A]. B[x] prop: so_apply: x[s1;s2] pi1: fst(t) pi2: snd(t) all: x:A. B[x] exists: x:A. B[x] implies: P  Q and: P  Q function: x:A  B[x] product: x:A  B[x] universe: Type equal: s = t
Definitions :  so_lambda: x y.t[x; y] pair: <a, b> fpf: a:A fp-B[a] strong-subtype: strong-subtype(A;B) le: A  B ge: i  j  not: A less_than: a < b uiff: uiff(P;Q) subtype_rel: A r B void: Void lambda: x.A[x] pi2: snd(t) limited-type: LimitedType subtype: S  T top: Top pi1: fst(t) axiom: Ax rec-dataflow: rec-dataflow(s0;s,m.next[s; m]) member: t  T universe: Type prop: uall: [x:A]. B[x] so_lambda: x.t[x] uimplies: b supposing a isect: x:A. B[x] dataflow: dataflow(A;B) exists: x:A. B[x] and: P  Q product: x:A  B[x] equal: s = t apply: f a implies: P  Q all: x:A. B[x] function: x:A  B[x] so_apply: x[s1;s2] Auto: Error :Auto,  CollapseTHEN: Error :CollapseTHEN,  D: Error :D,  RepeatFor: Error :RepeatFor,  tactic: Error :tactic
Lemmas :  uall_wf dataflow_wf member_wf top_wf pi2_wf pi1_wf_top rec-dataflow-equal

\mforall{}[A,B,S1,S2:Type].  \mforall{}[next1:S1  {}\mrightarrow{}  A  {}\mrightarrow{}  (S1  \mtimes{}  B)].  \mforall{}[next2:S2  {}\mrightarrow{}  A  {}\mrightarrow{}  (S2  \mtimes{}  B)].  \mforall{}[s1:S1].  \mforall{}[s2:S2].
    rec-dataflow(s1;s,a.next1[s;a])  =  rec-dataflow(s2;s,a.next2[s;a]) 
    supposing  \mexists{}R:S1  {}\mrightarrow{}  S2  {}\mrightarrow{}  \mBbbP{}
                          (R[s1;s2]
                          \mwedge{}  (\mforall{}s1:S1.  \mforall{}s2:S2.    (R[s1;s2]  {}\mRightarrow{}  (\mforall{}a:A.  R[fst(next1[s1;a]);fst(next2[s2;a])])))
                          \mwedge{}  (\mforall{}s1:S1.  \mforall{}s2:S2.    (R[s1;s2]  {}\mRightarrow{}  (\mforall{}a:A.  ((snd(next1[s1;a]))  =  (snd(next2[s2;a])))))))


Date html generated: 2011_08_10-AM-08_19_51
Last ObjectModification: 2011_05_12-AM-12_24_56

Home Index