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

Improve isomorphic_group_over_finite_field #609

Merged
merged 1 commit into from
Aug 10, 2021

Conversation

fingolfin
Copy link
Member

We now use Hecke._minkowski_multiple instead of our own function
maximal_order_of_finite_linear_group_qq -- the former is based on
published, peer reviewed, and old results; the latter has no complete
published proof.

As a nice side effect, we can use that Hecke._minkowski_multiple
"knows" about number fields, and thus get much better bounds for those
than before. For reference, we compare the old and "new" values for
some example input fields via this code:

for n in [0,1,3,4,5]
  K = n == 0 ? QQ : CyclotomicField(n,"a")[1]
  println("K = $K")
  for d in 1:6
    println("    d=$d: ",
        largest_order_of_finite_linear_group_qq(degree(K)*d),
        " vs ",
        Hecke._minkowski_multiple(K,d))
  end
  println()
end

This results in the following output (note the discrepancy between QQ and the
cyclotomic field of order 1; I don't know if this is a bug in Hecke, or a
deficiency in the mathematical result it uses, or a mistake I am making -- @thofman might know more).

K = Rational Field
d=1: 2 vs 2
d=2: 12 vs 24
d=3: 48 vs 48
d=4: 1152 vs 5760
d=5: 3840 vs 11520
d=6: 103680 vs 2903040

K = Cyclotomic field of order 1
d=1: 2 vs 2
d=2: 12 vs 48
d=3: 48 vs 96
d=4: 1152 vs 23040
d=5: 3840 vs 46080
d=6: 103680 vs 23224320

K = Cyclotomic field of order 3
d=1: 12 vs 6
d=2: 1152 vs 144
d=3: 103680 vs 2592
d=4: 696729600 vs 622080
d=5: 8360755200 vs 3732480
d=6: 1961990553600 vs 1881169920

K = Cyclotomic field of order 4
d=1: 12 vs 4
d=2: 1152 vs 96
d=3: 103680 vs 384
d=4: 696729600 vs 92160
d=5: 8360755200 vs 368640
d=6: 1961990553600 vs 185794560

K = Cyclotomic field of order 5
d=1: 1152 vs 10
d=2: 696729600 vs 1200
d=3: 1961990553600 vs 12000
d=4: 1371195958099968000 vs 2880000
d=5: 2551082656125828464640000 vs 144000000
d=6: 10409396852733332453861621760000 vs 362880000000

We now use `Hecke._minkowski_multiple` instead of our own function
`maximal_order_of_finite_linear_group_qq` -- the former is based on
published, peer reviewed, and old results; the latter has no complete
published proof.

As a nice side effect, we can use that `Hecke._minkowski_multiple`
"knows" about number fields, and thus get much better bounds for those
than before. For reference, we compare the old and "new" values for
some example input fields via this code:

    for n in [0,1,3,4,5]
      K = n == 0 ? QQ : CyclotomicField(n,"a")[1]
      println("K = $K")
      for d in 1:6
        println("    d=$d: ",
            largest_order_of_finite_linear_group_qq(degree(K)*d),
            " vs ",
            Hecke._minkowski_multiple(K,d))
      end
      println()
    end

This results in the following output (note the discrepancy between QQ and the
cyclotomic field of order 1; I don't know if this is a bug in Hecke, or a
deficiency in the mathematical result it uses).

K = Rational Field
    d=1: 2 vs 2
    d=2: 12 vs 24
    d=3: 48 vs 48
    d=4: 1152 vs 5760
    d=5: 3840 vs 11520
    d=6: 103680 vs 2903040

K = Cyclotomic field of order 1
    d=1: 2 vs 2
    d=2: 12 vs 48
    d=3: 48 vs 96
    d=4: 1152 vs 23040
    d=5: 3840 vs 46080
    d=6: 103680 vs 23224320

K = Cyclotomic field of order 3
    d=1: 12 vs 6
    d=2: 1152 vs 144
    d=3: 103680 vs 2592
    d=4: 696729600 vs 622080
    d=5: 8360755200 vs 3732480
    d=6: 1961990553600 vs 1881169920

K = Cyclotomic field of order 4
    d=1: 12 vs 4
    d=2: 1152 vs 96
    d=3: 103680 vs 384
    d=4: 696729600 vs 92160
    d=5: 8360755200 vs 368640
    d=6: 1961990553600 vs 185794560

K = Cyclotomic field of order 5
    d=1: 1152 vs 10
    d=2: 696729600 vs 1200
    d=3: 1961990553600 vs 12000
    d=4: 1371195958099968000 vs 2880000
    d=5: 2551082656125828464640000 vs 144000000
    d=6: 10409396852733332453861621760000 vs 362880000000
@fingolfin fingolfin requested a review from thofma August 10, 2021 14:06
@fingolfin
Copy link
Member Author

Hmm, according to Guralnick and Lorenz, "Orders of finite groups of matrices", for K=Q, the bound S(n,K) is equal to M(n) (the Minkowski bound for the field Q of rational numbers). So the first two lists of bounds ought to be equal. That they are not then might be a deficiency in Hecke? (Note that I verified separately that Hecke._minkowski_multiple(n) is correct, but my number theory skills are not good enough to do the same for _minkowski_multiple(K, n))

@fingolfin
Copy link
Member Author

Hmm, it seems as if the bounds for the cyclotomic field of order 1 are larged by a factor of 2^floor(d/2)

@thofma
Copy link
Collaborator

thofma commented Aug 10, 2021

We are not computing S(n, K) but only a multiple (as written in the comment). I think it is a bit harder to get the 2-part correct. Is it important?

@fingolfin
Copy link
Member Author

fingolfin commented Aug 10, 2021

Ahhh, OK. No, it is not important, I was just baffled by this and thought I did something wrong at first. So, if this is expected, fine by me.

@thofma
Copy link
Collaborator

thofma commented Aug 10, 2021

I guess it should have another name. I will merge once everything is green.

@thofma thofma merged commit 8357504 into oscar-system:master Aug 10, 2021
@fingolfin fingolfin deleted the mh/mat-char0-tweaks branch August 10, 2021 16:43
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