Conversation
|
I'm going to leave question 1 open for the time being. 2: 🤷♀️ I'm happy with 3: I don't think 4: I don't really like saying "Don't pass 0 as the argument to this function" when we're in an additive world. ( |
|
Re: 1. I think we hold the PR until we have a good usecase. Re: 2. OK, this give a good deprecation pathway for Re: 3. Agreed. Re: 4. Agreed. |
|
I don't have firm opinions here. That said, pseudo-inverses are not necessarily countable, so giving back a list of them seems a doomed endeavor; at best you can get |
|
@endgame thinking about it (and double-checking what the existing is), I'd rather keep the current name, |
|
OK, pushed. |
Add
InverseSemigroupaboveGroup, andRegularSemigroupabove that.There are a few things that I think need resolving before this gets merged:
Group? The main one I was toying with was (borrowing some bits fromsemialign):And then using this to compute diffs. But it didn't pay out into anything ergonomic. I probably need to think more about whether this should be done with
ZiporSemialign.Ed mentioned:
(Did this pay out?)
Should the inverse operation be called
inv, or something else? (Bikeshedding)If pseudoinverses in
RegularSemigroupare not unique, should there be a functioninvs :: g -> NonEmpty g, with no guarantee that it returns every pseudoinverse (too expensive to calculate otherwise)?Where should
powsit in the hierarchy? If you have unique inverses (InverseSemigroup) you can compute sensiblepowfor any nonzero integer power, but zero would have to bex <> inv xorinv x <> x, and I don't think you have a guarantee that those are the same.