# Morphisms of directed graphs
```agda
module graph-theory.morphisms-directed-graphs where
```
<details><summary>Imports</summary>
```agda
open import foundation.binary-transport
open import foundation.dependent-pair-types
open import foundation.equality-dependent-function-types
open import foundation.equivalences
open import foundation.function-types
open import foundation.functoriality-dependent-pair-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.homotopies
open import foundation.homotopy-induction
open import foundation.identity-types
open import foundation.structure-identity-principle
open import foundation.torsorial-type-families
open import foundation.universe-levels
open import graph-theory.directed-graphs
```
</details>
## Idea
A **morphism of directed graphs** from `G` to `H` consists of a map `f` from the
vertices of `G` to the vertices of `H`, and a family of maps from the edges
`E_G x y` in `G` to the edges `E_H (f x) (f y)` in `H`.
## Definitions
### Morphisms of directed graphs
```agda
module _
{l1 l2 l3 l4 : Level}
(G : Directed-Graph l1 l2) (H : Directed-Graph l3 l4)
where
hom-Directed-Graph : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
hom-Directed-Graph =
Σ ( vertex-Directed-Graph G → vertex-Directed-Graph H)
( λ α →
(x y : vertex-Directed-Graph G) →
edge-Directed-Graph G x y → edge-Directed-Graph H (α x) (α y))
module _
(f : hom-Directed-Graph)
where
vertex-hom-Directed-Graph :
vertex-Directed-Graph G → vertex-Directed-Graph H
vertex-hom-Directed-Graph = pr1 f
edge-hom-Directed-Graph :
{x y : vertex-Directed-Graph G} (e : edge-Directed-Graph G x y) →
edge-Directed-Graph H
( vertex-hom-Directed-Graph x)
( vertex-hom-Directed-Graph y)
edge-hom-Directed-Graph {x} {y} e = pr2 f x y e
direct-predecessor-hom-Directed-Graph :
(x : vertex-Directed-Graph G) →
direct-predecessor-Directed-Graph G x →
direct-predecessor-Directed-Graph H (vertex-hom-Directed-Graph x)
direct-predecessor-hom-Directed-Graph x =
map-Σ
( λ y → edge-Directed-Graph H y (vertex-hom-Directed-Graph x))
( vertex-hom-Directed-Graph)
( λ y → edge-hom-Directed-Graph)
direct-successor-hom-Directed-Graph :
(x : vertex-Directed-Graph G) →
direct-successor-Directed-Graph G x →
direct-successor-Directed-Graph H (vertex-hom-Directed-Graph x)
direct-successor-hom-Directed-Graph x =
map-Σ
( edge-Directed-Graph H (vertex-hom-Directed-Graph x))
( vertex-hom-Directed-Graph)
( λ y → edge-hom-Directed-Graph)
```
### Composition of morphisms graphs
```agda
module _
{l1 l2 l3 l4 l5 l6 : Level}
(G : Directed-Graph l1 l2) (H : Directed-Graph l3 l4)
(K : Directed-Graph l5 l6)
where
vertex-comp-hom-Directed-Graph :
hom-Directed-Graph H K → hom-Directed-Graph G H →
vertex-Directed-Graph G → vertex-Directed-Graph K
vertex-comp-hom-Directed-Graph g f =
(vertex-hom-Directed-Graph H K g) ∘ (vertex-hom-Directed-Graph G H f)
edge-comp-hom-Directed-Graph :
(g : hom-Directed-Graph H K) (f : hom-Directed-Graph G H)
(x y : vertex-Directed-Graph G) →
edge-Directed-Graph G x y →
edge-Directed-Graph K
( vertex-comp-hom-Directed-Graph g f x)
( vertex-comp-hom-Directed-Graph g f y)
edge-comp-hom-Directed-Graph g f x y e =
edge-hom-Directed-Graph H K g (edge-hom-Directed-Graph G H f e)
comp-hom-Directed-Graph :
hom-Directed-Graph H K → hom-Directed-Graph G H →
hom-Directed-Graph G K
pr1 (comp-hom-Directed-Graph g f) = vertex-comp-hom-Directed-Graph g f
pr2 (comp-hom-Directed-Graph g f) = edge-comp-hom-Directed-Graph g f
```
### Identity morphisms graphs
```agda
module _
{l1 l2 : Level} (G : Directed-Graph l1 l2)
where
id-hom-Directed-Graph : hom-Directed-Graph G G
pr1 id-hom-Directed-Graph = id
pr2 id-hom-Directed-Graph _ _ = id
```
## Properties
### Characterizing the identity type of morphisms graphs
```agda
module _
{l1 l2 l3 l4 : Level} (G : Directed-Graph l1 l2) (H : Directed-Graph l3 l4)
where
htpy-hom-Directed-Graph :
(f g : hom-Directed-Graph G H) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
htpy-hom-Directed-Graph f g =
Σ ( vertex-hom-Directed-Graph G H f ~ vertex-hom-Directed-Graph G H g)
( λ α →
( x y : vertex-Directed-Graph G) (e : edge-Directed-Graph G x y) →
binary-tr
( edge-Directed-Graph H)
( α x)
( α y)
( edge-hom-Directed-Graph G H f e) =
edge-hom-Directed-Graph G H g e)
module _
(f g : hom-Directed-Graph G H) (α : htpy-hom-Directed-Graph f g)
where
vertex-htpy-hom-Directed-Graph :
vertex-hom-Directed-Graph G H f ~ vertex-hom-Directed-Graph G H g
vertex-htpy-hom-Directed-Graph = pr1 α
edge-htpy-hom-Directed-Graph :
(x y : vertex-Directed-Graph G) (e : edge-Directed-Graph G x y) →
binary-tr
( edge-Directed-Graph H)
( vertex-htpy-hom-Directed-Graph x)
( vertex-htpy-hom-Directed-Graph y)
( edge-hom-Directed-Graph G H f e) =
edge-hom-Directed-Graph G H g e
edge-htpy-hom-Directed-Graph = pr2 α
refl-htpy-hom-Directed-Graph :
(f : hom-Directed-Graph G H) → htpy-hom-Directed-Graph f f
pr1 (refl-htpy-hom-Directed-Graph f) = refl-htpy
pr2 (refl-htpy-hom-Directed-Graph f) x y e = refl
htpy-eq-hom-Directed-Graph :
(f g : hom-Directed-Graph G H) → f = g → htpy-hom-Directed-Graph f g
htpy-eq-hom-Directed-Graph f .f refl = refl-htpy-hom-Directed-Graph f
is-torsorial-htpy-hom-Directed-Graph :
(f : hom-Directed-Graph G H) →
is-torsorial (htpy-hom-Directed-Graph f)
is-torsorial-htpy-hom-Directed-Graph f =
is-torsorial-Eq-structure
( is-torsorial-htpy (vertex-hom-Directed-Graph G H f))
( pair
( vertex-hom-Directed-Graph G H f)
( refl-htpy))
( is-torsorial-Eq-Π
( λ x →
is-torsorial-Eq-Π
( λ y → is-torsorial-htpy (edge-hom-Directed-Graph G H f))))
is-equiv-htpy-eq-hom-Directed-Graph :
(f g : hom-Directed-Graph G H) → is-equiv (htpy-eq-hom-Directed-Graph f g)
is-equiv-htpy-eq-hom-Directed-Graph f =
fundamental-theorem-id
( is-torsorial-htpy-hom-Directed-Graph f)
( htpy-eq-hom-Directed-Graph f)
extensionality-hom-Directed-Graph :
(f g : hom-Directed-Graph G H) → (f = g) ≃ htpy-hom-Directed-Graph f g
pr1 (extensionality-hom-Directed-Graph f g) = htpy-eq-hom-Directed-Graph f g
pr2 (extensionality-hom-Directed-Graph f g) =
is-equiv-htpy-eq-hom-Directed-Graph f g
eq-htpy-hom-Directed-Graph :
(f g : hom-Directed-Graph G H) → htpy-hom-Directed-Graph f g → (f = g)
eq-htpy-hom-Directed-Graph f g =
map-inv-equiv (extensionality-hom-Directed-Graph f g)
```
## External links
- [Graph homomorphism](https://www.wikidata.org/entity/Q3385162) on Wikidata
- [Graph homomorphism](https://en.wikipedia.org/wiki/Graph_homomorphism) at
Wikipedia