liquid-fixpoint-0.1.0.0: external/ocamlgraph/src/cliquetree.mli
(**************************************************************************)
(* *)
(* Ocamlgraph: a generic graph library for OCaml *)
(* Copyright (C) 2004-2007 *)
(* Sylvain Conchon, Jean-Christophe Filliatre and Julien Signoles *)
(* *)
(* This software is free software; you can redistribute it and/or *)
(* modify it under the terms of the GNU Library General Public *)
(* License version 2, with the special exception on linking *)
(* described in file LICENSE. *)
(* *)
(* This software is distributed in the hope that it will be useful, *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *)
(* *)
(**************************************************************************)
(**
Construction of the clique tree of a graph and recognition
of chordal graphs.
Based on the article:
Chordal graphs and their clique graph
by P. Galinier, M. Habib and C. Paul.
@author Matthieu Sozeau
*)
(*i $Id: cliquetree.mli,v 1.4 2004-10-19 15:22:47 signoles Exp $ i*)
module CliqueTree(G : Sig.G) : sig
(** Original graph vertex *)
module CliqueV :
sig
type t
val compare : t -> t -> int
val hash : t -> int
val equal : t -> t -> bool
val label : t -> t
val create : G.V.t -> t
val vertex : t -> G.V.t
end
(** Set of original vertices *)
module CVS : Set.S with type elt = CliqueV.t
(** Clique tree vertex type *)
module CliqueTreeV : sig
(** Trace of the algorithm as a list of markers Clique vertices *)
type data = CliqueV.t list * CVS.t
type label
type t
val compare : t -> t -> int
val hash : t -> int
val equal : t -> t -> bool
val create : data -> label -> t
val label : t -> label
val data : t -> data
end
module CliqueTreeE : sig
type t = int * CVS.t
val compare : t -> t -> int
val default : t
val create : int -> CVS.t -> t
(** Vertices in the clique tree edge
(intersection of the two clique extremities). *)
val vertices : t -> CVS.t
end
(** The clique tree graph type *)
module CliqueTree : Sig.G with type V.t = CliqueTreeV.t
and type E.label = CliqueTreeE.t
(** [mcs_clique g] return an perfect elimination order of [g]
(if it is chordal), the clique tree of [g] and its root. *)
val mcs_clique : G.t -> G.V.t list * CliqueTree.t * CliqueTree.V.t
(** [is_chordal g] uses the clique tree construction to test if a graph is
chordal or not. *)
val is_chordal : G.t -> bool
(** [maxwidth g tri tree] returns the maxwidth characteristic of the
triangulation [tri] of graph [g] given the clique tree [tree] of [tri]. *)
val maxwidth : G.t -> G.t -> CliqueTree.t -> int
end