diff options
Diffstat (limited to 'Data/Hypergraph/Base.agda')
-rw-r--r-- | Data/Hypergraph/Base.agda | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Data/Hypergraph/Base.agda b/Data/Hypergraph/Base.agda new file mode 100644 index 0000000..a2157fb --- /dev/null +++ b/Data/Hypergraph/Base.agda @@ -0,0 +1,55 @@ +{-# OPTIONS --without-K --safe #-} + +module Data.Hypergraph.Base where + +open import Data.Castable using (IsCastable) +open import Data.Nat.Base using (ℕ) +open import Data.Fin using (Fin) + +import Data.Vec.Base as VecBase +import Data.Vec.Relation.Binary.Equality.Cast as VecCast +import Relation.Binary.PropositionalEquality as ≡ + +open import Relation.Binary using (Rel; IsDecTotalOrder) +open import Data.Nat.Base using (ℕ) +open import Level using (Level; suc; _⊔_) + +record HypergraphLabel {ℓ : Level} : Set (suc ℓ) where + field + Label : ℕ → Set ℓ + isCastable : IsCastable Label + _[_≈_] : (n : ℕ) → Rel (Label n) ℓ + _[_≤_] : (n : ℕ) → Rel (Label n) ℓ + decTotalOrder : (n : ℕ) → IsDecTotalOrder (n [_≈_]) (n [_≤_]) + open IsCastable isCastable public + +module Edge (HL : HypergraphLabel) where + + open HypergraphLabel HL using (Label; cast) + open VecBase using (Vec) + + record Edge (v : ℕ) : Set where + field + {arity} : ℕ + label : Label arity + ports : Vec (Fin v) arity + + open ≡ using (_≡_) + open VecCast using (_≈[_]_) + + record ≈-Edge {n : ℕ} (E E′ : Edge n) : Set where + module E = Edge E + module E′ = Edge E′ + field + ≡arity : E.arity ≡ E′.arity + ≡label : cast ≡arity E.label ≡ E′.label + ≡ports : E.ports ≈[ ≡arity ] E′.ports + +module HypergraphList (HL : HypergraphLabel) where + + open import Data.List.Base using (List) + open Edge HL using (Edge) + + record Hypergraph (v : ℕ) : Set where + field + edges : List (Edge v) |