---
authors:
  - Bruno da Rocha Paiva
  - Vincent Rahli
date-started: 2023-11-08
---

\begin{code}

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

module EffectfulForcing.Internal.ExtensionalEquality where

open import MLTT.Spartan hiding (rec ; _^_) renaming (⋆ to 〈〉)
open import EffectfulForcing.MFPSAndVariations.SystemT
 using (type ; ι ; _⇒_ ; 〖_〗)

\end{code}

Extensional equality of System T terms.

\begin{code}

_≡_ : {A : type} → 〖 A 〗 → 〖 A 〗 → 𝓤₀  ̇
_≡_ {ι}     n₁ n₂ = n₁ ＝ n₂
_≡_ {σ ⇒ τ} f₁ f₂ = {x₁ x₂ : 〖 σ 〗} → x₁ ≡ x₂ → f₁ x₁ ≡ f₂ x₂

\end{code}

The following explicit version is used to define a nice syntax for the
extensional equality operation.

\begin{code}

≡-syntax : (A : type) → 〖 A 〗 → 〖 A 〗 → 𝓤₀  ̇
≡-syntax A f g = f ≡ g

syntax ≡-syntax A f g = f ≡[ A ] g

\end{code}
