{-# OPTIONS --without-K --exact-split #-}
open import BasicTypes

open import HLevelTypes
open import TruncationType

The Axiom Of Choice

module
  TheAxiomOfChoice
  where

Let’s write in type theory, the following logic formulation of of the axiom of choice:

\[(∀ (b : B) . ∃ (a : A b) . P(b,a)) ⇒ ∃ (g : (b : B) → A b) . ∀ (b : B) . P (b, g(b)) .\]
postulate
  Choice
    :  {ℓ₁ ℓ₂ ℓ₃ : Level }
    -- Asummption 1:
      (B : Type ℓ₁)
     isSet B
    -- Asummption 2:
     (A : B  Type ℓ₂)
      (b : B)  isSet (A b)
    -- Asummption 3:
     (P : (b : B)  (A b)  Type ℓ₃)
      (b : B)(a : A b)  isProp (P b a)
    -----------------------------------
     ( b  ∥ ∑ (A b) (λ a  P b a))
     ∥ ∑ (∏ B A) (λ g  P b (g b))