Zulip Chat Archive

Stream: Is there code for X?

Topic: contradiction from retract existence


Asei Inoue (Aug 05 2024 at 09:52):

axiom U : Type

-- I want to assume `Type : Type` but
-- Lean doesn't allow me to do so.
-- Then I will assume slightly weaker hypothesises...

axiom down (T : Type) : U
axiom up (u : U) : Type

-- There is a retract from Type to U
axiom retract (T : Type) : up (down T) = T

-- I want to show this
theorem paradox : False := by
  sorry

Asei Inoue (Aug 05 2024 at 09:54):

My attempt: Trivially up is a surjective map.
by Cantor theorem, there is no surjective map from U to Set U. so it is sufficient to show that there is a surjective map from Type to Set U.

Markus Himmel (Aug 05 2024 at 10:12):

Here is one way:

import Mathlib

axiom U : Type

-- I want to assume `Type : Type` but
-- Lean doesn't allow me to do so.
-- Then I will assume slightly weaker hypothesises...

axiom down (T : Type) : U
axiom up (u : U) : Type

-- There is a retract from Type to U
axiom retract (T : Type) : up (down T) = T

-- I want to show this
theorem paradox : False :=
  not_small_type.{0} Set.range down, Equiv.ofInjective down (Function.LeftInverse.injective retract)⟩⟩

Asei Inoue (Aug 05 2024 at 10:12):

what is not_small_type?

Markus Himmel (Aug 05 2024 at 10:14):

docs#not_small_type says that there is no equivalence α ≃ Type for any α : Type.

Markus Himmel (Aug 05 2024 at 10:19):

Even more direct:

theorem paradox : False :=
  Function.not_surjective_Type up (Function.RightInverse.surjective retract)

Last updated: May 02 2025 at 03:31 UTC