Opened 11 years ago

Closed 7 years ago

Last modified 7 years ago

#9480 closed defect (fixed)

Sage mixes Infinity and +Infinity

Reported by: zimmerma Owned by: robertwb
Priority: major Milestone: sage-duplicate/invalid/wontfix
Component: coercion Keywords: infinity, equality
Cc: Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges


This is related to #8942. The limit function can output either +Infinity, -Infinity, or Infinity, the later meaning a complex infinity. For example:

sage: limit(1/x, x=0, dir='above')
sage: limit(1/x, x=0, dir='below')
sage: limit(1/x, x=0)             

However Sage does not distinguish +Infinity and Infinity:

sage: l1=limit(1/x, x=0, dir='above')
sage: l2=limit(1/x, x=0, dir='below')
sage: l3=limit(1/x, x=0)
sage: l1==l3

Change History (9)

comment:1 Changed 11 years ago by burcin

  • Component changed from calculus to coercion
  • Keywords infinity equality added
  • Milestone set to sage-4.5.3
  • Owner changed from burcin to robertwb

This is more of a problem with the equality checking rules in Sage and the coercion system than symbolics, so I'm changing the component to coercion.

If the arguments compare equal when coerced to a common parent, Sage returns True for the equality. In this case, the coercion goes to the UnsignedInfinityRing, where +Infinity is mapped to unsigned_infinity.

sage: UnsignedInfinityRing.has_coerce_map_from(InfinityRing)
sage: Infinity
sage: UnsignedInfinityRing.coerce(Infinity)

BTW, isn't there an inconsistency in the capitalization of Infinity. Shouldn't it be lowercase according to Python conventions?

comment:2 Changed 9 years ago by tscrim

Sometimes it's infinity and others its Infinity. At the very least this should be consistent. Also there are other issues with infinity: #11506 #9547.

comment:3 Changed 8 years ago by jdemeyer

  • Milestone changed from sage-5.11 to sage-5.12

comment:4 Changed 8 years ago by zimmerma

  • Status changed from new to needs_review

in Sage 5.11 we get:

sage: l1=limit(1/x, x=0, dir='right'); l1
sage: l2=limit(1/x, x=0, dir='left'); l2 
sage: l3=limit(1/x, x=0); l3             
sage: bool(l1==l2), bool(l2==l3), bool(l3==l1)
(False, False, False)

however the objects returned are in SR and not in the infinity class:

sage: type(l1), l1.parent()
(sage.symbolic.expression.Expression, Symbolic Ring)
sage: p1=+Infinity
sage: type(p1), p1.parent()
(sage.rings.infinity.PlusInfinity, The Infinity Ring)

I propose to close that ticket, and open a new one about the above issue (or add it to an existing ticket).


comment:5 Changed 8 years ago by zimmerma

or add it to an existing ticket

I've added a comment in #14857


comment:6 Changed 7 years ago by ncohen

  • Status changed from needs_review to needs_info

No patch to review on this ticket...

Paul : when you want to close a ticket, you should set its milestone to wontfix/duplicate, say why on a comment, and change the status to positive_review so that the release manager will see it.


comment:7 Changed 7 years ago by zimmerma

  • Resolution set to fixed
  • Status changed from needs_info to closed

in Sage 6.0 we get:

sage: l1=limit(1/x, x=0, dir='above')
sage: l3=limit(1/x, x=0)
sage: bool(l1==l3)

thus the issue is fixed now, and I change the status to "fixed".


comment:8 Changed 7 years ago by zimmerma

sorry when changing to "fixed" (which made more sense to me than invalid or wontfix) the status was changed automatically to "closed"...


comment:9 Changed 7 years ago by tscrim

  • Milestone changed from sage-6.1 to sage-duplicate/invalid/wontfix

I also verified that it works in 6.1.beta2.

Note: See TracTickets for help on using tickets.