{-# 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 ∎
} }
}