Отличный вопрос!Давайте более подробно рассмотрим рассматриваемые функции.
f(x)=x^2
def g(x):
return(x^2)
print type(g(90))
print type(f(90))
Это дает
<type 'sage.rings.integer.Integer'>
<type 'sage.symbolic.expression.Expression'>
Итак, вы видите разницу между символической определенной функциейс нотацией f(x)
и функцией Python с использованием ключевого слова def
.В Sage у первого есть доступ ко многим вещам (например, исчислению), которых у простых старых Sage не будет.
В этом случае я бы порекомендовал, просто для того, что вам нужно,
sage: a = f(90)
sage: ZZ(a).mod(7)
1
или, возможно, более надежный
sage: mod(a,7)
1
Более длинное объяснение.
Для символических вещей mod
не то, что вы думаете.На самом деле, я не уверен, что это что-то сделает (см. Документацию по mod
, чтобы узнать, как использовать его для полиномиальной модульной работы над идеалами).Вот код (доступный с x.mod??
, документация доступная с x.mod?
):
from sage.rings.ideal import is_Ideal
if not is_Ideal(I) or not I.ring() is self._parent:
I = self._parent.ideal(I)
#raise TypeError, "I = %s must be an ideal in %s"%(I, self.parent())
return I.reduce(self)
И получается, что для родовых колец (как символическое «кольцо») ничего не происходит на этом последнем шаге:
return f
Вот почему нам нужно, так или иначе, попросить, чтобы оно снова было целым числом.См. Trac 27401 .