module Calf.Value.Glue.Base where
open import Calf.Value
open import Calf.Value.Open as ◯
open import Calf.Value.Closed as ●
record Glue (X• : 𝒱•) (X◦ : 𝒱◦) (χ• : ⟨ X• ⟩ → ● ⟨ X◦ ⟩) : 𝒱 where
field
• : ⟨ X• ⟩
◦ : ⟨ X◦ ⟩
•→◦ : χ• • ≡ η• ◦
open Glue public
record 𝒱-FRAC : 𝒱₁ where
field
X• : 𝒱•
X◦ : 𝒱◦
χ• : ⟨ X• ⟩ → ● ⟨ X◦ ⟩
open 𝒱-FRAC
fromFRAC : 𝒱-FRAC → 𝒱
fromFRAC F = Glue (F .X•) (F .X◦) (F .χ•)
toFRAC : 𝒱 → 𝒱-FRAC
toFRAC X .X• = ● X , ●.η-isEquiv
toFRAC X .X◦ = ◯ X , ◯.η-isEquiv
toFRAC X .χ• = ●.map η◦
record 𝒱-Square (X Y : 𝒱-FRAC) : 𝒱 where
field
f• : ⟨ X .X• ⟩ → ⟨ Y .X• ⟩
f◦ : ⟨ X .X◦ ⟩ → ⟨ Y .X◦ ⟩
f-coh : (x• : ⟨ X .X• ⟩) → Y .χ• (f• x•) ≡ ●.map f◦ (X .χ• x•)
square
: ∀ {X• X◦ χ Y• Y◦ ψ}
→ (f• : X• .fst → Y• .fst)
→ (f◦ : X◦ .fst → Y◦ .fst)
→ ((x• : X• .fst) → ψ (f• x•) ≡ ●.map f◦ (χ x•))
→ Glue X• X◦ χ → Glue Y• Y◦ ψ
square f• f◦ f-coh q .• = f• (q .•)
square f• f◦ f-coh q .◦ = f◦ (q .◦)
square f• f◦ f-coh q .•→◦ = f-coh (q .•) ∙ cong (●.map f◦) (q .•→◦)