package elpi
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=3186ebbf97d702e3cd5ebfa2aca50d9e93dd939a86c3db827dbde111656e3d5f
sha512=2ffafd7dbcaad4802fc2f076f90df36a1ce33dae1f0fa9226d45654a932a70e0a9f0627bbc703870561ad2d36a86039ad04c74393ccaf369c283eddb488525cf
doc/elpi.runtime/Elpi_runtime/Discrimination_tree/index.html
Module Elpi_runtime.Discrimination_treeSource
This is for:
- lambda-abstractions: DT does not perform HO unification, nor βη-redex unif
- too big terms: if the path of the goal is bigger then the max path in the rules, each term is replaced with this constructor. Note that we do not use mkVariable, since in input mode a variable cannot be unified with non-flex terms. In DT, mkAny is unified with anything
This is for the last term of opened lists.
If the list ends is 1,2|X == Cons (CData'1',Cons(CData'2',Arg (_, _)))
The corresponding path will be: ListHead, Primitive, Primitive, ListTailVariable
ListTailVariable is considered as a variable, and if it appears in a goal in input position, it cannot be unified with non-flex terms
This is used for capped lists.
If the length of the maximal list in the rules of a predicate is N, then any (sub-)list in the goal longer then N encodes the first N elements in the path and the last are replaced with ListTailVariableUnif.
The main difference with ListTailVariable is that DT will unify this symbol to both flex and non-flex terms in the path of rules
This is padding used to fill the array in paths and indicate the retrieve function to stop making unification.
Note that the array for the path has a length which is doubled each time the terms in it are larger then the forseen length. Each time the array is doubled, the new cells are filled with PathEnd.
index dt ~max_list_length path value returns a new discrimination tree starting from dt where value is added wrt its path.
max_list_length is provided and used to update (if needed) the length of the longest list in the received path.
retrive cmp path dt Retrives all values in a discrimination tree dt from a given path p.
The retrival algorithm performs a light unification between p and the nodes in the discrimination tree. This light unification takes care of unification variables that can be either in the path or in the nodes of dt
The returned list is sorted wrt cmp so that rules are given in the expected order