https://github.com/snowleopard/alga-paper
A minimalistic, elegant and powerful approach to working with graphs in a functional programming language
https://github.com/snowleopard/alga-paper
algebra graph haskell
Last synced: 11 months ago
JSON representation
A minimalistic, elegant and powerful approach to working with graphs in a functional programming language
- Host: GitHub
- URL: https://github.com/snowleopard/alga-paper
- Owner: snowleopard
- Created: 2017-02-12T20:46:48.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2021-09-20T19:36:34.000Z (almost 5 years ago)
- Last Synced: 2025-03-16T06:26:13.897Z (over 1 year ago)
- Topics: algebra, graph, haskell
- Language: TeX
- Homepage:
- Size: 311 KB
- Stars: 196
- Watchers: 9
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Algebraic Graphs with Class
The paper is freely available in the ACM Digital Library: https://dl.acm.org/authorize?N46678.
Alternatively, you can download the preprint from https://github.com/snowleopard/alga-paper/releases.
Talks:
* Haskell eXchange 2017 (longer and more recent):
[slides](https://github.com/snowleopard/alga-paper/releases/download/final/algebraic-graphs-haskellx.pdf),
[video](https://skillsmatter.com/skillscasts/10635-algebraic-graphs).
* Haskell Symposium 2017: [slides](https://github.com/snowleopard/alga-paper/releases/download/final/algebraic-graphs-slides.pdf),
[video](https://www.youtube.com/watch?v=EdQGLewU-8k).
## Abstract
The paper presents a minimalistic and elegant approach to working
with graphs in Haskell. It is built on a rigorous
mathematical foundation --- an algebra of graphs --- that allows us to apply
equational reasoning for proving the correctness of graph transformation
algorithms. Algebraic graphs let us avoid partial functions typically
caused by 'malformed graphs' that contain an edge referring to
a non-existent vertex. This helps to liberate APIs of existing graph libraries
from partial functions.
The algebra of graphs can represent directed, undirected, reflexive
and transitive graphs, as well as hypergraphs, by appropriately choosing
the set of underlying axioms. The flexibility of the approach is
demonstrated by developing a library for constructing
and transforming polymorphic graphs.
## Implementation
See https://github.com/snowleopard/alga for the source code and links to blog posts.
There are also draft implementations in Scala and Agda, see https://github.com/algebraic-graphs.