digraphs[T: TYPE]: THEORY %------------------------------------------------------------------------------- % % Defines: % % digraph[T] -- digraph over domain T % vert(G) -- vertices of digraph G % edges(G) -- set of edges in a digraph G % % Authors: % % Ricky W. Butler, Kristin Y. Rozier NASA Langley % Jon Sjogren AFOSR % % Version 1.0 Last modified 07/15/04 % % Maintained by: % % Rick Butler NASA Langley Research Center % R.W.Butler@larc.nasa.gov % % NOTE: % %------------------------------------------------------------------------------- BEGIN
edge(G) : TYPE = (edge?(G))
vert(G) : TYPE = (vert?(G))
edges_vert : LEMMAin?(x,e) AND edges(G)(e) IMPLIES
(EXISTS y: vert(G)(y) ANDin?(y,e))
other_vert : LEMMAin?(v,e) AND edges(G)(e) IMPLIES (EXISTS (u: T): vert(G)(u) AND
e = (u, v) OR e = (v,u))
edges_to_pair : LEMMA edges(G)(e) IMPLIES
(EXISTS x,y: edges(G)(x,y) AND vert(G)(x) AND vert(G)(y) AND x = proj_1(e) AND y = proj_2(e))
% -------------- size of digraphs --------------------
size(G): nat = card[T](vert(G))
empty?(G): bool = empty?(vert(G))
singleton?(G): bool = (size(G) = 1)
isolated?(G): bool = empty?(edges(G))
bidirected?(G)(x,y): bool = edges(G)(x,y) AND edges(G)(y,x)
%A complete digraph differs from a complete graph in that each edge must be %bidirected.
complete?(G): bool = FORALL (x:T | (vert(G)(x)), y:T | (vert(G)(y) AND x /= y)):
edges(G)(x,y) OR edges(G)(y,x)
digraph_complete?(G): bool = FORALL (x:T | (vert(G)(x)), y:T | (vert(G)(y) AND x /= y)):
bidirected?(G)(x,y)
complete_digraph: TYPE = {g: digraph | complete?(g)}
%An oriented graph has no bidirected edges:
oriented?(G): bool = FORALL (x:T | (vert(G)(x)), y:T | (vert(G)(y) AND x/=y)): NOT bidirected?(G)(x,y)
oriented_digraph: TYPE = {g: digraph | oriented?(g)}
tournament?(G): bool = complete?(G) AND oriented?(G)