------------------------------------------------------------------------
-- The identity modality
------------------------------------------------------------------------

{-# OPTIONS --cubical-compatible --safe #-}

open import Equality

module Modality.Identity
  {e⁺} (eq :  {a p}  Equality-with-J a p e⁺) where

open Derived-definitions-and-properties eq

open import Prelude

open import Equivalence.Path-split eq
open import H-level eq as H-level
open import H-level.Closure eq
open import Modality.Basics eq

private
  variable
     ℓ′ : Level

------------------------------------------------------------------------
-- The identity modality

-- The identity modality.
--
-- This modality is taken from "Modalities in Homotopy Type Theory" by
-- Rijke, Shulman and Spitters.

Identity-modality : Modality 
Identity-modality {} = λ where
    .        id
    .η        id
    .Modal _    

    .Modal-propositional _ 
      H-level.mono₁ 0 (↑-closure 0 ⊤-contractible)

    .Modal-◯  _

    .Modal-respects-≃  _

    .extendable-along-η _  ∞-extendable-along-id
  where
  open Modality

-- The identity modality is empty-modal.

empty-modal : Empty-modal (Identity-modality { = })
empty-modal = _

-- The identity modality is very modal.

very-modal : Very-modal (Identity-modality { = })
very-modal = _

-- The identity modality is topological.

topological : Topological (Identity-modality { = })
topological {} =
    (   
    ,  _    )
    ,  _  record { to = λ _ _  ∞-extendable-along-id })
    )
  ,  _  H-level.mono₁ 0 (↑-closure 0 ⊤-contractible))

-- The identity modality is left exact.

left-exact : Left-exact  (A : Type )  A)
left-exact {A} {x} {y} =
  Contractible A        →⟨ H-level.⇒≡ 0 ⟩□
  Contractible (x  y)  

-- The identity modality is cotopological.

cotopological : Cotopological  (A : Type )  A)
cotopological = left-exact ,  _ c  c)

-- The identity modality is accessibility-modal.

accessibility-modal :
  Modality.Accessibility-modal (Identity-modality { = })
accessibility-modal {} =
     acc  Modal→Acc→Acc-[]◯-η _ id acc)
  , id
  where
  open Modality (Identity-modality { = })

-- The identity modality is W-modal.

w-modal : W-modal (Identity-modality { = })
w-modal _ = _