{-# OPTIONS --cubical --safe #-} module Function.Biconditional where open import Level open import Relation.Binary open import Path as ≡ using (_;_; cong) open import Function infix 4 _↔_ record _↔_ {a b} (A : Type a) (B : Type b) : Type (a ℓ⊔ b) where constructor _iff_ field fun : A → B inv : B → A open _↔_ public sym-↔ : (A ↔ B) → (B ↔ A) fun (sym-↔ A↔B) = inv A↔B inv (sym-↔ A↔B) = fun A↔B refl-↔ : A ↔ A fun refl-↔ = id inv refl-↔ = id trans-↔ : A ↔ B → B ↔ C → A ↔ C fun (trans-↔ A↔B B↔C) = fun B↔C ∘ fun A↔B inv (trans-↔ A↔B B↔C) = inv A↔B ∘ inv B↔C