{ [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