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