TheHoTTGame/1FundamentalGroup/Quest1Part0.md
2021-09-19 13:47:41 +01:00

4.8 KiB
Raw Blame History

Loop Space

In this quest, we continue to formalise the problem statement.

The fundamental group of is .

Intuitively, the fundamental group of at base is consists of loops based as base up to homotopy of paths. In homotopy type theory, we have a native description of loops based at base : it is the space base ≡ base.

In general the loop space of a space A at a point a is defined as follows :

Ω : (A : Type) (a : A)  Type
Ω A a = a  a 

Clearly for each integer n : we have a path that is 'loop around n times'. Locate loop_times in the Quest1.agda (note how agda treats underscores)

loop_times :   Ω  base
loop n times = {!!}

Try casing on n, you should see

loop_times :   Ω  base
loop pos n times = {!!}
loop negsuc n times = {!!}

It says to map out of it suffices to map the non-negative integers (pos) and the negative integers (negsuc).

data  : Type where
  pos    : (n : )  
  negsuc : (n : )  

This definition of uses the naturals, so try casing on n again, you should see

loop_times :   Ω  base
loop pos zero times = {!!}
loop pos (suc n) times = {!!}
loop negsuc n times = {!!}

It says to map out of it suffices to map zero and map each succesive integer suc n inductively. When we loop zero (pos zero) times what should we get? Try filling it in. For looping pos (suc n) times we loop n times and loop once more. For this we need composition of paths.

_∙_ : x  y  y  z  x  z

Try typing _∙_ or ? ∙ ? in the hole (input /.) and refining. Checking the new holes you should see that now you need to give two loops. Try giving it 'loop n times' composed with loop. Then try to also define the map on the negative integers. You will need to invert paths using sym.

Looking up definitions

If you don't know the definition of something you can look up the definition by sticking your cursor on it and pressing M-SPC c d in insert mode or SPC c d in evil mode.

You can use it to find out the definition of and .

Warning : the loop space can contain higher homotopical information that the fundamental group does not capture. For example, consider .

data  : Type where
  base : 
  loop : base  base
  northHemisphere : loop  refl
  southHemisphere : refl  loop

What is `refl`?

For any space A and point a : A, refl is the constant path at a. Technically speaking, we should write refl a to indicate the point we are at, however agda is often smart enough to figure that out.

Intuitively, all loops in based at base is homotopic to the constant path refl. In other words, the fundamental group at base of is trivial. However, the 'composition' of the path southHemisphere with northHemisphere in base ≡ base gives the surface of , which intuitively is not homotopic to the constant point base. So base ≡ base has non-trivial path structure.

S2

Let's be more precise about homotopical data : We can check that a space is 'homotopically trivial' (h-trivial) from dimension n by checking if spheres of dimension n can be filled. To be h-trivial from 0 is for any two points to have a line in between; to fill S⁰. This data is captured in

isProp : Type  Type 
isProp A = (x y : A)  x  y

All maps are continuous in HoTT

There is a subtlety in the definition isProp. This is stronger than saying that the space A is path connected. Since A is equipped with a continuous map taking pairs x y : A to a path between them.

We will show that isProp S¹ is empty despite being path connected.

Similarly, to be h-trivial from 1 is for any two points x y : A and any two paths p q : x ≡ y to have a homotopy from p to q; to fill . This is captured in

isSet : Type  Type
isSet A = (x y : A)  isProp (x  y)

We may therefore want to remove homotopical data beyond a certain dimension. We define the fundamental group to be the homotopical data of up to (and including) dimension 1, i.e. the homotopical data of the loop space of up to dimension 0.

We make the definitions for a space to have homotopical data only up to dimension 0 and 1 respectively

isProp : Type  Type 
isProp A = (x y : A)  x  y

isSet : Type  Type
isSet A = (x y : A)  isProp (x  y)

isProp→isSet : (A : Type)  isProp A  isSet A