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

Rough idea: Vole “canonisers” #12

Open
wilfwilson opened this issue Aug 6, 2021 · 1 comment
Open

Rough idea: Vole “canonisers” #12

wilfwilson opened this issue Aug 6, 2021 · 1 comment
Labels
kind: new feature New features/capabilities nature: technical Uninteresting mathematically and fiddly things topic: canonical Relating to ‘canonical’ searches

Comments

@wilfwilson
Copy link
Collaborator

wilfwilson commented Aug 6, 2021

In writing the documentation for VoleFind.Canonical (which I am still working on), I realised that it's quite tricky to explain what the user needs to do in order to make everything work ‘right’.

To canonise an object x in a way that involves custom refiners or constraints, a user needs to do something like:

VoleFind.Canonical(G, con/ref1(x), con/ref2(x), con/ref3(x))

where the constraints/refiners con/ref1, con/ref2, con/ref3 relate to the object x somehow (this code snippet is simplified). con/ref1 might be something like GB_Con.NormaliserSimple2.

But there's not much point in ever canonising one object in isolation; because a canonical image is essentially meaningless without another canonical image to compare it to.

So if a user does want to canonise another object y (which is possibly in the same orbit of G as x, i.e. x and y are possibly isomorphic, and we want to use VoleFind.Canonical to determine this...) then they have to do everything again in a 'consistent' way (and in the same GAP session). It would again look something like this:

VoleFind.Canonical(G, con/ref1(y), con/ref2(y), con/ref3(y))

This is a lot of typing, and there's potential for accidentally using the wrong refiner, or for giving the refiners in the wrong order, which might give the wrong answer.

Therefore I had an idea: what if you could give the group in which you wish to canonise several things (i.e. G), and the 'family' of refiners you want to use for this (con/ref1, con/ref2, con/ref3), and then would Vole return a function that makes sure that everything is done in a consistent way. You would then call this function on the individual objects that you want to canonise, without having to deal with the refiners again.

The interface would look something like:

gap> canoniser := Vole.Canoniser(G, con/ref1, con/ref2, con/ref3);
gap> res1 := canoniser(x);
rec( group := blah, canonical := blah )
gap> res2 := canoniser(y);
rec( group := blah, canonical := blah )

It will probably be a little bit fiddly to make this work properly (e.g. in my example here, we are canonising a single object, not a pair of objects, and all of the constraints/refiners apply to that object one – what if you want to canonise of a pair of different things instead?).

But that's the idea that I've had anyway.

@wilfwilson wilfwilson added the kind: new feature New features/capabilities label Aug 6, 2021
@wilfwilson
Copy link
Collaborator Author

(Thoughts welcome!)

@wilfwilson wilfwilson added the topic: canonical Relating to ‘canonical’ searches label Sep 3, 2021
@wilfwilson wilfwilson added the nature: technical Uninteresting mathematically and fiddly things label Oct 22, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind: new feature New features/capabilities nature: technical Uninteresting mathematically and fiddly things topic: canonical Relating to ‘canonical’ searches
Projects
None yet
Development

No branches or pull requests

1 participant