;; 17-Apr-97 by EHN


;; If A and B are symbols, they must be equal.

A: A
B: A
UNIFY: A

A: A
B: B
UNIFY: *FAIL*

;; If a disjunction of symbols vs. a symbol, return
;; that symbol if matches a disjunct

A: (*OR* A B)
B: A
UNIFY: A

A: (*OR* A B)
B: B
UNIFY: B

A: (*OR* A B)
B: C
UNIFY: *FAIL*

;; If A and B are disjunctions, then return the
;; intersection of disjuncts, or fail if null intersection.

A: (*OR* A B)
B: (*OR* B C)
UNIFY: B

;; OR vs. MULTIPLE -- fail unless MULTIPLE
;; matches one of the disjuncts.

A: (*OR* A B)
B: (*MULTIPLE* B C)
UNIFY: *FAIL*

;; MULTIPLE vs. MULTIPLE -- fail unless an exact
;; match.

A: (*MULTIPLE* A B)
B: (*MULTIPLE* B C)
UNIFY: *FAIL*

A: (*MULTIPLE* (*OR* A B) C)
B: (*MULTIPLE* B C)
UNIFY: *FAIL*

;; SIMPLE_FS vs. SIMPLE_FS -- fail unless shared
;; features unify; return unification of shared
;; features, union with features that are distinct.

A: ((A B))
B: ((B C))
UNIFY: ((A B) (B C))

A: ((A (*OR* Y Z)))
B: ((B C) (A Y))
UNIFY: ((A Y) (B C))

A: ((A (*MULTIPLE* Y Z)))
B: ((B C) (A Y))
UNIFY: *FAIL*

;; Whoah, what's going on here? Counter-intuitive results...

A: ((A (*MULTIPLE* Y Z)))
B: ((B C) (A (*MULTIPLE* Z Y))) ;; seems like MULTIPLE is order-dependent
UNIFY: *FAIL*

A: ((A (*MULTIPLE* Y Z)))
B: ((B C) (A (*MULTIPLE* Y Z))) ;; seems like MULTIPLE doesn't work inside fs
UNIFY: *FAIL*

A: ((A (*MULTIPLE* Y Z)))
B: ((A (*MULTIPLE* Y Z))) ;; ditto
UNIFY: *FAIL*

A: ((A (*OR* Y Z)))
B: ((A (*OR* Y Z)))
UNIFY: ((A (*OR* Z Y))) ;; why is order of disjuncts reversed in result?

