## 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:  RationalFieldBase Class: String Form: Rational FieldNamespace: InteractiveDocstring:            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_methodBase Class: String Form: Namespace: Interactive`

Hm, not really useful. Let's push harder:
`sage: R._first_ngens??Type:  builtin_function_or_methodBase Class: String Form: Namespace: InteractiveSource:    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_methodBase Class: String Form: Namespace: InteractiveDocstring:                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. :)