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