Majority-streamlined
Tom de Jong, 16 & 18 March 2026. Updated on 8 June 2026 by Tom de Jong to use minimal library imports. We show that the proof given by Jakub Opršal in AlgebraicStructuresForcingSethood.Majority factors through a simple lemma about loop spaces (see the module Ω-trivial-criterion).{-# OPTIONS --safe --without-K #-} module AlgebraicStructuresForcingSethood.Majority-streamlined where open import MLTT.Universes open import MLTT.Id open import UF.Base using ( ap₂ ; =-congr ; =-congr-refl ; refl-left-neutral ; refl-right-neutral ; conjugate-loop ) module _ (A : 𝓤 ̇ ) (a₀ b₀ : A) where Ωᵃ : 𝓤 ̇ Ωᵃ = a₀ = a₀ Ωᵇ : 𝓤 ̇ Ωᵇ = b₀ = b₀ module Ω-trivial-criterion (f : Ωᵃ → Ωᵃ → Ωᵇ) (γ : b₀ = a₀) (idempotent-up-to-conjugation : (p : Ωᵃ) → conjugate-loop γ (f p p) = p) (left-nilpotent : (p : Ωᵃ) → f p refl = refl) (right-nilpotent : (q : Ωᵃ) → f refl q = refl) (homomorphism : (p q r s : Ωᵃ) → f (p ∙ r) (q ∙ s) = f p q ∙ f r s) where nilpotent : (p : Ωᵃ) → f p p = refl nilpotent p = f p p =⟨ I ⟩ f (p ∙ refl) (refl ∙ p) =⟨ II ⟩ f p refl ∙ f refl p =⟨ III ⟩ refl ∙ refl =⟨ refl ⟩ refl ∎ where I = (ap₂ f (refl-right-neutral p) refl-left-neutral) ⁻¹ II = homomorphism p refl refl p III = ap₂ _∙_ (left-nilpotent p) (right-nilpotent p) Ω-trivial : (p : Ωᵃ) → p = refl Ω-trivial p = p =⟨ (idempotent-up-to-conjugation p) ⁻¹ ⟩ conjugate-loop γ (f p p) =⟨ ap (conjugate-loop γ) (nilpotent p) ⟩ conjugate-loop γ refl =⟨ =-congr-refl γ ⟩ refl ∎Finally, we show that it applies to Jakub's setting: any type with a ternary majority operation must be a set.open import AlgebraicStructuresForcingSethood.Majority majorities-only-act-on-sets : (M : 𝓤 ̇ ) (m : M → M → M → M) → ((a b : M) → m b a a = a) → ((a b : M) → m a b a = a) → ((a b : M) → m a a b = a) → (m₀ : M) → (p : m₀ = m₀) → p = refl majorities-only-act-on-sets M m eq₀ eq₁ eq₂ m₀ = Ω-trivial M m₀ (m m₀ m₀ m₀) f idem₁ side₁-is-p side₀-is-refl side₂-is-refl (λ p q r s → (m'-is-homo p r refl refl q s) ⁻¹) where open Ω-trivial-criterion open type-with-majority M m eq₀ eq₁ eq₂ m₀ f : (m₀ = m₀) → (m₀ = m₀) → m m₀ m₀ m₀ = m m₀ m₀ m₀ f p q = m' p refl q