Opened 15 months ago

Last modified 11 months ago

#23047 new enhancement

Meta Ticket: Utilize coercion framework for scheme points and morphisms

Reported by: bhutz Owned by: bhutz
Priority: major Milestone: sage-8.0
Component: algebraic geometry Keywords:
Cc: novoselt, paulfili, atowsley Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:


While there is some coercion-like behavior for schemes objects, it is done in an ad-hoc way that does not utilize the coercion framework and is overdue to be updated.

The following three scenarios should work using the coercion model.

  • Coercion between ambient spaces whose base rings are compatible.

For example, \mathbb{P}^n(ZZ) should be coercible to \mathbb{P}^n(QQ) since ZZ is coercible to QQ. This may involve a finding a larger common parent.

sage: P.<x,y> = ProjectiveSpace(QQ,1)
sage: T.<u,v> = ProjectiveSpace(ZZ,1)
sage: Q = P(1,1);Q2 = T(1,1)
sage: Q == Q2

This would be a major a paradigm shift for schemes, since currently the first comparison for points is equality of the ambient spaces. The current behavior is in direct contradiction to other areas of Sage, for example, matrix spaces.

sage: m1=matrix(QQ,2,2,[1,1,0,1])
sage: m2=matrix(ZZ,2,2,[1,1,0,1])
sage: m1==m2

This would also allow functions to act on points when the domain of the function and ambient space of the point are compatible.

  • Coercion of other objects to schemes points

These other objects could be any object which makes sense to coerce such as: base ring elements or list/tuples of base ring elements.

While it is sometimes possible to initialize a point in some of these scenarios, since it is not done through the coercion framework, comparisons fail.

sage: P.<u,v>=ProjectiveSpace(ZZ,1)
sage: P(0) == 0
  • left and right actions for base rings and matrices on scheme points and morphisms

There is a natural PGL action on projective space and GL action on affine space. It would be natural to use the aspect of the coercion model.

There is also a natural action of the base ring on projective points and morphisms. This is currently done with the scale_by() function, which modifies the object in place. However, there are good arguments for why this should be changed (see ticket #22268).

Change History (4)

comment:1 Changed 15 months ago by novoselt

  • Cc novoselt added

comment:2 Changed 15 months ago by bhutz

  • Authors paulfili, atowsley deleted
  • Cc paulfili atowsley added

comment:3 Changed 11 months ago by bhutz

  • Owner changed from (none) to bhutz

The three tickets for this functionality are the following:

  • #23814 - matrix action on maps
  • #23816 - matrix action on points

comment:4 Changed 11 months ago by atowsley

The three tickets for this functionality are the following: (change 23814 to 23813)

#23805 - coercion for points

#23813 - matrix action on maps

#23816 - matrix action on points

Note: See TracTickets for help on using tickets.