aboutsummaryrefslogtreecommitdiff
path: root/Data/Hypergraph/Setoid.agda
blob: d9cc024269ee32773f4938adf43cd3fa21be7c5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{-# OPTIONS --without-K --safe #-}

open import Level using (Level; _⊔_)
open import Data.Hypergraph.Label using (HypergraphLabel)

module Data.Hypergraph.Setoid {c  : Level} (HL : HypergraphLabel) where

import Data.List.Relation.Binary.Permutation.Propositional as List-↭

open import Data.Hypergraph.Edge HL using (module Sort)
open import Data.Hypergraph.Base {c} HL using (Hypergraph; normalize)
open import Data.Nat using ()
open import Relation.Binary using (Setoid)
open import Relation.Binary.PropositionalEquality as  using (_≡_)

-- an equivalence relation on hypergraphs
record _≈_ {v : } (H H′ : Hypergraph v) : Set (c  ) where

  constructor mk≈

  module H = Hypergraph H
  module H = Hypergraph H′

  field
    ≡-normalized : normalize H  normalize H′

  open Hypergraph using (edges)

  ≡-edges : edges (normalize H)  edges (normalize H′)
  ≡-edges = ≡.cong edges ≡-normalized

  open List-↭ using (_↭_; ↭-reflexive; ↭-sym; ↭-trans)
  open Sort using (sort-↭)

  ↭-edges : H.edges  H′.edges
  ↭-edges = ↭-trans (↭-sym (sort-↭ H.edges)) (↭-trans (↭-reflexive ≡-edges) (sort-↭ H′.edges))

infixr 4 _≈_

≈-refl : {v : } {H : Hypergraph v}  H  H
≈-refl = mk≈ ≡.refl

≈-sym : {v : } {H H′ : Hypergraph v}  H  H′  H′  H
≈-sym (mk≈ ≡n) = mk≈ (≡.sym ≡n)

≈-trans : {v : } {H H′ H″ : Hypergraph v}  H  H′  H′  H″  H  H″
≈-trans (mk≈ ≡n₁) (mk≈ ≡n₂) = mk≈ (≡.trans ≡n₁ ≡n₂)

-- The setoid of labeled hypergraphs with v nodes
Hypergraphₛ :   Setoid c (c  )
Hypergraphₛ v = record
    { Carrier = Hypergraph v
    ; _≈_ = _≈_
    ; isEquivalence = record
        { refl = ≈-refl
        ; sym = ≈-sym
        ; trans = ≈-trans
        }
    }