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

Toric divisors from fans in sublattices #16334

Open
sagetrac-jkeitel mannequin opened this issue May 12, 2014 · 23 comments
Open

Toric divisors from fans in sublattices #16334

sagetrac-jkeitel mannequin opened this issue May 12, 2014 · 23 comments

Comments

@sagetrac-jkeitel
Copy link
Mannequin

sagetrac-jkeitel mannequin commented May 12, 2014

Currently, there's a problem with toric divisors of toric varieties created from fans that live in a sublattice.

The following examples illustrates that:

sage: N = ToricLattice(3)
sage: S = N.submodule([(1,0,0), (0, 1, 0)])
sage: B = S.basis()
sage: cones = [Cone([B[0], B[1]]), Cone([B[1], -B[0]-B[1]]), Cone([-B[0]-B[1], B[0]])]
sage: f = Fan(cones)
sage: X = ToricVariety(f)
sage: X.is_complete()
True
sage: (-X.K()).polyhedron()
A 3-dimensional polyhedron in QQ^3 defined as the convex hull of 3 vertices and 1 line

However, the real polyhedron should be a two-dimensional compact polygon:

sage: (-toric_varieties.P(2).K()).polyhedron()
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 3 vertices

CC: @vbraun @novoselt @sagetrac-jakobkroeker

Component: algebraic geometry

Keywords: toric

Stopgaps: wrongAnswerMarker

Work Issues: fix inner product between N and M

Author: Jan Keitel

Branch/Commit: u/jkeitel/toric_divisors_sublattice @ 108339b

Reviewer: Andrey Novoseltsev, Volker Braun

Issue created by migration from https://trac.sagemath.org/ticket/16334

@sagetrac-jkeitel sagetrac-jkeitel mannequin added this to the sage-6.3 milestone May 12, 2014
@sagetrac-jkeitel

This comment has been minimized.

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 12, 2014

comment:2

Alright, here's a short patch that fixes the problem. I don't know whether it's the best way of working around this, but it's simple and does the trick.

Volker, could you have a look? :)

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 12, 2014

Branch: u/jkeitel/toric_divisor_sublattice

@sagetrac-jkeitel

This comment has been minimized.

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 12, 2014

Author: Jan Keitel

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 12, 2014

Commit: d26cadf

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 12, 2014

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 12, 2014

New commits:

d26cadfFix polyhedron method for toric divisors in sublattices.

@novoselt
Copy link
Member

comment:4

I am confused - the polyhedron of the toric variety whose fan is in the lattice N lives in the dual lattice M, why is it intersected with the sublattice where the fan lives?

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 13, 2014

Changed commit from d26cadf to 886225d

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 13, 2014

Branch pushed to git repo; I updated commit sha1. New commits:

886225dUse the correct lattice and adjust doctest.

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 13, 2014

comment:6

Hi Andrey,

thanks for having a look at this. You're of course right.
I've changed the code and am now using a doctest that would give an incorrect result for the previous patch.

Best,
Jan

@vbraun
Copy link
Member

vbraun commented May 13, 2014

comment:7

Looks good to me... Andrey, any further thoughts?

@vbraun
Copy link
Member

vbraun commented May 13, 2014

Reviewer: Andrey Novoseltsev, Volker Braun

@novoselt
Copy link
Member

comment:8

I think this polyhedron should live in the fan.dual_lattice(), so instead of lifting the generators and taking the intersection with their span (which is something pretty random), the correct approach is to push previously used inequalities into this dual lattice (which is a quotient, so has smaller dimension).

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 13, 2014

comment:9

Okay, if I understand you correctly, that's actually quite easy to realise. I have a patch that does this and I'll push it tomorrow when I'm back at the institute.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 19, 2014

Changed commit from 886225d to 108339b

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented May 19, 2014

Branch pushed to git repo; I updated commit sha1. New commits:

21afa61Merge branch 'develop' into toric_divisor_sublattice
108339bTry implementing a proper quotient for the divisor polyhedron.

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented May 19, 2014

comment:11

Sorry, it took a bit longer because something else came up. The newest change tries to do what you just suggested, but since polyhedra corresponding to divisors do not necessarily have to be lattice polytopes, it looks a bit clumsy. Could you have a look and check whether there's a nicer way of doing it?

Best, Jan

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented Jun 16, 2014

comment:12

Unfortunately, the diff on trac seems to be broken. Something else has come up and I'm not sure what to do about it.

Consider the following:

sage: N = ToricLattice(4)
sage: S = N.submodule([(1,0,0,0), (0,1,0,0)])
sage: B = S.basis()
sage: S.dual()
2-d lattice, quotient of 4-d lattice M by Sublattice <M(0, 0, 1, 0), M(0, 0, 0, 1)>
sage: S.dual().gens()
(M[0, 1, 0, 0], M[1, 0, 0, 0])
sage: S.gens()
(N(1, 0, 0, 0), N(0, 1, 0, 0))

Usually, we have that ith generator of a lattice is 'dual' (don't know whether that's the right adjective) to the ith generator of the dual lattice. Here, however, there is an additional reordering going on.

As a consequence, we have the following behavior:

sage: cones = [Cone([B[0], B[1]]), Cone([B[1], -3*B[0]-2*B[1]]), Cone([-3*B[0]-2*B[1], B[0]])]
sage: X = ToricVariety(Fan(cones))
sage: p = (-X.K()).polyhedron(); p
A 2-dimensional polyhedron in QQ^2 defined as the convex hull of 3 vertices
sage: p.integral_points()
((-1, -1), (-1, 0), (-1, 1), (-1, 2), (0, -1), (0, 0), (1, -1))
sage: (-X.K()).sections()
(M[-1, -1, 0, 0],
 M[0, -1, 0, 0],
 M[1, -1, 0, 0],
 M[2, -1, 0, 0],
 M[-1, 0, 0, 0],
 M[0, 0, 0, 0],
 M[-1, 1, 0, 0])

which leads directly to this (obviously incorrect, see the z1^-3) output:

sage: (-X.K()).sections_monomials()
(z1^6, z0*z1^3, z0^2, z0^3/z1^3, z1^4*z2, z0*z1*z2, z1^2*z2^2)

What should be changed? Finding the generators of a dual of a lattice? The polyhedron method of the divisor? The monomial method of the divisor?

@novoselt
Copy link
Member

comment:13

Just reordering may not be sufficient in more complicated examples.

I think the assumption is that pairing between dual lattices is the "usual dot product", i.e. sum of products of corresponding components. If this is not the case for a particular representation, then everything will go wrong. Solutions are to either set generators of the dual upon construction correctly or set the pairing properly. Given that * is natural for pairing, it may be a bit counterintuitive to have M(1,0) * N(0,1) == 1, so forcing a correct basis seems like a better option.

@sagetrac-jkeitel
Copy link
Mannequin Author

sagetrac-jkeitel mannequin commented Jun 17, 2014

Work Issues: fix inner product between N and M

@sagetrac-vbraun-spam sagetrac-vbraun-spam mannequin removed this from the sage-6.3 milestone Aug 10, 2014
@sagetrac-vbraun-spam sagetrac-vbraun-spam mannequin added this to the sage-6.4 milestone Aug 10, 2014
@sagetrac-jakobkroeker
Copy link
Mannequin

sagetrac-jakobkroeker mannequin commented Mar 4, 2017

Stopgaps: wrongAnswerMarker

@mkoeppe mkoeppe removed this from the sage-6.4 milestone Dec 29, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants