Pushing for the first time

This commit is contained in:
zk⁷ 2024-03-11 20:09:54 +02:00
parent 89350b9215
commit e568dfe54b
5 changed files with 416 additions and 0 deletions

3
Graph.agda Normal file
View File

@ -0,0 +1,3 @@
module Graph where
open import Graph.Base public

90
Graph/Base.agda Normal file
View File

@ -0,0 +1,90 @@
module Graph.Base where
infixl 4 _≡_
infixl 4 _≤_
infixl 8 _+_
infixl 9 _⇀_
data Graph (A : Set) : Set where
ε : Graph A
Vertex : A → Graph A
_+_ : Graph A → Graph A → Graph A
_⇀_ : Graph A → Graph A → Graph A
-- vertex axioms
data _∈ᵥ_ { A : Set } : A → Graph A → Set where
x∈Vx : ∀ { x : A } → x ∈ᵥ Vertex x
+ₗ : ∀ { x : A } { G H : Graph A } → x ∈ᵥ G → x ∈ᵥ (G + H)
+ᵣ : ∀ { x : A } { G H : Graph A } → x ∈ᵥ H → x ∈ᵥ (G + H)
⇀ₗ : ∀ { x : A } { G H : Graph A } → x ∈ᵥ G → x ∈ᵥ (G ⇀ H)
⇀ᵣ : ∀ { x : A } { G H : Graph A } → x ∈ᵥ H → x ∈ᵥ (G ⇀ H)
-- edge axioms
data ⟦_,_⟧∈ₑ_ { A : Set } : A → A → Graph A → Set where
+ₗ : ∀ { x y : A } { G H : Graph A } → ⟦ x , y ⟧∈ₑ G → ⟦ x , y ⟧∈ₑ (G + H)
+ᵣ : ∀ { x y : A } { G H : Graph A } → ⟦ x , y ⟧∈ₑ H → ⟦ x , y ⟧∈ₑ (G + H)
⇀ₗ : ∀ { x y : A } { G H : Graph A } → ⟦ x , y ⟧∈ₑ G → ⟦ x , y ⟧∈ₑ (G ⇀ H)
⇀ᵣ : ∀ { x y : A } { G H : Graph A } → ⟦ x , y ⟧∈ₑ H → ⟦ x , y ⟧∈ₑ (G ⇀ H)
⇀ₗᵣ : ∀ { x y : A } { G H : Graph A } → x ∈ᵥ G → y ∈ᵥ H → ⟦ x , y ⟧∈ₑ (G ⇀ H)
-- equality axioms
record _≡_ { A : Set } ( G H : Graph A ) : Set where
field
vₗ : ∀ { x : A } → x ∈ᵥ G → x ∈ᵥ H
vᵣ : ∀ { x : A } → x ∈ᵥ H → x ∈ᵥ G
eₗ : ∀ { x y : A } → ⟦ x , y ⟧∈ₑ G → ⟦ x , y ⟧∈ₑ H
eᵣ : ∀ { x y : A } → ⟦ x , y ⟧∈ₑ H → ⟦ x , y ⟧∈ₑ G
record _≤_ { A : Set} ( G H : Graph A ) : Set where
field
def : G + H ≡ H
refl : ∀ { A : Set } { G : Graph A } → G ≡ G
refl = record
{ vₗ = λ z → z ; vᵣ = λ z → z ; eₗ = λ z → z ; eᵣ = λ z → z }
sym : ∀ { A : Set } { G H : Graph A } → G ≡ H → H ≡ G
sym G≡H = record
{ vₗ = _≡_.vᵣ G≡H
; vᵣ = _≡_.vₗ G≡H
; eₗ = _≡_.eᵣ G≡H
; eᵣ = _≡_.eₗ G≡H
}
trans : ∀ { A : Set } { G H I : Graph A } → G ≡ H → H ≡ I → G ≡ I
trans G≡H H≡I = record
{ vₗ = λ z → _≡_.vₗ H≡I (_≡_.vₗ G≡H z)
; vᵣ = λ z → _≡_.vᵣ G≡H (_≡_.vᵣ H≡I z)
; eₗ = λ z → _≡_.eₗ H≡I (_≡_.eₗ G≡H z)
; eᵣ = λ z → _≡_.eᵣ G≡H (_≡_.eᵣ H≡I z)
}
≡-to-≤ : ∀ { A : Set } { G H : Graph A } → G ≡ H → G ≤ H
≡-to-≤ G≡H = record
{ def = record
{ vₗ = λ { (+ₗ x) → _≡_.vₗ G≡H x ; (+ᵣ x) → x }
; vᵣ = λ z → +ₗ (_≡_.vᵣ G≡H z)
; eₗ = λ { (+ₗ x) → _≡_.eₗ G≡H x ; (+ᵣ x) → x }
; eᵣ = λ z → +ₗ (_≡_.eᵣ G≡H z)
}
}
≤-refl : ∀ { A : Set } { G : Graph A } → G ≤ G
≤-refl = record
{ def = record
{ vₗ = λ { (+ₗ x) → x ; (+ᵣ x) → x }
; vᵣ = +ₗ
; eₗ = λ { (+ₗ x) → x ; (+ᵣ x) → x }
; eᵣ = +ₗ
}
}
≤-trans : ∀ { A : Set } { G H I : Graph A } → G ≤ H → H ≤ I → G ≤ I
≤-trans G≤H H≤I = record
{ def = record
{ vₗ = λ { (+ₗ x) → _≡_.vₗ (_≤_.def H≤I) (+ₗ (_≡_.vₗ (_≤_.def G≤H) (+ₗ x))) ; (+ᵣ x) → x }
; vᵣ = +ᵣ
; eₗ = λ { (+ₗ x) → _≡_.eₗ (_≤_.def H≤I) (+ₗ (_≡_.eₗ (_≤_.def G≤H) (+ₗ x))) ; (+ᵣ x) → x }
; eᵣ = +ᵣ
}
}

61
Graph/Constructors.agda Normal file
View File

@ -0,0 +1,61 @@
open import Graph.Base
open import Graph.Properties
open import Graph.Reasoning
open import Data.List
open import Function
module Graph.Constructors where
edge : {A : Set} → A → A → Graph A
edge x y = (Vertex x) ⇀ (Vertex y)
vertices : {A : Set} → List A → Graph A
vertices = (foldr _+_ ε) ∘ (map Vertex)
clique : {A : Set} → List A → Graph A
clique = (foldr _⇀_ ε) ∘ (map Vertex)
vertices[x]=Vx : { A : Set } → ∀ { x : A } → vertices [ x ] ≡ Vertex x
vertices[x]=Vx {_} {x} = begin
vertices [ x ] ≡⟨⟩
Vertex x + ε ≡⟨ +-identityʳ ⟩
Vertex x ∎
where open ≡-Reasoning
edgexy=clique[x,y] : { A : Set } → ∀ { x y : A } → (edge x y) ≡ (clique (x ∷ (y ∷ [])))
edgexy=clique[x,y] {_} {x} {y} = begin
edge x y ≡⟨⟩
Vertex x ⇀ Vertex y ≡⟨ sym ⇀-identˡ ⟩
(Vertex x ⇀ Vertex y) ⇀ ε ≡⟨ sym ⇀-assoc ⟩
Vertex x ⇀ (Vertex y ⇀ ε) ≡⟨⟩
clique (x ∷ (y ∷ [])) ∎
where open ≡-Reasoning
vertices≤clique : { A : Set } → ∀ ( xs : List A ) → (vertices xs) ≤ (clique xs)
vertices≤clique [] = begin ε ∎
where open ≤-Reasoning
vertices≤clique (x ∷ xs) = begin
vertices (x ∷ xs) ≡⟨⟩
Vertex x + vertices xs ≤⟨ +⇀-order ⟩
Vertex x ⇀ vertices xs ≤⟨ ⇀-congʳ-≤ (vertices≤clique xs) ⟩
Vertex x ⇀ clique xs ≡⟨⟩
clique (x ∷ xs) ∎
where open ≤-Reasoning
clique-++-connect : { A : Set } → ∀ ( xs ys : List A ) → clique (xs ++ ys) ≡ ((clique xs) ⇀ (clique ys))
clique-++-connect [] ys = begin
clique ([] ++ ys) ≡⟨⟩
clique ys ≡⟨ sym ⇀-identʳ ⟩
ε ⇀ clique ys ≡⟨⟩
(clique []) ⇀ (clique ys) ∎
where open ≡-Reasoning
clique-++-connect (x ∷ xs) ys = begin
clique ((x ∷ xs) ++ ys) ≡⟨⟩
clique (x ∷ (xs ++ ys)) ≡⟨⟩
Vertex x ⇀ clique (xs ++ ys) ≡⟨ ⇀-congʳ (clique-++-connect xs ys) ⟩
Vertex x ⇀ (clique xs ⇀ clique ys) ≡⟨ ⇀-assoc ⟩
(Vertex x ⇀ clique xs) ⇀ clique ys ≡⟨⟩
clique (x ∷ xs) ⇀ clique ys ∎
where open ≡-Reasoning

215
Graph/Properties.agda Normal file
View File

@ -0,0 +1,215 @@
open import Graph.Base
open import Graph.Reasoning
module Graph.Properties where
+-sym : ∀ { A : Set } { G H : Graph A } → G + H ≡ H + G
+-sym = record
{ vₗ = λ { (+ₗ x) → +ᵣ x ; (+ᵣ x) → +ₗ x }
; vᵣ = λ { (+ₗ x) → +ᵣ x ; (+ᵣ x) → +ₗ x }
; eₗ = λ { (+ₗ x) → +ᵣ x ; (+ᵣ x) → +ₗ x }
; eᵣ = λ { (+ₗ x) → +ᵣ x ; (+ᵣ x) → +ₗ x }
}
+-assoc : ∀ { A : Set } { G H I : Graph A } → G + (H + I) ≡ (G + H) + I
+-assoc = record
{ vₗ = λ { (+ₗ x) → +ₗ (+ₗ x) ; (+ᵣ (+ₗ x)) → +ₗ (+ᵣ x) ; (+ᵣ (+ᵣ x)) → +ᵣ x }
; vᵣ = λ { (+ₗ (+ₗ x)) → +ₗ x ; (+ₗ (+ᵣ x)) → +ᵣ (+ₗ x) ; (+ᵣ x) → +ᵣ (+ᵣ x) }
; eₗ = λ { (+ₗ x) → +ₗ (+ₗ x) ; (+ᵣ (+ₗ x)) → +ₗ (+ᵣ x) ; (+ᵣ (+ᵣ x)) → +ᵣ x }
; eᵣ = λ { (+ₗ (+ₗ x)) → +ₗ x ; (+ₗ (+ᵣ x)) → +ᵣ (+ₗ x) ; (+ᵣ x) → +ᵣ (+ᵣ x) }
}
+-identityʳ : ∀ { A : Set } { G : Graph A } → G + ε ≡ G
+-identityʳ = record
{ vₗ = λ { (+ₗ x) → x }
; vᵣ = λ x → +ₗ x
; eₗ = λ { (+ₗ x) → x }
; eᵣ = +ₗ
}
+-identityˡ : ∀ { A : Set } { G : Graph A } → ε + G ≡ G
+-identityˡ = record
{ vₗ = λ { (+ᵣ x) → x }
; vᵣ = +ᵣ
; eₗ = λ { (+ᵣ x) → x }
; eᵣ = +ᵣ
}
+-congˡ : ∀ { A : Set } { G H I : Graph A } → G ≡ H → G + I ≡ H + I
+-congˡ G≈H = record
{ vₗ = λ { (+ₗ x) → +ₗ (_≡_.vₗ G≈H x) ; (+ᵣ x) → +ᵣ x }
; vᵣ = λ { (+ₗ x) → +ₗ (_≡_.vᵣ G≈H x) ; (+ᵣ x) → +ᵣ x }
; eₗ = λ { (+ₗ x) → +ₗ (_≡_.eₗ G≈H x) ; (+ᵣ x) → +ᵣ x }
; eᵣ = λ { (+ₗ x) → +ₗ (_≡_.eᵣ G≈H x) ; (+ᵣ x) → +ᵣ x }
}
+-congʳ : ∀ { A : Set } { G H I : Graph A } → H ≡ I → G + H ≡ G + I
+-congʳ {_} {G} {H} {I} H≡I = begin
G + H ≡⟨ +-sym ⟩
H + G ≡⟨ +-congˡ H≡I ⟩
I + G ≡⟨ +-sym ⟩
G + I ∎
where open ≡-Reasoning
⇀-assoc : ∀ { A : Set } { G H I : Graph A } → G ⇀ (H ⇀ I) ≡ (G ⇀ H) ⇀ I
⇀-assoc = record
{ vₗ = λ { (⇀ₗ x) → ⇀ₗ (⇀ₗ x) ; (⇀ᵣ (⇀ₗ x)) → ⇀ₗ (⇀ᵣ x) ; (⇀ᵣ (⇀ᵣ x)) → ⇀ᵣ x }
; vᵣ = λ { (⇀ₗ (⇀ₗ x)) → ⇀ₗ x ; (⇀ₗ (⇀ᵣ x)) → ⇀ᵣ (⇀ₗ x) ; (⇀ᵣ x) → ⇀ᵣ (⇀ᵣ x) }
; eₗ = λ { (⇀ₗ x) → ⇀ₗ (⇀ₗ x) ; (⇀ᵣ (⇀ₗ x)) → ⇀ₗ (⇀ᵣ x) ; (⇀ᵣ (⇀ᵣ x)) → ⇀ᵣ x ; (⇀ᵣ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ (⇀ᵣ x) x₁ ; (⇀ₗᵣ x (⇀ₗ x₁)) → ⇀ₗ (⇀ₗᵣ x x₁) ; (⇀ₗᵣ x (⇀ᵣ x₁)) → ⇀ₗᵣ (⇀ₗ x) x₁ }
; eᵣ = λ { (⇀ₗ (⇀ₗ x)) → ⇀ₗ x ; (⇀ₗ (⇀ᵣ x)) → ⇀ᵣ (⇀ₗ x) ; (⇀ₗ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ x (⇀ₗ x₁) ; (⇀ᵣ x) → ⇀ᵣ (⇀ᵣ x) ; (⇀ₗᵣ (⇀ₗ x) x₁) → ⇀ₗᵣ x (⇀ᵣ x₁) ; (⇀ₗᵣ (⇀ᵣ x) x₁) → ⇀ᵣ (⇀ₗᵣ x x₁) }
}
⇀-identˡ : ∀ { A : Set } { G : Graph A } → G ⇀ ε ≡ G
⇀-identˡ = record
{ vₗ = λ { (⇀ₗ x) → x }
; vᵣ = ⇀ₗ
; eₗ = λ { (⇀ₗ x) → x }
; eᵣ = ⇀ₗ
}
⇀-identʳ : ∀ { A : Set } { G : Graph A } → ε ⇀ G ≡ G
⇀-identʳ = record
{ vₗ = λ { (⇀ᵣ x) → x }
; vᵣ = ⇀ᵣ
; eₗ = λ { (⇀ᵣ x) → x }
; eᵣ = ⇀ᵣ
}
⇀-congˡ : ∀ { A : Set } { G H I : Graph A } → G ≡ H → G ⇀ I ≡ H ⇀ I
⇀-congˡ G≈H = record
{ vₗ = λ { (⇀ₗ x) → ⇀ₗ (_≡_.vₗ G≈H x) ; (⇀ᵣ x) → ⇀ᵣ x }
; vᵣ = λ { (⇀ₗ x) → ⇀ₗ (_≡_.vᵣ G≈H x) ; (⇀ᵣ x) → ⇀ᵣ x }
; eₗ = λ { (⇀ₗ x) → ⇀ₗ (_≡_.eₗ G≈H x) ; (⇀ᵣ x) → ⇀ᵣ x ; (⇀ₗᵣ x x₁) → ⇀ₗᵣ (_≡_.vₗ G≈H x) x₁ }
; eᵣ = λ { (⇀ₗ x) → ⇀ₗ (_≡_.eᵣ G≈H x) ; (⇀ᵣ x) → ⇀ᵣ x ; (⇀ₗᵣ x x₁) → ⇀ₗᵣ (_≡_.vᵣ G≈H x) x₁ }
}
⇀-congʳ : ∀ { A : Set } { G H I : Graph A } → H ≡ I → G ⇀ H ≡ G ⇀ I
⇀-congʳ G≈H = record
{ vₗ = λ { (⇀ₗ x) → ⇀ₗ x ; (⇀ᵣ x) → ⇀ᵣ (_≡_.vₗ G≈H x) }
; vᵣ = λ { (⇀ₗ x) → ⇀ₗ x ; (⇀ᵣ x) → ⇀ᵣ (_≡_.vᵣ G≈H x) }
; eₗ = λ { (⇀ₗ x) → ⇀ₗ x ; (⇀ᵣ x) → ⇀ᵣ (_≡_.eₗ G≈H x) ; (⇀ₗᵣ x x₁) → ⇀ₗᵣ x (_≡_.vₗ G≈H x₁) }
; eᵣ = λ { (⇀ₗ x) → ⇀ₗ x ; (⇀ᵣ x) → ⇀ᵣ (_≡_.eᵣ G≈H x) ; (⇀ₗᵣ x x₁) → ⇀ₗᵣ x (_≡_.vᵣ G≈H x₁) }
}
⇀-congʳ-≤ : ∀ { A : Set } { G H I : Graph A } → H ≤ I → G ⇀ H ≤ G ⇀ I
⇀-congʳ-≤ H≤I = record
{ def = record
{ vₗ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ x ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ (_≡_.vₗ (_≤_.def H≤I) (+ₗ x)) ; (+ᵣ x) → x }
; vᵣ = +ᵣ
; eₗ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ x ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ (_≡_.eₗ (_≤_.def H≤I) (+ₗ x)) ; (+ₗ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ x (_≡_.vₗ (_≤_.def H≤I) (+ₗ x₁)) ; (+ᵣ x) → x }
; eᵣ = +ᵣ
}
}
⇀-distrib-+ : ∀ { A : Set } { G H I : Graph A } → G ⇀ (H + I) ≡ G ⇀ H + G ⇀ I
⇀-distrib-+ = record
{ vₗ = λ { (⇀ₗ x) → +ₗ (⇀ₗ x) ; (⇀ᵣ (+ₗ x)) → +ₗ (⇀ᵣ x) ; (⇀ᵣ (+ᵣ x)) → +ᵣ (⇀ᵣ x) }
; vᵣ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ x ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ (+ₗ x) ; (+ᵣ (⇀ₗ x)) → ⇀ₗ x ; (+ᵣ (⇀ᵣ x)) → ⇀ᵣ (+ᵣ x) }
; eₗ = λ { (⇀ₗ x) → +ₗ (⇀ₗ x) ; (⇀ᵣ (+ₗ x)) → +ₗ (⇀ᵣ x) ; (⇀ᵣ (+ᵣ x)) → +ᵣ (⇀ᵣ x) ; (⇀ₗᵣ x (+ₗ x₁)) → +ₗ (⇀ₗᵣ x x₁) ; (⇀ₗᵣ x (+ᵣ x₁)) → +ᵣ (⇀ₗᵣ x x₁) }
; eᵣ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ x ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ (+ₗ x) ; (+ₗ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ x (+ₗ x₁) ; (+ᵣ (⇀ₗ x)) → ⇀ₗ x ; (+ᵣ (⇀ᵣ x)) → ⇀ᵣ (+ᵣ x) ; (+ᵣ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ x (+ᵣ x₁) }
}
+-distrib-⇀ : ∀ { A : Set } { G H I : Graph A } → (G + H) ⇀ I ≡ G ⇀ I + H ⇀ I
+-distrib-⇀ = record
{ vₗ = λ { (⇀ₗ (+ₗ x)) → +ₗ (⇀ₗ x) ; (⇀ₗ (+ᵣ x)) → +ᵣ (⇀ₗ x) ; (⇀ᵣ x) → +ₗ (⇀ᵣ x) }
; vᵣ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ (+ₗ x) ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ x ; (+ᵣ (⇀ₗ x)) → ⇀ₗ (+ᵣ x) ; (+ᵣ (⇀ᵣ x)) → ⇀ᵣ x }
; eₗ = λ { (⇀ₗ (+ₗ x)) → +ₗ (⇀ₗ x) ; (⇀ₗ (+ᵣ x)) → +ᵣ (⇀ₗ x) ; (⇀ᵣ x) → +ₗ (⇀ᵣ x) ; (⇀ₗᵣ (+ₗ x) x₁) → +ₗ (⇀ₗᵣ x x₁) ; (⇀ₗᵣ (+ᵣ x) x₁) → +ᵣ (⇀ₗᵣ x x₁) }
; eᵣ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ (+ₗ x) ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ x ; (+ₗ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ (+ₗ x) x₁ ; (+ᵣ (⇀ₗ x)) → ⇀ₗ (+ᵣ x) ; (+ᵣ (⇀ᵣ x)) → ⇀ᵣ x ; (+ᵣ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ (+ᵣ x) x₁ }
}
⇀-decomp : ∀ { A : Set } { G H I : Graph A } → G ⇀ (H ⇀ I) ≡ G ⇀ H + (G ⇀ I + H ⇀ I)
⇀-decomp = record
{ vₗ = λ { (⇀ₗ x) → +ₗ (⇀ₗ x) ; (⇀ᵣ x) → +ᵣ (+ᵣ x) }
; vᵣ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ x ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ (⇀ₗ x) ; (+ᵣ (+ₗ (⇀ₗ x))) → ⇀ₗ x ; (+ᵣ (+ₗ (⇀ᵣ x))) → ⇀ᵣ (⇀ᵣ x) ; (+ᵣ (+ᵣ x)) → ⇀ᵣ x }
; eₗ = λ { (⇀ₗ x) → +ₗ (⇀ₗ x) ; (⇀ᵣ x) → +ᵣ (+ᵣ x) ; (⇀ₗᵣ x (⇀ₗ x₁)) → +ₗ (⇀ₗᵣ x x₁) ; (⇀ₗᵣ x (⇀ᵣ x₁)) → +ᵣ (+ₗ (⇀ₗᵣ x x₁)) }
; eᵣ = λ { (+ₗ (⇀ₗ x)) → ⇀ₗ x ; (+ₗ (⇀ᵣ x)) → ⇀ᵣ (⇀ₗ x) ; (+ₗ (⇀ₗᵣ x x₁)) → ⇀ₗᵣ x (⇀ₗ x₁) ; (+ᵣ (+ₗ (⇀ₗ x))) → ⇀ₗ x ; (+ᵣ (+ₗ (⇀ᵣ x))) → ⇀ᵣ (⇀ᵣ x) ; (+ᵣ (+ₗ (⇀ₗᵣ x x₁))) → ⇀ₗᵣ x (⇀ᵣ x₁) ; (+ᵣ (+ᵣ x)) → ⇀ᵣ x }
}
+-idem : ∀ { A : Set } { G : Graph A } → G + G ≡ G
+-idem {_} {G} = begin
G + G ≡⟨ sym ⇀-identˡ ⟩
(G + G) ⇀ ε ≡⟨ +-distrib-⇀ ⟩
(G ⇀ ε) + (G ⇀ ε) ≡⟨ sym +-identityʳ ⟩
((G ⇀ ε) + (G ⇀ ε)) + ε ≡⟨ sym (+-congʳ ⇀-identˡ) ⟩
((G ⇀ ε) + (G ⇀ ε)) + (ε ⇀ ε) ≡⟨ sym +-assoc ⟩
(G ⇀ ε) + ((G ⇀ ε) + (ε ⇀ ε)) ≡⟨ sym ⇀-decomp ⟩
G ⇀ (ε ⇀ ε) ≡⟨ ⇀-assoc ⟩
(G ⇀ ε) ⇀ ε ≡⟨ ⇀-identˡ ⟩
G ⇀ ε ≡⟨ ⇀-identˡ ⟩
G ∎
where open ≡-Reasoning
+-absorp : ∀ { A : Set } { G H : Graph A } → G ⇀ H + G + H ≡ G ⇀ H
+-absorp {_} {G} {H} = begin
G ⇀ H + G + H ≡⟨ +-congˡ (+-congʳ (sym ⇀-identˡ)) ⟩
G ⇀ H + G ⇀ ε + H ≡⟨ +-congʳ (sym ⇀-identˡ) ⟩
G ⇀ H + G ⇀ ε + H ⇀ ε ≡⟨ sym +-assoc ⟩
G ⇀ H + (G ⇀ ε + H ⇀ ε) ≡⟨ sym ⇀-decomp ⟩
G ⇀ (H ⇀ ε) ≡⟨ ⇀-congʳ ⇀-identˡ ⟩
G ⇀ H ∎
where open ≡-Reasoning
⇀-sat : ∀ { A : Set } { G : Graph A } → G ⇀ G ⇀ G ≡ G ⇀ G
⇀-sat {_} {G} = begin
G ⇀ G ⇀ G ≡⟨ sym ⇀-assoc ⟩
G ⇀ (G ⇀ G) ≡⟨ ⇀-decomp ⟩
G ⇀ G + (G ⇀ G + G ⇀ G) ≡⟨ +-congʳ +-idem ⟩
G ⇀ G + G ⇀ G ≡⟨ +-idem ⟩
G ⇀ G ∎
where open ≡-Reasoning
≡→≤ : ∀ { A : Set } { G H : Graph A } → G ≡ H → G ≤ H
≡→≤ {_} {G} {H} G≡H = begin
G ≡⟨ G≡H ⟩
H ∎
where open ≤-Reasoning
≲-least : ∀ { A : Set } { G : Graph A } → ε ≤ G
≲-least {_} {G} = record { def = begin
ε + G ≡⟨ +-identityˡ ⟩
G ∎}
where open ≡-Reasoning
+-order : ∀ { A : Set } { G H : Graph A } → G ≤ G + H
+-order {_} {G} {H} = record { def = begin
G + (G + H) ≡⟨ +-assoc ⟩
G + G + H ≡⟨ +-congˡ +-idem ⟩
G + H ∎}
where open ≡-Reasoning
+⇀-order : ∀ { A : Set } { G H : Graph A } → G + H ≤ G ⇀ H
+⇀-order {_} {G} {H} = record { def = begin
G + H + G ⇀ H ≡⟨ +-congˡ +-sym ⟩
H + G + G ⇀ H ≡⟨ +-sym ⟩
G ⇀ H + (H + G) ≡⟨ +-congʳ +-sym ⟩
G ⇀ H + (G + H) ≡⟨ +-assoc ⟩
G ⇀ H + G + H ≡⟨ +-absorp ⟩
G ⇀ H ∎}
where open ≡-Reasoning
+-mono : ∀ { A : Set } { G H I : Graph A } → G ≤ H → G + I ≤ H + I
+-mono {_} {G} {H} {I} G≤H = record { def = begin
G + I + (H + I) ≡⟨ +-congˡ +-sym ⟩
I + G + (H + I) ≡⟨ +-assoc ⟩
I + G + H + I ≡⟨ +-congˡ (sym +-assoc) ⟩
I + (G + H) + I ≡⟨ +-congˡ (+-congʳ (_≤_.def G≤H)) ⟩
I + H + I ≡⟨ +-congˡ +-sym ⟩
H + I + I ≡⟨ sym +-assoc ⟩
H + (I + I) ≡⟨ +-congʳ +-idem ⟩
H + I ∎}
where open ≡-Reasoning
⇀-monoˡ : ∀ { A : Set } { G H I : Graph A } → G ≤ H → G ⇀ I ≤ H ⇀ I
⇀-monoˡ {_} {G} {H} {I} G≤H = record { def = begin
G ⇀ I + H ⇀ I ≡⟨ sym +-distrib-⇀ ⟩
(G + H) ⇀ I ≡⟨ ⇀-congˡ (_≤_.def G≤H) ⟩
H ⇀ I ∎}
where open ≡-Reasoning
⇀-monoʳ : ∀ { A : Set } { G H I : Graph A } → G ≤ H → I ⇀ G ≤ I ⇀ H
⇀-monoʳ {_} {G} {H} {I} G≤H = record { def = begin
I ⇀ G + I ⇀ H ≡⟨ sym ⇀-distrib-+ ⟩
I ⇀ (G + H) ≡⟨ ⇀-congʳ (_≤_.def G≤H) ⟩
I ⇀ H ∎}
where open ≡-Reasoning

47
Graph/Reasoning.agda Normal file
View File

@ -0,0 +1,47 @@
open import Graph.Base
module Graph.Reasoning where
module ≡-Reasoning where
infix 1 begin_
infixr 2 _≡⟨⟩_ _≡⟨_⟩_
infix 3 _∎
begin_ : ∀ { A : Set } { G H : Graph A } → G ≡ H → G ≡ H
begin G≡H = G≡H
_≡⟨⟩_ : ∀ { A : Set } (G : Graph A) { H : Graph A } → G ≡ H → G ≡ H
G ≡⟨⟩ G≡H = G≡H
_≡⟨_⟩_ : ∀ { A : Set } (G : Graph A) { H I : Graph A } → G ≡ H → H ≡ I → G ≡ I
G ≡⟨ G≡H ⟩ H≡I = trans G≡H H≡I
_∎ : ∀ { A : Set } (G : Graph A) → G ≡ G
G ∎ = refl
module ≤-Reasoning where
infix 1 begin_
infixr 2 _≡⟨⟩_ _≡⟨_⟩_ _≤⟨⟩_ _≤⟨_⟩_
infix 3 _∎
begin_ : ∀ { A : Set } { G H : Graph A } → G ≤ H → G ≤ H
begin G≤H = G≤H
_≡⟨⟩_ : ∀ { A : Set } (G : Graph A) { H : Graph A } → G ≤ H → G ≤ H
G ≡⟨⟩ G≤H = G≤H
_≡⟨_⟩_ : ∀ { A : Set } (G : Graph A) { H I : Graph A } → G ≡ H → H ≤ I → G ≤ I
G ≡⟨ G≡H ⟩ H≤I = ≤-trans (≡-to-≤ G≡H) H≤I
_≤⟨⟩_ : ∀ { A : Set } (G : Graph A) { H : Graph A } → G ≤ H → G ≤ H
G ≤⟨⟩ G≤H = G≤H
_≤⟨_⟩_ : ∀ { A : Set } (G : Graph A) { H I : Graph A } → G ≤ H → H ≤ I → G ≤ I
G ≤⟨ G≤H ⟩ H≤I = ≤-trans G≤H H≤I
_∎ : ∀ { A : Set } (G : Graph A) → G ≤ G
G ∎ = ≤-refl