Lines Matching defs:unifier
2233 /* Try and extend "unifier" with a unifier for "kind1" and "kind2".
2234 * Return the resulting unifier if successful.
2237 * First apply "unifier" to "kind1" and "kind2".
2238 * Then compute a unifier for the resulting tuple kinds and
2239 * combine it with "unifier".
2242 const TupleKindPtr &kind2, const Substitution &unifier)
2244 auto k1 = apply(kind1, unifier);
2245 auto k2 = apply(kind2, unifier);
2249 return compose(unifier, u);
2252 /* Try and compute a unifier of "kind1" and "kind2",
2256 * Return this unifier if it was found.
2257 * Return an empty substitution if no unifier can be found.
2259 * First compute a unifier for the left parts of the pairs and,
2260 * if successful, combine it with a unifier for the right parts.
2271 /* Try and compute a unifier of "kind1" and "kind2",
2274 * Return this unifier if it was found.
2275 * Return an empty substitution if no unifier can be found.
2280 * Otherwise, let compute_pair_unifier compute a unifier.
2282 * Note that an assignment is added to the unifier even
2303 /* Try and compute a unifier of "kind1" and "kind2",
2306 * Return this unifier if it was found.
2307 * Return an empty substitution if no unifier can be found.
2309 * Start with an empty substitution and compute a unifier for
2311 * If no combined unifier can be found or
2319 Substitution unifier;
2325 unifier = combine_unifiers(kind1[i], kind2[i], unifier);
2327 return unifier;
2337 * try and compute a unifier.
2338 * If this succeeds, then return the result of applying the unifier.
2347 auto unifier = compute_unifier(general, renamed);
2349 if (unifier.size() == 0)
2352 return { true, general.apply(unifier) };