Martin Escardo, 19th March 2021.
\begin{code}
{-# OPTIONS --safe --without-K #-}
module Fin.Omega where
open import UF.Subsingletons
open import Fin.Topology
open import Fin.Type
open import MLTT.Plus-Properties
open import MLTT.Spartan
open import Naturals.Order
open import Naturals.Properties
open import Notation.Order
open import NotionsOfDecidability.Decidable
open import UF.Embeddings
open import UF.Equiv
open import UF.ClassicalLogic
open import UF.FunExt
open import UF.SubtypeClassifier
having-three-distinct-points-covariant : {X : 𝓤 ̇ } {Y : 𝓥 ̇ }
→ X ↪ Y
→ has-three-distinct-points X
→ has-three-distinct-points Y
having-three-distinct-points-covariant (f , f-is-emb) ((x , y , z) , u , v , w) = γ
where
l : left-cancellable f
l = embeddings-are-lc f f-is-emb
γ : has-three-distinct-points (codomain f)
γ = ((f x , f y , f z) , (λ p → u (l p)) , (λ q → v (l q)) , (λ r → w (l r)))
finite-type-with-three-distict-points : (k : ℕ)
→ k ≥ 3
→ has-three-distinct-points (Fin k)
finite-type-with-three-distict-points (succ (succ (succ k))) * =
((𝟎 , 𝟏 , 𝟐) , +disjoint' , (λ a → +disjoint' (inl-lc a)) , +disjoint)
finite-subsets-of-Ω-have-at-most-2-elements : funext 𝓤 𝓤
→ propext 𝓤
→ (k : ℕ)
→ Fin k ↪ Ω 𝓤
→ k ≤ 2
finite-subsets-of-Ω-have-at-most-2-elements {𝓤} fe pe k e = γ
where
α : k ≥ 3 → has-three-distinct-points (Ω 𝓤)
α g = having-three-distinct-points-covariant e
(finite-type-with-three-distict-points k g)
β : ¬ (k ≥ 3)
β = contrapositive α (no-three-distinct-propositions fe pe)
γ : k ≤ 2
γ = not-less-bigger-or-equal k 2 β
\end{code}
Added 3rd September 2023.
\begin{code}
Fin-to-Ω-embedding-is-equiv-iff-2-and-EM : funext 𝓤 𝓤
→ propext 𝓤
→ (k : ℕ)
→ (𝕖 : Fin k ↪ Ω 𝓤)
→ is-equiv ⌊ 𝕖 ⌋ ↔ ((k = 2) × EM 𝓤)
Fin-to-Ω-embedding-is-equiv-iff-2-and-EM {𝓤} fe pe 0 (e , _) = I , II
where
I : is-equiv e → (0 = 2) × EM 𝓤
I e-is-equiv = 𝟘-elim (inverse e e-is-equiv ⊥)
II : (0 = 2) × EM 𝓤 → is-equiv e
II (p , _) = 𝟘-elim (zero-not-positive 1 p)
Fin-to-Ω-embedding-is-equiv-iff-2-and-EM {𝓤} fe pe 1 (e , _) = I , II
where
I : is-equiv e → (1 = 2) × EM 𝓤
I e-is-equiv = 𝟘-elim (⊥-is-not-⊤ I₁)
where
𝕗 : Fin 1 ≃ Ω 𝓤
𝕗 = (e , e-is-equiv)
I₀ : is-prop (Fin 1)
I₀ (inr _) (inr _) = ap inr refl
I₁ = ⊥ =⟨ (inverses-are-sections ⌜ 𝕗 ⌝ ⌜ 𝕗 ⌝-is-equiv ⊥)⁻¹ ⟩
⌜ 𝕗 ⌝ (⌜ 𝕗 ⌝⁻¹ ⊥) =⟨ ap ⌜ 𝕗 ⌝ (I₀ (⌜ 𝕗 ⌝⁻¹ ⊥) (⌜ 𝕗 ⌝⁻¹ ⊤)) ⟩
⌜ 𝕗 ⌝ (⌜ 𝕗 ⌝⁻¹ ⊤) =⟨ inverses-are-sections ⌜ 𝕗 ⌝ ⌜ 𝕗 ⌝-is-equiv ⊤ ⟩
⊤ ∎
II : (1 = 2) × EM 𝓤 → is-equiv e
II (r , _) = 𝟘-elim (zero-not-positive 0 (succ-lc r))
Fin-to-Ω-embedding-is-equiv-iff-2-and-EM {𝓤} fe pe 2 (e , e-is-embedding) =
I , II
where
I : is-equiv e → (2 = 2) × EM 𝓤
I e-is-equiv = refl , I₀
where
e⁻¹ : Ω 𝓤 → Fin 2
e⁻¹ = inverse e e-is-equiv
η : e ∘ e⁻¹ ∼ id
η = inverses-are-sections e e-is-equiv
ε : e⁻¹ ∘ e ∼ id
ε = inverses-are-retractions e e-is-equiv
I₀ : EM 𝓤
I₀ P P-is-prop = I₂ I₁
where
p : Ω 𝓤
p = (P , P-is-prop)
I₁ : is-decidable (e⁻¹ p = e⁻¹ ⊤)
I₁ = Fin-is-discrete (e⁻¹ p) (e⁻¹ ⊤)
I₂ : is-decidable (e⁻¹ p = e⁻¹ ⊤) → is-decidable (p holds)
I₂ = map-decidable
(λ (r : e⁻¹ p = e⁻¹ ⊤)
→ equal-⊤-gives-holds p
(equivs-are-lc e⁻¹ (inverses-are-equivs e e-is-equiv) r))
(λ (h : p holds)
→ ap e⁻¹ (holds-gives-equal-⊤ pe fe p h))
II : (2 = 2) × EM 𝓤 → is-equiv e
II (_ , em) = embeddings-with-sections-are-equivs e e-is-embedding (e⁻¹ , η)
where
II₀ : e 𝟎 holds → ¬ (e 𝟏 holds)
II₀ h₀ h₁ =
+disjoint
(embeddings-are-lc e e-is-embedding
(e 𝟏 =⟨ holds-gives-equal-⊤ pe fe (e 𝟏) h₁ ⟩
⊤ =⟨ (holds-gives-equal-⊤ pe fe (e 𝟎) h₀)⁻¹ ⟩
e 𝟎 ∎))
II₁ : ¬ (e 𝟎 holds) → e 𝟏 holds
II₁ ν₀ = ¬¬-elim (em (e 𝟏 holds) (holds-is-prop (e 𝟏))) II₂
where
II₂ : ¬¬ (e 𝟏 holds)
II₂ ν₁ =
+disjoint
(embeddings-are-lc e e-is-embedding
(e 𝟏 =⟨ fails-gives-equal-⊥ pe fe (e 𝟏) ν₁ ⟩
⊥ =⟨ (fails-gives-equal-⊥ pe fe (e 𝟎) ν₀)⁻¹ ⟩
e 𝟎 ∎))
s : (p : Ω 𝓤) → is-decidable (p holds) → is-decidable (e 𝟎 holds) → Fin 2
s p (inl h) (inl h₀) = 𝟎
s p (inl h) (inr ν₀) = 𝟏
s p (inr ν) (inl h₀) = 𝟏
s p (inr ν) (inr ν₀) = 𝟎
e⁻¹ : Ω 𝓤 → Fin 2
e⁻¹ p = s p (em (p holds) (holds-is-prop p))
(em (e 𝟎 holds) (holds-is-prop (e 𝟎)))
η' : (p : Ω 𝓤) (d : is-decidable (p holds)) (d' : is-decidable (e 𝟎 holds))
→ e (s p d d') = p
η' p (inl h) (inl h₀) = to-Ω-= fe
(pe (holds-is-prop (e 𝟎))
(holds-is-prop p)
(λ _ → h)
(λ _ → h₀))
η' p (inl h) (inr ν₀) = to-Ω-= fe
(pe (holds-is-prop (e 𝟏))
(holds-is-prop p)
(λ _ → h)
(λ _ → II₁ ν₀))
η' p (inr ν) (inl h₀) = to-Ω-= fe
(pe (holds-is-prop (e 𝟏))
(holds-is-prop p)
(λ (h₁ : e 𝟏 holds) → 𝟘-elim (II₀ h₀ h₁))
λ (h : p holds) → 𝟘-elim (ν h))
η' p (inr ν) (inr ν₀) = to-Ω-= fe
(pe (holds-is-prop (e 𝟎))
(holds-is-prop p)
(λ (h₀ : e 𝟎 holds) → 𝟘-elim (ν₀ h₀))
(λ (h : p holds) → 𝟘-elim (ν h)))
η : e ∘ e⁻¹ ∼ id
η p = η' p (em (p holds) (holds-is-prop p))
(em (e 𝟎 holds) (holds-is-prop (e 𝟎)))
γ : is-equiv e ↔ (2 = 2) × EM 𝓤
γ = I , II
Fin-to-Ω-embedding-is-equiv-iff-2-and-EM {𝓤} fe pe (succ (succ (succ k))) 𝕖 =
𝟘-elim I
where
I : 3 ≤ 2
I = finite-subsets-of-Ω-have-at-most-2-elements fe pe (succ (succ (succ k))) 𝕖
\end{code}
TODO. Refactor the above proof in smaller meaningful components.