anchor.diff:             where t matches t' 
                 if t head matches t'
                 or t full matches t'
  -            
  - *)
  +*)
  +
   type match_result = 
     | MisMatch
     | HeadMatch
  
positive.code:             begin match fst hd1, fst hd2 with 
                  | Inl a, Inl b -> 
                    let prob = KProb <| mk_problem orig (Util.subst_kind subst b.sort) (p_rel orig) a.sort None prefix "Formal type parameter" in
                    aux (prob::subprobs) (prefix@[hd1]) (subst_binder hd1 hd2 subst) tl1 tl2
  
                  | Inr x, Inr y ->
                    let prob = TProb <| mk_problem orig (Util.subst_typ subst y.sort) (p_rel orig) x.sort None prefix "Formal value parameter" in
                    aux (prob::subprobs) (prefix@[hd1]) (subst_binder hd1 hd2 subst) tl1 tl2
  
                  | _ -> giveup env "non-corresponding binders" orig
              end
  
negative.code:   | NonTrivial of formula
  
  type guard_t = {
    guard_f: guard_formula;
    carry:   probs;
    slack:   list<typ>;
  }
  
  (* Instantiation of unification variables *)
  