From: Michael Orlitzky Date: Sat, 14 Feb 2026 18:27:44 +0000 (-0500) Subject: mjo/clan/unital_clan.py: start working on the Vinberg clan X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=75ff45a5a354ebcb7d18381e09239d1e597cc35e;p=sage.d.git mjo/clan/unital_clan.py: start working on the Vinberg clan Just sketch the constructor. Nothing works, but I don't want to forget about it. --- diff --git a/mjo/clan/unital_clan.py b/mjo/clan/unital_clan.py index 5ad9b51..d838093 100644 --- a/mjo/clan/unital_clan.py +++ b/mjo/clan/unital_clan.py @@ -533,3 +533,67 @@ class HnClan(MatrixClan): """ return f"Clan H^{self.rank()} over {self.base_ring()}" + +class VinbergClan(NormalDecomposition): + r""" + The clan corresponding to the Vinberg cone (as defined by Ishi). + + The Vinberg cone lives in a space whose points are pairs of real + 2x2 symmetric matrices that agree in the first coordinate. The + cone itself is the subset where both elements of the pair are + positive-semidefinite. + + Ishi describes this space as x = (a,b) where + + a = [ x11 x21 ] + [ x21 x22 ], + + b = [ x11 x31 ] + [ x31 x33 ] + + As there is no obvious way to express this in Sage, we instead + simply write out the x = (x11, x21, x22, x31, x33) as a vector of + real numbers, and provide lifts to the matrix representation. The + clan product is in terms of the up-hat and down-hat that is + defined on `S^{2}. + """ + def __init__(self, scalar_field=QQ, **kwargs): + from sage.matrix.matrix_space import MatrixSpace + from sage.modules.free_module import VectorSpace + + M2 = MatrixSpace(scalar_field, 2) + b = Mn.basis() + + from sage.sets.family import Family + S2_basis = Family({ (i,j,1) : + a*(b[(i,j)] + b[(j,i)]) + for i in range(n) + for j in range(i+1) + if (a := 1 - (i == j)/scalar_field(2)) + }) + + # Mn.submodule() destroys our basis keys, so use + # SubmoduleWithBasis directly. + self._S2 = SubmoduleWithBasis(S2_basis, + support_order=b.keys(), + ambient=M2) + + R5 = VectorSpace(scalar_field, 5) + + def lift(v): + + return + + super().__init__(R5, MatrixClan._cp, MatrixClan._ip, **kwargs) + + def __repr__(self) -> str: + r""" + The string representation of this clan. + + EXAMPLES:: + + sage: VinbergClan() + Vinberg clan over Rational Field + + """ + return f"Vinberg clan over {self.base_ring()}"