# Equality in finite types ```agda module univalent-combinatorics.equality-finite-types where ``` <details><summary>Imports</summary> ```agda open import elementary-number-theory.natural-numbers open import foundation.decidable-equality open import foundation.dependent-pair-types open import foundation.identity-types open import foundation.propositional-truncations open import foundation.universe-levels open import univalent-combinatorics.counting open import univalent-combinatorics.decidable-propositions open import univalent-combinatorics.equality-standard-finite-types open import univalent-combinatorics.finite-types ``` </details> ## Idea Any finite type is a set because it is merely equivalent to a standard finite type. Moreover, any finite type has decidable equality. In particular, this implies that the type of identifications between any two elements in a finite type is finite. ## Properties ### Any finite type has decidable equality ```agda has-decidable-equality-is-finite : {l1 : Level} {X : UU l1} → is-finite X → has-decidable-equality X has-decidable-equality-is-finite {l1} {X} is-finite-X = apply-universal-property-trunc-Prop is-finite-X ( has-decidable-equality-Prop X) ( λ e → has-decidable-equality-equiv' ( equiv-count e) ( has-decidable-equality-Fin (number-of-elements-count e))) ``` ### Any type of finite cardinality has decidable equality ```agda has-decidable-equality-has-cardinality : {l1 : Level} {X : UU l1} (k : ℕ) → has-cardinality k X → has-decidable-equality X has-decidable-equality-has-cardinality {l1} {X} k H = apply-universal-property-trunc-Prop H ( has-decidable-equality-Prop X) ( λ e → has-decidable-equality-equiv' e (has-decidable-equality-Fin k)) ``` ### The type of identifications between any two elements in a finite type is finite ```agda abstract is-finite-eq : {l1 : Level} {X : UU l1} → has-decidable-equality X → {x y : X} → is-finite (Id x y) is-finite-eq d {x} {y} = is-finite-count (count-eq d x y) is-finite-eq-𝔽 : {l : Level} → (X : 𝔽 l) {x y : type-𝔽 X} → is-finite (x = y) is-finite-eq-𝔽 X = is-finite-eq (has-decidable-equality-is-finite (is-finite-type-𝔽 X)) Id-𝔽 : {l : Level} → (X : 𝔽 l) (x y : type-𝔽 X) → 𝔽 l pr1 (Id-𝔽 X x y) = Id x y pr2 (Id-𝔽 X x y) = is-finite-eq-𝔽 X ```