{-# OPTIONS --without-K --safe #-}
module Categories.Category.Instance.FinSetoids where

-- Category of Finite Setoids, as a sub-category of Setoids

open import Level

open import Data.Fin.Base using (Fin)
open import Data.Nat.Base using ()
open import Data.Product using (Σ)
open import Function.Bundles using (Inverse)
open import Relation.Unary using (Pred)
open import Relation.Binary.Bundles using (Setoid; module Setoid)
import Relation.Binary.PropositionalEquality as 

open import Categories.Category.Core using (Category)
open import Categories.Category.Construction.ObjectRestriction
open import Categories.Category.Instance.Setoids

-- The predicate that will be used
IsFiniteSetoid : {c  : Level}  Pred (Setoid c ) (c  )
IsFiniteSetoid X = Σ   n  Inverse X (≡.setoid (Fin n)))

-- The actual Category
FinSetoids : (c  : Level)  Category (suc (c  )) (c  ) (c  )
FinSetoids c  = ObjectRestriction (Setoids c ) IsFiniteSetoid