Вот пример синтаксиса, который вам нужен :
sage: preparse("A.<x> = PolynomialRing(GF(2))")
"A = PolynomialRing(GF(Integer(2)), names=('x',)); (x,) = A._first_ngens(1)"
Чтобы уточнить, Sage создает препарсер, который принимает неверный ввод Python, который имеет смысл математически и дает допустимый Python. На самом деле, это много, даже если вы не думаете, что это:
sage: preparse("2+2")
'Integer(2)+Integer(2)'
так, чтобы арифметика была в Sage с произвольной точностью Integer
с, а не с Python int
с. Самый известный пример, вероятно,
sage: preparse("f(x)=x^2")
'__tmp__=var("x"); f = symbolic_expression(x**Integer(2)).function(x)'
, который выглядит немного сумасшедшим, но позволяет нам использовать "нормальные" математические обозначения для определения символических функций, которые, однако, не являются def
функциями Python таким же образом.
(Наконец, что касается того, почему этот синтаксис работает в вашем исходном примере, очевидно, история состоит в том, что это также синтаксис Магмы.)