package elpi
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=424e5a4631f5935a1436093b614917210b00259d16700912488ba4cd148115d1
sha512=fa54ce05101fafe905c6db2e5fa7ad79d714ec3b580add4ff711bad37fc9545a58795f69056d62f6c18d8c87d424acc1992ab7fb667652e980d182d4ed80ba16
doc/elpi.runtime/Elpi_runtime/Discrimination_tree/index.html
Module Elpi_runtime.Discrimination_tree
Source
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