Module AcyclicGraph.Make
Parameters
Signature
val add : ?rank:int -> Point.t -> t -> t
All points must be pre-declared through this function before they can be mentioned in the others. NB: use a large
rank
to keep the node canonical
exception
Undeclared 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_function
val check_leq : Point.t check_function
val check_lt : Point.t check_function
val enforce_eq : Point.t -> Point.t -> t -> t option
val enforce_leq : Point.t -> Point.t -> t -> t option
val enforce_lt : Point.t -> Point.t -> t -> t option
val get_explanation : (Point.t * constraint_type * Point.t) -> t -> (constraint_type * Point.t) list
Assuming 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 list
val constraints_for : kept:Point.Set.t -> t -> 'a constraint_fold -> 'a -> 'a
val domain : t -> Point.Set.t
val choose : (Point.t -> bool) -> t -> Point.t -> Point.t option
High-level representation
type node
=
|
Alias of Point.t
|
Node of bool Point.Map.t
Nodes v s.t. u < v (true) or u <= v (false)
type repr
= node Point.Map.t