Author: Daniel Robert-Nicoud
Contact: [email protected]
Table of contents
This package provides tools to work and do explicit computations on Sullivan and Dupont forms, as well as calculating the action of the various maps involved in the Dupont contraction and the transferred structure from the Sullivan algebra (a commutative algebra) to the Dupont algebra (which receives the structure of a commutative algebra up to homotopy).
Install this package from PyPi: pip install dupont-contraction
Use this package in your code: import dupontcontraction
We work in the homological convention over the field
We give a brief recollection of the mathematical objects in play. For more details, we direct the reader to the article of Lunardon.
The algebra of Sullivan forms
Explicitly, for
This object has its origin in the works of Sullivan and Bousfield-Guggenheim in rational homotopy theory.
Dupont defined a simplicial sub-complex
This is nothing else than the (co)cellular complex of the
Dupont additionally showed that there exists a simplicial contraction from the
Sullivan forms to the Dupont forms, i.e. three simplicial maps
Given a contraction from a dg commutative algebra to a sub-chain complex one can transfer the comutative structure of the algebra to a structure on the sub-complex that is commutative up to homotopy. This is called the homotopy transfer theorem and we apply it in two different (but related) ways to obtain
- a structure of
$\Omega\mathrm{BCom}$ -algebra on the Dupont forms, and - a structure of
$\mathrm{Com}_\infty = \Omega\mathrm{Lie}^\vee$ -algebra on the Dupont forms.
By Cheng-Getzler, this second structure can be faithfully encoded by a structure of associative algebra up to homotopy, with the full structure recovered by taking permutations.
from dupontcontraction.simplicial import DupontForm
Implements the Dupont forms
-
DupontForm(n, form)
: basic constructor; arguments are-
n
: simplicial dimension -
form
: the actual content of the form, given as a dictionary with keys of the formi_0|...|i_k
(representing the basic form$\omega_{i_0|...|i_k}$ ) and corresponding elements given by the rational coefficient of the key form (written as string or integer). For example, the dictionary{'0|2|3': '1/2', '1': '-1/3', '': 2}
will result in the form$\tfrac{1}{2}\omega_{0|2|3} - \tfrac{1}{3}\omega_{1} + 2$ .
-
-
DupontForm.zero(n)
: the zero form; arguments:-
n
: simplicial dimension.
-
The following basic operations are supported:
- sum of Dupont forms (
+
,sum
), - comparison of Dupont forms (
==
). -
tree_product(tree)
: transferred$\Omega\mathrm{BCom}$ structure on Dupont forms from the Sullivan forms via the Dupont contraction. The generating operations f this structure are indexed by rooted trees. This function does not encode the abstract operation but calculates it on arguments directly. Its argument represents a planar tree with Dupont forms at the leaves by writing it as a nested list of Dupont forms. For example,[[w0, w01], w012, [w2, w12]]
forw0
given by$\omega_0$ and so on, represents the tree with a 3-corolla at the root, with at its leaves the 2-corolla with$\omega_0$ and$\omega_{0|1}$ at the leaves, the Dupont form$\omega_{0|1|2}$ , and the 2-corolla with$\omega_2$ and$\omega_{1|2}$ at the leaves. -
a_infinity_product(*args)
: transferred$\mathrm{Com}_\infty$ structure on Dupont forms from the Sullivan forms via the Dupont contraction. The argumentsargs
are Dupont forms.
Warning: This can be very slow for high arities as the functionSullivanForm.reduce()
needs to be called on complex Sullivan forms.
d()
: differential of a Dupont form. Forw
a Dupont form we havew.d() == w.i().d().p()
.i()
: image of the Dupont form in the Sullivan complex.
from dupontcontraction.simplicial import SullivanForm
Implements the Sullivan forms, given by the polynomial differential forms on the simplices.
-
SullivanForm(n, form)
: basic constructor; arguments are-
n
: simplicial dimension -
form
: the actual content of the form, given as a dictionary with keys of the formi_0|...|i_k
indicating a term of the form$p(t_0,\ldots,t_n)dt_{i_0}\ldots dt_{i_k}$ and associated element representing the polynomial. This is again a dictionary with keys of the formk_0|...|k_n
(notice that$n+1$ terms need always be present) indicating the monomial$t_0^{k_0}\ldots t_n^{k_n}$ and the rational coefficient as associated element.
For example,SullivanForm(2, {'': {'0|0|0': 1, '2|1|0': -1}, '1|2': {'1|1|0': '1/2', '1|0|1': 1}})
gives the form$1 - t_0^2 t_1 + (\tfrac{1}{2}t_1 t_2 + t_1 t_3)dt_1 dt_2$ .
-
-
SullivanForm.zero(n)
: the zero form; arguments:-
n
: simplicial dimension
-
The following basic operations are supported:
- sum of Sullivan forms (
+
,sum
), - multiplication of Sullivan forms and scalar times Sullivan form (
*
,np.product
), - comparison of Sullivan forms (
==
).
-
d()
: differential of a Sullivan form. -
reduce(eliminate=0)
: using the algebraic relations, simplifies the Sullivan form by eliminating completely$t_{\text{eliminate}}$ from the expression. -
p()
: projection from Sullivan forms to Dupont forms. -
h()
: contraction of Sullivan forms.
Import classes.
from dupontcontraction.simplicial import SullivanForm
from dupontcontraction.simplicial import DupontForm
Construct the Sullivan form
x = SullivanForm(2, {'': {'0|2|1': '1'}, '0|1': {'1|1|0': '1/2'}})
Construct the Dupont forms
w1 = DupontForm(2, {'1': 1})
w01 = DupontForm(2, {'0|1': 1})
Print the LaTeX representation of x
, outputting the string t_{1}^{2}t_{2} + \frac{1}{2}t_{0}t_{1}dt_{0}dt_{1}
. Note: print(x)
gives the same output.
print(repr(x))
Print the LaTeX representation of w01
(giving \omega_{0|1}
), embeds w01
into the Sullivan algebra, and prints its representation (t_{0}dt_{1} - t_{1}dt_{0}
).
print(w01)
print(w01.i())
Add w1
and w01
in the Dupont complex and print the representation (\omega_{1} + \omega_{0|1}
).
print(w0 + w01)
Multiply x
by w1
, giving t_{1}^{3}t_{2} + \frac{1}{2}t_{0}t_{1}^{2}dt_{0}dt_{1}
, and then give the equivalent representation obtained eliminating \left(-t_{0}t_{1}^{3} - t_{1}^{4} + t_{1}^{3}\right) + \frac{1}{2}t_{0}t_{1}^{2}dt_{0}dt_{1}
).
print(x*w1.i())
print((x*w1.i()).reduce(eliminate=2))
Project \frac{1}{48}\omega_{0|1|2}
).
print(x.p())
Calculate the homotopy associative product -\frac{1}{12}\omega_{0|1}
.
print(DupontForm.a_infinity_product(w01, w01, w1))
- A. K. Bousfield and V. K. A. M. Guggenheim. On PL de Rham theory and rational homotopy theory. Mem. Amer. Math. Soc., 8, 1976.
- X. Z. Cheng and E. Getzler. Transferring homotopy commutative algebraic structures. Journal of Pure and Applied Algebra, 212:2535–2542, 2008. arXiv:math/0610912.
- L. Lunardon. Some remarks on Dupont contraction. arXiv:1807.02517.
- D. Sullivan. Infinitesimal computations in topology. Inst. Hautes Études Sci. Publ. Math., (47):269–331, 1978.