----------------------------------------------------------------------------------------------------
-- The "if-and-only-if" relation
----------------------------------------------------------------------------------------------------

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

module Iff where

open import Cubical.Foundations.Function

open import Cubical.Data.Sigma

_↔_ :  {ℓ₁ ℓ₂} (A : Type ℓ₁) (B : Type ℓ₂)  Type _
A  B = (A  B) × (B  A)

infix   2 _↔_

_↔⟨_⟩_ :  {ℓ₁ ℓ₂ ℓ₃} (A : Type ℓ₁) {B : Type ℓ₂} {C : Type ℓ₃}
          (A  B)  (B  C)  (A  C)
A ↔⟨ A↔B  B↔C = (fst B↔C  fst A↔B) , (snd A↔B  snd B↔C)

_↔∎ :  {} (A : Type )  A  A
_ ↔∎ =  a  a) ,  a  a)

infixr  0 _↔⟨_⟩_
infix   1 _↔∎