ReflexiveGraphs.Constructions
Ian Ray. 28th August 2025. Minor changes and merged into TypeToplogy in March 2026. We provide some basic contructions on (displayed) reflexive graphs (see index for references to Sterling, Buchholtz, etc.){-# OPTIONS --safe --without-K #-} module ReflexiveGraphs.Constructions where open import MLTT.Spartan open import UF.Powerset-MultiUniverse open import UF.Size open import UF.UniverseEmbedding open import ReflexiveGraphs.Displayed open import ReflexiveGraphs.TypeGiven a reflexive graph and a displayed reflexive graph over it we can define the total reflexive graph as follows.total-refl-graph : (π : Refl-Graph π€ π₯) β Displayed-Refl-Graph π£ π¦ π β Refl-Graph (π€ β π£) (π₯ β π¦) total-refl-graph {π€} {π₯} {π£} {π¦} π π = ((Ξ£ x κ β¨ π β© , βͺ π β« x) , I , II) where I : Ξ£ x κ β¨ π β© , βͺ π β« x β Ξ£ x κ β¨ π β© , βͺ π β« x β π₯ β π¦ Μ I (a , b) (a' , b') = Ξ£ p κ a ββ¨ π β© a' , b ββ¨ π βΈ΄ p β© b' II : (t : Ξ£ x κ β¨ π β© , βͺ π β« x) β I t t II (a , b) = (β-refl π a , β-disp-refl π b) syntax total-refl-graph π π = π οΉ πWe define the projection map from the total reflexive graph to the base reflexive graph.total-refl-graph-projection : {π : Refl-Graph π€ π₯} (π : Displayed-Refl-Graph π£ π¦ π) β Refl-Graph-Hom (π οΉ π) π total-refl-graph-projection π = (prβ , (Ξ» t t' β prβ) , βΌ-refl) syntax total-refl-graph-projection π = Ο πWe define the binary product and binary sums of reflexive graphs.refl-graph-Γ : Refl-Graph π€ π₯ β Refl-Graph π€' π₯' β Refl-Graph (π€ β π€') (π₯ β π₯') refl-graph-Γ {π€} {π₯} {π€'} {π₯'} π π' = ((β¨ π β© Γ β¨ π' β©) , I , II) where I : β¨ π β© Γ β¨ π' β© β β¨ π β© Γ β¨ π' β© β π₯ β π₯' Μ I (x , x') (y , y') = (x ββ¨ π β© y) Γ (x' ββ¨ π' β© y') II : (t : β¨ π β© Γ β¨ π' β©) β I t t II (x , x') = (β-refl π x , β-refl π' x') syntax refl-graph-Γ π π' = π β π' refl-graph-+ : Refl-Graph π€ π₯ β Refl-Graph π€' π₯' β Refl-Graph (π€ β π€') (π₯ β π₯') refl-graph-+ {π€} {π₯} {π€'} {π₯'} π π' = ((β¨ π β© + β¨ π' β©) , I , II) where I : β¨ π β© + β¨ π' β© β β¨ π β© + β¨ π' β© β π₯ β π₯' Μ I (inl x) (inl y) = Lift π₯' (x ββ¨ π β© y) I (inl x) (inr y) = π I (inr x) (inl y) = π I (inr x) (inr y) = Lift π₯ (x ββ¨ π' β© y) II : (t : β¨ π β© + β¨ π' β©) β I t t II (inl x) = lift π₯' (β-refl π x) II (inr x) = lift π₯ (β-refl π' x) syntax refl-graph-+ π π' = π β π'Of course, we can generalize to products of reflexive graphs as follows.refl-graph-Ξ : (A : π€' Μ) β (A β Refl-Graph π€ π₯) β Refl-Graph (π€' β π€) (π€' β π₯) refl-graph-Ξ {π€'} {π€} {π₯} A π = (((x : A) β β¨ π x β©) , I , II) where I : ((x : A) β β¨ π x β©) β ((x : A) β β¨ π x β©) β π€' β π₯ Μ I f f' = (x : A) β f x ββ¨ π x β© f' x II : (f : (x : A) β β¨ π x β©) β I f f II f x = β-refl (π x) (f x) syntax refl-graph-Ξ A (Ξ» x β π) = β x ΛΈ A , πWe define the coproduct of reflexive graphs in terms of sigma types.refl-graph-Ξ£ : (A : π€' Μ) β (A β Refl-Graph π€ π₯) β Refl-Graph (π€' β π€) (π€' β π₯) refl-graph-Ξ£ {π€'} {π€} {π₯} A π = ((Ξ£ x κ A , β¨ π x β©) , I , II) where I : Ξ£ x κ A , β¨ π x β© β Ξ£ x κ A , β¨ π x β© β π€' β π₯ Μ I (a , b) (a' , b') = Ξ£ p κ a οΌ a' , transport (Ξ» - β β¨ π - β©) p b ββ¨ π a' β© b' II : (t : Ξ£ x κ A , β¨ π x β©) β I t t II (a , b) = (refl , β-refl (π a) b) syntax refl-graph-Ξ£ A (Ξ» x β π) = β x ΛΈ A , πThe tensor and cotensor of reflexive graphs can be defined in terms of product and coproduct.cotensor-refl-graph : π€' Μ β Refl-Graph π€ π₯ β Refl-Graph (π€' β π€) (π€' β π₯) cotensor-refl-graph A π = β _ ΛΈ A , π syntax cotensor-refl-graph A π = A β π tensor-refl-graph : π€' Μ β Refl-Graph π€ π₯ β Refl-Graph (π€' β π€) (π€' β π₯) tensor-refl-graph A π = β _ ΛΈ A , πWe have a canonical discrete reflexive graph given by the identity type. On the other end of the extreme we have the codiscrete reflexive graph.discrete-reflexive-graph : π€ Μ β Refl-Graph π€ π€ discrete-reflexive-graph A = (A , _οΌ_ , βΌ-refl) syntax discrete-reflexive-graph A = Ξ A codiscrete-reflexive-graph : π€ Μ β Refl-Graph π€ π€ codiscrete-reflexive-graph A = (A , (Ξ» _ _ β π) , Ξ» _ β β)We can give the constant displayed reflexive graph.constant-displayed-reflexive-graph : (π : Refl-Graph π€ π₯) β Refl-Graph π€' π₯' β Displayed-Refl-Graph π€' π₯' π constant-displayed-reflexive-graph {π€} {π₯} {π€'} {π₯'} π π = (I , II , β-refl π) where I : β¨ π β© β π€' Μ I x = β¨ π β© II : {x y : β¨ π β©} β x ββ¨ π β© y β β¨ π β© β β¨ π β© β π₯' Μ II _ u v = u ββ¨ π β© v syntax constant-displayed-reflexive-graph π π = π * π private observationβ : (π : Refl-Graph π€ π₯) (π : Refl-Graph π€' π₯') β (x : β¨ π β©) β [ π * π ] x οΌ π observationβ π π x = refl observationβ : (π : Refl-Graph π€ π₯) (π : Refl-Graph π€' π₯') β π οΉ (π * π) οΌ π β π observationβ π π = reflWe can retstrict a reflexive graph structure to a subset of the carrier of a reflexive graph.refl-graph-β : (π : Refl-Graph π€ π₯) β π {π£} β¨ π β© β Refl-Graph (π€ β π£) π₯ refl-graph-β {π€} {π₯} {π£} π S = (π S , I , II) where I : π S β π S β π₯ Μ I (x , _) (y , _) = x ββ¨ π β© y II : (p : π S) β I p p II (x , _) = β-refl π x syntax refl-graph-β π S = x βΆ π β£ S xWe can give opposite constructions for (displayed) reflexive graphs.opposite-refl-graph : Refl-Graph π€ π₯ β Refl-Graph π€ π₯ opposite-refl-graph {π€} {π₯} π = (β¨ π β© , I , β-refl π) where I : β¨ π β© β β¨ π β© β π₯ Μ I x y = y ββ¨ π β© x syntax opposite-refl-graph π = π α΅α΅ private observationβ : (π : Refl-Graph π€ π₯) β (π α΅α΅) α΅α΅ οΌ π observationβ π = refl opposite-displayed-refl-graph : (π : Refl-Graph π€ π₯) β Displayed-Refl-Graph π£ π¦ π β Displayed-Refl-Graph π£ π¦ (π α΅α΅) opposite-displayed-refl-graph {_} {_} {_} {π¦} π π = (βͺ π β« , I , β-disp-refl π) where I : {x y : β¨ π β©} (p : x ββ¨ π α΅α΅ β© y) β βͺ π β« x β βͺ π β« y β π¦ Μ I p u v = v ββ¨ π βΈ΄ p β© u syntax opposite-displayed-refl-graph π π = π α΅α΅ at π private observationβ : (π : Refl-Graph π€ π₯) (π : Displayed-Refl-Graph π£ π¦ π) β (π α΅α΅ at π) α΅α΅ at (π α΅α΅) οΌ π observationβ π π = reflWe can define the resrtiction of an iterated displayed reflexive graphs.restriction-iterated-displayed-refl-graph : {π : Refl-Graph π€ π₯} (π : Displayed-Refl-Graph π£ π¦ π) β Displayed-Refl-Graph π£ π¦ (π οΉ π) β (x : β¨ π β©) β Displayed-Refl-Graph π£ π¦ ([ π ] x) restriction-iterated-displayed-refl-graph {π€} {π₯} {π£} {π¦} {π} π π x = (I , II , III) where I : βͺ π β« x β π£ Μ I u = βͺ π β« (x , u) II : {u v : βͺ π β« x} (p : u ββ¨ π βΈ΄ β-refl π x β© v) β βͺ π β« (x , u) β βͺ π β« (x , v) β π¦ Μ II p c c' = c ββ¨ π βΈ΄ (β-refl π x , p) β© c' III : {u : βͺ π β« x} (c : I u) β c ββ¨ π βΈ΄ (β-refl π x , β-disp-refl π u) β© c III c = β-disp-refl π c syntax restriction-iterated-displayed-refl-graph π π x = π β£ π , x