Tuesday, January 1, 2008

R.<a,b,c> = QQ[] what is that?

While playing with Jaap's wish, I finally got fedup and decided to study what the funny syntax "R.<a,b,c> = QQ[]" really means. So I did:

sage: R. = QQ[]
sage: preparse("R. = QQ[]")
"R = QQ['a, b, c']; (a, b, c,) = R._first_ngens(Integer(3))"

Now everything is crystal clear! Let's study what QQ is:

sage: QQ?
Type: RationalField
Base Class:
String Form: Rational Field
Namespace: Interactive
Docstring:

The class class{RationalField} represents the field Q of
rational numbers.

Cool, why not. So what is the _first_ngens method doing? Let's find out:

sage: R._first_ngens?
Type: builtin_function_or_method
Base Class:
String Form:
Namespace: Interactive

Hm, not really useful. Let's push harder:

sage: R._first_ngens??
Type: builtin_function_or_method
Base Class:
String Form:
Namespace: Interactive
Source:
def _first_ngens(self, n):
v = self.gens()
return v[:n]

So the equivalent code is this:

sage: R.gens()
(a, b, c)
sage: R.gens()[:3]
(a, b, c)

Cool, why not. So what is the R.gens() doing?

sage: R.gens?
Type: builtin_function_or_method
Base Class:
String Form:
Namespace: Interactive
Docstring:

Return the tuple of variables in self.

EXAMPLES:
sage: P. = QQ[]
sage: P.gens()
(x, y, z)

sage: P = MPolynomialRing(QQ,10,'x')
sage: P.gens()
(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9)

sage: P. = MPolynomialRing(QQ,2) # weird names
sage: P.gens()
(SAGE, SINGULAR)

Ah, that's the answer we want. :)

No comments: