Module AcyclicGraph.Make
Parameters
Signature
val add : ?rank:int -> Point.t -> t -> tAll points must be pre-declared through this function before they can be mentioned in the others. NB: use a large
rankto keep the node canonical
exceptionUndeclared of Point.t
val check_declared : t -> Point.Set.t -> unit- raises Undeclared
if one of the points is not present in the graph.
type 'a check_function= t -> 'a -> 'a -> bool
val check_eq : Point.t check_functionval check_leq : Point.t check_functionval check_lt : Point.t check_functionval enforce_eq : Point.t -> Point.t -> t -> t optionval enforce_leq : Point.t -> Point.t -> t -> t optionval enforce_lt : Point.t -> Point.t -> t -> t optionval get_explanation : (Point.t * constraint_type * Point.t) -> t -> (constraint_type * Point.t) listAssuming that the corresponding call to
enforce_*returnedNone, this will give a trace for the failure.
type 'a constraint_fold= (Point.t * constraint_type * Point.t) -> 'a -> 'a
val constraints_of : t -> 'a constraint_fold -> 'a -> 'a * Point.Set.t listval constraints_for : kept:Point.Set.t -> t -> 'a constraint_fold -> 'a -> 'aval domain : t -> Point.Set.tval choose : (Point.t -> bool) -> t -> Point.t -> Point.t option
High-level representation
type node=|Alias of Point.t|Node of bool Point.Map.tNodes v s.t. u < v (true) or u <= v (false)
type repr= node Point.Map.t