schubmult 2.0.2__tar.gz → 2.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- schubmult-2.0.4/PKG-INFO +542 -0
- schubmult-2.0.4/README.md +517 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/pyproject.toml +51 -44
- schubmult-2.0.4/setup.cfg +24 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/setup.py +1 -1
- schubmult-2.0.4/src/schubmult/__init__.py +1 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/_base_argparse.py +42 -8
- schubmult-2.0.4/src/schubmult/_tests.py +24 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/perm_lib.py +52 -112
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/sage_integration/__init__.py +13 -13
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/sage_integration/_fast_double_schubert_polynomial_ring.py +139 -118
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/sage_integration/_fast_schubert_polynomial_ring.py +88 -49
- schubmult-2.0.4/src/schubmult/sage_integration/_indexing.py +47 -0
- schubmult-2.0.4/src/schubmult/schubmult_double/__init__.py +12 -0
- {schubmult-2.0.2/src/schubmult/schubmult_q → schubmult-2.0.4/src/schubmult/schubmult_double}/__main__.py +2 -1
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_double/_funcs.py +245 -281
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_double/_script.py +128 -70
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_py/__init__.py +5 -3
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_py/__main__.py +2 -1
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_py/_funcs.py +68 -23
- schubmult-2.0.4/src/schubmult/schubmult_py/_script.py +97 -0
- schubmult-2.0.4/src/schubmult/schubmult_q/__init__.py +8 -0
- {schubmult-2.0.2/src/schubmult/schubmult_double → schubmult-2.0.4/src/schubmult/schubmult_q}/__main__.py +2 -1
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_q/_funcs.py +41 -60
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_q/_script.py +39 -30
- schubmult-2.0.4/src/schubmult/schubmult_q_double/__init__.py +10 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_q_double/__main__.py +2 -1
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult/schubmult_q_double/_funcs.py +99 -66
- schubmult-2.0.4/src/schubmult/schubmult_q_double/_script.py +396 -0
- schubmult-2.0.4/src/schubmult.egg-info/PKG-INFO +542 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult.egg-info/SOURCES.txt +2 -7
- schubmult-2.0.4/src/schubmult.egg-info/entry_points.txt +5 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult.egg-info/requires.txt +1 -1
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult.egg-info/top_level.txt +0 -1
- schubmult-2.0.2/PKG-INFO +0 -455
- schubmult-2.0.2/README.md +0 -430
- schubmult-2.0.2/setup.cfg +0 -17
- schubmult-2.0.2/src/schubmult/__init__.py +0 -1
- schubmult-2.0.2/src/schubmult/sage_integration/_indexing.py +0 -44
- schubmult-2.0.2/src/schubmult/schubmult_double/__init__.py +0 -18
- schubmult-2.0.2/src/schubmult/schubmult_double/_vars.py +0 -18
- schubmult-2.0.2/src/schubmult/schubmult_py/_script.py +0 -115
- schubmult-2.0.2/src/schubmult/schubmult_py/_vars.py +0 -3
- schubmult-2.0.2/src/schubmult/schubmult_q/__init__.py +0 -12
- schubmult-2.0.2/src/schubmult/schubmult_q/_vars.py +0 -18
- schubmult-2.0.2/src/schubmult/schubmult_q_double/__init__.py +0 -16
- schubmult-2.0.2/src/schubmult/schubmult_q_double/_script.py +0 -337
- schubmult-2.0.2/src/schubmult/schubmult_q_double/_vars.py +0 -21
- schubmult-2.0.2/src/schubmult.egg-info/PKG-INFO +0 -455
- schubmult-2.0.2/src/schubmult.egg-info/entry_points.txt +0 -5
- schubmult-2.0.2/src/tests/test_fast_double_schubert.py +0 -145
- schubmult-2.0.2/src/tests/test_fast_schubert.py +0 -38
- {schubmult-2.0.2 → schubmult-2.0.4}/LICENSE +0 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/schubmult.egg-info/dependency_links.txt +0 -0
- {schubmult-2.0.2 → schubmult-2.0.4}/src/tests/__init__.py +0 -0
schubmult-2.0.4/PKG-INFO
ADDED
@@ -0,0 +1,542 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: schubmult
|
3
|
+
Version: 2.0.4
|
4
|
+
Summary: Package for algebraic computation with single, double, and quantum Schubert polynomials
|
5
|
+
Author-email: Matt Samuel <schubmult@gmail.com>
|
6
|
+
Maintainer-email: Matt Samuel <schubmult@gmail.com>
|
7
|
+
Project-URL: Homepage, http://schubmult.org
|
8
|
+
Project-URL: Repository, https://github.com/matthematics/schubmult
|
9
|
+
Keywords: Schubert,polynomial,double,algebra
|
10
|
+
Classifier: Programming Language :: Python
|
11
|
+
Requires-Python: >=3.9
|
12
|
+
Description-Content-Type: text/markdown
|
13
|
+
License-File: LICENSE
|
14
|
+
Requires-Dist: numpy
|
15
|
+
Requires-Dist: PuLP>=2.7.0
|
16
|
+
Requires-Dist: symengine>=0.14.0
|
17
|
+
Requires-Dist: sympy>=1.12
|
18
|
+
Requires-Dist: psutil
|
19
|
+
Requires-Dist: cachetools
|
20
|
+
Requires-Dist: sortedcontainers
|
21
|
+
Requires-Dist: setuptools
|
22
|
+
Provides-Extra: sage
|
23
|
+
Requires-Dist: sagemath-standard; extra == "sage"
|
24
|
+
Dynamic: license-file
|
25
|
+
|
26
|
+
# schubmult
|
27
|
+
|
28
|
+
## Program and package for rapid computation of Littlewood-Richardson coefficients of Schubert
|
29
|
+
polynomials, with optional Sage integration
|
30
|
+
|
31
|
+
The main purpose of this python package is for executing scripts to compute coefficients of products of
|
32
|
+
various types of Schubert polynomials. Coproducts can also be computed, as well as substitution of
|
33
|
+
commuting difference operators for quantum double Schubert polynomials. Quantum multiplication also has
|
34
|
+
parabolic subgroup support, computed via the Peterson-Woodward comparison theorem. **Note that except
|
35
|
+
for quantum Schubert polynomial multiplication with the --basic-pieri option, the methodology for
|
36
|
+
quantum/quantum double Schubert polynomials is conjectural at this time.**
|
37
|
+
|
38
|
+
|
39
|
+
[Docs to be hosted on Wiki](https://github.com/matthematics/schubmult/wiki/schubmult-home)
|
40
|
+
|
41
|
+
|
42
|
+
## Basic script command lines, one-line notation
|
43
|
+
|
44
|
+
### schubmult_py - ordinary Schubert polynmoials
|
45
|
+
|
46
|
+
```
|
47
|
+
usage: schubmult_py [-h] [-np] [--code] [--mult MULT [MULT ...]] [--coprod] [--display-mode
|
48
|
+
{basic,pretty,latex,raw}]
|
49
|
+
hyphen-separated list of perms [hyphen-separated list of perms ...]
|
50
|
+
|
51
|
+
|
52
|
+
Compute products of ordinary Schubert polynomials
|
53
|
+
|
54
|
+
positional arguments:
|
55
|
+
hyphen-separated list of perms
|
56
|
+
Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
|
57
|
+
|
58
|
+
|
59
|
+
options:
|
60
|
+
-h, --help show this help message and exit
|
61
|
+
-np, --no-print Compute the result but do not print it
|
62
|
+
|
63
|
+
--code Permutations represented by the Lehmer code
|
64
|
+
|
65
|
+
--mult MULT [MULT ...]
|
66
|
+
Some additional terms in the ring to multiply by
|
67
|
+
|
68
|
+
--coprod Compute the coproduct (different syntax: one permutation, then a hyphen, the
|
69
|
+
variable index
|
70
|
+
positions to split on)
|
71
|
+
--display-mode {basic,raw}
|
72
|
+
Method of displaying the output. Default basic
|
73
|
+
|
74
|
+
|
75
|
+
Example:
|
76
|
+
schubmult_py 5 1 7 3 2 6 4 - 2 1 6 3 5 4
|
77
|
+
or equivalently
|
78
|
+
schubmult_py --code 4 0 4 1 0 1 - 1 0 3 0 1
|
79
|
+
or alternatively
|
80
|
+
schubmult_py --coprod --code 2 0 3 0 1 - 2 4
|
81
|
+
```
|
82
|
+
|
83
|
+
|
84
|
+
<!-- ## Quantum commuting difference operators
|
85
|
+
|
86
|
+
schubmult_q_double has a feature for displaying the coefficients of the divided difference operators in
|
87
|
+
the evaluation of the quantum double Schubert polynomials on the commuting difference operators of
|
88
|
+
Fomin, Gelfand, and Postnikov. It is necessary to cap the value of n in the group S_n we are working in
|
89
|
+
because as n increases the expression does not stabilize.
|
90
|
+
```bash
|
91
|
+
schubmult_q_double --nil-hecke 6 --code 2 2 --display-positive
|
92
|
+
|
93
|
+
``` -->
|
94
|
+
|
95
|
+
### schubmult_double - Double Schubert polynmoials
|
96
|
+
|
97
|
+
```
|
98
|
+
usage: schubmult_double [-h] [-np] [--code] [--mult MULT [MULT ...]] [--coprod] [--display-positive] [--
|
99
|
+
optimizer-message] [--down] [-nc]
|
100
|
+
[--mixed-var] [--expand] [--display-mode {basic,pretty,latex,raw}]
|
101
|
+
|
102
|
+
hyphen-separated list of perms [hyphen-separated list of perms ...]
|
103
|
+
|
104
|
+
|
105
|
+
Compute coefficients of product of double Schubert polynomials in the same or different sets of
|
106
|
+
coefficient variables
|
107
|
+
|
108
|
+
positional arguments:
|
109
|
+
hyphen-separated list of perms
|
110
|
+
Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
|
111
|
+
|
112
|
+
|
113
|
+
options:
|
114
|
+
-h, --help show this help message and exit
|
115
|
+
-np, --no-print Compute the result but do not print it
|
116
|
+
|
117
|
+
--code Permutations represented by the Lehmer code
|
118
|
+
|
119
|
+
--mult MULT [MULT ...]
|
120
|
+
Some additional terms in the ring to multiply by
|
121
|
+
|
122
|
+
--coprod Compute the coproduct (different syntax: one permutation, then a hyphen, the
|
123
|
+
variable index
|
124
|
+
positions to split on)
|
125
|
+
--display-positive Display the result in terms of the positive roots, or if mixed variable attempt
|
126
|
+
to display the
|
127
|
+
result as a positive algebraic combination of terms of the form y_i - z_j
|
128
|
+
|
129
|
+
--optimizer-message Display debug output during integer optimization for --display-positive
|
130
|
+
|
131
|
+
--down Reverse multiplication
|
132
|
+
-nc, --no-check Do not check if positive result matches the original
|
133
|
+
|
134
|
+
--mixed-var Used mixed variables y and z
|
135
|
+
--expand Expand the output rather than leaving it as originally computed (slow)
|
136
|
+
|
137
|
+
--display-mode {basic,pretty,latex,raw}
|
138
|
+
Method of displaying the output. Default basic
|
139
|
+
|
140
|
+
|
141
|
+
Example:
|
142
|
+
schubmult_double 5 1 7 3 2 6 4 - 2 1 6 3 5 4 [ --display-positive]
|
143
|
+
|
144
|
+
or equivalently
|
145
|
+
schubmult_double --code 4 0 4 1 0 1 - 1 0 3 0 1 [ --display-positive]
|
146
|
+
|
147
|
+
or alternatively
|
148
|
+
schubmult_double --coprod --code 2 0 3 0 1 - 2 4 [ --display-positive]
|
149
|
+
|
150
|
+
```
|
151
|
+
|
152
|
+
### schubmult_q - Quantum Schubert polynomials
|
153
|
+
|
154
|
+
```
|
155
|
+
usage: schubmult_q [-h] [-np] [--code] [--mult MULT [MULT ...]] [--parabolic PARABOLIC [PARABOLIC ...]]
|
156
|
+
[--basic-pieri]
|
157
|
+
[--display-mode {basic,pretty,latex,raw}]
|
158
|
+
hyphen-separated list of perms [hyphen-separated list of perms ...]
|
159
|
+
|
160
|
+
|
161
|
+
Compute products of quantum Schubert polynomials
|
162
|
+
|
163
|
+
positional arguments:
|
164
|
+
hyphen-separated list of perms
|
165
|
+
Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
|
166
|
+
|
167
|
+
|
168
|
+
options:
|
169
|
+
-h, --help show this help message and exit
|
170
|
+
-np, --no-print Compute the result but do not print it
|
171
|
+
|
172
|
+
--code Permutations represented by the Lehmer code
|
173
|
+
|
174
|
+
--mult MULT [MULT ...]
|
175
|
+
Some additional terms in the ring to multiply by
|
176
|
+
|
177
|
+
--parabolic PARABOLIC [PARABOLIC ...]
|
178
|
+
Generators of the parabolic subgroup to compute quantum coeffs for
|
179
|
+
|
180
|
+
--basic-pieri Do not apply conjectural computation optimization to quantum
|
181
|
+
|
182
|
+
--display-mode {basic,pretty,latex,raw}
|
183
|
+
Method of displaying the output. Default basic
|
184
|
+
|
185
|
+
|
186
|
+
Example:
|
187
|
+
schubmult_q 5 1 7 3 2 6 4 - 2 1 6 3 5 4
|
188
|
+
or equivalently
|
189
|
+
schubmult_q --code 4 0 4 1 0 1 - 1 0 3 0 1
|
190
|
+
```
|
191
|
+
|
192
|
+
### schubmult_q_double - Quantum double Schubert polynomials
|
193
|
+
|
194
|
+
|
195
|
+
```
|
196
|
+
usage: schubmult_q_double [-h] [-np] [--code] [--mult MULT [MULT ...]] [--display-positive] [--optimizer-
|
197
|
+
message] [--down]
|
198
|
+
[-nc] [--mixed-var] [--expand] [--parabolic PARABOLIC [PARABOLIC ...]] [--basic-pieri]
|
199
|
+
|
200
|
+
[--nil-hecke N] [--nil-hecke-apply N] [--display-mode
|
201
|
+
{basic,pretty,latex,raw}]
|
202
|
+
hyphen-separated list of perms [hyphen-separated list of perms ...]
|
203
|
+
|
204
|
+
|
205
|
+
Compute coefficients of products of quantum double Schubert polynomials in the same or different sets of
|
206
|
+
coefficient variables
|
207
|
+
|
208
|
+
positional arguments:
|
209
|
+
hyphen-separated list of perms
|
210
|
+
Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
|
211
|
+
|
212
|
+
|
213
|
+
options:
|
214
|
+
-h, --help show this help message and exit
|
215
|
+
-np, --no-print Compute the result but do not print it
|
216
|
+
|
217
|
+
--code Permutations represented by the Lehmer code
|
218
|
+
|
219
|
+
--mult MULT [MULT ...]
|
220
|
+
Some additional terms in the ring to multiply by
|
221
|
+
|
222
|
+
--display-positive Display the result in terms of the positive roots, or if mixed variable attempt
|
223
|
+
to display the
|
224
|
+
result as a positive algebraic combination of terms of the form y_i - z_j
|
225
|
+
|
226
|
+
--optimizer-message Display debug output during integer optimization for --display-positive
|
227
|
+
|
228
|
+
--down Reverse multiplication
|
229
|
+
-nc, --no-check Do not check if positive result matches the original
|
230
|
+
|
231
|
+
--mixed-var Used mixed variables y and z
|
232
|
+
--expand Expand the output rather than leaving it as originally computed (slow)
|
233
|
+
|
234
|
+
--parabolic PARABOLIC [PARABOLIC ...]
|
235
|
+
Generators of the parabolic subgroup to compute quantum coeffs for
|
236
|
+
|
237
|
+
--basic-pieri Do not apply conjectural computation optimization to quantum
|
238
|
+
|
239
|
+
--nil-hecke N Substitute up to N of Fomin-Gelfand-Postnikov commuting difference operators
|
240
|
+
|
241
|
+
--nil-hecke-apply N Substitute commuting difference operators for perm1, then apply to Schub indexed
|
242
|
+
by perm2
|
243
|
+
--display-mode {basic,pretty,latex,raw}
|
244
|
+
Method of displaying the output. Default basic
|
245
|
+
|
246
|
+
|
247
|
+
Example:
|
248
|
+
schubmult_q_double 5 1 7 3 2 6 4 - 2 1 6 3 5 4 [ --display-positive]
|
249
|
+
|
250
|
+
or equivalently
|
251
|
+
schubmult_q_double --code 4 0 4 1 0 1 - 1 0 3 0 1 [ --display-positive]
|
252
|
+
|
253
|
+
```
|
254
|
+
|
255
|
+
## Diplaying the result positively
|
256
|
+
|
257
|
+
The command line argument `--display-positive `is available in schubmult_double and schubmult_q_double,
|
258
|
+
which displays the result positively (if possible, this is still only always possible conjecturally). It
|
259
|
+
will fail and print out the offending case if it finds a counterexample. This is highly processor
|
260
|
+
intensive.
|
261
|
+
|
262
|
+
|
263
|
+
Runtime will vary tremendously by case. The general problem is #P-hard. Though the result is always
|
264
|
+
nonnegative (which at least is known for schubmult_py, schubmult_q, schubmult_double, and
|
265
|
+
schubmult_q_double) and the problem is in GapP, it is not known to be in #P at this time.
|
266
|
+
|
267
|
+
|
268
|
+
schubmult_py is for multiplying ordinary Schubert polynomials. schubmult_double is for multiplying
|
269
|
+
double Schubert polynomials in different sets of coefficient variables (`--mixed-var`) or in the same
|
270
|
+
set of coefficient variables (by default). Similarly, schubmult_q is for multiplying quantum Schubert
|
271
|
+
polynomials, schubmult_q_double is for multiplying quantum double Schubert polynomials (in different
|
272
|
+
sets of coefficient variables with the `--mixed-var` option, or the same set), or in other words it
|
273
|
+
computes the Gromov-Witten invariants, equivariant Gromov-Witten invariants, and (mixed?) equivariant
|
274
|
+
Gromov-Witten invariants of the complete flag variety. All have the same command line syntax as
|
275
|
+
schubmult, except when using the --code option. schubmult_double/schubmult_q_double display the result
|
276
|
+
with nonnegative coefficients (and the q variables) with the `--display-positive` option (either in the
|
277
|
+
negative simple roots r_i, or in y_i - z_j for `--mixed-var`).
|
278
|
+
|
279
|
+
|
280
|
+
schubmult_xx --coprod allows you to split (double) Schubert polynomials along certain indices (not
|
281
|
+
available for quantum). It takes one permutation as an argument, followed by a dash -, then the set of
|
282
|
+
indices you would like to split on.
|
283
|
+
|
284
|
+
# Sage integration (as of version 2.0.0)
|
285
|
+
|
286
|
+
[SageMath](https://www.sagemath.org/) is a computer algebra system that, while wonderful, is monstrously
|
287
|
+
large and only works on posix-based operating systems (including WSL VMs, so it is still usable on
|
288
|
+
Windows). This is why Sage support is provided optionally in schubmult. The syntax to install the Sage
|
289
|
+
dependencies is
|
290
|
+
|
291
|
+
```
|
292
|
+
pip install schubmult[sage]
|
293
|
+
```
|
294
|
+
|
295
|
+
This will install the [sagemath-standard](https://pypi.org/project/sagemath-standard/) python package in
|
296
|
+
addition to the other dependencies. **Again, this only works on Linux, MacOS, or WSL.** To use with a
|
297
|
+
currently installed SageMath distribution, use sage's python interpreter to install the package (the
|
298
|
+
`[sage]` piece is not required in that case).
|
299
|
+
|
300
|
+
## Basic sage example
|
301
|
+
|
302
|
+
```python
|
303
|
+
sage: from schubmult.sage_integration import FastSchubertPolynomialRing,
|
304
|
+
FastDoubleSchubertPolynomialRing,
|
305
|
+
FastQuantumSchubertPolynomialRing, FastQuantumDoubleSchubertPolynomialRing
|
306
|
+
|
307
|
+
sage: SingleRing = FastSchubertPolynomialRing(ZZ, 100, "x")
|
308
|
+
sage: SingleRing([3,4,1,2])
|
309
|
+
Sx([3, 4, 1, 2])
|
310
|
+
sage: SingleRing([3,4,1,2]) * SingleRing([5,1,4,2,3])
|
311
|
+
Sx([7, 3, 4, 1, 2, 5, 6]) + Sx([7, 4, 2, 1, 3, 5, 6]) + Sx([7, 5, 1, 2, 3, 4, 6])
|
312
|
+
|
313
|
+
```
|
314
|
+
|
315
|
+
## Mixed variable (Molev-Sagan) type products
|
316
|
+
|
317
|
+
```python
|
318
|
+
sage: DoubleRing = FastDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y", "z"))
|
319
|
+
sage: DoubleRing([3,4,1,2])*DoubleRing([1,4,2,3])
|
320
|
+
(y1*y2-y1*y4-y2*y4+y4^2)*DSx([3, 4, 1, 2], 'y') + (-y1-y2+y4+y5)*DSx([3, 5, 1, 2, 4], 'y') + DSx([3, 6,
|
321
|
+
1, 2, 4, 5], 'y')
|
322
|
+
sage: DoubleRing([3,4,1,2]) * DoubleRing([1,4,2,3],"z")
|
323
|
+
(y3^2+y3*y4+y4^2-y3*z1-y4*z1-y3*z2-y4*z2+z1*z2-y3*z3-y4*z3+z1*z3+z2*z3)*DSx([3, 4, 1, 2], 'y') + (y3+y4+
|
324
|
+
y5-z1-z2-z3)*DSx([3, 5, 1, 2, 4], 'y') + DSx([3, 6, 1, 2, 4, 5], 'y')
|
325
|
+
```
|
326
|
+
|
327
|
+
## expand()
|
328
|
+
|
329
|
+
```python
|
330
|
+
sage: SingleRingQ = FastQuantumSchubertPolynomialRing(ZZ, 100, "x")
|
331
|
+
sage: SingleRingQ([2,3,1,4]).expand()
|
332
|
+
x1*x2 + q_1
|
333
|
+
```
|
334
|
+
|
335
|
+
## Coercion
|
336
|
+
|
337
|
+
Coercion was implemented as widely as possible.
|
338
|
+
```python
|
339
|
+
sage: DoubleRing([1,4,2,3],"z") * SingleRing([3,4,1,2])
|
340
|
+
z1^2*z4^2*DSx([1, 4, 2, 3], 'z') + (z1^2*z4+z1^2*z5)*DSx([1, 5, 2, 3, 4], 'z') + z1^2*DSx([1, 6, 2, 3,
|
341
|
+
4, 5], 'z') + (z1*z4^2+z2*z4^2)*DSx([2, 4, 1, 3], 'z') + (z1*z4+z2*z4+z1*z5+z2*z5)*DSx([2, 5, 1, 3, 4],
|
342
|
+
'z') + (z1+z2)*DSx([2, 6, 1, 3, 4, 5], 'z') + z4^2*DSx([3, 4, 1, 2], 'z') + (z4+z5)*DSx([3, 5, 1, 2, 4],
|
343
|
+
'z') + DSx([3, 6, 1, 2, 4, 5], 'z')
|
344
|
+
sage: SingleRingQ([2,3,1,4]) * SingleRing([4,1,3,2])
|
345
|
+
(-2*q1^2*q2+q1*q2*q3)*QSx([1]) + q1*q2*QSx([1, 3, 4, 2]) + (-q1^2)*QSx([2, 3, 1]) + q1*QSx([2, 4, 3, 1])
|
346
|
+
+ (-q1*q2)*QSx([3, 1, 2]) + q1*QSx([3, 2, 4, 1]) + q1*QSx([3, 4, 1, 2]) + (-q1)*QSx([4, 2, 1, 3]) +
|
347
|
+
QSx([5, 2, 3, 1, 4]) + QSx([5, 3, 1, 2, 4])
|
348
|
+
sage: R.<x1, x2> = PolynomialRing(ZZ, 2)
|
349
|
+
sage: SingleRing([1,3,2]) - x1 - x2 == 0
|
350
|
+
True
|
351
|
+
```
|
352
|
+
|
353
|
+
## Coproducts
|
354
|
+
|
355
|
+
FastSchubertPolynomialRing and FastDoubleSchubertPolynomialRings are bialgebras and each element
|
356
|
+
implements the `coproduct()` member function. `set_coproduct_indices()` on the base ring will determine
|
357
|
+
the variables to partition on.
|
358
|
+
```ada
|
359
|
+
sage: DoubleRing.set_coproduct_indices((1,3))
|
360
|
+
sage: DoubleRing([4,1,5,2,3], "z").coproduct()
|
361
|
+
(y1^2-y1*z2-y1*z3+z2*z3)*DSx([4, 1, 2, 3], 'z') # DSx([1], 'y') + (y1+y2-z2-z3)*DSx([4, 1, 2, 3], 'z') #
|
362
|
+
DSx([2, 1], 'y') + DSx([4, 1, 2, 3], 'z') # DSx([3, 1, 2], 'y') + (y1-z3)*DSx([4, 2, 1, 3], 'z') #
|
363
|
+
DSx([1], 'y') + DSx([4, 2, 1, 3], 'z') # DSx([2, 1], 'y') + DSx([4, 3, 1, 2], 'z') # DSx([1], 'y')
|
364
|
+
|
365
|
+
```
|
366
|
+
|
367
|
+
## Demonstration of quantum double mixed products
|
368
|
+
|
369
|
+
```python
|
370
|
+
sage: QuantumDoubleRing = FastQuantumDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y","z"))
|
371
|
+
sage: QuantumDoubleRing([4,1,3,2])*QuantumDoubleRing([5,1,3,2,4], "z")
|
372
|
+
(q1*q2*q3*y1^3+q1*q2*q3*y1^2*y4+q1*q2*q3*y1*y4^2+q1*q2*q3*y4^3-q1*q2*q3*y1^2*z1-q1*q2*q3*y1*y4*z1-
|
373
|
+
q1*q2*q3*y4^2*z1-q1*q2*q3*y1^2*z2-q1*q2*q3*y1*y4*z2-q1*q2*q3*y4^2*z2+q1*q2*q3*y1*z1*z2+q1*q2*q3*y4*z1*z2-
|
374
|
+
q1*q2*q3*y1^2*z3-q1*q2*q3*y1*y4*z3-q1*q2*q3*y4^2*z3+q1*q2*q3*y1*z1*z3+q1*q2*q3*y4*z1*z3+
|
375
|
+
q1*q2*q3*y1*z2*z3+q1*q2*q3*y4*z2*z3-q1*q2*q3*z1*z2*z3-q1*q2*q3*y1^2*z4-q1*q2*q3*y1*y4*z4-
|
376
|
+
q1*q2*q3*y4^2*z4+q1*q2*q3*y1*z1*z4+q1*q2*q3*y4*z1*z4+q1*q2*q3*y1*z2*z4+q1*q2*q3*y4*z2*z4-
|
377
|
+
q1*q2*q3*z1*z2*z4+q1*q2*q3*y1*z3*z4+q1*q2*q3*y4*z3*z4-q1*q2*q3*z1*z3*z4-q1*q2*q3*z2*z3*z4)*QDSx([1],
|
378
|
+
'y') + (q1*q2*q3*y1^2+q1*q2*q3*y1*y4+q1*q2*q3*y4^2+q1*q2*q3*y1*y5+q1*q2*q3*y4*y5+q1*q2*q3*y5^2-
|
379
|
+
q1*q2*q3*y1*z1-q1*q2*q3*y4*z1-q1*q2*q3*y5*z1-q1*q2*q3*y1*z2-q1*q2*q3*y4*z2-q1*q2*q3*y5*z2+q1*q2*q3*z1*z2-
|
380
|
+
q1*q2*q3*y1*z3-q1*q2*q3*y4*z3-q1*q2*q3*y5*z3+q1*q2*q3*z1*z3+q1*q2*q3*z2*z3-q1*q2*q3*y1*z4-q1*q2*q3*y4*z4-
|
381
|
+
q1*q2*q3*y5*z4+q1*q2*q3*z1*z4+q1*q2*q3*z2*z4+q1*q2*q3*z3*z4)*QDSx([1, 2, 3, 5, 4], 'y') + (q1*q2*q3*y1+
|
382
|
+
q1*q2*q3*y4+q1*q2*q3*y5+q1*q2*q3*y6-q1*q2*q3*z1-q1*q2*q3*z2-q1*q2*q3*z3-q1*q2*q3*z4)*QDSx([1, 2, 3, 6,
|
383
|
+
4, 5], 'y') + q1*q2*q3*QDSx([1, 2, 3, 7, 4, 5, 6], 'y') + (q1*q3*y1^3+q1*q3*y1^2*y4+q1*q3*y1*y4^2+
|
384
|
+
q1*q3*y4^3-q1*q3*y1^2*z1-q1*q3*y1*y4*z1-q1*q3*y4^2*z1-q1*q3*y1^2*z2-q1*q3*y1*y4*z2-q1*q3*y4^2*z2+
|
385
|
+
q1*q3*y1*z1*z2+q1*q3*y4*z1*z2-q1*q3*y1^2*z3-q1*q3*y1*y4*z3-q1*q3*y4^2*z3+q1*q3*y1*z1*z3+q1*q3*y4*z1*z3+
|
386
|
+
q1*q3*y1*z2*z3+q1*q3*y4*z2*z3-q1*q3*z1*z2*z3-q1*q3*y1^2*z4-q1*q3*y1*y4*z4-q1*q3*y4^2*z4+q1*q3*y1*z1*z4+
|
387
|
+
q1*q3*y4*z1*z4+q1*q3*y1*z2*z4+q1*q3*y4*z2*z4-q1*q3*z1*z2*z4+q1*q3*y1*z3*z4+q1*q3*y4*z3*z4-q1*q3*z1*z3*z4-
|
388
|
+
q1*q3*z2*z3*z4)*QDSx([1, 4, 2, 3], 'y') + (q1*y1^3*y3+q1*y1^3*y4+q1*y1^2*y3*y4+q1*y1^2*y4^2+
|
389
|
+
q1*y1*y3*y4^2+q1*y1*y4^3+q1*y3*y4^3-q1*y1^3*z1-q1*y1^2*y3*z1-2*q1*y1^2*y4*z1-q1*y1*y3*y4*z1-
|
390
|
+
2*q1*y1*y4^2*z1-q1*y3*y4^2*z1-q1*y4^3*z1+q1*y1^2*z1^2+q1*y1*y4*z1^2+q1*y4^2*z1^2-q1*y1^3*z2-
|
391
|
+
q1*y1^2*y3*z2-2*q1*y1^2*y4*z2-q1*y1*y3*y4*z2-2*q1*y1*y4^2*z2-q1*y3*y4^2*z2-q1*y4^3*z2+2*q1*y1^2*z1*z2+
|
392
|
+
q1*y1*y3*z1*z2+3*q1*y1*y4*z1*z2+q1*y3*y4*z1*z2+2*q1*y4^2*z1*z2-q1*y1*z1^2*z2-q1*y4*z1^2*z2+q1*y1^2*z2^2+
|
393
|
+
q1*y1*y4*z2^2+q1*y4^2*z2^2-q1*y1*z1*z2^2-q1*y4*z1*z2^2-q1*y1^2*y3*z3-q1*y1^2*y4*z3-q1*y1*y3*y4*z3-
|
394
|
+
q1*y1*y4^2*z3-q1*y3*y4^2*z3+q1*y1^2*z1*z3+q1*y1*y3*z1*z3+2*q1*y1*y4*z1*z3+q1*y3*y4*z1*z3+q1*y4^2*z1*z3-
|
395
|
+
q1*y1*z1^2*z3-q1*y4*z1^2*z3+q1*y1^2*z2*z3+q1*y1*y3*z2*z3+2*q1*y1*y4*z2*z3+q1*y3*y4*z2*z3+q1*y4^2*z2*z3-
|
396
|
+
2*q1*y1*z1*z2*z3-q1*y3*z1*z2*z3-2*q1*y4*z1*z2*z3+q1*z1^2*z2*z3-q1*y1*z2^2*z3-q1*y4*z2^2*z3+q1*z1*z2^2*z3-
|
397
|
+
q1*y1^2*y3*z4-q1*y1^2*y4*z4-q1*y1*y3*y4*z4-q1*y1*y4^2*z4-q1*y3*y4^2*z4+q1*y1^2*z1*z4+q1*y1*y3*z1*z4+
|
398
|
+
2*q1*y1*y4*z1*z4+q1*y3*y4*z1*z4+q1*y4^2*z1*z4-q1*y1*z1^2*z4-q1*y4*z1^2*z4+q1*y1^2*z2*z4+q1*y1*y3*z2*z4+
|
399
|
+
2*q1*y1*y4*z2*z4+q1*y3*y4*z2*z4+q1*y4^2*z2*z4-2*q1*y1*z1*z2*z4-q1*y3*z1*z2*z4-2*q1*y4*z1*z2*z4+
|
400
|
+
q1*z1^2*z2*z4-q1*y1*z2^2*z4-q1*y4*z2^2*z4+q1*z1*z2^2*z4+q1*y1*y3*z3*z4+q1*y1*y4*z3*z4+q1*y3*y4*z3*z4-
|
401
|
+
q1*y1*z1*z3*z4-q1*y3*z1*z3*z4-q1*y4*z1*z3*z4+q1*z1^2*z3*z4-q1*y1*z2*z3*z4-q1*y3*z2*z3*z4-q1*y4*z2*z3*z4+
|
402
|
+
q1*z1*z2*z3*z4+q1*z2^2*z3*z4)*QDSx([1, 4, 3, 2], 'y') + (q1*y1^3+q1*y1^2*y4+q1*y1*y4^2+q1*y4^3-
|
403
|
+
q1*y1^2*z1-q1*y1*y4*z1-q1*y4^2*z1-q1*y1^2*z2-q1*y1*y4*z2-q1*y4^2*z2+q1*y1*z1*z2+q1*y4*z1*z2-q1*y1^2*z3-
|
404
|
+
q1*y1*y4*z3-q1*y4^2*z3+q1*y1*z1*z3+q1*y4*z1*z3+q1*y1*z2*z3+q1*y4*z2*z3-q1*z1*z2*z3-q1*y1^2*z4-
|
405
|
+
q1*y1*y4*z4-q1*y4^2*z4+q1*y1*z1*z4+q1*y4*z1*z4+q1*y1*z2*z4+q1*y4*z2*z4-q1*z1*z2*z4+q1*y1*z3*z4+
|
406
|
+
q1*y4*z3*z4-q1*z1*z3*z4-q1*z2*z3*z4)*QDSx([1, 4, 5, 2, 3], 'y') + (q1*q3*y1^2+q1*q3*y1*y4+q1*q3*y4^2+
|
407
|
+
q1*q3*y1*y5+q1*q3*y4*y5+q1*q3*y5^2-q1*q3*y1*z1-q1*q3*y4*z1-q1*q3*y5*z1-q1*q3*y1*z2-q1*q3*y4*z2-
|
408
|
+
q1*q3*y5*z2+q1*q3*z1*z2-q1*q3*y1*z3-q1*q3*y4*z3-q1*q3*y5*z3+q1*q3*z1*z3+q1*q3*z2*z3-q1*q3*y1*z4-
|
409
|
+
q1*q3*y4*z4-q1*q3*y5*z4+q1*q3*z1*z4+q1*q3*z2*z4+q1*q3*z3*z4)*QDSx([1, 5, 2, 3, 4], 'y') + (q1*y1^3+
|
410
|
+
q1*y1^2*y3+q1*y1^2*y4+q1*y1*y3*y4+q1*y1*y4^2+q1*y3*y4^2+q1*y1^2*y5+q1*y1*y3*y5+q1*y1*y4*y5+q1*y3*y4*y5+
|
411
|
+
q1*y1*y5^2+q1*y3*y5^2-2*q1*y1^2*z1-q1*y1*y3*z1-2*q1*y1*y4*z1-q1*y3*y4*z1-q1*y4^2*z1-2*q1*y1*y5*z1-
|
412
|
+
q1*y3*y5*z1-q1*y4*y5*z1-q1*y5^2*z1+q1*y1*z1^2+q1*y4*z1^2+q1*y5*z1^2-2*q1*y1^2*z2-q1*y1*y3*z2-
|
413
|
+
2*q1*y1*y4*z2-q1*y3*y4*z2-q1*y4^2*z2-2*q1*y1*y5*z2-q1*y3*y5*z2-q1*y4*y5*z2-q1*y5^2*z2+3*q1*y1*z1*z2+
|
414
|
+
q1*y3*z1*z2+2*q1*y4*z1*z2+2*q1*y5*z1*z2-q1*z1^2*z2+q1*y1*z2^2+q1*y4*z2^2+q1*y5*z2^2-q1*z1*z2^2-
|
415
|
+
q1*y1^2*z3-q1*y1*y3*z3-q1*y1*y4*z3-q1*y3*y4*z3-q1*y1*y5*z3-q1*y3*y5*z3+2*q1*y1*z1*z3+q1*y3*z1*z3+
|
416
|
+
q1*y4*z1*z3+q1*y5*z1*z3-q1*z1^2*z3+2*q1*y1*z2*z3+q1*y3*z2*z3+q1*y4*z2*z3+q1*y5*z2*z3-2*q1*z1*z2*z3-
|
417
|
+
q1*z2^2*z3-q1*y1^2*z4-q1*y1*y3*z4-q1*y1*y4*z4-q1*y3*y4*z4-q1*y1*y5*z4-q1*y3*y5*z4+2*q1*y1*z1*z4+
|
418
|
+
q1*y3*z1*z4+q1*y4*z1*z4+q1*y5*z1*z4-q1*z1^2*z4+2*q1*y1*z2*z4+q1*y3*z2*z4+q1*y4*z2*z4+q1*y5*z2*z4-
|
419
|
+
2*q1*z1*z2*z4-q1*z2^2*z4+q1*y1*z3*z4+q1*y3*z3*z4-q1*z1*z3*z4-q1*z2*z3*z4)*QDSx([1, 5, 3, 2, 4], 'y') +
|
420
|
+
(q1*y1^2+q1*y1*y4+q1*y4^2+q1*y1*y5+q1*y4*y5+q1*y5^2-q1*y1*z1-q1*y4*z1-q1*y5*z1-q1*y1*z2-q1*y4*z2-
|
421
|
+
q1*y5*z2+q1*z1*z2-q1*y1*z3-q1*y4*z3-q1*y5*z3+q1*z1*z3+q1*z2*z3-q1*y1*z4-q1*y4*z4-q1*y5*z4+q1*z1*z4+
|
422
|
+
q1*z2*z4+q1*z3*z4)*QDSx([1, 5, 4, 2, 3], 'y') + (q1*q3*y1+q1*q3*y4+q1*q3*y5+q1*q3*y6-q1*q3*z1-q1*q3*z2-
|
423
|
+
q1*q3*z3-q1*q3*z4)*QDSx([1, 6, 2, 3, 4, 5], 'y') + (q1*y1^2+q1*y1*y3+q1*y1*y4+q1*y3*y4+q1*y1*y5+q1*y3*y5+
|
424
|
+
q1*y1*y6+q1*y3*y6-2*q1*y1*z1-q1*y3*z1-q1*y4*z1-q1*y5*z1-q1*y6*z1+q1*z1^2-2*q1*y1*z2-q1*y3*z2-q1*y4*z2-
|
425
|
+
q1*y5*z2-q1*y6*z2+2*q1*z1*z2+q1*z2^2-q1*y1*z3-q1*y3*z3+q1*z1*z3+q1*z2*z3-q1*y1*z4-q1*y3*z4+q1*z1*z4+
|
426
|
+
q1*z2*z4)*QDSx([1, 6, 3, 2, 4, 5], 'y') + (q1*y1+q1*y4+q1*y5+q1*y6-q1*z1-q1*z2-q1*z3-q1*z4)*QDSx([1, 6,
|
427
|
+
4, 2, 3, 5], 'y') + q1*q3*QDSx([1, 7, 2, 3, 4, 5, 6], 'y') + (q1*y1+q1*y3-q1*z1-q1*z2)*QDSx([1, 7, 3, 2,
|
428
|
+
4, 5, 6], 'y') + q1*QDSx([1, 7, 4, 2, 3, 5, 6], 'y') + (q1*q2*q3*y1^2+q1*q2*q3*y1*y2+q1*q2*q3*y2^2+
|
429
|
+
q1*q2*q3*y1*y4+q1*q2*q3*y2*y4+q1*q2*q3*y4^2-q1*q2*q3*y1*z1-q1*q2*q3*y2*z1-q1*q2*q3*y4*z1-q1*q2*q3*y1*z2-
|
430
|
+
q1*q2*q3*y2*z2-q1*q2*q3*y4*z2+q1*q2*q3*z1*z2-q1*q2*q3*y1*z3-q1*q2*q3*y2*z3-q1*q2*q3*y4*z3+q1*q2*q3*z1*z3+
|
431
|
+
q1*q2*q3*z2*z3-q1*q2*q3*y1*z4-q1*q2*q3*y2*z4-q1*q2*q3*y4*z4+q1*q2*q3*z1*z4+q1*q2*q3*z2*z4+
|
432
|
+
q1*q2*q3*z3*z4)*QDSx([2, 1], 'y') + (q1*q2*q3*y1+q1*q2*q3*y2+q1*q2*q3*y4+q1*q2*q3*y5-q1*q2*q3*z1-
|
433
|
+
q1*q2*q3*z2-q1*q2*q3*z3-q1*q2*q3*z4)*QDSx([2, 1, 3, 5, 4], 'y') + q1*q2*q3*QDSx([2, 1, 3, 6, 4, 5], 'y')
|
434
|
+
+ (q1*q3*y1^2+q1*q3*y1*y2+q1*q3*y2^2+q1*q3*y1*y4+q1*q3*y2*y4+q1*q3*y4^2-q1*q3*y1*z1-q1*q3*y2*z1-
|
435
|
+
q1*q3*y4*z1-q1*q3*y1*z2-q1*q3*y2*z2-q1*q3*y4*z2+q1*q3*z1*z2-q1*q3*y1*z3-q1*q3*y2*z3-q1*q3*y4*z3+
|
436
|
+
q1*q3*z1*z3+q1*q3*z2*z3-q1*q3*y1*z4-q1*q3*y2*z4-q1*q3*y4*z4+q1*q3*z1*z4+q1*q3*z2*z4+
|
437
|
+
q1*q3*z3*z4)*QDSx([2, 4, 1, 3], 'y') + (q1*y1^2*y3+q1*y1*y2*y3+q1*y2^2*y3+q1*y1^2*y4+q1*y1*y2*y4+
|
438
|
+
q1*y2^2*y4+q1*y1*y3*y4+q1*y2*y3*y4+q1*y1*y4^2+q1*y2*y4^2+q1*y3*y4^2+q1*y4^3-q1*y1^2*z1-q1*y1*y2*z1-
|
439
|
+
q1*y2^2*z1-q1*y1*y3*z1-q1*y2*y3*z1-2*q1*y1*y4*z1-2*q1*y2*y4*z1-q1*y3*y4*z1-2*q1*y4^2*z1+q1*y1*z1^2+
|
440
|
+
q1*y2*z1^2+q1*y4*z1^2-q1*y1^2*z2-q1*y1*y2*z2-q1*y2^2*z2-q1*y1*y3*z2-q1*y2*y3*z2-2*q1*y1*y4*z2-
|
441
|
+
2*q1*y2*y4*z2-q1*y3*y4*z2-2*q1*y4^2*z2+2*q1*y1*z1*z2+2*q1*y2*z1*z2+q1*y3*z1*z2+3*q1*y4*z1*z2-q1*z1^2*z2+
|
442
|
+
q1*y1*z2^2+q1*y2*z2^2+q1*y4*z2^2-q1*z1*z2^2-q1*y1*y3*z3-q1*y2*y3*z3-q1*y1*y4*z3-q1*y2*y4*z3-q1*y3*y4*z3-
|
443
|
+
q1*y4^2*z3+q1*y1*z1*z3+q1*y2*z1*z3+q1*y3*z1*z3+2*q1*y4*z1*z3-q1*z1^2*z3+q1*y1*z2*z3+q1*y2*z2*z3+
|
444
|
+
q1*y3*z2*z3+2*q1*y4*z2*z3-2*q1*z1*z2*z3-q1*z2^2*z3-q1*y1*y3*z4-q1*y2*y3*z4-q1*y1*y4*z4-q1*y2*y4*z4-
|
445
|
+
q1*y3*y4*z4-q1*y4^2*z4+q1*y1*z1*z4+q1*y2*z1*z4+q1*y3*z1*z4+2*q1*y4*z1*z4-q1*z1^2*z4+q1*y1*z2*z4+
|
446
|
+
q1*y2*z2*z4+q1*y3*z2*z4+2*q1*y4*z2*z4-2*q1*z1*z2*z4-q1*z2^2*z4+q1*y3*z3*z4+q1*y4*z3*z4-q1*z1*z3*z4-
|
447
|
+
q1*z2*z3*z4)*QDSx([2, 4, 3, 1], 'y') + (q1*y1^2+q1*y1*y2+q1*y2^2+q1*y1*y4+q1*y2*y4+q1*y4^2-q1*y1*z1-
|
448
|
+
q1*y2*z1-q1*y4*z1-q1*y1*z2-q1*y2*z2-q1*y4*z2+q1*z1*z2-q1*y1*z3-q1*y2*z3-q1*y4*z3+q1*z1*z3+q1*z2*z3-
|
449
|
+
q1*y1*z4-q1*y2*z4-q1*y4*z4+q1*z1*z4+q1*z2*z4+q1*z3*z4)*QDSx([2, 4, 5, 1, 3], 'y') + (q1*q3*y1+q1*q3*y2+
|
450
|
+
q1*q3*y4+q1*q3*y5-q1*q3*z1-q1*q3*z2-q1*q3*z3-q1*q3*z4)*QDSx([2, 5, 1, 3, 4], 'y') + (q1*y1^2+q1*y1*y2+
|
451
|
+
q1*y2^2+q1*y1*y3+q1*y2*y3+q1*y1*y4+q1*y2*y4+q1*y3*y4+q1*y4^2+q1*y1*y5+q1*y2*y5+q1*y3*y5+q1*y4*y5+q1*y5^2-
|
452
|
+
2*q1*y1*z1-2*q1*y2*z1-q1*y3*z1-2*q1*y4*z1-2*q1*y5*z1+q1*z1^2-2*q1*y1*z2-2*q1*y2*z2-q1*y3*z2-2*q1*y4*z2-
|
453
|
+
2*q1*y5*z2+3*q1*z1*z2+q1*z2^2-q1*y1*z3-q1*y2*z3-q1*y3*z3-q1*y4*z3-q1*y5*z3+2*q1*z1*z3+2*q1*z2*z3-
|
454
|
+
q1*y1*z4-q1*y2*z4-q1*y3*z4-q1*y4*z4-q1*y5*z4+2*q1*z1*z4+2*q1*z2*z4+q1*z3*z4)*QDSx([2, 5, 3, 1, 4], 'y') +
|
455
|
+
(q1*y1+q1*y2+q1*y4+q1*y5-q1*z1-q1*z2-q1*z3-q1*z4)*QDSx([2, 5, 4, 1, 3], 'y') + q1*q3*QDSx([2, 6, 1, 3,
|
456
|
+
4, 5], 'y') + (q1*y1+q1*y2+q1*y3+q1*y4+q1*y5+q1*y6-2*q1*z1-2*q1*z2-q1*z3-q1*z4)*QDSx([2, 6, 3, 1, 4, 5],
|
457
|
+
'y') + q1*QDSx([2, 6, 4, 1, 3, 5], 'y') + q1*QDSx([2, 7, 3, 1, 4, 5, 6], 'y') + (q1*q2*q3*y1+q1*q2*q3*y2+
|
458
|
+
q1*q2*q3*y3+q1*q2*q3*y4-q1*q2*q3*z1-q1*q2*q3*z2-q1*q2*q3*z3-q1*q2*q3*z4)*QDSx([3, 1, 2], 'y') +
|
459
|
+
q1*q2*q3*QDSx([3, 1, 2, 5, 4], 'y') + (q1*y1^2*y3+q1*y1*y3^2+q1*y1^2*y4+2*q1*y1*y3*y4+q1*y3^2*y4+
|
460
|
+
q1*y1*y4^2+q1*y3*y4^2-q1*y1^2*z1-2*q1*y1*y3*z1-q1*y3^2*z1-2*q1*y1*y4*z1-2*q1*y3*y4*z1-q1*y4^2*z1+
|
461
|
+
q1*y1*z1^2+q1*y3*z1^2+q1*y4*z1^2-q1*y1^2*z2-2*q1*y1*y3*z2-q1*y3^2*z2-2*q1*y1*y4*z2-2*q1*y3*y4*z2-
|
462
|
+
q1*y4^2*z2+2*q1*y1*z1*z2+2*q1*y3*z1*z2+2*q1*y4*z1*z2-q1*z1^2*z2+q1*y1*z2^2+q1*y3*z2^2+q1*y4*z2^2-
|
463
|
+
q1*z1*z2^2-q1*y1*y3*z3-q1*y1*y4*z3-q1*y3*y4*z3+q1*y1*z1*z3+q1*y3*z1*z3+q1*y4*z1*z3-q1*z1^2*z3+
|
464
|
+
q1*y1*z2*z3+q1*y3*z2*z3+q1*y4*z2*z3-q1*z1*z2*z3-q1*z2^2*z3-q1*y1*y3*z4-q1*y1*y4*z4-q1*y3*y4*z4+
|
465
|
+
q1*y1*z1*z4+q1*y3*z1*z4+q1*y4*z1*z4-q1*z1^2*z4+q1*y1*z2*z4+q1*y3*z2*z4+q1*y4*z2*z4-q1*z1*z2*z4-
|
466
|
+
q1*z2^2*z4+q1*q3*y1+q1*q3*y2+q1*q3*y3+q1*q3*y4-q1*q3*z1-q1*q3*z2-q1*q3*z3-q1*q3*z4)*QDSx([3, 4, 1, 2],
|
467
|
+
'y') + (q1*y1*y3+q1*y2*y3+q1*y3^2+q1*y1*y4+q1*y2*y4+2*q1*y3*y4+q1*y4^2-q1*y1*z1-q1*y2*z1-2*q1*y3*z1-
|
468
|
+
2*q1*y4*z1+q1*z1^2-q1*y1*z2-q1*y2*z2-2*q1*y3*z2-2*q1*y4*z2+2*q1*z1*z2+q1*z2^2-q1*y3*z3-q1*y4*z3+q1*z1*z3+
|
469
|
+
q1*z2*z3-q1*y3*z4-q1*y4*z4+q1*z1*z4+q1*z2*z4)*QDSx([3, 4, 2, 1], 'y') + (q1*y1+q1*y2+q1*y3+q1*y4-q1*z1-
|
470
|
+
q1*z2-q1*z3-q1*z4)*QDSx([3, 4, 5, 1, 2], 'y') + (q1*y1^2+2*q1*y1*y3+q1*y3^2+q1*y1*y4+q1*y3*y4+q1*y1*y5+
|
471
|
+
q1*y3*y5-2*q1*y1*z1-2*q1*y3*z1-q1*y4*z1-q1*y5*z1+q1*z1^2-2*q1*y1*z2-2*q1*y3*z2-q1*y4*z2-q1*y5*z2+
|
472
|
+
2*q1*z1*z2+q1*z2^2-q1*y1*z3-q1*y3*z3+q1*z1*z3+q1*z2*z3-q1*y1*z4-q1*y3*z4+q1*z1*z4+q1*z2*z4+
|
473
|
+
q1*q3)*QDSx([3, 5, 1, 2, 4], 'y') + (q1*y1+q1*y2+2*q1*y3+q1*y4+q1*y5-2*q1*z1-2*q1*z2-q1*z3-
|
474
|
+
q1*z4)*QDSx([3, 5, 2, 1, 4], 'y') + q1*QDSx([3, 5, 4, 1, 2], 'y') + (q1*y1+q1*y3-q1*z1-q1*z2)*QDSx([3,
|
475
|
+
6, 1, 2, 4, 5], 'y') + q1*QDSx([3, 6, 2, 1, 4, 5], 'y') + (q3*y4^4-q3*y4^3*z1-q3*y4^3*z2+q3*y4^2*z1*z2-
|
476
|
+
q3*y4^3*z3+q3*y4^2*z1*z3+q3*y4^2*z2*z3-q3*y4*z1*z2*z3-q3*y4^3*z4+q3*y4^2*z1*z4+q3*y4^2*z2*z4-
|
477
|
+
q3*y4*z1*z2*z4+q3*y4^2*z3*z4-q3*y4*z1*z3*z4-q3*y4*z2*z3*z4+q3*z1*z2*z3*z4)*QDSx([4, 1, 2, 3], 'y') +
|
478
|
+
(y1*y4^4+y3*y4^4-y1*y4^3*z1-y3*y4^3*z1-y4^4*z1+y4^3*z1^2-y1*y4^3*z2-y3*y4^3*z2-y4^4*z2+y1*y4^2*z1*z2+
|
479
|
+
y3*y4^2*z1*z2+2*y4^3*z1*z2-y4^2*z1^2*z2+y4^3*z2^2-y4^2*z1*z2^2-y1*y4^3*z3-y3*y4^3*z3+y1*y4^2*z1*z3+
|
480
|
+
y3*y4^2*z1*z3+y4^3*z1*z3-y4^2*z1^2*z3+y1*y4^2*z2*z3+y3*y4^2*z2*z3+y4^3*z2*z3-y1*y4*z1*z2*z3-
|
481
|
+
y3*y4*z1*z2*z3-2*y4^2*z1*z2*z3+y4*z1^2*z2*z3-y4^2*z2^2*z3+y4*z1*z2^2*z3-y1*y4^3*z4-y3*y4^3*z4+
|
482
|
+
y1*y4^2*z1*z4+y3*y4^2*z1*z4+y4^3*z1*z4-y4^2*z1^2*z4+y1*y4^2*z2*z4+y3*y4^2*z2*z4+y4^3*z2*z4-
|
483
|
+
y1*y4*z1*z2*z4-y3*y4*z1*z2*z4-2*y4^2*z1*z2*z4+y4*z1^2*z2*z4-y4^2*z2^2*z4+y4*z1*z2^2*z4+y1*y4^2*z3*z4+
|
484
|
+
y3*y4^2*z3*z4-y1*y4*z1*z3*z4-y3*y4*z1*z3*z4-y4^2*z1*z3*z4+y4*z1^2*z3*z4-y1*y4*z2*z3*z4-y3*y4*z2*z3*z4-
|
485
|
+
y4^2*z2*z3*z4+y1*z1*z2*z3*z4+y3*z1*z2*z3*z4+2*y4*z1*z2*z3*z4-z1^2*z2*z3*z4+y4*z2^2*z3*z4-
|
486
|
+
z1*z2^2*z3*z4)*QDSx([4, 1, 3, 2], 'y') + (y4^4-y4^3*z1-y4^3*z2+y4^2*z1*z2-y4^3*z3+y4^2*z1*z3+y4^2*z2*z3-
|
487
|
+
y4*z1*z2*z3-y4^3*z4+y4^2*z1*z4+y4^2*z2*z4-y4*z1*z2*z4+y4^2*z3*z4-y4*z1*z3*z4-y4*z2*z3*z4+
|
488
|
+
z1*z2*z3*z4)*QDSx([4, 1, 5, 2, 3], 'y') + (y4^4-y4^3*z1-y4^3*z2+y4^2*z1*z2-y4^3*z3+y4^2*z1*z3+y4^2*z2*z3-
|
489
|
+
y4*z1*z2*z3-y4^3*z4+y4^2*z1*z4+y4^2*z2*z4-y4*z1*z2*z4+y4^2*z3*z4-y4*z1*z3*z4-y4*z2*z3*z4+
|
490
|
+
z1*z2*z3*z4)*QDSx([4, 2, 3, 1], 'y') + (q1*y1+q1*y3+q1*y4+q1*y5-q1*z1-q1*z2-q1*z3-q1*z4)*QDSx([4, 5, 1,
|
491
|
+
2, 3], 'y') + q1*QDSx([4, 5, 2, 1, 3], 'y') + q1*QDSx([4, 6, 1, 2, 3, 5], 'y') + (q3*y4^3+q3*y4^2*y5+
|
492
|
+
q3*y4*y5^2+q3*y5^3-q3*y4^2*z1-q3*y4*y5*z1-q3*y5^2*z1-q3*y4^2*z2-q3*y4*y5*z2-q3*y5^2*z2+q3*y4*z1*z2+
|
493
|
+
q3*y5*z1*z2-q3*y4^2*z3-q3*y4*y5*z3-q3*y5^2*z3+q3*y4*z1*z3+q3*y5*z1*z3+q3*y4*z2*z3+q3*y5*z2*z3-
|
494
|
+
q3*z1*z2*z3-q3*y4^2*z4-q3*y4*y5*z4-q3*y5^2*z4+q3*y4*z1*z4+q3*y5*z1*z4+q3*y4*z2*z4+q3*y5*z2*z4-
|
495
|
+
q3*z1*z2*z4+q3*y4*z3*z4+q3*y5*z3*z4-q3*z1*z3*z4-q3*z2*z3*z4)*QDSx([5, 1, 2, 3, 4], 'y') + (y1*y4^3+
|
496
|
+
y3*y4^3+y1*y4^2*y5+y3*y4^2*y5+y1*y4*y5^2+y3*y4*y5^2+y1*y5^3+y3*y5^3-y1*y4^2*z1-y3*y4^2*z1-y4^3*z1-
|
497
|
+
y1*y4*y5*z1-y3*y4*y5*z1-y4^2*y5*z1-y1*y5^2*z1-y3*y5^2*z1-y4*y5^2*z1-y5^3*z1+y4^2*z1^2+y4*y5*z1^2+
|
498
|
+
y5^2*z1^2-y1*y4^2*z2-y3*y4^2*z2-y4^3*z2-y1*y4*y5*z2-y3*y4*y5*z2-y4^2*y5*z2-y1*y5^2*z2-y3*y5^2*z2-
|
499
|
+
y4*y5^2*z2-y5^3*z2+y1*y4*z1*z2+y3*y4*z1*z2+2*y4^2*z1*z2+y1*y5*z1*z2+y3*y5*z1*z2+2*y4*y5*z1*z2+
|
500
|
+
2*y5^2*z1*z2-y4*z1^2*z2-y5*z1^2*z2+y4^2*z2^2+y4*y5*z2^2+y5^2*z2^2-y4*z1*z2^2-y5*z1*z2^2-y1*y4^2*z3-
|
501
|
+
y3*y4^2*z3-y1*y4*y5*z3-y3*y4*y5*z3-y1*y5^2*z3-y3*y5^2*z3+y1*y4*z1*z3+y3*y4*z1*z3+y4^2*z1*z3+y1*y5*z1*z3+
|
502
|
+
y3*y5*z1*z3+y4*y5*z1*z3+y5^2*z1*z3-y4*z1^2*z3-y5*z1^2*z3+y1*y4*z2*z3+y3*y4*z2*z3+y4^2*z2*z3+y1*y5*z2*z3+
|
503
|
+
y3*y5*z2*z3+y4*y5*z2*z3+y5^2*z2*z3-y1*z1*z2*z3-y3*z1*z2*z3-2*y4*z1*z2*z3-2*y5*z1*z2*z3+z1^2*z2*z3-
|
504
|
+
y4*z2^2*z3-y5*z2^2*z3+z1*z2^2*z3-y1*y4^2*z4-y3*y4^2*z4-y1*y4*y5*z4-y3*y4*y5*z4-y1*y5^2*z4-y3*y5^2*z4+
|
505
|
+
y1*y4*z1*z4+y3*y4*z1*z4+y4^2*z1*z4+y1*y5*z1*z4+y3*y5*z1*z4+y4*y5*z1*z4+y5^2*z1*z4-y4*z1^2*z4-y5*z1^2*z4+
|
506
|
+
y1*y4*z2*z4+y3*y4*z2*z4+y4^2*z2*z4+y1*y5*z2*z4+y3*y5*z2*z4+y4*y5*z2*z4+y5^2*z2*z4-y1*z1*z2*z4-
|
507
|
+
y3*z1*z2*z4-2*y4*z1*z2*z4-2*y5*z1*z2*z4+z1^2*z2*z4-y4*z2^2*z4-y5*z2^2*z4+z1*z2^2*z4+y1*y4*z3*z4+
|
508
|
+
y3*y4*z3*z4+y1*y5*z3*z4+y3*y5*z3*z4-y1*z1*z3*z4-y3*z1*z3*z4-y4*z1*z3*z4-y5*z1*z3*z4+z1^2*z3*z4-
|
509
|
+
y1*z2*z3*z4-y3*z2*z3*z4-y4*z2*z3*z4-y5*z2*z3*z4+2*z1*z2*z3*z4+z2^2*z3*z4)*QDSx([5, 1, 3, 2, 4], 'y') +
|
510
|
+
(y4^3+y4^2*y5+y4*y5^2+y5^3-y4^2*z1-y4*y5*z1-y5^2*z1-y4^2*z2-y4*y5*z2-y5^2*z2+y4*z1*z2+y5*z1*z2-y4^2*z3-
|
511
|
+
y4*y5*z3-y5^2*z3+y4*z1*z3+y5*z1*z3+y4*z2*z3+y5*z2*z3-z1*z2*z3-y4^2*z4-y4*y5*z4-y5^2*z4+y4*z1*z4+y5*z1*z4+
|
512
|
+
y4*z2*z4+y5*z2*z4-z1*z2*z4+y4*z3*z4+y5*z3*z4-z1*z3*z4-z2*z3*z4)*QDSx([5, 1, 4, 2, 3], 'y') + (y4^3+
|
513
|
+
y4^2*y5+y4*y5^2+y5^3-y4^2*z1-y4*y5*z1-y5^2*z1-y4^2*z2-y4*y5*z2-y5^2*z2+y4*z1*z2+y5*z1*z2-y4^2*z3-
|
514
|
+
y4*y5*z3-y5^2*z3+y4*z1*z3+y5*z1*z3+y4*z2*z3+y5*z2*z3-z1*z2*z3-y4^2*z4-y4*y5*z4-y5^2*z4+y4*z1*z4+y5*z1*z4+
|
515
|
+
y4*z2*z4+y5*z2*z4-z1*z2*z4+y4*z3*z4+y5*z3*z4-z1*z3*z4-z2*z3*z4)*QDSx([5, 2, 3, 1, 4], 'y') + (q3*y4^2+
|
516
|
+
q3*y4*y5+q3*y5^2+q3*y4*y6+q3*y5*y6+q3*y6^2-q3*y4*z1-q3*y5*z1-q3*y6*z1-q3*y4*z2-q3*y5*z2-q3*y6*z2+
|
517
|
+
q3*z1*z2-q3*y4*z3-q3*y5*z3-q3*y6*z3+q3*z1*z3+q3*z2*z3-q3*y4*z4-q3*y5*z4-q3*y6*z4+q3*z1*z4+q3*z2*z4+
|
518
|
+
q3*z3*z4)*QDSx([6, 1, 2, 3, 4, 5], 'y') + (y1*y4^2+y3*y4^2+y1*y4*y5+y3*y4*y5+y1*y5^2+y3*y5^2+y1*y4*y6+
|
519
|
+
y3*y4*y6+y1*y5*y6+y3*y5*y6+y1*y6^2+y3*y6^2-y1*y4*z1-y3*y4*z1-y4^2*z1-y1*y5*z1-y3*y5*z1-y4*y5*z1-y5^2*z1-
|
520
|
+
y1*y6*z1-y3*y6*z1-y4*y6*z1-y5*y6*z1-y6^2*z1+y4*z1^2+y5*z1^2+y6*z1^2-y1*y4*z2-y3*y4*z2-y4^2*z2-y1*y5*z2-
|
521
|
+
y3*y5*z2-y4*y5*z2-y5^2*z2-y1*y6*z2-y3*y6*z2-y4*y6*z2-y5*y6*z2-y6^2*z2+y1*z1*z2+y3*z1*z2+2*y4*z1*z2+
|
522
|
+
2*y5*z1*z2+2*y6*z1*z2-z1^2*z2+y4*z2^2+y5*z2^2+y6*z2^2-z1*z2^2-y1*y4*z3-y3*y4*z3-y1*y5*z3-y3*y5*z3-
|
523
|
+
y1*y6*z3-y3*y6*z3+y1*z1*z3+y3*z1*z3+y4*z1*z3+y5*z1*z3+y6*z1*z3-z1^2*z3+y1*z2*z3+y3*z2*z3+y4*z2*z3+
|
524
|
+
y5*z2*z3+y6*z2*z3-2*z1*z2*z3-z2^2*z3-y1*y4*z4-y3*y4*z4-y1*y5*z4-y3*y5*z4-y1*y6*z4-y3*y6*z4+y1*z1*z4+
|
525
|
+
y3*z1*z4+y4*z1*z4+y5*z1*z4+y6*z1*z4-z1^2*z4+y1*z2*z4+y3*z2*z4+y4*z2*z4+y5*z2*z4+y6*z2*z4-2*z1*z2*z4-
|
526
|
+
z2^2*z4+y1*z3*z4+y3*z3*z4-z1*z3*z4-z2*z3*z4)*QDSx([6, 1, 3, 2, 4, 5], 'y') + (y4^2+y4*y5+y5^2+y4*y6+
|
527
|
+
y5*y6+y6^2-y4*z1-y5*z1-y6*z1-y4*z2-y5*z2-y6*z2+z1*z2-y4*z3-y5*z3-y6*z3+z1*z3+z2*z3-y4*z4-y5*z4-y6*z4+
|
528
|
+
z1*z4+z2*z4+z3*z4)*QDSx([6, 1, 4, 2, 3, 5], 'y') + (y4^2+y4*y5+y5^2+y4*y6+y5*y6+y6^2-y4*z1-y5*z1-y6*z1-
|
529
|
+
y4*z2-y5*z2-y6*z2+z1*z2-y4*z3-y5*z3-y6*z3+z1*z3+z2*z3-y4*z4-y5*z4-y6*z4+z1*z4+z2*z4+z3*z4)*QDSx([6, 2,
|
530
|
+
3, 1, 4, 5], 'y') + (q3*y4+q3*y5+q3*y6+q3*y7-q3*z1-q3*z2-q3*z3-q3*z4)*QDSx([7, 1, 2, 3, 4, 5, 6], 'y') +
|
531
|
+
(y1*y4+y3*y4+y1*y5+y3*y5+y1*y6+y3*y6+y1*y7+y3*y7-y1*z1-y3*z1-y4*z1-y5*z1-y6*z1-y7*z1+z1^2-y1*z2-y3*z2-
|
532
|
+
y4*z2-y5*z2-y6*z2-y7*z2+2*z1*z2+z2^2-y1*z3-y3*z3+z1*z3+z2*z3-y1*z4-y3*z4+z1*z4+z2*z4)*QDSx([7, 1, 3, 2,
|
533
|
+
4, 5, 6], 'y') + (y4+y5+y6+y7-z1-z2-z3-z4)*QDSx([7, 1, 4, 2, 3, 5, 6], 'y') + (y4+y5+y6+y7-z1-z2-z3-
|
534
|
+
z4)*QDSx([7, 2, 3, 1, 4, 5, 6], 'y') + q3*QDSx([8, 1, 2, 3, 4, 5, 6, 7], 'y') + (y1+y3-z1-z2)*QDSx([8,
|
535
|
+
1, 3, 2, 4, 5, 6, 7], 'y') + QDSx([8, 1, 4, 2, 3, 5, 6, 7], 'y') + QDSx([8, 2, 3, 1, 4, 5, 6, 7],
|
536
|
+
'y')
|
537
|
+
```
|
538
|
+
This output of roughly 17,000 characters took about 2 seconds to compute on my laptop. **Again note that
|
539
|
+
quantum double computations are technically conjectural, but a proof is likely forthcoming.**
|
540
|
+
|
541
|
+
|
542
|
+
[Homepage of schubmult](http://schubmult.org/)
|