{-# OPTIONS --safe --without-K #-} open import Categories.Category.Instance.Sets open import Level open import Categories.Category.Cartesian open import Categories.Category.BinaryProducts open import Data.Unit.Polymorphic import Relation.Binary.PropositionalEquality as Eq open Eq using (_≡_; refl; cong; sym) open Eq.≡-Reasoning using (begin_; step-≡-∣; step-≡-⟩; _∎) open import Data.Product open import Data.Product.Properties open import Function.Base module Category.Instance.Properties.Sets.Cartesian (o : Level) where Sets-Cartesian : Cartesian (Sets o) Sets-Cartesian = record { terminal = record { ⊤ = ⊤ ; ⊤-is-terminal = record { ! = λ _ → tt ; !-unique = λ _ _ → refl } } ; products = record { product = λ {A} {B} → record { A×B = A × B ; π₁ = proj₁ ; π₂ = proj₂ ; ⟨_,_⟩ = <_,_> ; project₁ = λ _ → refl ; project₂ = λ _ → refl ; unique = λ {C} {f} {p₁} {p₂} eq₁ eq₂ → λ x → begin < p₁ , p₂ > x ≡⟨ ×-≡,≡→≡ (sym (eq₁ x) , sym (eq₂ x)) ⟩ < proj₁ ∘′ f , proj₂ ∘′ f > x ≡⟨⟩ f x ∎ } } }