{ [X:{j}]. [x:SimpleType]. [var:name:Atom  X]. [const:ty:Type  X].
  [arrow,prod,union:left:SimpleType
                      right:SimpleType
                      rec1:X
                      rec2:X
                      X]. [list,class:kind:SimpleType  rec1:X  X].
    (case(x)
     var(name)=>var[name]
     const(ty)=>const[ty]
     domainrange =>rec1,rec2.arrow[domain;range;rec1;rec2]
     fst  snd =>rec1,rec2.prod[fst;snd;rec1;rec2]
     left + right =>rec1,rec2.union[left;right;rec1;rec2]
     kind list =>rec1.list[kind;rec1]
     Class(kind) =>rec1.class[kind;rec1]  X) }

{ Proof }



Definitions occuring in Statement :  simple_type_ind: simple_type_ind,  simple_type: SimpleType,  uall: [x:A]. B[x],  so_apply: x[s1;s2;s3;s4],  so_apply: x[s1;s2],  so_apply: x[s],  member: t  T,  function: x:A  B[x],  atom: Atom,  universe: Type
Definitions :  fpf: a:A fp-> B[a],  strong-subtype: strong-subtype(A;B),  le: A  B,  ge: i  j ,  not: A,  less_than: a < b,  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,  implies: P  Q,  iff: P  Q,  uiff: uiff(P;Q),  and: P  Q,  bag: bag(T),  list: type List,  set: {x:A| B[x]} ,  top: Top,  true: True,  subtype_rel: A r B,  uimplies: b supposing a,  type-monotone: Monotone(T.F[T]),  product: x:A  B[x],  union: left + right,  rec: rec(x.A[x]),  all: x:A. B[x],  axiom: Ax,  so_apply: x[s1;s2],  so_apply: x[s1;s2;s3;s4],  apply: f a,  so_apply: x[s],  simple_type_ind: simple_type_ind,  equal: s = t,  isect: x:A. B[x],  uall: [x:A]. B[x],  so_lambda: x.t[x],  member: t  T,  prop: ,  simple_type: SimpleType,  universe: Type,  function: x:A  B[x],  atom: Atom
Lemmas :  uall_wf,  simple_type_wf,  member_wf,  type-monotone_wf,  subtype_rel_wf,  subtype_rel_sum,  subtype_rel_simple_product

\mforall{}[X:\mBbbU{}\{j\}].  \mforall{}[x:SimpleType].  \mforall{}[var:name:Atom  {}\mrightarrow{}  X].  \mforall{}[const:ty:Type  {}\mrightarrow{}  X].
\mforall{}[arrow,prod,union:left:SimpleType  {}\mrightarrow{}  right:SimpleType  {}\mrightarrow{}  rec1:X  {}\mrightarrow{}  rec2:X  {}\mrightarrow{}  X].
\mforall{}[list,class:kind:SimpleType  {}\mrightarrow{}  rec1:X  {}\mrightarrow{}  X].
    (case(x)
      var(name)=>var[name]
      const(ty)=>const[ty]
      domain{}\mrightarrow{}range  =>rec1,rec2.arrow[domain;range;rec1;rec2]
      fst  \mtimes{}  snd  =>rec1,rec2.prod[fst;snd;rec1;rec2]
      left  +  right  =>rec1,rec2.union[left;right;rec1;rec2]
      kind  list  =>rec1.list[kind;rec1]
      Class(kind)  =>rec1.class[kind;rec1]  \mmember{}  X)


Date html generated: 2011_08_17-PM-04_42_20
Last ObjectModification: 2011_02_06-PM-04_03_35

Home Index