This is an alias of q_binomial().
See q_binomial() for the full documentation.
EXAMPLES:
sage: gaussian_binomial(4,2)
q^4 + q^3 + 2*q^2 + q + 1
Return the -binomial coefficient.
This is also known as the Gaussian binomial coefficient, and is defined by
See Wikipedia article Gaussian_binomial_coefficient
If is unspecified, then the variable is the generator
for
a univariate polynomial ring over the integers.
INPUT:
ALGORITHM:
The naive algorithm uses the product formula. The cyclotomic algorithm uses a product of cyclotomic polynomials (cf. [CH2006]).
When the algorithm is set to 'auto', we choose according to the following rules:
If q is a polynomial:
When n is small or k is small with respect to n, one uses the naive algorithm. When both n and k are big, one uses the cyclotomic algorithm.
If q is in the symbolic ring, one uses the cyclotomic algorithm.
Otherwise one uses the naive algorithm, unless q is a root of unity, then one uses the cyclotomic algorithm.
EXAMPLES:
By default, the variable is the generator of :
sage: from sage.combinat.q_analogues import q_binomial
sage: g = q_binomial(5,1) ; g
q^4 + q^3 + q^2 + q + 1
sage: g.parent()
Univariate Polynomial Ring in q over Integer Ring
The -binomial coefficient vanishes unless
:
sage: q_binomial(4,5)
0
sage: q_binomial(5,-1)
0
Other variables can be used, given as third parameter:
sage: p = ZZ['p'].gen()
sage: q_binomial(4,2,p)
p^4 + p^3 + 2*p^2 + p + 1
The third parameter can also be arbitrary values:
sage: q_binomial(5,1,2) == g.subs(q=2)
True
sage: q_binomial(5,1,1)
5
sage: q_binomial(4,2,-1)
2
sage: q_binomial(4,2,3.14)
152.030056160000
sage: R = GF(25, 't')
sage: t = R.gen(0)
sage: q_binomial(6, 3, t)
2*t + 3
We can also do this for more complicated objects such as matrices or symmetric functions:
sage: q_binomial(4,2,matrix([[2,1],[-1,3]]))
[ -6 84]
[-84 78]
sage: Sym = SymmetricFunctions(QQ)
sage: s = Sym.schur()
sage: q_binomial(4,1, s[2]+s[1])
s[] + s[1] + s[1, 1] + s[1, 1, 1] + 2*s[2] + 4*s[2, 1] + 3*s[2, 1, 1]
+ 4*s[2, 2] + 3*s[2, 2, 1] + s[2, 2, 2] + 3*s[3] + 7*s[3, 1] + 3*s[3, 1, 1]
+ 6*s[3, 2] + 2*s[3, 2, 1] + s[3, 3] + 4*s[4] + 6*s[4, 1] + s[4, 1, 1]
+ 3*s[4, 2] + 3*s[5] + 2*s[5, 1] + s[6]
TESTS:
One checks that the first two arguments are integers:
sage: q_binomial(1/2,1)
Traceback (most recent call last):
...
ValueError: arguments (1/2, 1) must be integers
One checks that is nonnegative:
sage: q_binomial(-4,1)
Traceback (most recent call last):
...
ValueError: n must be nonnegative
This also works for variables in the symbolic ring:
sage: z = var('z')
sage: factor(q_binomial(4,2,z))
(z^2 + z + 1)*(z^2 + 1)
This also works for complex roots of unity:
sage: q_binomial(6,1,I)
1 + I
Check that the algorithm does not matter:
sage: q_binomial(6,3, algorithm='naive') == q_binomial(6,3, algorithm='cyclotomic')
True
One more test:
sage: q_binomial(4, 2, Zmod(6)(2), algorithm='naive')
5
REFERENCES:
[CH2006] | William Y.C. Chen and Qing-Hu Hou, “Factors of the Gaussian coefficients”, Discrete Mathematics 306 (2006), 1446-1449. doi:10.1016/j.disc.2006.03.031 |
AUTHORS:
Returns the -Catalan number of index
.
If is unspecified, then it defaults to using the generator
for
a univariate polynomial ring over the integers.
There are several -Catalan numbers. This procedure
returns the one which can be written using the
-binomial coefficients.
EXAMPLES:
sage: from sage.combinat.q_analogues import q_catalan_number
sage: q_catalan_number(4)
q^12 + q^10 + q^9 + 2*q^8 + q^7 + 2*q^6 + q^5 + 2*q^4 + q^3 + q^2 + 1
sage: p = ZZ['p'].0
sage: q_catalan_number(4,p)
p^12 + p^10 + p^9 + 2*p^8 + p^7 + 2*p^6 + p^5 + 2*p^4 + p^3 + p^2 + 1
The -Catalan number of index
is only defined for
a
nonnegative integer (trac ticket #11411):
sage: q_catalan_number(-2)
Traceback (most recent call last):
...
ValueError: Argument (-2) must be a nonnegative integer.
Returns the -analogue of the factorial
If is unspecified, then it defaults to using the generator
for
a univariate polynomial ring over the integers.
EXAMPLES:
sage: from sage.combinat.q_analogues import q_factorial
sage: q_factorial(3)
q^3 + 2*q^2 + 2*q + 1
sage: p = ZZ['p'].0
sage: q_factorial(3, p)
p^3 + 2*p^2 + 2*p + 1
The -analogue of
is only defined for
a nonnegative
integer (trac ticket #11411):
sage: q_factorial(-2)
Traceback (most recent call last):
...
ValueError: Argument (-2) must be a nonnegative integer.
Returns the -analogue of the integer
The -analogue of the integer
is given by
Consequently, if then
and if
then
.
If the argument is not specified then it defaults to the generator
of the univariate polynomial ring over the integers.
EXAMPLES:
sage: from sage.combinat.q_analogues import q_int
sage: q_int(3)
q^2 + q + 1
sage: q_int(-3)
(-q^2 - q - 1)/q^3
sage: p = ZZ['p'].0
sage: q_int(3,p)
p^2 + p + 1
sage: q_int(3/2)
Traceback (most recent call last):
...
ValueError: 3/2 must be an integer
INPUT:
OUTPUT:
If is the power of a prime number, the output is the number of
complete flags in
(where
is the size of
) stable
under a linear nilpotent endomorphism
whose Jordan type is
given by
, i.e. such that for all
:
If is an indeterminate, the output is a polynomial whose
values at powers of prime numbers are the previous numbers.
The result is cached.
EXAMPLES:
sage: from sage.combinat.q_analogues import q_jordan
sage: [q_jordan(mu,2) for mu in Partitions(5)]
[9765, 1029, 213, 93, 29, 9, 1]
sage: [q_jordan(mu,2) for mu in Partitions(6)]
[615195, 40635, 5643, 2331, 1491, 515, 147, 87, 47, 11, 1]
sage: q=PolynomialRing(ZZ,'q').gen()
sage: q_jordan(Partition([3,2,1]),q)
16*q^4 + 24*q^3 + 14*q^2 + 5*q + 1
If the partition is trivial (i.e. has only one part), we get
the -factorial (in this case, the nilpotent endomorphism is
necessarily
):
sage: from sage.combinat.q_analogues import q_factorial
sage: q_jordan(Partition([5]),3) == q_factorial(5,3)
True
sage: q_jordan(Partition([11]),5) == q_factorial(11,5)
True
TESTS:
sage: q_jordan(Partition([4,3,1]),1)
Traceback (most recent call last):
...
ValueError: q must not be equal to 1
AUTHOR:
Return the -number of subgroups of type mu in a finite abelian
group of type la.
INPUT:
OUTPUT:
The number of subgroups of type mu in a group of type la as a polynomial in q.
ALGORITHM:
We use the formula from [Delsarte48], which works as follows:
Let be a prime number and
be a partition. A finite abelian
-group is of type
if it
is isomorphic to
Let and
be partitions. Let
and
denote the parts of the partitions
conjugate to
and
respectively. Let
Then the number of subgroups of type in a group of type
is given by
EXAMPLES:
sage: from sage.combinat.q_analogues import q_subgroups_of_abelian_group
sage: q_subgroups_of_abelian_group([1,1],[1])
q + 1
sage: q_subgroups_of_abelian_group([3,3,2,1],[2,1])
q^6 + 2*q^5 + 3*q^4 + 2*q^3 + q^2
sage: R.<t> = QQ[]
sage: q_subgroups_of_abelian_group([5,3,1],[3,1],t)
t^4 + 2*t^3 + t^2
sage: q_subgroups_of_abelian_group([5,3,1],[3,1],3)
144
sage: q_subgroups_of_abelian_group([1,1,1],[1]) == q_subgroups_of_abelian_group([1,1,1],[1,1])
True
sage: q_subgroups_of_abelian_group([5],[3])
1
sage: q_subgroups_of_abelian_group([1],[2])
0
sage: q_subgroups_of_abelian_group([2],[1,1])
0
REFERENCES:
[Delsarte48] | S Delsarte, Fonctions de Mobius Sur Les Groupes Abeliens Finis, Annals of Mathematics, second series, Vol. 45, No. 3, (Jul 1948), pp. 600-609. http://www.jstor.org/stable/1969047 |
AUTHOR:
Returns the q,t-Catalan number of index .
EXAMPLES:
sage: from sage.combinat.q_analogues import qt_catalan_number
sage: qt_catalan_number(1)
1
sage: qt_catalan_number(2)
q + t
sage: qt_catalan_number(3)
q^3 + q^2*t + q*t^2 + t^3 + q*t
sage: qt_catalan_number(4)
q^6 + q^5*t + q^4*t^2 + q^3*t^3 + q^2*t^4 + q*t^5 + t^6 + q^4*t + q^3*t^2 + q^2*t^3 + q*t^4 + q^3*t + q^2*t^2 + q*t^3
The q,t-Catalan number of index is only defined for
a
nonnegative integer (trac ticket #11411):
sage: qt_catalan_number(-2)
Traceback (most recent call last):
...
ValueError: Argument (-2) must be a nonnegative integer.