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

Problem finding digraph stabilisers with isolated vertices #38

Open
wilfwilson opened this issue Oct 22, 2021 · 0 comments
Open

Problem finding digraph stabilisers with isolated vertices #38

wilfwilson opened this issue Oct 22, 2021 · 0 comments
Labels
component: Rust Stuff about the Rust side of Vole kind: bug Something seems to be wrong or broken!

Comments

@wilfwilson
Copy link
Collaborator

wilfwilson commented Oct 22, 2021

Here is a digraph:
digraph

Something is going wrong when computing its stabiliser with Vole, and I think it's because Vole does not (cannot?) "properly" handle Digraphs with isolated vertices.

If I want to stabilise this digraph D in Sym(1) or Sym(2), then all is fine, the isolated vertex doesn't come into play. It's also fine with Sym(3), because then, all points in question are vertices of the digraph. But once I get to Sym(4), Vole is confused about the distinction between the points 3 and 4 – note that 3 is a vertex of the digraph, but that 4 is not.

gap> D := Digraph([[2], [], []]);;
gap> VoleFind.Group(1, Constraint.Stabilise(D, OnDigraphs));
Group(())
gap> VoleFind.Group(2, Constraint.Stabilise(D, OnDigraphs));
Group(())
gap> VoleFind.Group(3, Constraint.Stabilise(D, OnDigraphs));
Group(())
gap> VoleFind.Group(4, Constraint.Stabilise(D, OnDigraphs));
thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 3', src/vole/refiners/digraph.rs:76:35
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Any { .. }', src/bin/vole.rs:100:53
Error, No return value from 'vole' at /Users/Wilf/gap/pkg/vole/gap/internal/comms.gi:285 called from
_Vole.ExecuteVole( rec(
    config := rec(
        points := points,
        find_coset := find_coset,
        find_canonical := find_canonical,
        root_search := root_search,
        search_config := rec(
            full_graph_refine := false,
            find_single := find_single ) ),
    constraints := constraints ), gapcons, canonical_group ) at /Users/Wilf/gap/pkg/vole/gap/internal/comms.gi:414 called from
_Vole.Solve( points, false, false, false, constraints, false, false ) at /Users/Wilf/gap/pkg/vole/gap/internal/comms.gi:455 called from
_Vole.GroupSolve( bounds.max, constraints ) at /Users/Wilf/gap/pkg/vole/gap/interface.gi:43 called from
<function "VoleFind.Group">( <arguments> )

Note that everything is fine if the isolated vertex just isn't part of the digraph:

gap> D := Digraph([[2], []]);;
gap> VoleFind.Group(1, Constraint.Stabilise(D, OnDigraphs));
Group(())
gap> VoleFind.Group(2, Constraint.Stabilise(D, OnDigraphs));
Group(())
gap> VoleFind.Group(3, Constraint.Stabilise(D, OnDigraphs));
Group(())
gap> VoleFind.Group(4, Constraint.Stabilise(D, OnDigraphs));
Group([ (3,4) ])

At some point, this is a policy choice: which permutations should be considered to stabilise a digraph? Should they treat isolated vertices interchangeably with points that are not vertices in the digraph?

In my opinion, I think that a permutation should stabilise a digraph if and only if it stabilises its set of vertices, and acts in the proper way on those vertices (and it can do whatever it want to points that are not vertices). In particular, for me, the 'correct' answer to the erroring code above should be:

gap> VoleFind.Group(4, Constraint.Stabilise(D, OnDigraphs));
Group(())

Since the points 3 and 4 are not interchangeable in relation to this digraph.

We need to be careful that any change we make does not interfere with our implementation of the centraliser refiner for a permutation.

@wilfwilson wilfwilson added the kind: bug Something seems to be wrong or broken! label Oct 22, 2021
@wilfwilson wilfwilson added the component: Rust Stuff about the Rust side of Vole label Dec 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: Rust Stuff about the Rust side of Vole kind: bug Something seems to be wrong or broken!
Projects
None yet
Development

No branches or pull requests

1 participant