Torsor class groups¶
Torsor class groups for finite commutative group schemes.
- class dual_pairs.torsor_class_group.Torsor(*args: Any, **kwargs: Any)¶
- torsor_pair()¶
Return a torsor pair corresponding to this extension.
OUTPUT:
A torsor pair for the dual group scheme.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x]) sage: Phi = 1/2 * Matrix([[1, 1], [1, -1]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([]) sage: H.gens()[0].torsor_pair() Torsor for Dual pair of algebras over Rational Field A = Finite flat algebra of degree 2 over Rational Field, product of: Number Field in a0 with defining polynomial x Number Field in a1 with defining polynomial x B = Finite flat algebra of degree 2 over Rational Field, product of: Number Field in a0 with defining polynomial x Number Field in a1 with defining polynomial x T = Finite flat algebra of degree 2 over Rational Field sage: A = FiniteFlatAlgebra(QQ, [x, x^3 - x^2 - 10*x + 8], [[1], [1, -x, -1/2*x^2 + 1/2*x + 3]]) sage: Phi = 1/4 * Matrix([[1, 3, -1, -1], [3, -3, 1, 1], [-1, 1, 41, -21], [-1, 1, -21, 41]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([2]) sage: H.one().torsor_pair().points(QQ) [(1, 1, 0, 0)] sage: [T.torsor_pair().points(QQ) for T in H.gens()] [[], [], [], []]
- class dual_pairs.torsor_class_group.TorsorClassGroup(*args: Any, **kwargs: Any)¶
The group of isomorphism classes of torsors under a group scheme.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x^3 - x^2 - 10*x + 8], [[1], [1, -x, -1/2*x^2 + 1/2*x + 3]]) sage: Phi = 1/4 * Matrix([[1, 3, -1, -1], [3, -3, 1, 1], [-1, 1, 41, -21], [-1, 1, -21, 41]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([2]); H Group of isomorphism classes of G-torsors where G is defined by Dual pair of algebras over Rational Field A = Finite flat algebra of degree 4 over Rational Field, product of: Number Field in a0 with defining polynomial x Number Field in a1 with defining polynomial x^3 - x^2 - 10*x + 8 B = Finite flat algebra of degree 4 over Rational Field, product of: Number Field in a0 with defining polynomial x Number Field in a1 with defining polynomial x^3 - x^2 - 10*x + 8 sage: H.group_structure() (Multiplicative Abelian group isomorphic to C2 x C2 x C2 x C2, [Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 - 219/31*e5 + 38/31*e6 + 80/31*e7 + 38/31*e9 + 100/31*e10 + 14/31*e11 + 80/31*e13 + 14/31*e14 - 22/31*e15), Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 - 6/31*e5 + 14/31*e6 - 1/31*e7 + 14/31*e9 - 16/31*e10 - 4/31*e11 - 1/31*e13 - 4/31*e14 + 1/31*e15), Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 + 85/31*e5 - 52/31*e6 - 34/31*e7 - 52/31*e9 + 17/31*e10 + 13/31*e11 - 34/31*e13 + 13/31*e14 + 9/31*e15), Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 - 401/31*e5 - 102/31*e6 - 78/31*e7 - 102/31*e9 - 22/31*e10 - 36/31*e11 - 78/31*e13 - 36/31*e14 + 50/31*e15)], <function TorsorClassGroup.group_structure.<locals>.exp at 0x...>, <function TorsorClassGroup.group_structure.<locals>.log at 0x...>)
- gens()¶
Return a list of generators of self.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x]) sage: Phi = 1/2 * Matrix([[1, 1], [1, -1]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([]) sage: H.gens() [Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e2 - e3)]
- gens_orders()¶
Return a list of generators of self.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x]) sage: Phi = 1/2 * Matrix([[1, 1], [1, -1]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([]) sage: H.gens_orders() (2,)
- group_structure()¶
Return the group structure of self.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: from dual_pairs.dual_pair_from_dihedral_field import dual_pair_from_dihedral_field sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x, x, x]) sage: Phi = 1/4 * Matrix([[1, 1, -1, -1], [1, 1, 1, 1], [-1, 1, 1, -1], [-1, 1, -1, 1]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([]) sage: H.group_structure()[0] Multiplicative Abelian group isomorphic to C2 x C2 sage: D = dual_pair_from_dihedral_field(x^3 - x - 1, GF(2)) sage: H = D.torsor_class_group([2, 23]) sage: H.group_structure() (Multiplicative Abelian group isomorphic to C2 x C2, [Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 + 10/23*e5 - 31/23*e6 + 47/23*e7 - 31/23*e9 + 126/23*e10 - 56/23*e11 + 47/23*e13 - 56/23*e14 - 39/23*e15), Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 - 9/23*e5 - 2/23*e6 + 6/23*e7 - 2/23*e9 + 20/23*e10 - 14/23*e11 + 6/23*e13 - 14/23*e14 + 19/23*e15)], <function TorsorClassGroup.group_structure.<locals>.exp at 0x...>, <function TorsorClassGroup.group_structure.<locals>.log at 0x...>) sage: D = dual_pair_from_dihedral_field(x^3 + 4*x - 1, GF(2)) sage: H = D.torsor_class_group([]) sage: H.group_structure() (Multiplicative Abelian group isomorphic to C2 x C2, [Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e4 + 40/283*e5 + 41/283*e6 + 15/283*e7 + 41/283*e9 + 134/283*e10 - 20/283*e11 + 15/283*e13 - 20/283*e14 + 41/283*e15), Torsor defined by ((Fractional ideal (1), Fractional ideal (3, a + 1)), e0 + e1 + e4 + 1670/849*e5 - 19/283*e6 + 697/849*e7 - 19/283*e9 + 359/849*e10 + 14/849*e11 + 697/849*e13 + 14/849*e14 + 226/849*e15)], <function TorsorClassGroup.group_structure.<locals>.exp at 0x...>, <function TorsorClassGroup.group_structure.<locals>.log at 0x...>) # from elliptic curve 2184.j1 # 2-descent shows that 2-Selmer group is isomorphic to (Z/2Z)^4 # rank 1, torsion Z/2Z # Sha[2] is isomorphic to (Z/2Z)^2 # factorisation of conductor: 2^3 * 3 * 7 * 13 # Tamagawa numbers: 1, 1, 1, 2 # so the only bad prime should be 13 sage: A = FiniteFlatAlgebra(QQ, [x, x, x^2 - 42]) sage: Phi = Matrix([[1/4, 1/4, 1/2, 0], ....: [1/4, 1/4, -1/2, 0], ....: [1/2, -1/2, 0, 0], ....: [0, 0, 0, 42]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([13]) sage: B, gens, exp, log = H.group_structure() sage: B Multiplicative Abelian group isomorphic to C2 x C2 x C2 x C2 sage: exp(B.gen(0)) Torsor defined by ((Fractional ideal (1), Fractional ideal (1), Fractional ideal (1)), 13*e0 + 13*e1 + 13*e2 + 13*e4 + 13*e5 - 13*e6 + 13*e8 - 13*e9 + 1/42*e15) sage: log(gens[1]) f1 sage: log(exp(B.gen(3))) == B.gen(3) True
- one()¶
Return the unit element of self.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x]) sage: Phi = 1/2 * Matrix([[1, 1], [1, -1]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([]) sage: H.one() Torsor defined by ((Fractional ideal (1), Fractional ideal (1)), e0 + e1 + e2 + e3)
- order()¶
Return the order of self.
EXAMPLES:
sage: from dual_pairs import DualPair, FiniteFlatAlgebra sage: R.<x> = QQ[] sage: A = FiniteFlatAlgebra(QQ, [x, x]) sage: Phi = 1/2 * Matrix([[1, 1], [1, -1]]) sage: D = DualPair(A, Phi) sage: H = D.torsor_class_group([]) sage: H.order() 2