📥 Download raw
{-# 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 close 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.