Martin Escardo, 3rd September 2023.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module Fin.Dedekind where
open import MLTT.Spartan
open import UF.Embeddings
open import UF.Equiv
is-Dedekind-finite : š¤ Ģ ā š¤ Ģ
is-Dedekind-finite X = (f : X ā X) ā is-embedding f ā is-equiv f
\end{code}
Notice that we replace the conclusion is-equiv f by is-surjection f to
get an equivalent definition, because if an embedding is a surjection
iff it is an equivalence, but this requires assuming propositional
truncations.
Example. The type Ī© š¤ of propositions is Dedekind finite.
\begin{code}
open import Higgs.InvolutionTheorem hiding (Ī©)
open import UF.FunExt
open import UF.Subsingletons
open import UF.SubtypeClassifier
Ī©-is-Dedekind-finite : Fun-Ext ā Prop-Ext ā is-Dedekind-finite (Ī© š¤)
Ī©-is-Dedekind-finite fe pe = autoembeddings-of-Ī©-are-equivs fe pe
\end{code}
Example. A weakly connected type (a type that is (1-)connected if it
is inhabited), is Dedekind finite, so, for instance, the circle S¹ is
Dedekind finite.
\begin{code}
open import CantorSchroederBernstein.CSB
open import UF.PropTrunc
module _ (pt : propositional-truncations-exist) where
open import UF.Connected pt
wconnected-types-are-Dedekind-finite : {X : š¤ Ģ }
ā is-wconnected X
ā is-Dedekind-finite X
wconnected-types-are-Dedekind-finite =
CSB-for-connected-types-without-EM.wconnected-types-are-Dedekind-finite pt
\end{code}
TODO. Relate this to the other notions of finiteness.