{-# OPTIONS --cubical-compatible #-}
module Padova2025.Explorations.Forcing.Levy (X : Set) (x₀ : X) where
Lévy collapse#
open import Padova2025.ProgrammingBasics.Lists
open import Padova2025.ProgrammingBasics.Naturals.Base
open import Padova2025.ProvingBasics.Termination.Gas using (Maybe; nothing; just; lookupMaybe)
open import Padova2025.ProvingBasics.Connectives.Existential
open import Padova2025.ProvingBasics.Connectives.More
In the module on Cohen forcing,
we have introduced the generic sequence ℕ → X. By adding one more clause to the
definition of the eventually modality
of that module, we can obtain the generic surjection ℕ ↠ X. This construction
will work even in case that X is uncountable, and indeed this case is the main
situation where we might want to apply Lévy collapse: In the forcing extension,
the type X will become countable.
L : Set
L = List X
data ∇ (P : L → Set) : L → Set where
now : {xs : L} → P xs → ∇ P xs
later₀ : {xs : L} → ((x : X) → ∇ P (xs ∷ʳ x)) → ∇ P xs
later₁ : {xs : L} → (x : X) → ((ys : L) → x ∈ xs ++ ys → ∇ P (xs ++ ys)) → ∇ P xs
In contrast with the definition for Cohen forcing,
there are now two ways how a finite approximation can evolve to a better approximation.
Using later₀, a finite list xs can grow by one element on the right to become more defined.
Using later₁ x, a finite list can grow by one or many elements on the right to become more
surjective, more specifically to contain x among its terms.
Expand.