module LocalClosedness where

open import Prelude
open import Unfinite
open import oc-Sets

----------------------------------------------------------------------
-- Local closedness [Section 2.4]
----------------------------------------------------------------------
infix 4 _≻_
_≻_ : {X : Set}{{_ : oc X}}    X  Set
i  x = (j : ){{_ : j  i}}   a  𝔸 , (j ~> a)x  x -- Equation (5)

module _ {X : Set}{{_ : oc X}} where
  ≻1 : -- Lemma 2.6
    {i j : }
    {x : X}
    (p : j  i)
    (q : i  x)
     ---------
    j  x
  ≻1 p q k = q k {{≤trans p it}}

  ≻2 : -- Equation (6)
    {i : }
    {a b : 𝔸}
    {x : X}
    (p : (i ~> a)x  x)
     -----------------
    (i ~> b)x  x
  ≻2 {i} {a} {b}{x} p =
    proof
      (i ~> b)x
    [ ap (i ~> b) p ]≡
      (i ~> b)((i ~> a)x)
    ≡[ oc₁ _ _ _ _ ]
      (i ~> a)x
    ≡[ p ]
      x
    qed

  ≻3 : -- Lemma 2.7
    {i j : }
    {a : 𝔸}
    {x : X}
    (p : i  x)
    (q : j  i)
     -----------
    (j ~> a)x  x
  ≻3 p q = ≻2 (π₂ (p _ {{q}}))

  open-close-var : -- Corollary 2.8
    {a : 𝔸}
    {x : X}
    {i : }
    (p : i  x)
     ---------------------
    (i ~> a)((i <~ a)x)  x
  open-close-var {a} {x} {i} p =
    proof
      (i ~> a)((i <~ a)x)
    ≡[ oc₄ _ _ _ ]
      (i ~> a)x
    ≡[ ≻3 p ≤refl ]
      x
    qed