graphs
[T:TYPE]
:
THEORY
BEGIN
IMPORTING
finite_sets@finite
sets[T]
IMPORTING
finite_sets@finite
sets[doubleton[T]]
x:
VAR
T
y:
VAR
T
v:
VAR
T
pregraph
:
TYPE
=
[#
vert:
finite
set[T],
edges:
finite
set[doubleton[T]]
#]
graph
:
TYPE
=
{(g:pregraph)
|
FORALL
(e:doubleton[T])
:
edges(g)(e)
IMPLIES
(FORALL
(x:T)
:
e(x)
IMPLIES
vert(g)(x))}
%%(TCC)
edg_TCC1:
OBLIGATION
edg(x,
(y:{(y:T)
|
y
/=
x}
)):
doubleton[T]
=
dbl[T](x,
y);
%%(TCC)
edge?_TCC1:
OBLIGATION
edge?(G)(x,
y):
bool
=
(x
/=
y)
AND
edges(G)(dbl[T](x,
y));
edge?
comm:
LEMMA
edge?(G)(y,
x)
IMPLIES
edge?(G)(x,
y)
edges
vert:
LEMMA
(e(x)
AND
edges(G)(e))
IMPLIES
(EXISTS
y
:
(x
/=
y)
AND
vert(G)(y)
AND
e(y))
other
vert:
LEMMA
(e(v)
AND
edges(G)(e))
IMPLIES
(EXISTS
(u:T)
:
(u
/=
v)
AND
vert(G)(u)
AND
(e
=
dbl[T](u,
v)))
edge
has
2
verts:
LEMMA
((x
/=
v)
AND
e(x)
AND
e(v))
IMPLIES
(e
=
dbl(x,
v))
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));
empty?
rew:
LEMMA
empty?(G)
=
(card(vert(G))
=
0)
edges
of
empty:
LEMMA
empty?(G)
IMPLIES
(edges(G)
=
emptyset[doubleton[T]])
singleton
edges:
LEMMA
singleton?(G)
IMPLIES
empty?(edges(G))
edge
in
card
gt
1:
LEMMA
edges(G)(e)
IMPLIES
(card(vert(G))
>
1)
not
singleton
2
vert:
LEMMA
((NOT
empty?(G))
AND
(NOT
singleton?(G)))
IMPLIES
(EXISTS
(x:T),
(y:T)
:
(x
/=
y)
AND
vert(G)(x)
AND
vert(G)(y))
infgraph
:
TYPE
=
[#
vert:
set[T],
edges:
set[doubleton[T]]
#]
is
graph((g:infgraph)):
bool
=
is
finite[T](vert(g))
AND
is
finite[doubleton[T]](edges(g))
AND
(FORALL
(e:doubleton[T])
:
edges(g)(e)
IMPLIES
(FORALL
x
:
e(x)
IMPLIES
vert(g)(x)));
%%(TCC)
singleton_graph_TCC1:
OBLIGATION
singleton
graph(v):
graph
=
(#vert
:=
singleton[T](v),
edges
:=
emptyset[doubleton[T]]#);
is
sing:
LEMMA
singleton?(singleton
graph(x))
Graph
:
TYPE
=
{(g:graph)
|
nonempty?(vert(g))}
finite
dbl:
LEMMA
is
finite(dbl[T](x,
y))
finite
doubleton:
LEMMA
is
finite(e)
%%(TCC)
card_dbl_TCC1:
OBLIGATION
card
dbl:
LEMMA
(x
/=
y)
IMPLIES
(card(dbl(x,
y))
=
2)
%%(TCC)
dbl_TCC1:
OBLIGATION
:
JUDGEMENT
dbl(x,
y)
HAS_TYPE
finite
set[T]
END
graphs