Hi Santanu, Am Mittwoch, 8. Mai 2019 15:15:06 UTC+2 schrieb Santanu: > > I know how to define variables over BooleanPolynomialRing. > This is as follows. > > n=4 > V=BooleanPolynomialRing(n+1,['z%d'%(i) for i in range(n+1)] ) > V.inject_variables() >
The above is what you could do *in an interactive session* in the case that the number of variables isn't known in advance. If it is known that you have exactly four variables, simply do sage: V.<z0,z1,z2,z3> = BooleanPolynomialRing() which would automatically define z0,...,z3 in the global namespace. Similarly, you can do sage: V.<z0,z1,z2,z3> = ZZ[] to create a polynomial ring over the integers with generators z0,...,z3 But the above is not what you could do *in a python module* and in a module it is also a bad idea to inject variables. So, simply put the variables in a list or access them by methods of V. > Can we define similar code over integers (ZZ) or rationals (QQ)? > Actually I wonder if we mean the same when we say "variables over ZZ". I mean "generators of a polynomial ring with integer coefficients". When the number of generators isn't known in advance, but the generators are named z0,z1,z2,..., such ring can be created, e.g., by sage: P = PolynomialRing(ZZ, 'z', 5) sage: P Multivariate Polynomial Ring in z0, z1, z2, z3, z4 over Integer Ring However, I could imagine that you wanted to ask how to create a symbolic variable that is assumed to take values in ZZ --- and that's totally different from a generator of a polynomial ring over ZZ. So, if that's what you mean, you could do (in an interactive session) sage: var('z0 z1 z2 z3', domain='integer') (which would inject the variables into the global namespace) or Z = var('z0 z1 z2 z3', domain='integer') (which would also work in a python module and puts the variables into a tuple). Also I want to store variables in an array like Z=[z0,z1,z2,z3] > but it should be automatic. I will change only n. > If you really want to work with symbolic variables, you could do sage: n = 5 sage: Z = var(['z{}'.format(i) for i in range(n)], domain='integer') sage: Z (z0, z1, z2, z3, z4) sage: z0 z0 (thus, the variables are both put in a tuple and injected into the global name space. However, I believe that very many Sage users work with symbolic variables when they should better use generators of polynomial rings. So, perhaps code such as the following sage: P = PolynomialRing(ZZ, 'z', n) sage: Z = P.gens() sage: Z (z0, z1, z2, z3, z4) sage: P.gen(0) z0 sage: P.inject_variables() Defining z0, z1, z2, z3, z4 (the latter only in an interactive session) suites your needs better. Best regards, Simon -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/d7d49151-5dc8-445c-b0dc-e494eb558965%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.