Hochschild Complexes¶
- class sage.homology.hochschild_complex.HochschildComplex(A, M)[source]¶
- Bases: - UniqueRepresentation,- Parent- The Hochschild complex. - Let \(A\) be an algebra over a commutative ring \(R\) such that \(A\) a projective \(R\)-module, and \(M\) an \(A\)-bimodule. The Hochschild complex is the chain complex given by \[C_n(A, M) := M \otimes A^{\otimes n}\]- with the boundary operators given as follows. For fixed \(n\), define the face maps \[\begin{split}f_{n,i}(m \otimes a_1 \otimes \cdots \otimes a_n) = \begin{cases} m a_1 \otimes \cdots \otimes a_n & \text{if } i = 0, \\ a_n m \otimes a_1 \otimes \cdots \otimes a_{n-1} & \text{if } i = n, \\ m \otimes a_1 \otimes \cdots \otimes a_i a_{i+1} \otimes \cdots \otimes a_n & \text{otherwise.} \end{cases}\end{split}\]- We define the boundary operators as \[d_n = \sum_{i=0}^n (-1)^i f_{n,i}.\]- The Hochschild homology of \(A\) is the homology of this complex. Alternatively, the Hochschild homology can be described by \(HH_n(A, M) = \operatorname{Tor}_n^{A^e}(A, M)\), where \(A^e = A \otimes A^o\) (\(A^o\) is the opposite algebra of \(A\)) is the enveloping algebra of \(A\). - Hochschild cohomology is the homology of the dual complex and can be described by \(HH^n(A, M) = \operatorname{Ext}^n_{A^e}(A, M)\). - Another perspective on Hochschild homology is that \(f_{n,i}\) make the family \(C_n(A, M)\) a simplicial object in the category of \(R\)-modules, and the degeneracy maps are \[s_i(a_0 \otimes \cdots \otimes a_n) = a_0 \otimes \cdots \otimes a_i \otimes 1 \otimes a_{i+1} \otimes \cdots \otimes a_n\]- The Hochschild homology can also be constructed as the homology of this simplicial module. - REFERENCES: - class Element(parent, vectors)[source]¶
- Bases: - ModuleElement- A chain of the Hochschild complex. - INPUT: - Can be one of the following: - A dictionary whose keys are the degree and whose \(d\)-th value is an element in the degree \(d\) module. 
- An element in the coefficient module \(M\). 
 - EXAMPLES: - sage: SGA = SymmetricGroupAlgebra(QQ, 3) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H(T.an_element()) Chain(0: 2*B['v']) sage: H({0: T.an_element()}) Chain(0: 2*B['v']) sage: H({1: H.module(1).an_element()}) Chain(1: 2*B['v'] # [1, 2, 3] + 2*B['v'] # [1, 3, 2] + 3*B['v'] # [2, 1, 3]) sage: H({0: H.module(0).an_element(), 3: H.module(3).an_element()}) Chain with 2 nonzero terms over Rational Field sage: F.<x,y> = FreeAlgebra(ZZ) sage: H = F.hochschild_complex(F) sage: H(x + 2*y^2) Chain(0: F[x] + 2*F[y^2]) sage: H({0: x*y - x}) Chain(0: -F[x] + F[x*y]) sage: H(2) Chain(0: 2*F[1]) sage: H({0: x-y, 2: H.module(2).basis().an_element()}) Chain with 2 nonzero terms over Integer Ring - >>> from sage.all import * >>> SGA = SymmetricGroupAlgebra(QQ, Integer(3)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H(T.an_element()) Chain(0: 2*B['v']) >>> H({Integer(0): T.an_element()}) Chain(0: 2*B['v']) >>> H({Integer(1): H.module(Integer(1)).an_element()}) Chain(1: 2*B['v'] # [1, 2, 3] + 2*B['v'] # [1, 3, 2] + 3*B['v'] # [2, 1, 3]) >>> H({Integer(0): H.module(Integer(0)).an_element(), Integer(3): H.module(Integer(3)).an_element()}) Chain with 2 nonzero terms over Rational Field >>> F = FreeAlgebra(ZZ, names=('x', 'y',)); (x, y,) = F._first_ngens(2) >>> H = F.hochschild_complex(F) >>> H(x + Integer(2)*y**Integer(2)) Chain(0: F[x] + 2*F[y^2]) >>> H({Integer(0): x*y - x}) Chain(0: -F[x] + F[x*y]) >>> H(Integer(2)) Chain(0: 2*F[1]) >>> H({Integer(0): x-y, Integer(2): H.module(Integer(2)).basis().an_element()}) Chain with 2 nonzero terms over Integer Ring - vector(degree)[source]¶
- Return the free module element in - degree.- EXAMPLES: - sage: F.<x,y> = FreeAlgebra(ZZ) sage: H = F.hochschild_complex(F) sage: a = H({0: x-y, 2: H.module(2).basis().an_element()}) sage: [a.vector(i) for i in range(3)] [F[x] - F[y], 0, F[1] # F[1] # F[1]] - >>> from sage.all import * >>> F = FreeAlgebra(ZZ, names=('x', 'y',)); (x, y,) = F._first_ngens(2) >>> H = F.hochschild_complex(F) >>> a = H({Integer(0): x-y, Integer(2): H.module(Integer(2)).basis().an_element()}) >>> [a.vector(i) for i in range(Integer(3))] [F[x] - F[y], 0, F[1] # F[1] # F[1]] 
 
 - algebra()[source]¶
- Return the defining algebra of - self.- EXAMPLES: - sage: SGA = SymmetricGroupAlgebra(QQ, 3) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.algebra() Symmetric group algebra of order 3 over Rational Field - >>> from sage.all import * >>> SGA = SymmetricGroupAlgebra(QQ, Integer(3)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.algebra() Symmetric group algebra of order 3 over Rational Field 
 - boundary(d)[source]¶
- Return the boundary operator in degree - d.- EXAMPLES: - sage: E.<x,y> = ExteriorAlgebra(QQ) sage: H = E.hochschild_complex(E) sage: d1 = H.boundary(1) sage: z = d1.domain().an_element(); z 2*1 # 1 + 2*1 # x + 3*1 # y sage: d1(z) 0 sage: d1.matrix() [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 2 0 0 -2 0 0 0 0 0 0] sage: s = SymmetricFunctions(QQ).s() sage: H = s.hochschild_complex(s) sage: d1 = H.boundary(1) sage: x = d1.domain().an_element(); x 2*s[] # s[] + 2*s[] # s[1] + 3*s[] # s[2] sage: d1(x) 0 sage: y = tensor([s.an_element(), s.an_element()]) sage: d1(y) 0 sage: z = tensor([s[2,1] + s[3], s.an_element()]) sage: d1(z) 0 - >>> from sage.all import * >>> E = ExteriorAlgebra(QQ, names=('x', 'y',)); (x, y,) = E._first_ngens(2) >>> H = E.hochschild_complex(E) >>> d1 = H.boundary(Integer(1)) >>> z = d1.domain().an_element(); z 2*1 # 1 + 2*1 # x + 3*1 # y >>> d1(z) 0 >>> d1.matrix() [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 2 0 0 -2 0 0 0 0 0 0] >>> s = SymmetricFunctions(QQ).s() >>> H = s.hochschild_complex(s) >>> d1 = H.boundary(Integer(1)) >>> x = d1.domain().an_element(); x 2*s[] # s[] + 2*s[] # s[1] + 3*s[] # s[2] >>> d1(x) 0 >>> y = tensor([s.an_element(), s.an_element()]) >>> d1(y) 0 >>> z = tensor([s[Integer(2),Integer(1)] + s[Integer(3)], s.an_element()]) >>> d1(z) 0 
 - coboundary(d)[source]¶
- Return the coboundary morphism of degree - d.- EXAMPLES: - sage: E.<x,y> = ExteriorAlgebra(QQ) sage: H = E.hochschild_complex(E) sage: del1 = H.coboundary(1) sage: z = del1.domain().an_element(); z 2 + 2*x + 3*y sage: del1(z) 0 sage: del1.matrix() [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 2] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 -2] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] - >>> from sage.all import * >>> E = ExteriorAlgebra(QQ, names=('x', 'y',)); (x, y,) = E._first_ngens(2) >>> H = E.hochschild_complex(E) >>> del1 = H.coboundary(Integer(1)) >>> z = del1.domain().an_element(); z 2 + 2*x + 3*y >>> del1(z) 0 >>> del1.matrix() [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 2] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 -2] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] [ 0 0 0 0] 
 - coefficients()[source]¶
- Return the coefficients of - self.- EXAMPLES: - sage: SGA = SymmetricGroupAlgebra(QQ, 3) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.coefficients() Trivial representation of Standard permutations of 3 over Rational Field - >>> from sage.all import * >>> SGA = SymmetricGroupAlgebra(QQ, Integer(3)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.coefficients() Trivial representation of Standard permutations of 3 over Rational Field 
 - cohomology(d)[source]¶
- Return the - d-th cohomology group.- EXAMPLES: - sage: E.<x,y> = ExteriorAlgebra(QQ) sage: H = E.hochschild_complex(E) sage: H.cohomology(0) Vector space of dimension 3 over Rational Field sage: H.cohomology(1) Vector space of dimension 4 over Rational Field sage: H.cohomology(2) Vector space of dimension 6 over Rational Field sage: SGA = SymmetricGroupAlgebra(QQ, 3) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.cohomology(0) Vector space of dimension 1 over Rational Field sage: H.cohomology(1) Vector space of dimension 0 over Rational Field sage: H.cohomology(2) Vector space of dimension 0 over Rational Field - >>> from sage.all import * >>> E = ExteriorAlgebra(QQ, names=('x', 'y',)); (x, y,) = E._first_ngens(2) >>> H = E.hochschild_complex(E) >>> H.cohomology(Integer(0)) Vector space of dimension 3 over Rational Field >>> H.cohomology(Integer(1)) Vector space of dimension 4 over Rational Field >>> H.cohomology(Integer(2)) Vector space of dimension 6 over Rational Field >>> SGA = SymmetricGroupAlgebra(QQ, Integer(3)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.cohomology(Integer(0)) Vector space of dimension 1 over Rational Field >>> H.cohomology(Integer(1)) Vector space of dimension 0 over Rational Field >>> H.cohomology(Integer(2)) Vector space of dimension 0 over Rational Field - When working over general rings (except \(\ZZ\)) and we can construct a unitriangular basis for the image quotient, we fallback to a slower implementation using (combinatorial) free modules: - sage: R.<x,y> = QQ[] sage: SGA = SymmetricGroupAlgebra(R, 2) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.cohomology(1) Free module generated by {} over Multivariate Polynomial Ring in x, y over Rational Field - >>> from sage.all import * >>> R = QQ['x, y']; (x, y,) = R._first_ngens(2) >>> SGA = SymmetricGroupAlgebra(R, Integer(2)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.cohomology(Integer(1)) Free module generated by {} over Multivariate Polynomial Ring in x, y over Rational Field 
 - differential(d)[source]¶
- Return the boundary operator in degree - d.- EXAMPLES: - sage: E.<x,y> = ExteriorAlgebra(QQ) sage: H = E.hochschild_complex(E) sage: d1 = H.boundary(1) sage: z = d1.domain().an_element(); z 2*1 # 1 + 2*1 # x + 3*1 # y sage: d1(z) 0 sage: d1.matrix() [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 2 0 0 -2 0 0 0 0 0 0] sage: s = SymmetricFunctions(QQ).s() sage: H = s.hochschild_complex(s) sage: d1 = H.boundary(1) sage: x = d1.domain().an_element(); x 2*s[] # s[] + 2*s[] # s[1] + 3*s[] # s[2] sage: d1(x) 0 sage: y = tensor([s.an_element(), s.an_element()]) sage: d1(y) 0 sage: z = tensor([s[2,1] + s[3], s.an_element()]) sage: d1(z) 0 - >>> from sage.all import * >>> E = ExteriorAlgebra(QQ, names=('x', 'y',)); (x, y,) = E._first_ngens(2) >>> H = E.hochschild_complex(E) >>> d1 = H.boundary(Integer(1)) >>> z = d1.domain().an_element(); z 2*1 # 1 + 2*1 # x + 3*1 # y >>> d1(z) 0 >>> d1.matrix() [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 2 0 0 -2 0 0 0 0 0 0] >>> s = SymmetricFunctions(QQ).s() >>> H = s.hochschild_complex(s) >>> d1 = H.boundary(Integer(1)) >>> x = d1.domain().an_element(); x 2*s[] # s[] + 2*s[] # s[1] + 3*s[] # s[2] >>> d1(x) 0 >>> y = tensor([s.an_element(), s.an_element()]) >>> d1(y) 0 >>> z = tensor([s[Integer(2),Integer(1)] + s[Integer(3)], s.an_element()]) >>> d1(z) 0 
 - homology(d)[source]¶
- Return the - d-th homology group.- EXAMPLES: - sage: E.<x,y> = ExteriorAlgebra(QQ) sage: H = E.hochschild_complex(E) sage: H.homology(0) Vector space of dimension 3 over Rational Field sage: H.homology(1) Vector space of dimension 4 over Rational Field sage: H.homology(2) Vector space of dimension 6 over Rational Field sage: SGA = SymmetricGroupAlgebra(QQ, 3) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.homology(0) Vector space of dimension 1 over Rational Field sage: H.homology(1) Vector space of dimension 0 over Rational Field sage: H.homology(2) Vector space of dimension 0 over Rational Field - >>> from sage.all import * >>> E = ExteriorAlgebra(QQ, names=('x', 'y',)); (x, y,) = E._first_ngens(2) >>> H = E.hochschild_complex(E) >>> H.homology(Integer(0)) Vector space of dimension 3 over Rational Field >>> H.homology(Integer(1)) Vector space of dimension 4 over Rational Field >>> H.homology(Integer(2)) Vector space of dimension 6 over Rational Field >>> SGA = SymmetricGroupAlgebra(QQ, Integer(3)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.homology(Integer(0)) Vector space of dimension 1 over Rational Field >>> H.homology(Integer(1)) Vector space of dimension 0 over Rational Field >>> H.homology(Integer(2)) Vector space of dimension 0 over Rational Field - When working over general rings (except \(\ZZ\)) and we can construct a unitriangular basis for the image quotient, we fallback to a slower implementation using (combinatorial) free modules: - sage: R.<x,y> = QQ[] sage: SGA = SymmetricGroupAlgebra(R, 2) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.homology(1) Free module generated by {} over Multivariate Polynomial Ring in x, y over Rational Field - >>> from sage.all import * >>> R = QQ['x, y']; (x, y,) = R._first_ngens(2) >>> SGA = SymmetricGroupAlgebra(R, Integer(2)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.homology(Integer(1)) Free module generated by {} over Multivariate Polynomial Ring in x, y over Rational Field 
 - module(d)[source]¶
- Return the module in degree - d.- EXAMPLES: - sage: SGA = SymmetricGroupAlgebra(QQ, 3) sage: T = SGA.trivial_representation() sage: H = SGA.hochschild_complex(T) sage: H.module(0) Trivial representation of Standard permutations of 3 over Rational Field sage: H.module(1) Trivial representation of Standard permutations of 3 over Rational Field # Symmetric group algebra of order 3 over Rational Field sage: H.module(2) Trivial representation of Standard permutations of 3 over Rational Field # Symmetric group algebra of order 3 over Rational Field # Symmetric group algebra of order 3 over Rational Field - >>> from sage.all import * >>> SGA = SymmetricGroupAlgebra(QQ, Integer(3)) >>> T = SGA.trivial_representation() >>> H = SGA.hochschild_complex(T) >>> H.module(Integer(0)) Trivial representation of Standard permutations of 3 over Rational Field >>> H.module(Integer(1)) Trivial representation of Standard permutations of 3 over Rational Field # Symmetric group algebra of order 3 over Rational Field >>> H.module(Integer(2)) Trivial representation of Standard permutations of 3 over Rational Field # Symmetric group algebra of order 3 over Rational Field # Symmetric group algebra of order 3 over Rational Field 
 - trivial_module()[source]¶
- Return the trivial module of - self.- EXAMPLES: - sage: E.<x,y> = ExteriorAlgebra(QQ) sage: H = E.hochschild_complex(E) sage: H.trivial_module() Free module generated by {} over Rational Field - >>> from sage.all import * >>> E = ExteriorAlgebra(QQ, names=('x', 'y',)); (x, y,) = E._first_ngens(2) >>> H = E.hochschild_complex(E) >>> H.trivial_module() Free module generated by {} over Rational Field