We use Agda to formalise the theory of algebraic graphs and prove a few key theorems.
This repository is fully self-contained and does not depend on any Agda libraries. We use
this Travis build script for continuous
verification of the proofs. To verify whether your implementation is correct,
you can invoke the verify.sh
script.
Below we describe the purpose of all source files contained in the src
directory.
-
Inside the
Algebra
folder, we define the following structures:Dioid
, a semiring (or rng) where the+
operation is idempotent.Bool
, an implementation of a dioid.ShortestDistance
, another instance.Graph
, an algebraic graphs.LabelledGraph
, an extension of aGraph
.
for each of these there are three files:
Structure.agda
, the main implementation.Structure/Reasoning.agda
, syntactic sugar for writing equational proofs.Structure/Theorems.agda
, some theorems of the structure.
-
Prelude
defines products, lists and other functionality for describing Haskell APIs. -
API
defines key functions from the API of the algebraic-graphs library. -
API/Theorems
proves theorems of the API.