Matching with a RefinedDiscrTree #
This file defines the matching procedure for the RefinedDiscrTree
.
The main definitions are
- The structure
MatchResult
, which contains the match results, ordered by matching score. - The (private) function
evalNode
which evaluates a node of theRefinedDiscrTree
- The (private) function
getMatchLoop
, which is the main function that computes the matches. It implements the non-deterministic computation by keeping a stack ofPartialMatch
es, and repeatedly processing the most recent one. - The matching function
getMatch
that also returns an updatedRefinedDiscrTree
To find the matches, we first encode the expression as a List Key
. Then using this,
we find all matches with the tree. When unify == true
, we also allow metavariables in the target
expression to be assigned.
We use a simple unification algorithm. For all star/metavariable patterns in the
RefinedDiscrTree
(and in the target if unify == true
), we store the assignment,
and when it is attempted to be assigned again, we check that it is the same assignment.
A match result contains the results from matching a term against patterns in the discrimination tree.
- elts : Std.TreeMap Nat (Array (Array α)) compare
The elements in the match result.
The
Nat
in the tree map represents thescore
of the results. The elements are arrays of arrays, where each sub-array corresponds to one discr tree pattern.
Instances For
Convert a MatchResult
into a Array
, with better matches at the start of the array.
Equations
Instances For
Find values that match e
in d
.
- If
unify == true
then metavarables ine
can be assigned. - If
matchRootStar == true
then we allow metavariables at the root to unify. Set this tofalse
in order to avoid too many results.
Equations
- One or more equations did not get rendered due to their size.