TheHoTTGame/1FundamentalGroup/Quest0Part3.md
2021-09-15 19:15:12 +01:00

3.0 KiB

refl ≡ loop is empty - transporting paths using the double cover

By the end of this page we will have shown that refl ≡ loop is an empty space, we start at the end, moving backwards to what we need, as we would often do in practice.

In Quest0.agda you should see

Refl≢loop : Refl  loop  
Refl≢loop h = ?

In the library we have true≢false : true ≡ false → ⊥ which says that the space of paths in Bool from true to false is empty. We will assume it here and leave it as a side quest, see 1FundamentalGroup/Quest0SideQuests/SideQuest0.

  • Load the file with C-c C-l and navigate to the hole.
  • Write true≢false in the hole and refine using C-c C-r, agda knows true≢false maps to so it automatically will make a new hole.
  • Check the goal in the new hole using C-c C-, it should be asking for a path from true to false.

To give this path we need to visualise 'lifting' Refl and loop along the Boolean-bundle doubleCover. When we 'lift' Refl - starting at the point true : doubleCover base - it will still be a constant path at true, which we can just draw as a dot true. When we 'lift' loop - starting at the point true : doubleCover base - it will look like

We can find the end points of both 'lifted paths' by using subst. We should be able to see that the end point of the 'lifted' Refl is just true and the end point of the 'lifted' loop is false. Now a homotopy h : refl ≡ loop is 'lifted' to some kind of surface

The end points of each 'lifted paths' in the 'lifted homotopy' form a path in the endpoint fiber doubleCover base from the endpoint of 'lifted Refl' to the endpoint of 'lifted base', i.e. a path from true to false in Bool, which is what we need.

We use endPt to pick out the end points of 'lifted paths', given to us in the library (originally called subst):

endPt : (B : A  Type) (p : x  y) (bx : B x)  B y

It says given a bundle B over space A, a path p from x : A to y : A, and a point bx above x, we can get the end point of 'lifted p starting at bx'. So let's make the function that takes a path from base to base and spits out the end point of the 'lifted path'.

endPtOfTrue : (p : base  base)  doubleCover base
endPtOfTrue p = ?

Try filling in endPtOfTrue using endPt and the skills you have developed so far. You can check that endPtOfTrue Refl is true and that endPtOfTrue loop is false using C-c C-n.

Lastly we need to make the function endPtOfTrue take the path h : refl ≡ loop to a path from true to false. In general if f : A → B is a function and p is a path between points x y : A then we get a map cong f p from f x to f y. (Note that p here is actually a homotopy h.)

cong : (f : A  B)  (p : x  y)  f x  f y

Using cong and endPtOfTrue you should be able to complete Quest0.