{ [P:ClassDerivation  ']
    ((args:BaseDef. P[cdvbase(args)])
     (fst,snd:ClassDerivation.  (P[fst]  P[snd]  P[cdvpair(fst;snd)]))
     (X:ClassDerivation. dummy:Unit.  (P[X]  P[cdvdelay(X;dummy)]))
     ([typ,argtype:Type].
          arg:ClassDerivation. fun:argtype  bag(typ).
            (P[arg]  P[cdvcomb(typ;argtype;arg;fun)]))
     ([typ,argtype:Type].
          arg:ClassDerivation. fun:argtype  bag(typ)  bag(typ).
            (P[arg]  P[cdvreccomb(typ;argtype;arg;fun)]))
     {x:ClassDerivation. P[x]}) }

{ Proof }



Definitions occuring in Statement :  cdvreccomb: cdvreccomb(typ;argtype;arg;fun) cdvcomb: cdvcomb(typ;argtype;arg;fun) cdvdelay: cdvdelay(X;dummy) cdvpair: cdvpair(fst;snd) cdvbase: cdvbase(args) classderiv: ClassDerivation base-deriv: BaseDef uall: [x:A]. B[x] prop: guard: {T} so_apply: x[s] all: x:A. B[x] implies: P  Q unit: Unit function: x:A  B[x] universe: Type bag: bag(T)
Definitions :  natural_number: $n it: pair: <a, b> inr: inr x  fpf: a:A fp-B[a] name: Name decision: Decision inl: inl x  int: tag-by: zT ldag: LabeledDAG(T) labeled-graph: LabeledGraph(T) record+: record+ record: record(x.T[x]) eclass: EClass(A[eo; e]) fset: FSet{T} dataflow: dataflow(A;B) isect2: T1  T2 b-union: A  B rev_implies: P  Q or: P  Q iff: P  Q list: type List set: {x:A| B[x]}  top: Top true: True type-monotone: Monotone(T.F[T]) union: left + right cdvbase: cdvbase(args) cdvpair: cdvpair(fst;snd) cdvdelay: cdvdelay(X;dummy) cdvcomb: cdvcomb(typ;argtype;arg;fun) cdvreccomb: cdvreccomb(typ;argtype;arg;fun) lambda: x.A[x] equal: s = t member: t  T strong-subtype: strong-subtype(A;B) rec: rec(x.A[x]) le: A  B ge: i  j  not: A 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 bag: bag(T) so_lambda: x.t[x] unit: Unit guard: {T} uall: [x:A]. B[x] isect: x:A. B[x] universe: Type base-deriv: BaseDef so_apply: x[s] apply: f a classderiv: ClassDerivation prop: implies: P  Q all: x:A. B[x] function: x:A  B[x]
Lemmas :  cdvpair_wf classderiv_wf cdvdelay_wf unit_wf cdvcomb_wf bag_wf uall_wf cdvreccomb_wf base-deriv_wf cdvbase_wf type-monotone_wf subtype_rel_wf subtype_rel_sum subtype_rel_simple_product subtype_rel_product member_wf it_wf

\mforall{}[P:ClassDerivation  {}\mrightarrow{}  \mBbbP{}']
    ((\mforall{}args:BaseDef.  P[cdvbase(args)])
    {}\mRightarrow{}  (\mforall{}fst,snd:ClassDerivation.    (P[fst]  {}\mRightarrow{}  P[snd]  {}\mRightarrow{}  P[cdvpair(fst;snd)]))
    {}\mRightarrow{}  (\mforall{}X:ClassDerivation.  \mforall{}dummy:Unit.    (P[X]  {}\mRightarrow{}  P[cdvdelay(X;dummy)]))
    {}\mRightarrow{}  (\mforall{}[typ,argtype:Type].
                \mforall{}arg:ClassDerivation.  \mforall{}fun:argtype  {}\mrightarrow{}  bag(typ).
                    (P[arg]  {}\mRightarrow{}  P[cdvcomb(typ;argtype;arg;fun)]))
    {}\mRightarrow{}  (\mforall{}[typ,argtype:Type].
                \mforall{}arg:ClassDerivation.  \mforall{}fun:argtype  {}\mrightarrow{}  bag(typ)  {}\mrightarrow{}  bag(typ).
                    (P[arg]  {}\mRightarrow{}  P[cdvreccomb(typ;argtype;arg;fun)]))
    {}\mRightarrow{}  \{\mforall{}x:ClassDerivation.  P[x]\})


Date html generated: 2011_08_17-PM-04_23_39
Last ObjectModification: 2011_06_18-AM-11_35_26

Home Index