passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.whl
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.
- passagemath_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- sage/typeset/unicode_characters.py +101 -0
|
@@ -0,0 +1,1070 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Lie Algebras
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Travis Scrimshaw (07-15-2013): Initial implementation
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
#*****************************************************************************
|
|
11
|
+
# Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
12
|
+
#
|
|
13
|
+
# This program is free software: you can redistribute it and/or modify
|
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
|
15
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
16
|
+
# (at your option) any later version.
|
|
17
|
+
# http://www.gnu.org/licenses/
|
|
18
|
+
#*****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.misc.abstract_method import abstract_method
|
|
21
|
+
from sage.misc.cachefunc import cached_method
|
|
22
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
23
|
+
from sage.misc.lazy_import import LazyImport
|
|
24
|
+
from sage.categories.category import JoinCategory, Category
|
|
25
|
+
from sage.categories.category_types import Category_over_base_ring
|
|
26
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom_over_base_ring
|
|
27
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
28
|
+
from sage.categories.modules import Modules
|
|
29
|
+
from sage.categories.sets_cat import Sets
|
|
30
|
+
from sage.categories.homset import Hom
|
|
31
|
+
from sage.categories.morphism import Morphism
|
|
32
|
+
from sage.structure.element import coerce_binop
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class LieAlgebras(Category_over_base_ring):
|
|
36
|
+
"""
|
|
37
|
+
The category of Lie algebras.
|
|
38
|
+
|
|
39
|
+
EXAMPLES::
|
|
40
|
+
|
|
41
|
+
sage: C = LieAlgebras(QQ); C
|
|
42
|
+
Category of Lie algebras over Rational Field
|
|
43
|
+
sage: sorted(C.super_categories(), key=str)
|
|
44
|
+
[Category of vector spaces over Rational Field]
|
|
45
|
+
|
|
46
|
+
We construct a typical parent in this category, and do some
|
|
47
|
+
computations with it::
|
|
48
|
+
|
|
49
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
50
|
+
sage: A = C.example(); A
|
|
51
|
+
An example of a Lie algebra: the Lie algebra from the associative
|
|
52
|
+
algebra Symmetric group algebra of order 3 over Rational Field
|
|
53
|
+
generated by ([2, 1, 3], [2, 3, 1])
|
|
54
|
+
sage: A.category()
|
|
55
|
+
Category of Lie algebras over Rational Field
|
|
56
|
+
sage: A.base_ring()
|
|
57
|
+
Rational Field
|
|
58
|
+
sage: a, b = A.lie_algebra_generators()
|
|
59
|
+
sage: a.bracket(b)
|
|
60
|
+
-[1, 3, 2] + [3, 2, 1]
|
|
61
|
+
sage: b.bracket(2*a + b)
|
|
62
|
+
2*[1, 3, 2] - 2*[3, 2, 1]
|
|
63
|
+
sage: A.bracket(a, b)
|
|
64
|
+
-[1, 3, 2] + [3, 2, 1]
|
|
65
|
+
|
|
66
|
+
Please see the source code of `A` (with ``A??``) for how to
|
|
67
|
+
implement other Lie algebras.
|
|
68
|
+
|
|
69
|
+
TESTS::
|
|
70
|
+
|
|
71
|
+
sage: C = LieAlgebras(QQ)
|
|
72
|
+
sage: TestSuite(C).run()
|
|
73
|
+
sage: TestSuite(C.example()).run() # needs sage.combinat sage.groups sage.modules
|
|
74
|
+
|
|
75
|
+
.. TODO::
|
|
76
|
+
|
|
77
|
+
Many of these tests should use Lie algebras that are not the minimal
|
|
78
|
+
example and need to be added after :issue:`16820` (and :issue:`16823`).
|
|
79
|
+
"""
|
|
80
|
+
@cached_method
|
|
81
|
+
def super_categories(self):
|
|
82
|
+
"""
|
|
83
|
+
EXAMPLES::
|
|
84
|
+
|
|
85
|
+
sage: LieAlgebras(QQ).super_categories()
|
|
86
|
+
[Category of vector spaces over Rational Field]
|
|
87
|
+
"""
|
|
88
|
+
# We do not also derive from (Magmatic) algebras since we don't want *
|
|
89
|
+
# to be our Lie bracket
|
|
90
|
+
# Also this doesn't inherit the ability to add axioms like Associative
|
|
91
|
+
# and Unital, both of which do not make sense for Lie algebras
|
|
92
|
+
return [Modules(self.base_ring())]
|
|
93
|
+
|
|
94
|
+
class SubcategoryMethods:
|
|
95
|
+
def Nilpotent(self):
|
|
96
|
+
r"""
|
|
97
|
+
Return the full subcategory of nilpotent objects of ``self``.
|
|
98
|
+
|
|
99
|
+
A Lie algebra `L` is nilpotent if there exist an integer `s` such
|
|
100
|
+
that all iterated brackets of `L` of length more than `s` vanish.
|
|
101
|
+
The integer `s` is called the nilpotency step.
|
|
102
|
+
For instance any abelian Lie algebra is nilpotent of step 1.
|
|
103
|
+
|
|
104
|
+
EXAMPLES::
|
|
105
|
+
|
|
106
|
+
sage: LieAlgebras(QQ).Nilpotent()
|
|
107
|
+
Category of nilpotent Lie algebras over Rational Field
|
|
108
|
+
sage: LieAlgebras(QQ).WithBasis().Nilpotent()
|
|
109
|
+
Category of nilpotent Lie algebras with basis over Rational Field
|
|
110
|
+
"""
|
|
111
|
+
return self._with_axiom("Nilpotent")
|
|
112
|
+
|
|
113
|
+
Graded = LazyImport('sage.categories.graded_lie_algebras',
|
|
114
|
+
'GradedLieAlgebras',
|
|
115
|
+
as_name='Graded')
|
|
116
|
+
|
|
117
|
+
# TODO: Find some way to do this without copying most of the logic.
|
|
118
|
+
def _repr_object_names(self):
|
|
119
|
+
r"""
|
|
120
|
+
Return the name of the objects of this category.
|
|
121
|
+
|
|
122
|
+
.. SEEALSO:: :meth:`Category._repr_object_names`
|
|
123
|
+
|
|
124
|
+
EXAMPLES::
|
|
125
|
+
|
|
126
|
+
sage: LieAlgebras(QQ)._repr_object_names()
|
|
127
|
+
'Lie algebras over Rational Field'
|
|
128
|
+
sage: LieAlgebras(Fields())._repr_object_names()
|
|
129
|
+
'Lie algebras over fields'
|
|
130
|
+
sage: from sage.categories.category import JoinCategory
|
|
131
|
+
sage: from sage.categories.category_with_axiom import Blahs
|
|
132
|
+
sage: LieAlgebras(JoinCategory((Blahs().Flying(), Fields())))
|
|
133
|
+
Category of Lie algebras over (flying unital blahs and fields)
|
|
134
|
+
"""
|
|
135
|
+
base = self.base()
|
|
136
|
+
if isinstance(base, Category):
|
|
137
|
+
if isinstance(base, JoinCategory):
|
|
138
|
+
name = '('+' and '.join(C._repr_object_names() for C in base.super_categories())+')'
|
|
139
|
+
else:
|
|
140
|
+
name = base._repr_object_names()
|
|
141
|
+
else:
|
|
142
|
+
name = base
|
|
143
|
+
return "Lie algebras over {}".format(name)
|
|
144
|
+
|
|
145
|
+
def example(self, gens=None):
|
|
146
|
+
"""
|
|
147
|
+
Return an example of a Lie algebra as per
|
|
148
|
+
:meth:`Category.example <sage.categories.category.Category.example>`.
|
|
149
|
+
|
|
150
|
+
EXAMPLES::
|
|
151
|
+
|
|
152
|
+
sage: LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
153
|
+
An example of a Lie algebra: the Lie algebra from the associative algebra
|
|
154
|
+
Symmetric group algebra of order 3 over Rational Field
|
|
155
|
+
generated by ([2, 1, 3], [2, 3, 1])
|
|
156
|
+
|
|
157
|
+
Another set of generators can be specified as an optional argument::
|
|
158
|
+
|
|
159
|
+
sage: F.<x,y,z> = FreeAlgebra(QQ) # needs sage.combinat sage.modules
|
|
160
|
+
sage: LieAlgebras(QQ).example(F.gens()) # needs sage.combinat sage.modules
|
|
161
|
+
An example of a Lie algebra: the Lie algebra from the associative algebra
|
|
162
|
+
Free Algebra on 3 generators (x, y, z) over Rational Field
|
|
163
|
+
generated by (x, y, z)
|
|
164
|
+
"""
|
|
165
|
+
if gens is None:
|
|
166
|
+
from sage.combinat.symmetric_group_algebra import SymmetricGroupAlgebra
|
|
167
|
+
from sage.rings.rational_field import QQ
|
|
168
|
+
gens = SymmetricGroupAlgebra(QQ, 3).algebra_generators()
|
|
169
|
+
from sage.categories.examples.lie_algebras import Example
|
|
170
|
+
return Example(gens)
|
|
171
|
+
|
|
172
|
+
WithBasis = LazyImport('sage.categories.lie_algebras_with_basis',
|
|
173
|
+
'LieAlgebrasWithBasis', as_name='WithBasis')
|
|
174
|
+
|
|
175
|
+
class FiniteDimensional(CategoryWithAxiom_over_base_ring):
|
|
176
|
+
WithBasis = LazyImport('sage.categories.finite_dimensional_lie_algebras_with_basis',
|
|
177
|
+
'FiniteDimensionalLieAlgebrasWithBasis', as_name='WithBasis')
|
|
178
|
+
|
|
179
|
+
def extra_super_categories(self):
|
|
180
|
+
"""
|
|
181
|
+
Implement the fact that a finite dimensional Lie algebra over
|
|
182
|
+
a finite ring is finite.
|
|
183
|
+
|
|
184
|
+
EXAMPLES::
|
|
185
|
+
|
|
186
|
+
sage: LieAlgebras(IntegerModRing(4)).FiniteDimensional().extra_super_categories()
|
|
187
|
+
[Category of finite sets]
|
|
188
|
+
sage: LieAlgebras(ZZ).FiniteDimensional().extra_super_categories()
|
|
189
|
+
[]
|
|
190
|
+
sage: C = LieAlgebras(GF(5)).FiniteDimensional()
|
|
191
|
+
sage: C.is_subcategory(Sets().Finite())
|
|
192
|
+
True
|
|
193
|
+
sage: C = LieAlgebras(ZZ).FiniteDimensional()
|
|
194
|
+
sage: C.is_subcategory(Sets().Finite())
|
|
195
|
+
False
|
|
196
|
+
sage: C = LieAlgebras(GF(5)).WithBasis().FiniteDimensional()
|
|
197
|
+
sage: C.is_subcategory(Sets().Finite())
|
|
198
|
+
True
|
|
199
|
+
"""
|
|
200
|
+
if self.base_ring() in Sets().Finite():
|
|
201
|
+
return [Sets().Finite()]
|
|
202
|
+
return []
|
|
203
|
+
|
|
204
|
+
class Nilpotent(CategoryWithAxiom_over_base_ring):
|
|
205
|
+
r"""
|
|
206
|
+
Category of nilpotent Lie algebras.
|
|
207
|
+
|
|
208
|
+
TESTS::
|
|
209
|
+
|
|
210
|
+
sage: C = LieAlgebras(QQ).Nilpotent()
|
|
211
|
+
sage: TestSuite(C).run()
|
|
212
|
+
"""
|
|
213
|
+
class ParentMethods:
|
|
214
|
+
@abstract_method
|
|
215
|
+
def step(self):
|
|
216
|
+
r"""
|
|
217
|
+
Return the nilpotency step of ``self``.
|
|
218
|
+
|
|
219
|
+
EXAMPLES::
|
|
220
|
+
|
|
221
|
+
sage: h = lie_algebras.Heisenberg(ZZ, oo) # needs sage.combinat sage.graphs sage.modules
|
|
222
|
+
sage: h.step() # needs sage.combinat sage.graphs sage.modules
|
|
223
|
+
2
|
|
224
|
+
"""
|
|
225
|
+
|
|
226
|
+
def is_nilpotent(self):
|
|
227
|
+
r"""
|
|
228
|
+
Return ``True`` since ``self`` is nilpotent.
|
|
229
|
+
|
|
230
|
+
EXAMPLES::
|
|
231
|
+
|
|
232
|
+
sage: h = lie_algebras.Heisenberg(ZZ, oo) # needs sage.combinat sage.graphs sage.modules
|
|
233
|
+
sage: h.is_nilpotent() # needs sage.combinat sage.graphs sage.modules
|
|
234
|
+
True
|
|
235
|
+
"""
|
|
236
|
+
return True
|
|
237
|
+
|
|
238
|
+
class ParentMethods:
|
|
239
|
+
#@abstract_method
|
|
240
|
+
#def lie_algebra_generators(self):
|
|
241
|
+
# """
|
|
242
|
+
# Return the generators of ``self`` as a Lie algebra.
|
|
243
|
+
# """
|
|
244
|
+
|
|
245
|
+
# TODO: Move this to LieAlgebraElement, cythonize, and use more standard
|
|
246
|
+
# coercion framework test (i.e., have_same_parent)
|
|
247
|
+
def bracket(self, lhs, rhs):
|
|
248
|
+
"""
|
|
249
|
+
Return the Lie bracket ``[lhs, rhs]`` after coercing ``lhs`` and
|
|
250
|
+
``rhs`` into elements of ``self``.
|
|
251
|
+
|
|
252
|
+
If ``lhs`` and ``rhs`` are Lie algebras, then this constructs
|
|
253
|
+
the product space, and if only one of them is a Lie algebra,
|
|
254
|
+
then it constructs the corresponding ideal.
|
|
255
|
+
|
|
256
|
+
EXAMPLES::
|
|
257
|
+
|
|
258
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
259
|
+
sage: L = LieAlgebras(QQ).example()
|
|
260
|
+
sage: x, y = L.lie_algebra_generators()
|
|
261
|
+
sage: L.bracket(x, x + y)
|
|
262
|
+
-[1, 3, 2] + [3, 2, 1]
|
|
263
|
+
sage: L.bracket(x, 0)
|
|
264
|
+
0
|
|
265
|
+
sage: L.bracket(0, x)
|
|
266
|
+
0
|
|
267
|
+
|
|
268
|
+
Constructing the product space::
|
|
269
|
+
|
|
270
|
+
sage: L = lie_algebras.Heisenberg(QQ, 1) # needs sage.combinat sage.graphs sage.modules
|
|
271
|
+
sage: Z = L.bracket(L, L); Z # needs sage.combinat sage.graphs sage.modules
|
|
272
|
+
Ideal (z) of Heisenberg algebra of rank 1 over Rational Field
|
|
273
|
+
sage: L.bracket(L, Z) # needs sage.combinat sage.graphs sage.modules
|
|
274
|
+
Ideal () of Heisenberg algebra of rank 1 over Rational Field
|
|
275
|
+
|
|
276
|
+
Constructing ideals::
|
|
277
|
+
|
|
278
|
+
sage: p, q, z = L.basis(); p, q, z # needs sage.combinat sage.graphs sage.modules
|
|
279
|
+
(p1, q1, z)
|
|
280
|
+
sage: L.bracket(3*p, L) # needs sage.combinat sage.graphs sage.modules
|
|
281
|
+
Ideal (3*p1) of Heisenberg algebra of rank 1 over Rational Field
|
|
282
|
+
sage: L.bracket(L, q + p) # needs sage.combinat sage.graphs sage.modules
|
|
283
|
+
Ideal (p1 + q1) of Heisenberg algebra of rank 1 over Rational Field
|
|
284
|
+
"""
|
|
285
|
+
if lhs in LieAlgebras:
|
|
286
|
+
if rhs in LieAlgebras:
|
|
287
|
+
return lhs.product_space(rhs)
|
|
288
|
+
return lhs.ideal(rhs)
|
|
289
|
+
elif rhs in LieAlgebras:
|
|
290
|
+
return rhs.ideal(lhs)
|
|
291
|
+
return self(lhs)._bracket_(self(rhs))
|
|
292
|
+
|
|
293
|
+
# Do not override this. Instead implement :meth:`_construct_UEA`;
|
|
294
|
+
# then, :meth:`lift` and :meth:`universal_enveloping_algebra`
|
|
295
|
+
# will automatically setup the coercion.
|
|
296
|
+
def universal_enveloping_algebra(self):
|
|
297
|
+
"""
|
|
298
|
+
Return the universal enveloping algebra of ``self``.
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
303
|
+
sage: L.universal_enveloping_algebra() # needs sage.combinat sage.libs.singular sage.modules
|
|
304
|
+
Noncommutative Multivariate Polynomial Ring in b0, b1, b2
|
|
305
|
+
over Rational Field, nc-relations: {}
|
|
306
|
+
|
|
307
|
+
::
|
|
308
|
+
|
|
309
|
+
sage: L = LieAlgebra(QQ, 3, 'x', abelian=True) # needs sage.combinat sage.libs.singular sage.modules
|
|
310
|
+
sage: L.universal_enveloping_algebra() # needs sage.combinat sage.libs.singular sage.modules
|
|
311
|
+
Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
|
|
312
|
+
|
|
313
|
+
.. SEEALSO::
|
|
314
|
+
|
|
315
|
+
:meth:`lift`
|
|
316
|
+
"""
|
|
317
|
+
return self.lift.codomain()
|
|
318
|
+
|
|
319
|
+
@abstract_method(optional=True)
|
|
320
|
+
def _construct_UEA(self):
|
|
321
|
+
"""
|
|
322
|
+
Return the universal enveloping algebra of ``self``.
|
|
323
|
+
|
|
324
|
+
Unlike :meth:`universal_enveloping_algebra`, this method does not
|
|
325
|
+
(usually) construct the canonical lift morphism from ``self``
|
|
326
|
+
to the universal enveloping algebra (let alone register it
|
|
327
|
+
as a coercion).
|
|
328
|
+
|
|
329
|
+
One should implement this method and the ``lift`` method for
|
|
330
|
+
the element class to construct the morphism the universal
|
|
331
|
+
enveloping algebra.
|
|
332
|
+
|
|
333
|
+
EXAMPLES::
|
|
334
|
+
|
|
335
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
336
|
+
sage: L._construct_UEA() # needs sage.combinat sage.libs.singular sage.modules
|
|
337
|
+
Noncommutative Multivariate Polynomial Ring in b0, b1, b2
|
|
338
|
+
over Rational Field, nc-relations: {}
|
|
339
|
+
|
|
340
|
+
::
|
|
341
|
+
|
|
342
|
+
sage: L = LieAlgebra(QQ, 3, 'x', abelian=True) # needs sage.combinat sage.modules
|
|
343
|
+
sage: L.universal_enveloping_algebra() # indirect doctest # needs sage.combinat sage.libs.singular sage.modules
|
|
344
|
+
Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
|
|
345
|
+
"""
|
|
346
|
+
|
|
347
|
+
def center_universal_enveloping_algebra(self, UEA=None):
|
|
348
|
+
"""
|
|
349
|
+
Return the center of the universal enveloping algebra of ``self``.
|
|
350
|
+
|
|
351
|
+
EXAMPLES::
|
|
352
|
+
|
|
353
|
+
sage: # needs sage.combinat sage.modules
|
|
354
|
+
sage: L = LieAlgebra(QQ, 3, 'x', abelian=True)
|
|
355
|
+
sage: L.center_universal_enveloping_algebra()
|
|
356
|
+
Center of Universal enveloping algebra of Abelian Lie algebra on 3 generators (x0, x1, x2)
|
|
357
|
+
over Rational Field in the Poincare-Birkhoff-Witt basis
|
|
358
|
+
sage: PBW = L.pbw_basis()
|
|
359
|
+
sage: L.center_universal_enveloping_algebra(PBW)
|
|
360
|
+
Center of Universal enveloping algebra of Abelian Lie algebra on 3 generators (x0, x1, x2)
|
|
361
|
+
over Rational Field in the Poincare-Birkhoff-Witt basis
|
|
362
|
+
"""
|
|
363
|
+
if UEA is not None:
|
|
364
|
+
return UEA.center()
|
|
365
|
+
return self.pbw_basis().center()
|
|
366
|
+
|
|
367
|
+
@abstract_method(optional=True)
|
|
368
|
+
def module(self):
|
|
369
|
+
r"""
|
|
370
|
+
Return an `R`-module which is isomorphic to the
|
|
371
|
+
underlying `R`-module of ``self``.
|
|
372
|
+
|
|
373
|
+
The rationale behind this method is to enable linear
|
|
374
|
+
algebraic functionality on ``self`` (such as
|
|
375
|
+
computing the span of a list of vectors in ``self``)
|
|
376
|
+
via an isomorphism from ``self`` to an `R`-module
|
|
377
|
+
(typically, although not always, an `R`-module of
|
|
378
|
+
the form `R^n` for an `n \in \NN`) on which such
|
|
379
|
+
functionality already exists. For this method to be
|
|
380
|
+
of any use, it should return an `R`-module which has
|
|
381
|
+
linear algebraic functionality that ``self`` does
|
|
382
|
+
not have.
|
|
383
|
+
|
|
384
|
+
For instance, if ``self`` has ordered basis
|
|
385
|
+
`(e, f, h)`, then ``self.module()`` will be the
|
|
386
|
+
`R`-module `R^3`, and the elements `e`, `f` and
|
|
387
|
+
`h` of ``self`` will correspond to the basis
|
|
388
|
+
vectors `(1, 0, 0)`, `(0, 1, 0)` and `(0, 0, 1)`
|
|
389
|
+
of ``self.module()``.
|
|
390
|
+
|
|
391
|
+
This method :meth:`module` needs to be set whenever
|
|
392
|
+
a finite-dimensional Lie algebra with basis is
|
|
393
|
+
intended to support linear algebra (which is, e.g.,
|
|
394
|
+
used in the computation of centralizers and lower
|
|
395
|
+
central series). One then needs to also implement
|
|
396
|
+
the `R`-module isomorphism from ``self`` to
|
|
397
|
+
``self.module()`` in both directions; that is,
|
|
398
|
+
implement:
|
|
399
|
+
|
|
400
|
+
* a ``to_vector`` ElementMethod which sends every
|
|
401
|
+
element of ``self`` to the corresponding element of
|
|
402
|
+
``self.module()``;
|
|
403
|
+
|
|
404
|
+
* a ``from_vector`` ParentMethod which sends every
|
|
405
|
+
element of ``self.module()`` to an element
|
|
406
|
+
of ``self``.
|
|
407
|
+
|
|
408
|
+
The ``from_vector`` method will automatically serve
|
|
409
|
+
as an element constructor of ``self`` (that is,
|
|
410
|
+
``self(v)`` for any ``v`` in ``self.module()`` will
|
|
411
|
+
return ``self.from_vector(v)``).
|
|
412
|
+
|
|
413
|
+
.. TODO::
|
|
414
|
+
|
|
415
|
+
Ensure that this is actually so.
|
|
416
|
+
|
|
417
|
+
EXAMPLES::
|
|
418
|
+
|
|
419
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
420
|
+
sage: L.module() # needs sage.combinat sage.libs.singular sage.modules
|
|
421
|
+
Vector space of dimension 3 over Rational Field
|
|
422
|
+
"""
|
|
423
|
+
|
|
424
|
+
@abstract_method(optional=True)
|
|
425
|
+
def from_vector(self, v, order=None, coerce=False):
|
|
426
|
+
"""
|
|
427
|
+
Return the element of ``self`` corresponding to the
|
|
428
|
+
vector ``v`` in ``self.module()``.
|
|
429
|
+
|
|
430
|
+
Implement this if you implement :meth:`module`; see the
|
|
431
|
+
documentation of the latter for how this is to be done.
|
|
432
|
+
|
|
433
|
+
EXAMPLES::
|
|
434
|
+
|
|
435
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
436
|
+
sage: u = L.from_vector(vector(QQ, (1, 0, 0))); u # needs sage.combinat sage.libs.singular sage.modules
|
|
437
|
+
(1, 0, 0)
|
|
438
|
+
sage: parent(u) is L # needs sage.combinat sage.libs.singular sage.modules
|
|
439
|
+
True
|
|
440
|
+
"""
|
|
441
|
+
|
|
442
|
+
@lazy_attribute
|
|
443
|
+
def lift(self):
|
|
444
|
+
r"""
|
|
445
|
+
Construct the lift morphism from ``self`` to the universal
|
|
446
|
+
enveloping algebra of ``self`` (the latter is implemented
|
|
447
|
+
as :meth:`universal_enveloping_algebra`).
|
|
448
|
+
|
|
449
|
+
This is a Lie algebra homomorphism. It is injective if
|
|
450
|
+
``self`` is a free module over its base ring, or if the
|
|
451
|
+
base ring is a `\QQ`-algebra.
|
|
452
|
+
|
|
453
|
+
EXAMPLES::
|
|
454
|
+
|
|
455
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
456
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
457
|
+
sage: a, b, c = L.lie_algebra_generators()
|
|
458
|
+
sage: lifted = L.lift(2*a + b - c); lifted
|
|
459
|
+
2*b0 + b1 - b2
|
|
460
|
+
sage: lifted.parent() is L.universal_enveloping_algebra()
|
|
461
|
+
True
|
|
462
|
+
"""
|
|
463
|
+
M = LiftMorphism(self, self._construct_UEA())
|
|
464
|
+
M.register_as_coercion()
|
|
465
|
+
return M
|
|
466
|
+
|
|
467
|
+
def subalgebra(self, gens, names=None, index_set=None, category=None):
|
|
468
|
+
r"""
|
|
469
|
+
Return the subalgebra of ``self`` generated by ``gens``.
|
|
470
|
+
|
|
471
|
+
EXAMPLES::
|
|
472
|
+
|
|
473
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
474
|
+
sage: a, b, c = L.lie_algebra_generators() # needs sage.combinat sage.libs.singular sage.modules
|
|
475
|
+
sage: L.subalgebra([2*a - c, b + c]) # needs sage.combinat sage.libs.singular sage.modules
|
|
476
|
+
An example of a finite dimensional Lie algebra with basis:
|
|
477
|
+
the 2-dimensional abelian Lie algebra over Rational Field
|
|
478
|
+
with basis matrix:
|
|
479
|
+
[ 1 0 -1/2]
|
|
480
|
+
[ 0 1 1]
|
|
481
|
+
|
|
482
|
+
::
|
|
483
|
+
|
|
484
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
485
|
+
sage: L = LieAlgebras(QQ).example()
|
|
486
|
+
sage: x,y = L.lie_algebra_generators()
|
|
487
|
+
sage: L.subalgebra([x + y])
|
|
488
|
+
Traceback (most recent call last):
|
|
489
|
+
...
|
|
490
|
+
NotImplementedError: subalgebras not yet implemented: see #17416
|
|
491
|
+
"""
|
|
492
|
+
raise NotImplementedError("subalgebras not yet implemented: see #17416")
|
|
493
|
+
#from sage.algebras.lie_algebras.subalgebra import LieSubalgebra
|
|
494
|
+
#return LieSubalgebra(gens, names, index_set, category)
|
|
495
|
+
|
|
496
|
+
def ideal(self, *gens, **kwds):
|
|
497
|
+
r"""
|
|
498
|
+
Return the ideal of ``self`` generated by ``gens``.
|
|
499
|
+
|
|
500
|
+
EXAMPLES::
|
|
501
|
+
|
|
502
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
503
|
+
sage: a, b, c = L.lie_algebra_generators() # needs sage.combinat sage.libs.singular sage.modules
|
|
504
|
+
sage: L.ideal([2*a - c, b + c]) # needs sage.combinat sage.libs.singular sage.modules
|
|
505
|
+
An example of a finite dimensional Lie algebra with basis:
|
|
506
|
+
the 2-dimensional abelian Lie algebra over Rational Field
|
|
507
|
+
with basis matrix:
|
|
508
|
+
[ 1 0 -1/2]
|
|
509
|
+
[ 0 1 1]
|
|
510
|
+
|
|
511
|
+
::
|
|
512
|
+
|
|
513
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
514
|
+
sage: L = LieAlgebras(QQ).example()
|
|
515
|
+
sage: x, y = L.lie_algebra_generators()
|
|
516
|
+
sage: L.ideal([x + y])
|
|
517
|
+
Traceback (most recent call last):
|
|
518
|
+
...
|
|
519
|
+
NotImplementedError: ideals not yet implemented: see #16824
|
|
520
|
+
"""
|
|
521
|
+
raise NotImplementedError("ideals not yet implemented: see #16824")
|
|
522
|
+
#from sage.algebras.lie_algebras.ideal import LieIdeal
|
|
523
|
+
#if len(gens) == 1 and isinstance(gens[0], (list, tuple)):
|
|
524
|
+
# gens = gens[0]
|
|
525
|
+
#names = kwds.pop("names", None)
|
|
526
|
+
#index_set = kwds.pop("index_set", None)
|
|
527
|
+
#category = kwds.pop("category", None)
|
|
528
|
+
#return LieIdeal(gens, names, index_set, category)
|
|
529
|
+
|
|
530
|
+
def is_ideal(self, A):
|
|
531
|
+
"""
|
|
532
|
+
Return if ``self`` is an ideal of ``A``.
|
|
533
|
+
|
|
534
|
+
EXAMPLES::
|
|
535
|
+
|
|
536
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
537
|
+
sage: L.is_ideal(L) # needs sage.combinat sage.groups sage.modules
|
|
538
|
+
True
|
|
539
|
+
"""
|
|
540
|
+
if A == self:
|
|
541
|
+
return True
|
|
542
|
+
raise NotImplementedError("ideals not yet implemented: see #16824")
|
|
543
|
+
#from sage.algebras.lie_algebras.ideal import LieIdeal
|
|
544
|
+
#return isinstance(self, LieIdeal) and self._ambient is A
|
|
545
|
+
|
|
546
|
+
@abstract_method(optional=True)
|
|
547
|
+
def killing_form(self, x, y):
|
|
548
|
+
"""
|
|
549
|
+
Return the Killing form of ``x`` and ``y``.
|
|
550
|
+
|
|
551
|
+
EXAMPLES::
|
|
552
|
+
|
|
553
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
554
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
555
|
+
sage: a, b, c = L.lie_algebra_generators()
|
|
556
|
+
sage: L.killing_form(a, b + c)
|
|
557
|
+
0
|
|
558
|
+
"""
|
|
559
|
+
|
|
560
|
+
def is_abelian(self):
|
|
561
|
+
r"""
|
|
562
|
+
Return ``True`` if this Lie algebra is abelian.
|
|
563
|
+
|
|
564
|
+
A Lie algebra `\mathfrak{g}` is abelian if `[x, y] = 0` for all
|
|
565
|
+
`x, y \in \mathfrak{g}`.
|
|
566
|
+
|
|
567
|
+
EXAMPLES::
|
|
568
|
+
|
|
569
|
+
sage: # needs sage.combinat sage.modules
|
|
570
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.groups
|
|
571
|
+
sage: L.is_abelian() # needs sage.groups
|
|
572
|
+
False
|
|
573
|
+
sage: R = QQ['x,y']
|
|
574
|
+
sage: L = LieAlgebras(QQ).example(R.gens())
|
|
575
|
+
sage: L.is_abelian()
|
|
576
|
+
True
|
|
577
|
+
|
|
578
|
+
::
|
|
579
|
+
|
|
580
|
+
sage: # not implemented, needs sage.combinat sage.modules
|
|
581
|
+
sage: L.<x> = LieAlgebra(QQ, 1)
|
|
582
|
+
sage: L.is_abelian()
|
|
583
|
+
True
|
|
584
|
+
sage: L.<x,y> = LieAlgebra(QQ, 2)
|
|
585
|
+
sage: L.is_abelian()
|
|
586
|
+
False
|
|
587
|
+
"""
|
|
588
|
+
G = self.lie_algebra_generators()
|
|
589
|
+
if G not in FiniteEnumeratedSets():
|
|
590
|
+
raise NotImplementedError("infinite number of generators")
|
|
591
|
+
zero = self.zero()
|
|
592
|
+
return all(x._bracket_(y) == zero for x in G for y in G)
|
|
593
|
+
|
|
594
|
+
def is_commutative(self) -> bool:
|
|
595
|
+
"""
|
|
596
|
+
Return if ``self`` is commutative.
|
|
597
|
+
|
|
598
|
+
This is equivalent to ``self`` being abelian.
|
|
599
|
+
|
|
600
|
+
EXAMPLES::
|
|
601
|
+
|
|
602
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
603
|
+
sage: L.is_commutative() # needs sage.combinat sage.groups sage.modules
|
|
604
|
+
False
|
|
605
|
+
|
|
606
|
+
::
|
|
607
|
+
|
|
608
|
+
sage: L.<x> = LieAlgebra(QQ, 1) # not implemented # needs sage.combinat sage.modules
|
|
609
|
+
sage: L.is_commutative() # not implemented # needs sage.combinat sage.modules
|
|
610
|
+
True
|
|
611
|
+
"""
|
|
612
|
+
return self.is_abelian()
|
|
613
|
+
|
|
614
|
+
@abstract_method(optional=True)
|
|
615
|
+
def is_solvable(self):
|
|
616
|
+
"""
|
|
617
|
+
Return if ``self`` is a solvable Lie algebra.
|
|
618
|
+
|
|
619
|
+
EXAMPLES::
|
|
620
|
+
|
|
621
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
622
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
623
|
+
sage: L.is_solvable()
|
|
624
|
+
True
|
|
625
|
+
"""
|
|
626
|
+
|
|
627
|
+
@abstract_method(optional=True)
|
|
628
|
+
def is_nilpotent(self):
|
|
629
|
+
"""
|
|
630
|
+
Return if ``self`` is a nilpotent Lie algebra.
|
|
631
|
+
|
|
632
|
+
EXAMPLES::
|
|
633
|
+
|
|
634
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
635
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
636
|
+
sage: L.is_nilpotent()
|
|
637
|
+
True
|
|
638
|
+
"""
|
|
639
|
+
|
|
640
|
+
def bch(self, X, Y, prec=None):
|
|
641
|
+
r"""
|
|
642
|
+
Return the element `\log(\exp(X)\exp(Y))`.
|
|
643
|
+
|
|
644
|
+
The BCH formula is an expression for `\log(\exp(X)\exp(Y))`
|
|
645
|
+
as a sum of Lie brackets of ``X ` and ``Y`` with rational
|
|
646
|
+
coefficients. It is only defined if the base ring of
|
|
647
|
+
``self`` has a coercion from the rationals.
|
|
648
|
+
|
|
649
|
+
INPUT:
|
|
650
|
+
|
|
651
|
+
- ``X`` -- an element of ``self``
|
|
652
|
+
- ``Y`` -- an element of ``self``
|
|
653
|
+
- ``prec`` -- integer; the maximum length of Lie brackets to be
|
|
654
|
+
considered in the formula
|
|
655
|
+
|
|
656
|
+
EXAMPLES:
|
|
657
|
+
|
|
658
|
+
The BCH formula for the generators of a free nilpotent Lie
|
|
659
|
+
algebra of step 4::
|
|
660
|
+
|
|
661
|
+
sage: L = LieAlgebra(QQ, 2, step=4) # needs sage.combinat sage.modules
|
|
662
|
+
sage: L.inject_variables() # needs sage.combinat sage.modules
|
|
663
|
+
Defining X_1, X_2, X_12, X_112, X_122, X_1112, X_1122, X_1222
|
|
664
|
+
sage: L.bch(X_1, X_2) # needs sage.combinat sage.libs.flint sage.modules
|
|
665
|
+
X_1 + X_2 + 1/2*X_12 + 1/12*X_112 + 1/12*X_122 + 1/24*X_1122
|
|
666
|
+
|
|
667
|
+
An example of the BCH formula in a quotient::
|
|
668
|
+
|
|
669
|
+
sage: Q = L.quotient(X_112 + X_122) # needs sage.combinat sage.modules
|
|
670
|
+
sage: x, y = Q.basis().list()[:2] # needs sage.combinat sage.modules
|
|
671
|
+
sage: Q.bch(x, y) # needs sage.combinat sage.libs.flint sage.modules
|
|
672
|
+
X_1 + X_2 + 1/2*X_12 - 1/24*X_1112
|
|
673
|
+
|
|
674
|
+
The BCH formula for a non-nilpotent Lie algebra requires the
|
|
675
|
+
precision to be explicitly stated::
|
|
676
|
+
|
|
677
|
+
sage: L.<X,Y> = LieAlgebra(QQ) # needs sage.combinat sage.modules
|
|
678
|
+
sage: L.bch(X, Y) # needs sage.combinat sage.modules
|
|
679
|
+
Traceback (most recent call last):
|
|
680
|
+
...
|
|
681
|
+
ValueError: the Lie algebra is not known to be nilpotent,
|
|
682
|
+
so you must specify the precision
|
|
683
|
+
sage: L.bch(X, Y, 4) # needs sage.combinat sage.libs.flint sage.modules
|
|
684
|
+
X + 1/12*[X, [X, Y]] + 1/24*[X, [[X, Y], Y]]
|
|
685
|
+
+ 1/2*[X, Y] + 1/12*[[X, Y], Y] + Y
|
|
686
|
+
|
|
687
|
+
The BCH formula requires a coercion from the rationals::
|
|
688
|
+
|
|
689
|
+
sage: L.<X,Y,Z> = LieAlgebra(ZZ, 2, step=2) # needs sage.combinat sage.modules
|
|
690
|
+
sage: L.bch(X, Y) # needs sage.combinat sage.modules
|
|
691
|
+
Traceback (most recent call last):
|
|
692
|
+
...
|
|
693
|
+
TypeError: the BCH formula is not well defined
|
|
694
|
+
since Integer Ring has no coercion from Rational Field
|
|
695
|
+
"""
|
|
696
|
+
if self not in LieAlgebras.Nilpotent and prec is None:
|
|
697
|
+
raise ValueError("the Lie algebra is not known to be nilpotent,"
|
|
698
|
+
" so you must specify the precision")
|
|
699
|
+
from sage.algebras.lie_algebras.bch import bch_iterator
|
|
700
|
+
if prec is None:
|
|
701
|
+
return self.sum(Z for Z in bch_iterator(X, Y))
|
|
702
|
+
bch = bch_iterator(X, Y)
|
|
703
|
+
return self.sum(next(bch) for k in range(prec))
|
|
704
|
+
|
|
705
|
+
baker_campbell_hausdorff = bch
|
|
706
|
+
|
|
707
|
+
@abstract_method(optional=True)
|
|
708
|
+
def lie_group(self, name='G', **kwds):
|
|
709
|
+
r"""
|
|
710
|
+
Return the simply connected Lie group related to ``self``.
|
|
711
|
+
|
|
712
|
+
INPUT:
|
|
713
|
+
|
|
714
|
+
- ``name`` -- string (default: ``'G'``);
|
|
715
|
+
the name (symbol) given to the Lie group
|
|
716
|
+
|
|
717
|
+
EXAMPLES::
|
|
718
|
+
|
|
719
|
+
sage: L = lie_algebras.Heisenberg(QQ, 1) # needs sage.combinat sage.graphs sage.modules
|
|
720
|
+
sage: G = L.lie_group('G'); G # needs sage.combinat sage.graphs sage.modules sage.symbolic
|
|
721
|
+
Lie group G of Heisenberg algebra of rank 1 over Rational Field
|
|
722
|
+
"""
|
|
723
|
+
|
|
724
|
+
def trivial_representation(self):
|
|
725
|
+
"""
|
|
726
|
+
Return the trivial representation of ``self``.
|
|
727
|
+
|
|
728
|
+
EXAMPLES::
|
|
729
|
+
|
|
730
|
+
sage: L = lie_algebras.strictly_upper_triangular_matrices(QQ, 4) # needs sage.combinat sage.modules sage.symbolic
|
|
731
|
+
sage: L.trivial_representation() # needs sage.combinat sage.modules sage.symbolic
|
|
732
|
+
Trivial representation of Lie algebra of 4-dimensional
|
|
733
|
+
strictly upper triangular matrices over Rational Field
|
|
734
|
+
"""
|
|
735
|
+
from sage.algebras.lie_algebras.representation import TrivialRepresentation
|
|
736
|
+
return TrivialRepresentation(self)
|
|
737
|
+
|
|
738
|
+
def representation(self, f=None, index_set=None, on_basis=False, **kwargs):
|
|
739
|
+
"""
|
|
740
|
+
Return a representation of ``self``.
|
|
741
|
+
|
|
742
|
+
If no arguments are given, then this returns the trivial
|
|
743
|
+
representation.
|
|
744
|
+
|
|
745
|
+
Currently the only implemented method of constructing a
|
|
746
|
+
representation is by explicitly specifying the action of
|
|
747
|
+
|
|
748
|
+
* the elements of ``self`` by matrices;
|
|
749
|
+
* the basis elements of ``self`` using a ``dict`` or
|
|
750
|
+
a :func:`Family`;
|
|
751
|
+
* a function on basis elements (either passed as ``on_basis``
|
|
752
|
+
or setting ``on_basis=True``).
|
|
753
|
+
|
|
754
|
+
INPUT:
|
|
755
|
+
|
|
756
|
+
- ``f`` -- the function that defines the action
|
|
757
|
+
- ``index_set`` -- the index set of the representation
|
|
758
|
+
- ``on_basis`` -- (optional) see above
|
|
759
|
+
|
|
760
|
+
.. SEEALSO::
|
|
761
|
+
|
|
762
|
+
:class:`~sage.algebras.lie_algebras.representation.RepresentationByMorphism`
|
|
763
|
+
|
|
764
|
+
EXAMPLES::
|
|
765
|
+
|
|
766
|
+
sage: # needs sage.combinat sage.modules
|
|
767
|
+
sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'y':1}})
|
|
768
|
+
sage: f = {x: Matrix([[1,0],[0,0]]), y: Matrix([[0,1],[0,0]])}
|
|
769
|
+
sage: L.representation(f)
|
|
770
|
+
Representation of Lie algebra on 2 generators (x, y) over Rational Field defined by:
|
|
771
|
+
[1 0]
|
|
772
|
+
x |--> [0 0]
|
|
773
|
+
[0 1]
|
|
774
|
+
y |--> [0 0]
|
|
775
|
+
sage: L.representation()
|
|
776
|
+
Trivial representation of Lie algebra on 2 generators (x, y) over Rational Field
|
|
777
|
+
"""
|
|
778
|
+
if f is None and on_basis is False and index_set is None:
|
|
779
|
+
return self.trivial_representation(**kwargs)
|
|
780
|
+
from sage.algebras.lie_algebras.representation import RepresentationByMorphism
|
|
781
|
+
return RepresentationByMorphism(self, f, index_set, on_basis, **kwargs)
|
|
782
|
+
|
|
783
|
+
def _test_jacobi_identity(self, **options):
|
|
784
|
+
"""
|
|
785
|
+
Test that the Jacobi identity is satisfied on (not
|
|
786
|
+
necessarily all) elements of this set.
|
|
787
|
+
|
|
788
|
+
INPUT:
|
|
789
|
+
|
|
790
|
+
- ``options`` -- any keyword arguments accepted by :meth:`_tester`
|
|
791
|
+
|
|
792
|
+
EXAMPLES:
|
|
793
|
+
|
|
794
|
+
By default, this method runs the tests only on the
|
|
795
|
+
elements returned by ``self.some_elements()``::
|
|
796
|
+
|
|
797
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
798
|
+
sage: L._test_jacobi_identity() # needs sage.combinat sage.groups sage.modules
|
|
799
|
+
|
|
800
|
+
However, the elements tested can be customized with the
|
|
801
|
+
``elements`` keyword argument::
|
|
802
|
+
|
|
803
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
804
|
+
sage: x,y = L.lie_algebra_generators() # needs sage.combinat sage.groups sage.modules
|
|
805
|
+
sage: L._test_jacobi_identity(elements=[x + y, x, 2*y, x.bracket(y)]) # needs sage.combinat sage.groups sage.modules
|
|
806
|
+
|
|
807
|
+
See the documentation for :class:`TestSuite` for more information.
|
|
808
|
+
"""
|
|
809
|
+
tester = self._tester(**options)
|
|
810
|
+
elts = tester.some_elements()
|
|
811
|
+
jacobi = lambda x, y, z: self.bracket(x, self.bracket(y, z)) + \
|
|
812
|
+
self.bracket(y, self.bracket(z, x)) + \
|
|
813
|
+
self.bracket(z, self.bracket(x, y))
|
|
814
|
+
zero = self.zero()
|
|
815
|
+
for x in elts:
|
|
816
|
+
for y in elts:
|
|
817
|
+
if x == y:
|
|
818
|
+
continue
|
|
819
|
+
for z in elts:
|
|
820
|
+
tester.assertEqual(jacobi(x, y, z), zero)
|
|
821
|
+
|
|
822
|
+
def _test_antisymmetry(self, **options):
|
|
823
|
+
"""
|
|
824
|
+
Test that the antisymmetry axiom is satisfied on (not
|
|
825
|
+
necessarily all) elements of this set.
|
|
826
|
+
|
|
827
|
+
INPUT:
|
|
828
|
+
|
|
829
|
+
- ``options`` -- any keyword arguments accepted by :meth:`_tester`
|
|
830
|
+
|
|
831
|
+
EXAMPLES:
|
|
832
|
+
|
|
833
|
+
By default, this method runs the tests only on the
|
|
834
|
+
elements returned by ``self.some_elements()``::
|
|
835
|
+
|
|
836
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
837
|
+
sage: L._test_antisymmetry() # needs sage.combinat sage.groups sage.modules
|
|
838
|
+
|
|
839
|
+
However, the elements tested can be customized with the
|
|
840
|
+
``elements`` keyword argument::
|
|
841
|
+
|
|
842
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
843
|
+
sage: x,y = L.lie_algebra_generators() # needs sage.combinat sage.groups sage.modules
|
|
844
|
+
sage: L._test_antisymmetry(elements=[x + y, x, 2*y, x.bracket(y)]) # needs sage.combinat sage.groups sage.modules
|
|
845
|
+
|
|
846
|
+
See the documentation for :class:`TestSuite` for more information.
|
|
847
|
+
"""
|
|
848
|
+
tester = self._tester(**options)
|
|
849
|
+
elts = tester.some_elements()
|
|
850
|
+
zero = self.zero()
|
|
851
|
+
for x in elts:
|
|
852
|
+
tester.assertEqual(self.bracket(x, x), zero)
|
|
853
|
+
|
|
854
|
+
def _test_distributivity(self, **options):
|
|
855
|
+
r"""
|
|
856
|
+
Test the distributivity of the Lie bracket `[,]` on `+` on (not
|
|
857
|
+
necessarily all) elements of this set.
|
|
858
|
+
|
|
859
|
+
INPUT:
|
|
860
|
+
|
|
861
|
+
- ``options`` -- any keyword arguments accepted by :meth:`_tester`
|
|
862
|
+
|
|
863
|
+
TESTS::
|
|
864
|
+
|
|
865
|
+
sage: L = LieAlgebras(QQ).example() # needs sage.combinat sage.groups sage.modules
|
|
866
|
+
sage: L._test_distributivity() # needs sage.combinat sage.groups sage.modules
|
|
867
|
+
|
|
868
|
+
EXAMPLES:
|
|
869
|
+
|
|
870
|
+
By default, this method runs the tests only on the
|
|
871
|
+
elements returned by ``self.some_elements()``::
|
|
872
|
+
|
|
873
|
+
sage: L = LieAlgebra(QQ, 3, 'x,y,z', representation='polynomial') # needs sage.combinat sage.modules
|
|
874
|
+
sage: L.some_elements() # needs sage.combinat sage.modules
|
|
875
|
+
[x + y + z]
|
|
876
|
+
sage: L._test_distributivity() # needs sage.combinat sage.modules
|
|
877
|
+
|
|
878
|
+
However, the elements tested can be customized with the
|
|
879
|
+
``elements`` keyword argument::
|
|
880
|
+
|
|
881
|
+
sage: # not implemented, needs sage.combinat sage.modules
|
|
882
|
+
sage: L = LieAlgebra(QQ, cartan_type=['A', 2])
|
|
883
|
+
sage: h1 = L.gen(0)
|
|
884
|
+
sage: h2 = L.gen(1)
|
|
885
|
+
sage: e2 = L.gen(3)
|
|
886
|
+
sage: L._test_distributivity(elements=[h1, h2, e2])
|
|
887
|
+
|
|
888
|
+
See the documentation for :class:`TestSuite` for more information.
|
|
889
|
+
"""
|
|
890
|
+
tester = self._tester(**options)
|
|
891
|
+
S = tester.some_elements()
|
|
892
|
+
from sage.misc.misc import some_tuples
|
|
893
|
+
for x,y,z in some_tuples(S, 3, tester._max_runs):
|
|
894
|
+
# left distributivity
|
|
895
|
+
tester.assertEqual(self.bracket(x, (y + z)),
|
|
896
|
+
self.bracket(x, y) + self.bracket(x, z))
|
|
897
|
+
# right distributivity
|
|
898
|
+
tester.assertEqual(self.bracket((x + y), z),
|
|
899
|
+
self.bracket(x, z) + self.bracket(y, z))
|
|
900
|
+
|
|
901
|
+
class ElementMethods:
|
|
902
|
+
@coerce_binop
|
|
903
|
+
def bracket(self, rhs):
|
|
904
|
+
"""
|
|
905
|
+
Return the Lie bracket ``[self, rhs]``.
|
|
906
|
+
|
|
907
|
+
EXAMPLES::
|
|
908
|
+
|
|
909
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
910
|
+
sage: L = LieAlgebras(QQ).example()
|
|
911
|
+
sage: x,y = L.lie_algebra_generators()
|
|
912
|
+
sage: x.bracket(y)
|
|
913
|
+
-[1, 3, 2] + [3, 2, 1]
|
|
914
|
+
sage: x.bracket(0)
|
|
915
|
+
0
|
|
916
|
+
"""
|
|
917
|
+
return self._bracket_(rhs)
|
|
918
|
+
|
|
919
|
+
# Implement this method to define the Lie bracket. You do not
|
|
920
|
+
# need to deal with the coercions here.
|
|
921
|
+
@abstract_method
|
|
922
|
+
def _bracket_(self, y):
|
|
923
|
+
"""
|
|
924
|
+
Return the Lie bracket ``[self, y]``, where ``y`` is an
|
|
925
|
+
element of the same Lie algebra as ``self``.
|
|
926
|
+
|
|
927
|
+
EXAMPLES::
|
|
928
|
+
|
|
929
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
930
|
+
sage: L = LieAlgebras(QQ).example()
|
|
931
|
+
sage: x,y = L.lie_algebra_generators()
|
|
932
|
+
sage: x._bracket_(y)
|
|
933
|
+
-[1, 3, 2] + [3, 2, 1]
|
|
934
|
+
sage: y._bracket_(x)
|
|
935
|
+
[1, 3, 2] - [3, 2, 1]
|
|
936
|
+
sage: x._bracket_(x)
|
|
937
|
+
0
|
|
938
|
+
"""
|
|
939
|
+
|
|
940
|
+
@abstract_method(optional=True)
|
|
941
|
+
def to_vector(self, order=None):
|
|
942
|
+
"""
|
|
943
|
+
Return the vector in ``g.module()`` corresponding to the
|
|
944
|
+
element ``self`` of ``g`` (where ``g`` is the parent of
|
|
945
|
+
``self``).
|
|
946
|
+
|
|
947
|
+
Implement this if you implement ``g.module()``.
|
|
948
|
+
See :meth:`LieAlgebras.module` for how this is to be done.
|
|
949
|
+
|
|
950
|
+
EXAMPLES::
|
|
951
|
+
|
|
952
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
953
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
954
|
+
sage: u = L((1, 0, 0)).to_vector(); u
|
|
955
|
+
(1, 0, 0)
|
|
956
|
+
sage: parent(u)
|
|
957
|
+
Vector space of dimension 3 over Rational Field
|
|
958
|
+
"""
|
|
959
|
+
|
|
960
|
+
@abstract_method(optional=True)
|
|
961
|
+
def lift(self):
|
|
962
|
+
"""
|
|
963
|
+
Return the image of ``self`` under the canonical lift from the Lie
|
|
964
|
+
algebra to its universal enveloping algebra.
|
|
965
|
+
|
|
966
|
+
EXAMPLES::
|
|
967
|
+
|
|
968
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
969
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
970
|
+
sage: a, b, c = L.lie_algebra_generators()
|
|
971
|
+
sage: elt = 3*a + b - c
|
|
972
|
+
sage: elt.lift()
|
|
973
|
+
3*b0 + b1 - b2
|
|
974
|
+
|
|
975
|
+
::
|
|
976
|
+
|
|
977
|
+
sage: L.<x,y> = LieAlgebra(QQ, abelian=True) # needs sage.combinat sage.modules
|
|
978
|
+
sage: x.lift() # needs sage.combinat sage.modules
|
|
979
|
+
x
|
|
980
|
+
"""
|
|
981
|
+
|
|
982
|
+
def killing_form(self, x):
|
|
983
|
+
"""
|
|
984
|
+
Return the Killing form of ``self`` and ``x``.
|
|
985
|
+
|
|
986
|
+
EXAMPLES::
|
|
987
|
+
|
|
988
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
989
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
990
|
+
sage: a, b, c = L.lie_algebra_generators()
|
|
991
|
+
sage: a.killing_form(b)
|
|
992
|
+
0
|
|
993
|
+
"""
|
|
994
|
+
return self.parent().killing_form(self, x)
|
|
995
|
+
|
|
996
|
+
def exp(self, lie_group=None):
|
|
997
|
+
r"""
|
|
998
|
+
Return the exponential of ``self`` in ``lie_group``.
|
|
999
|
+
|
|
1000
|
+
INPUT:
|
|
1001
|
+
|
|
1002
|
+
- ``lie_group`` -- (optional) the Lie group to map into;
|
|
1003
|
+
If ``lie_group`` is not given, the Lie group associated to the
|
|
1004
|
+
parent Lie algebra of ``self`` is used.
|
|
1005
|
+
|
|
1006
|
+
EXAMPLES::
|
|
1007
|
+
|
|
1008
|
+
sage: # needs sage.combinat sage.modules sage.symbolic
|
|
1009
|
+
sage: L.<X,Y,Z> = LieAlgebra(QQ, 2, step=2)
|
|
1010
|
+
sage: g = (X + Y + Z).exp(); g
|
|
1011
|
+
exp(X + Y + Z)
|
|
1012
|
+
sage: h = X.exp(); h
|
|
1013
|
+
exp(X)
|
|
1014
|
+
sage: g.parent()
|
|
1015
|
+
Lie group G of Free Nilpotent Lie algebra on 3 generators (X, Y, Z)
|
|
1016
|
+
over Rational Field
|
|
1017
|
+
sage: g.parent() is h.parent()
|
|
1018
|
+
True
|
|
1019
|
+
|
|
1020
|
+
The Lie group can be specified explicitly::
|
|
1021
|
+
|
|
1022
|
+
sage: # needs sage.combinat sage.modules sage.symbolic
|
|
1023
|
+
sage: H = L.lie_group('H')
|
|
1024
|
+
sage: k = Z.exp(lie_group=H); k
|
|
1025
|
+
exp(Z)
|
|
1026
|
+
sage: k.parent()
|
|
1027
|
+
Lie group H of Free Nilpotent Lie algebra on 3 generators (X, Y, Z)
|
|
1028
|
+
over Rational Field
|
|
1029
|
+
sage: g.parent() == k.parent()
|
|
1030
|
+
False
|
|
1031
|
+
"""
|
|
1032
|
+
if lie_group is None:
|
|
1033
|
+
lie_group = self.parent().lie_group()
|
|
1034
|
+
return lie_group.exp(self)
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
class LiftMorphism(Morphism):
|
|
1038
|
+
"""
|
|
1039
|
+
The natural lifting morphism from a Lie algebra to its
|
|
1040
|
+
enveloping algebra.
|
|
1041
|
+
"""
|
|
1042
|
+
def __init__(self, domain, codomain):
|
|
1043
|
+
"""
|
|
1044
|
+
Initialize ``self``.
|
|
1045
|
+
|
|
1046
|
+
EXAMPLES::
|
|
1047
|
+
|
|
1048
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example() # needs sage.combinat sage.libs.singular sage.modules
|
|
1049
|
+
sage: f = L.lift # needs sage.combinat sage.libs.singular sage.modules
|
|
1050
|
+
|
|
1051
|
+
We skip the category test since this is currently not an element of
|
|
1052
|
+
a homspace::
|
|
1053
|
+
|
|
1054
|
+
sage: TestSuite(f).run(skip='_test_category') # needs sage.combinat sage.libs.singular sage.modules
|
|
1055
|
+
"""
|
|
1056
|
+
Morphism.__init__(self, Hom(domain, codomain))
|
|
1057
|
+
|
|
1058
|
+
def _call_(self, x):
|
|
1059
|
+
"""
|
|
1060
|
+
Lift ``x`` to the universal enveloping algebra.
|
|
1061
|
+
|
|
1062
|
+
EXAMPLES::
|
|
1063
|
+
|
|
1064
|
+
sage: # needs sage.combinat sage.libs.singular sage.modules
|
|
1065
|
+
sage: L = LieAlgebras(QQ).FiniteDimensional().WithBasis().example()
|
|
1066
|
+
sage: a, b, c = L.lie_algebra_generators()
|
|
1067
|
+
sage: L.lift(3*a + b - c)
|
|
1068
|
+
3*b0 + b1 - b2
|
|
1069
|
+
"""
|
|
1070
|
+
return x.lift()
|