-
Notifications
You must be signed in to change notification settings - Fork 297
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
[Merged by Bors] - feat(group_theory/free_product): equivalence with reduced words #7395
Conversation
I marked this RFC because there are a couple open design questions. Most importantly: should we have a canonical definition of the coproduct, and if so what should it be? There is already a nice "automated" construction in If we don't define the coproduct as reduced words, we can still use the material in this PR to prove that the coproduct doesn't make too many identifications -- you just need to let the coproduct act on the reduced words. If we do define the coproduct as reduced words, there is still the question of decidability assumptions. It doesn't seem ideal to have multiplication depend on decidability instances. Should we use classical instances throughout? I should say that constructively, the approach in this PR is not as satisfying as the current construction of free groups. By working with unreduced words, then quotienting and proving confluence, you get constructive proofs of various injectivity statements, even without decidability assumptions. However Lean can't tell the difference between constructive and non-constructive proofs of injectivity. The upshot of the approach in this PR is that it's considerably simpler than dealing with confluence. |
Sorry, I'm not going to have a chance to look at this soon; limited Lean time. One request would just be that David's explanation above about the relationship with |
After thinking a bit about this, I would slightly prefer to change the setup here, starting from some quotient definition of the free product as in #2578, and then proving that it's |
ok, seems reasonable. Let me mark this as WIP then. |
The only comment I have on this is that it's often not a good idea to define a new type only to prove it's isomorphic to another type. My feeling is that either |
@ChrisHughes24 this sounds reasonable -- the API should mainly expose one of I haven't thought much about creating an API in this PR. But it should be straightforward to build an API on top of this, proving things like decidable equality in |
I think it would be good to see more API before merging this. @dwarn Do you think you can add some? |
I added some decidable equality instances and reorganized the code to be more user friendly. I'm not sure what else to add. Maybe an analogue of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
bors r+ |
We show that each element of the free product is represented by a unique reduced word.
Build failed (retrying...): |
We show that each element of the free product is represented by a unique reduced word.
Build failed: |
Can you merge master and fix the build? |
bors merge |
We show that each element of the free product is represented by a unique reduced word.
Pull request successfully merged into master. Build succeeded: |
We show that each element of the free product is represented by a unique reduced word.