Martin Escardo, Paulo Oliva, June 2024

\begin{code}

{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan

module RelativeMonadOnStructuredTypes.OneSigmaStructure where

record 𝟙-Σ-structure : 𝓤ω where
 field
  S : {𝓤 : Universe} → 𝓤 ̇ → 𝓤 ̇
  𝟙-is-S : {𝓤 : Universe} → S (𝟙 {𝓤})

 𝕊 : (𝓤 : Universe) → 𝓤 ⁺ ̇
 𝕊 𝓤 = Σ X ꞉ 𝓤 ̇ , S X

 ⟨_⟩ : {𝓤 : Universe} → 𝕊 𝓤 → 𝓤 ̇
 ⟨_⟩ = pr₁

 underlying-structure : {𝓤 : Universe} (𝓧 : 𝕊 𝓤) → S ⟨ 𝓧 ⟩
 underlying-structure = pr₂

 𝟙ₛ : {𝓤 : Universe} → 𝕊 𝓤
 𝟙ₛ = 𝟙 , 𝟙-is-S

 field
  Σ-is-S
     : {𝓤 𝓥 : Universe}
       (𝓧 : 𝕊 𝓤)
       (𝓨 : ⟨ 𝓧 ⟩ → 𝕊 𝓥)
     → S (Σ x ꞉ ⟨ 𝓧 ⟩ , ⟨ 𝓨 x ⟩)

 Sigmaₛ : {𝓤 𝓥 : Universe} (𝓧 : 𝕊 𝓤) (𝓨 : ⟨ 𝓧 ⟩ → 𝕊 𝓥) → 𝕊 (𝓤 ⊔ 𝓥)
 Sigmaₛ {𝓤} {𝓥} 𝓧 𝓨 = (Σ x ꞉ ⟨ 𝓧 ⟩ , ⟨ 𝓨 x ⟩) , Σ-is-S 𝓧 𝓨

 syntax Sigmaₛ 𝓧 (λ x → 𝓨) = Σₛ x ꞉ 𝓧 , 𝓨

 infixr -1 Sigmaₛ

\end{code}

Some typical examples that we are going to need.

\begin{code}

open import UF.DiscreteAndSeparated
open import TypeTopology.SigmaDiscrete

discrete-𝟙-Σ-structure : 𝟙-Σ-structure
discrete-𝟙-Σ-structure =
 record {
  S      = is-discrete ;
  𝟙-is-S = 𝟙-is-discrete ;
  Σ-is-S = λ (X , d) 𝓨 → Σ-is-discrete d (λ x → pr₂ (𝓨 x))
  }

\end{code}