Zulip Chat Archive

Stream: general

Topic: Making sense of universes


Praneeth Kolichala (Jan 15 2022 at 03:58):

I'm having trouble understanding how Lean handles universes in category theory. For example, consider the following:

import topology.homotopy.fundamental_groupoid

noncomputable theory

universes u v w

abbreviation π := fundamental_groupoid.fundamental_groupoid_functor

variables {A : Top.{u}} {B : Top.{v}}

/-- The induced map of the left projection map X × Y → X -/
def proj_left : (π.obj (Top.of (A × B))).α  (π.obj A).α := π.map _, continuous_fst

Note that this doesn't work because A and B are different universes. The error message is hard to decipher, so I don't know exactly what went wrong, however. If I change B to also be in universe u, then the example works. Similarly, if I change A to be in universe max u v, the example works. I guess this means that π.obj A has to be in the same universe as (π.obj (Top.of (A × B))).α.

What I want is for A to live in universe u, B to live in universe v, A × B to live in universe max u v, and then (π.obj A).α to be promoted to universe max u v.

Eventually, I want to be able to use the fundamental groupoid on spaces like I × X(where I is the unit interval), which is useful because it is the domain of homotopies. However, is using ulift to promote I to the same universe as X really the best way? Or can I make some of this projection stuff work even when the two spaces are in different universes?

Adam Topaz (Jan 15 2022 at 04:20):

Inspect the type of \pi.map after writing set_option pp.universes true

Adam Topaz (Jan 15 2022 at 04:20):

It's because of the fact that pi is a functor.

Junyan Xu (Jan 15 2022 at 04:24):

You are trying to apply fundamental_groupoid_functor: Top ⥤ category_theory.Groupoid to the morphism A × B ⟶ A in Top, but A × B and A aren't in the same universe, while objects in a category (Top here) have to be in the same universe, so there isn't such a morphism no matter which universe Lean specializes Top to. I think your best chance is to factor out the map part of fundamental_groupoid_functor as fundamental_groupoid_map that takes a continuous map argument (which is polymorphic in two independent universe variables for the source and the target) instead of a morphism in Top, and use it to define your proj_left instead.

Reid Barton (Jan 15 2022 at 04:32):

In lean-homotopy-theory I specialized most stuff to Type due to this issue (and because I felt no particular need to handle larger universes), e.g. in https://github.com/rwbarton/lean-homotopy-theory/blob/lean-3.4.2/src/homotopy_theory/topological_spaces/cylinder.lean


Last updated: Dec 20 2023 at 11:08 UTC