Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πₙ(Sⁿ) = Z, and other cleanups #1800

Merged
merged 6 commits into from
Jan 8, 2024
Merged

Conversation

jdchristensen
Copy link
Collaborator

@jdchristensen jdchristensen commented Jan 8, 2024

There are three commits and it's probably best to look at them separately. The library builds after each commit.

  1. Proves that πₙ(Sⁿ) = Z. It turns out that very little was needed to prove this, since the n = 2 case follows from the licata_finster lemma we already had, since S¹ is a coherent H-space. The higher cases follow from Freudenthal.

  2. Improves pi_prod in HomotopyGroup.v in a few independent ways. First, it is now proven for all n, not just n > 0. Second, the map underlying the equivalence is now the natural one, so there is no need to manually prove that it is a group homomorphism for n > 0. Third, the proof is much faster. (The Defined. line used to be a bit slow.)

  3. This commit contains lots of minor cleanups to things I read while working on the first two. It also adds some lemmas that I didn't end up using, but which are probably worth having. But it's definitely better to review this separately, since it touches a lot.

After review, I'll push one more commit that renames Pi1S1.v to PinSn.v, but I've left that out for now to make it easier to review. That's the only reason this is marked as a draft.

@jdchristensen jdchristensen marked this pull request as draft January 8, 2024 16:11
@jdchristensen jdchristensen requested a review from Alizter January 8, 2024 16:11
Comment on lines -114 to -129
(** The nth homotopy group is in fact a functor. We now give the type this functor ought to have. For n = 0, this will simply be a pointed map, for n >= 1 this should be a group homomorphism. *)
Definition pi_functor_type (n : nat) (X Y : pType) : Type
:= match n with
| 0 => pTr 0 X ->* pTr 0 Y
| n.+1 => GroupHomomorphism (Pi n.+1 X) (Pi n.+1 Y)
end.

(* Every such map is, in particular, a pointed map. *)
Definition pi_functor_type_pmap {n X Y}
: pi_functor_type n X Y -> Pi n X ->* Pi n Y
:= match n return pi_functor_type n X Y -> (Pi n X ->* Pi n Y) with
| 0 => fun f => f
(* This works because [pmap_GroupHomomorphism] is already a coercion. *)
| n.+1 => fun f => f
end.
Coercion pi_functor_type_pmap : pi_functor_type >-> pForall.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These lines were removed because this Coercion didn't work. The problem is that pi_functor_type isn't syntactically the same as the output type of fmap (Pi n) f, so the coercion wouldn't kick it. I tried a few things and concluded that it's probably not possible. That's why I introduced pPi as a functor directly landing in pointed types.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(The coercion did work for fmap (Pi n.+1) f, but in that case the existing coercion from groups to pointed types also works.)

Copy link
Collaborator

@Alizter Alizter Jan 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is more trouble to get working than it is worth in the end. I think if you really want to be precise with this functor in practice, its better to use an explicit version anyway. I think your solution is good going fowrad.

@@ -251,6 +251,19 @@ Proof.
exact (equiv_path_prod (fst f _, snd f _) (dpoint P, dpoint Q)).
Defined.

Definition functor_pprod {A A' B B' : pType} (f : A ->* A') (g : B ->* B')
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have a notion of bifunctor, but I'm not sure if it would be useful to use here.

Copy link
Collaborator

@Alizter Alizter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great! I think I've proven Pi_n S^n at least twice before, but I never cleaned it up and PRed it. I believe the thing that annoyed me was the Pi functor coercion, which it seems you've fixed in a sensible way.

@Alizter
Copy link
Collaborator

Alizter commented Jan 8, 2024

@jdchristensen Feel free to push your renaming commit, I'm happy with the changes. It's good to have this result finally. Hopefully Pi3S2 is also doable since we should have most of the tools in place.

@jdchristensen jdchristensen marked this pull request as ready for review January 8, 2024 21:13
@jdchristensen
Copy link
Collaborator Author

I added two commits with minor changes, and then a third that renamed Pi1S1.v.

@jdchristensen jdchristensen merged commit 1814742 into HoTT:master Jan 8, 2024
21 checks passed
@jdchristensen jdchristensen deleted the pinSn branch January 8, 2024 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants