{ st1,st2:SimpleType.
    ((U:Atom  SimpleType. st-unifies(U;st1;st2) = ff)
     (L:({st:SimpleType| st_var?(st)}   SimpleType) List
        U:Atom  SimpleType. st-unifies(U;st1;st2) = st-unifies-all(U;L))) }

{ Proof }



Definitions occuring in Statement :  st-unifies-all: st-unifies-all(U;L) st-unifies: st-unifies(U;st1;st2) st_var?: st_var?(x) simple_type: SimpleType assert: b bfalse: ff bool: all: x:A. B[x] exists: x:A. B[x] or: P  Q set: {x:A| B[x]}  function: x:A  B[x] product: x:A  B[x] list: type List atom: Atom equal: s = t
Definitions :  so_lambda: x.t[x] so_lambda: so_lambda(x,y,z,w.t[x; y; z; w]) so_lambda: x y.t[x; y] fpf-dom: x  dom(f) bnot: b st_class: st_class(kind) simple_type_ind_st_class: simple_type_ind_st_class_compseq_tag_def st_class-kind: st_class-kind(x) st_list: st_list(kind) simple_type_ind_st_list: simple_type_ind_st_list_compseq_tag_def st_list-kind: st_list-kind(x) st_union: st_union(left;right) st_union-left: st_union-left(x) simple_type_ind_st_union: simple_type_ind_st_union_compseq_tag_def st_union-right: st_union-right(x) st_prod: st_prod(fst;snd) st_prod-fst: st_prod-fst(x) simple_type_ind_st_prod: simple_type_ind_st_prod_compseq_tag_def st_prod-snd: st_prod-snd(x) st_arrow: st_arrow(domain;range) st_arrow-domain: st_arrow-domain(x) simple_type_ind_st_arrow: simple_type_ind_st_arrow_compseq_tag_def st_arrow-range: st_arrow-range(x) void: Void eq_atom: x =a y eq_atom: eq_atom$n(x;y) simple_type_ind: simple_type_ind st-similar: st-similar(st1;st2) st-subst: st-subst(subst;st) simple_type_ind_st_const: simple_type_ind_st_const_compseq_tag_def st_const-ty: st_const-ty(x) inr: inr x  decision: Decision apply: f a inl: inl x  btrue: tt sq_type: SQType(T) tag-by: zT ldag: LabeledDAG(T) labeled-graph: LabeledGraph(T) record+: record+ record: record(x.T[x]) fset: FSet{T} dataflow: dataflow(A;B) isect2: T1  T2 b-union: A  B bag: bag(T) top: Top fpf-cap: f(x)?z filter: filter(P;l) l_member: (x  l) es-E-interface: E(X) st_const: st_const(ty) subtype: S  T rev_implies: P  Q implies: P  Q iff: P  Q band: p  q lambda: x.A[x] bl-all: (xL.P[x])_b eclass: EClass(A[eo; e]) st-unifies-all: st-unifies-all(U;L) fpf: a:A fp-B[a] tl: tl(l) hd: hd(l) st_const?: st_const?(x) st_arrow?: st_arrow?(x) st_prod?: st_prod?(x) st_union?: st_union?(x) st_list?: st_list?(x) st_class?: st_class?(x) simple_type_ind_st_var: simple_type_ind_st_var_compseq_tag_def st_var-name: st_var-name(x) true: True prop: false: False decide: case b of inl(x) =s[x] | inr(y) =t[y] ifthenelse: if b then t else f fi  st_var?: st_var?(x) bfalse: ff st-unifies: st-unifies(U;st1;st2) guard: {T} strong-subtype: strong-subtype(A;B) le: A  B ge: i  j  not: A less_than: a < b uimplies: b supposing a and: P  Q uiff: uiff(P;Q) subtype_rel: A r B isect: x:A. B[x] uall: [x:A]. B[x] universe: Type rec: rec(x.A[x]) member: t  T list: type List product: x:A  B[x] set: {x:A| B[x]}  assert: b or: P  Q union: left + right all: x:A. B[x] equal: s = t bool: function: x:A  B[x] simple_type: SimpleType atom: Atom exists: x:A. B[x] Auto: Error :Auto,  CollapseTHEN: Error :CollapseTHEN,  MaAuto: Error :MaAuto,  nil: [] pair: <a, b> cons: [car / cdr] Complete: Error :Complete,  Try: Error :Try,  D: Error :D,  CollapseTHENA: Error :CollapseTHENA,  st_var: st_var(name) tactic: Error :tactic,  RepUR: Error :RepUR,  RepeatFor: Error :RepeatFor,  ParallelOp: Error :ParallelOp,  THENM: Error :THENM,  suptype: suptype(S; T) st-vars: st-vars(st) append: as @ bs ExRepD: Error :ExRepD
Lemmas :  st-unifies-all-append append_wf st-subst_wf st-vars_wf st-similar_wf band_ff_simp false_wf assert_wf true_wf st_var?_wf ifthenelse_wf simple_type_wf st_var_wf bool_wf bfalse_wf st-unifies_wf st-unifies-all_wf iff_wf rev_implies_wf band_tt_simp member_wf st_const_wf subtype_rel_wf list-subtype l_member_wf subtype_base_sq bool_subtype_base btrue_wf st_const?_wf st-unifies_inversion band_wf st_arrow_wf st_prod_wf st_union_wf st_list_wf st_class_wf

\mforall{}st1,st2:SimpleType.
    ((\mforall{}U:Atom  {}\mrightarrow{}  SimpleType.  st-unifies(U;st1;st2)  =  ff)
    \mvee{}  (\mexists{}L:(\{st:SimpleType|  \muparrow{}st\_var?(st)\}    \mtimes{}  SimpleType)  List
            \mforall{}U:Atom  {}\mrightarrow{}  SimpleType.  st-unifies(U;st1;st2)  =  st-unifies-all(U;L)))


Date html generated: 2011_08_17-PM-05_00_31
Last ObjectModification: 2011_02_08-AM-00_50_24

Home Index