---
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}