Pushing for the first time
This commit is contained in:
parent
89350b9215
commit
e568dfe54b
|
@ -0,0 +1,3 @@
|
|||
module Graph where
|
||||
|
||||
open import Graph.Base public
|
|
@ -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ᵣ = +ᵣ
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue