passagemath-modules 10.6.31rc3__cp314-cp314-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.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,1630 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.graphs
|
|
3
|
+
r"""
|
|
4
|
+
Verma Modules
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2017-06-30): Initial version
|
|
9
|
+
|
|
10
|
+
.. TODO::
|
|
11
|
+
|
|
12
|
+
Implement a :class:`sage.categories.pushout.ConstructionFunctor`
|
|
13
|
+
and return as the ``construction()``.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
# ****************************************************************************
|
|
17
|
+
# Copyright (C) 2017 Travis Scrimshaw <tcscrims at gmail.com>
|
|
18
|
+
#
|
|
19
|
+
# This program is free software: you can redistribute it and/or modify
|
|
20
|
+
# it under the terms of the GNU General Public License as published by
|
|
21
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
22
|
+
# (at your option) any later version.
|
|
23
|
+
# https://www.gnu.org/licenses/
|
|
24
|
+
# ****************************************************************************
|
|
25
|
+
|
|
26
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
27
|
+
from sage.misc.cachefunc import cached_method
|
|
28
|
+
from sage.categories.modules import Modules
|
|
29
|
+
from sage.categories.morphism import Morphism
|
|
30
|
+
from sage.categories.homset import Hom, Homset
|
|
31
|
+
from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
|
|
32
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
33
|
+
from sage.sets.family import Family
|
|
34
|
+
from sage.structure.richcmp import richcmp
|
|
35
|
+
from sage.rings.integer_ring import ZZ
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ModulePrinting:
|
|
39
|
+
"""
|
|
40
|
+
Helper mixin class for printing the module vectors.
|
|
41
|
+
"""
|
|
42
|
+
def __init__(self, vector_name='v'):
|
|
43
|
+
r"""
|
|
44
|
+
Initialize ``self``.
|
|
45
|
+
|
|
46
|
+
EXAMPLES::
|
|
47
|
+
|
|
48
|
+
sage: from sage.algebras.lie_algebras.verma_module import ModulePrinting
|
|
49
|
+
sage: MP = ModulePrinting()
|
|
50
|
+
sage: TestSuite(MP).run(skip="_test_pickling")
|
|
51
|
+
"""
|
|
52
|
+
self.__vector_name = vector_name
|
|
53
|
+
|
|
54
|
+
def _repr_generator(self, m):
|
|
55
|
+
r"""
|
|
56
|
+
Return a string representation of the generator indexed by ``m``.
|
|
57
|
+
|
|
58
|
+
EXAMPLES::
|
|
59
|
+
|
|
60
|
+
sage: L = lie_algebras.sp(QQ, 4)
|
|
61
|
+
sage: La = L.cartan_type().root_system().ambient_space().fundamental_weights()
|
|
62
|
+
sage: M = L.verma_module(-1/2*La[1] + 3/7*La[2])
|
|
63
|
+
sage: f1, f2 = L.f()
|
|
64
|
+
sage: x = M.pbw_basis()(L([f1, [f1, f2]]))
|
|
65
|
+
sage: v = x * M.highest_weight_vector()
|
|
66
|
+
sage: M._repr_generator(v.leading_support())
|
|
67
|
+
'f[-2*alpha[1] - alpha[2]]*v[(-1/14, 3/7)]'
|
|
68
|
+
|
|
69
|
+
sage: M.highest_weight_vector()
|
|
70
|
+
v[(-1/14, 3/7)]
|
|
71
|
+
sage: 2 * M.highest_weight_vector()
|
|
72
|
+
2*v[(-1/14, 3/7)]
|
|
73
|
+
"""
|
|
74
|
+
ret = super()._repr_generator(m)
|
|
75
|
+
if ret == '1':
|
|
76
|
+
ret = ''
|
|
77
|
+
else:
|
|
78
|
+
ret += '*'
|
|
79
|
+
return ret + self.__vector_name + "[{}]".format(self._weight)
|
|
80
|
+
|
|
81
|
+
def _latex_generator(self, m):
|
|
82
|
+
r"""
|
|
83
|
+
Return a latex representation of the generator indexed by ``m``.
|
|
84
|
+
|
|
85
|
+
EXAMPLES::
|
|
86
|
+
|
|
87
|
+
sage: L = lie_algebras.sp(QQ, 4)
|
|
88
|
+
sage: La = L.cartan_type().root_system().ambient_space().fundamental_weights()
|
|
89
|
+
sage: M = L.verma_module(-1/2*La[1] + 3/7*La[2])
|
|
90
|
+
sage: f1, f2 = L.f()
|
|
91
|
+
sage: x = M.pbw_basis()(L([f1, [f1, f2]]))
|
|
92
|
+
sage: v = x * M.highest_weight_vector()
|
|
93
|
+
sage: M._latex_generator(v.leading_support())
|
|
94
|
+
f_{-2 \alpha_{1} - \alpha_{2}} v_{-\frac{1}{14} e_{0} + \frac{3}{7} e_{1}}
|
|
95
|
+
|
|
96
|
+
sage: latex(2 * M.highest_weight_vector())
|
|
97
|
+
2 v_{-\frac{1}{14} e_{0} + \frac{3}{7} e_{1}}
|
|
98
|
+
sage: latex(M.highest_weight_vector())
|
|
99
|
+
v_{-\frac{1}{14} e_{0} + \frac{3}{7} e_{1}}
|
|
100
|
+
"""
|
|
101
|
+
ret = super()._latex_generator(m)
|
|
102
|
+
if ret == '1':
|
|
103
|
+
ret = ''
|
|
104
|
+
from sage.misc.latex import latex
|
|
105
|
+
return ret + " {}_{{{}}}".format(self.__vector_name, latex(self._weight))
|
|
106
|
+
|
|
107
|
+
_repr_term = _repr_generator
|
|
108
|
+
_latex_term = _latex_generator
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class VermaModule(ModulePrinting, CombinatorialFreeModule):
|
|
112
|
+
r"""
|
|
113
|
+
A Verma module.
|
|
114
|
+
|
|
115
|
+
Let `\lambda` be a weight and `\mathfrak{g}` be a Kac--Moody Lie
|
|
116
|
+
algebra with a fixed Borel subalgebra `\mathfrak{b} = \mathfrak{h}
|
|
117
|
+
\oplus \mathfrak{g}^+`. The *Verma module* `M_{\lambda}` is a
|
|
118
|
+
`U(\mathfrak{g})`-module given by
|
|
119
|
+
|
|
120
|
+
.. MATH::
|
|
121
|
+
|
|
122
|
+
M_{\lambda} := U(\mathfrak{g}) \otimes_{U(\mathfrak{b})} F_{\lambda},
|
|
123
|
+
|
|
124
|
+
where `F_{\lambda}` is the `U(\mathfrak{b})` module such that
|
|
125
|
+
`h \in U(\mathfrak{h})` acts as multiplication by
|
|
126
|
+
`\langle \lambda, h \rangle` and `U(\mathfrak{g}^+) F_{\lambda} = 0`.
|
|
127
|
+
|
|
128
|
+
INPUT:
|
|
129
|
+
|
|
130
|
+
- ``g`` -- a Lie algebra
|
|
131
|
+
- ``weight`` -- a weight
|
|
132
|
+
|
|
133
|
+
EXAMPLES::
|
|
134
|
+
|
|
135
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
136
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
137
|
+
sage: M = L.verma_module(2*La[1] + 3*La[2])
|
|
138
|
+
sage: pbw = M.pbw_basis()
|
|
139
|
+
sage: E1,E2,F1,F2,H1,H2 = [pbw(g) for g in L.gens()]
|
|
140
|
+
sage: v = M.highest_weight_vector()
|
|
141
|
+
sage: x = F2^3 * F1 * v
|
|
142
|
+
sage: x
|
|
143
|
+
f[-alpha[2]]^3*f[-alpha[1]]*v[2*Lambda[1] + 3*Lambda[2]]
|
|
144
|
+
sage: F1 * x
|
|
145
|
+
f[-alpha[2]]^3*f[-alpha[1]]^2*v[2*Lambda[1] + 3*Lambda[2]]
|
|
146
|
+
+ 3*f[-alpha[2]]^2*f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[2*Lambda[1] + 3*Lambda[2]]
|
|
147
|
+
sage: E1 * x
|
|
148
|
+
2*f[-alpha[2]]^3*v[2*Lambda[1] + 3*Lambda[2]]
|
|
149
|
+
sage: H1 * x
|
|
150
|
+
3*f[-alpha[2]]^3*f[-alpha[1]]*v[2*Lambda[1] + 3*Lambda[2]]
|
|
151
|
+
sage: H2 * x
|
|
152
|
+
-2*f[-alpha[2]]^3*f[-alpha[1]]*v[2*Lambda[1] + 3*Lambda[2]]
|
|
153
|
+
|
|
154
|
+
REFERENCES:
|
|
155
|
+
|
|
156
|
+
- :wikipedia:`Verma_module`
|
|
157
|
+
"""
|
|
158
|
+
def __init__(self, g, weight, basis_key=None, prefix='f', **kwds):
|
|
159
|
+
"""
|
|
160
|
+
Initialize ``self``.
|
|
161
|
+
|
|
162
|
+
TESTS::
|
|
163
|
+
|
|
164
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
165
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
166
|
+
sage: M = L.verma_module(La[1] + 4*La[2])
|
|
167
|
+
sage: TestSuite(M).run()
|
|
168
|
+
sage: M = L.verma_module(La[1] - 2*La[2])
|
|
169
|
+
sage: TestSuite(M).run()
|
|
170
|
+
|
|
171
|
+
sage: L = lie_algebras.sp(QQ, 4)
|
|
172
|
+
sage: La = L.cartan_type().root_system().ambient_space().fundamental_weights()
|
|
173
|
+
sage: M = L.verma_module(-1/2*La[1] + 3/7*La[2])
|
|
174
|
+
sage: TestSuite(M).run()
|
|
175
|
+
"""
|
|
176
|
+
if basis_key is not None:
|
|
177
|
+
self._basis_key = basis_key
|
|
178
|
+
else:
|
|
179
|
+
self._basis_key = g._basis_key
|
|
180
|
+
|
|
181
|
+
self._weight = weight
|
|
182
|
+
|
|
183
|
+
R = g.base_ring()
|
|
184
|
+
self._g = g
|
|
185
|
+
self._pbw = g.pbw_basis(basis_key=self._triangular_key)
|
|
186
|
+
monomials = IndexedFreeAbelianMonoid(g._negative_half_index_set(),
|
|
187
|
+
prefix,
|
|
188
|
+
sorting_key=self._monoid_key,
|
|
189
|
+
**kwds)
|
|
190
|
+
CombinatorialFreeModule.__init__(self, R, monomials,
|
|
191
|
+
prefix='', bracket=False, latex_bracket=False,
|
|
192
|
+
sorting_key=self._monomial_key,
|
|
193
|
+
category=Modules(R).WithBasis().Graded())
|
|
194
|
+
ModulePrinting.__init__(self)
|
|
195
|
+
|
|
196
|
+
def _triangular_key(self, x):
|
|
197
|
+
r"""
|
|
198
|
+
Return a key for sorting for the index ``x`` that respects
|
|
199
|
+
the triangular decomposition by `U^-, U^0, U^+`.
|
|
200
|
+
|
|
201
|
+
EXAMPLES::
|
|
202
|
+
|
|
203
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
204
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
205
|
+
sage: M = L.verma_module(La[1])
|
|
206
|
+
sage: sorted(L.basis().keys(), key=L._basis_key)
|
|
207
|
+
[alpha[2], alpha[1], alpha[1] + alpha[2],
|
|
208
|
+
alphacheck[1], alphacheck[2],
|
|
209
|
+
-alpha[2], -alpha[1], -alpha[1] - alpha[2]]
|
|
210
|
+
sage: sorted(L.basis().keys(), key=M._triangular_key)
|
|
211
|
+
[-alpha[2], -alpha[1], -alpha[1] - alpha[2],
|
|
212
|
+
alphacheck[1], alphacheck[2],
|
|
213
|
+
alpha[2], alpha[1], alpha[1] + alpha[2]]
|
|
214
|
+
|
|
215
|
+
sage: def neg_key(x):
|
|
216
|
+
....: return -L.basis().keys().index(x)
|
|
217
|
+
sage: sorted(L.basis().keys(), key=neg_key)
|
|
218
|
+
[-alpha[1] - alpha[2], -alpha[1], -alpha[2],
|
|
219
|
+
alphacheck[2], alphacheck[1],
|
|
220
|
+
alpha[1] + alpha[2], alpha[1], alpha[2]]
|
|
221
|
+
sage: N = L.verma_module(La[1], basis_key=neg_key)
|
|
222
|
+
sage: sorted(L.basis().keys(), key=N._triangular_key)
|
|
223
|
+
[-alpha[1] - alpha[2], -alpha[1], -alpha[2],
|
|
224
|
+
alphacheck[2], alphacheck[1],
|
|
225
|
+
alpha[1] + alpha[2], alpha[1], alpha[2]]
|
|
226
|
+
"""
|
|
227
|
+
return (self._g._part_on_basis(x), self._basis_key(x))
|
|
228
|
+
|
|
229
|
+
def _monoid_key(self, x):
|
|
230
|
+
"""
|
|
231
|
+
Return a key for comparison in the underlying monoid of ``self``.
|
|
232
|
+
|
|
233
|
+
EXAMPLES::
|
|
234
|
+
|
|
235
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
236
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
237
|
+
sage: M = L.verma_module(La[1])
|
|
238
|
+
sage: monoid = M.basis().keys()
|
|
239
|
+
sage: prod(monoid.gens()) # indirect doctest
|
|
240
|
+
f[-alpha[2]]*f[-alpha[1]]*f[-alpha[1] - alpha[2]]
|
|
241
|
+
sage: [M._monoid_key(x) for x in monoid.an_element()._sorted_items()]
|
|
242
|
+
[5, 6, 7]
|
|
243
|
+
|
|
244
|
+
sage: def neg_key(x):
|
|
245
|
+
....: return -L.basis().keys().index(x)
|
|
246
|
+
sage: M = L.verma_module(La[1], basis_key=neg_key)
|
|
247
|
+
sage: monoid = M.basis().keys()
|
|
248
|
+
sage: prod(monoid.gens()) # indirect doctest
|
|
249
|
+
f[-alpha[1] - alpha[2]]*f[-alpha[1]]*f[-alpha[2]]
|
|
250
|
+
sage: [M._monoid_key(x) for x in monoid.an_element()._sorted_items()]
|
|
251
|
+
[-7, -6, -5]
|
|
252
|
+
"""
|
|
253
|
+
return self._basis_key(x[0])
|
|
254
|
+
|
|
255
|
+
def _monomial_key(self, x):
|
|
256
|
+
"""
|
|
257
|
+
Compute the key for ``x`` so that the comparison is done by
|
|
258
|
+
triangular decomposition and then reverse degree lexicographic order.
|
|
259
|
+
|
|
260
|
+
EXAMPLES::
|
|
261
|
+
|
|
262
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
263
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
264
|
+
sage: M = L.verma_module(La[1])
|
|
265
|
+
sage: pbw = M.pbw_basis()
|
|
266
|
+
sage: f1,f2 = pbw(L.f(1)), pbw(L.f(2))
|
|
267
|
+
sage: f1 * f2 * f1 * M.highest_weight_vector() # indirect doctest
|
|
268
|
+
f[-alpha[2]]*f[-alpha[1]]^2*v[Lambda[1]]
|
|
269
|
+
+ f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[Lambda[1]]
|
|
270
|
+
|
|
271
|
+
sage: def neg_key(x):
|
|
272
|
+
....: return -L.basis().keys().index(x)
|
|
273
|
+
sage: M = L.verma_module(La[1], basis_key=neg_key)
|
|
274
|
+
sage: f1 * f2 * f1 * M.highest_weight_vector() # indirect doctest
|
|
275
|
+
f[-alpha[1]]^2*f[-alpha[2]]*v[Lambda[1]]
|
|
276
|
+
- f[-alpha[1] - alpha[2]]*f[-alpha[1]]*v[Lambda[1]]
|
|
277
|
+
"""
|
|
278
|
+
return (-len(x), [self._triangular_key(l) for l in x.to_word_list()])
|
|
279
|
+
|
|
280
|
+
def _repr_(self):
|
|
281
|
+
"""
|
|
282
|
+
Return a string representation of ``self``.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: L = LieAlgebra(QQ, cartan_type=['E',6])
|
|
287
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
288
|
+
sage: M = L.verma_module(2*La[1] + 3*La[2] - 5*La[5])
|
|
289
|
+
sage: M
|
|
290
|
+
Verma module with highest weight 2*Lambda[1] + 3*Lambda[2] - 5*Lambda[5]
|
|
291
|
+
of Lie algebra of ['E', 6] in the Chevalley basis
|
|
292
|
+
"""
|
|
293
|
+
return "Verma module with highest weight {} of {}".format(self._weight, self._g)
|
|
294
|
+
|
|
295
|
+
def _latex_(self):
|
|
296
|
+
r"""
|
|
297
|
+
Return a latex representation of ``self``.
|
|
298
|
+
|
|
299
|
+
EXAMPLES::
|
|
300
|
+
|
|
301
|
+
sage: L = LieAlgebra(QQ, cartan_type=['E',7])
|
|
302
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
303
|
+
sage: M = L.verma_module(2*La[1] + 7*La[4] - 3/4*La[7])
|
|
304
|
+
sage: latex(M)
|
|
305
|
+
M_{2 \Lambda_{1} + 7 \Lambda_{4} - \frac{3}{4} \Lambda_{7}}
|
|
306
|
+
"""
|
|
307
|
+
from sage.misc.latex import latex
|
|
308
|
+
return "M_{{{}}}".format(latex(self._weight))
|
|
309
|
+
|
|
310
|
+
def lie_algebra(self):
|
|
311
|
+
r"""
|
|
312
|
+
Return the underlying Lie algebra of ``self``.
|
|
313
|
+
|
|
314
|
+
EXAMPLES::
|
|
315
|
+
|
|
316
|
+
sage: L = lie_algebras.so(QQ, 9)
|
|
317
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
318
|
+
sage: M = L.verma_module(La[3] - 1/2*La[1])
|
|
319
|
+
sage: M.lie_algebra()
|
|
320
|
+
Lie algebra of ['B', 4] in the Chevalley basis
|
|
321
|
+
"""
|
|
322
|
+
return self._g
|
|
323
|
+
|
|
324
|
+
def pbw_basis(self):
|
|
325
|
+
r"""
|
|
326
|
+
Return the PBW basis of the underlying Lie algebra
|
|
327
|
+
used to define ``self``.
|
|
328
|
+
|
|
329
|
+
EXAMPLES::
|
|
330
|
+
|
|
331
|
+
sage: L = lie_algebras.so(QQ, 8)
|
|
332
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
333
|
+
sage: M = L.verma_module(La[2] - 2*La[3])
|
|
334
|
+
sage: M.pbw_basis()
|
|
335
|
+
Universal enveloping algebra of Lie algebra of ['D', 4] in the Chevalley basis
|
|
336
|
+
in the Poincare-Birkhoff-Witt basis
|
|
337
|
+
"""
|
|
338
|
+
return self._pbw
|
|
339
|
+
|
|
340
|
+
poincare_birkhoff_witt_basis = pbw_basis
|
|
341
|
+
|
|
342
|
+
@cached_method
|
|
343
|
+
def highest_weight_vector(self):
|
|
344
|
+
"""
|
|
345
|
+
Return the highest weight vector of ``self``.
|
|
346
|
+
|
|
347
|
+
EXAMPLES::
|
|
348
|
+
|
|
349
|
+
sage: L = lie_algebras.sp(QQ, 6)
|
|
350
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
351
|
+
sage: M = L.verma_module(La[1] - 3*La[2])
|
|
352
|
+
sage: M.highest_weight_vector()
|
|
353
|
+
v[Lambda[1] - 3*Lambda[2]]
|
|
354
|
+
"""
|
|
355
|
+
one = self.base_ring().one()
|
|
356
|
+
return self._from_dict({self._indices.one(): one},
|
|
357
|
+
remove_zeros=False, coerce=False)
|
|
358
|
+
|
|
359
|
+
def gens(self) -> tuple:
|
|
360
|
+
r"""
|
|
361
|
+
Return the generators of ``self`` as a `U(\mathfrak{g})`-module.
|
|
362
|
+
|
|
363
|
+
EXAMPLES::
|
|
364
|
+
|
|
365
|
+
sage: L = lie_algebras.sp(QQ, 6)
|
|
366
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
367
|
+
sage: M = L.verma_module(La[1] - 3*La[2])
|
|
368
|
+
sage: M.gens()
|
|
369
|
+
(v[Lambda[1] - 3*Lambda[2]],)
|
|
370
|
+
"""
|
|
371
|
+
return (self.highest_weight_vector(),)
|
|
372
|
+
|
|
373
|
+
def highest_weight(self):
|
|
374
|
+
r"""
|
|
375
|
+
Return the highest weight of ``self``.
|
|
376
|
+
|
|
377
|
+
EXAMPLES::
|
|
378
|
+
|
|
379
|
+
sage: L = lie_algebras.so(QQ, 7)
|
|
380
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
381
|
+
sage: M = L.verma_module(4*La[1] - 3/2*La[2])
|
|
382
|
+
sage: M.highest_weight()
|
|
383
|
+
4*Lambda[1] - 3/2*Lambda[2]
|
|
384
|
+
"""
|
|
385
|
+
return self._weight
|
|
386
|
+
|
|
387
|
+
def dual(self):
|
|
388
|
+
r"""
|
|
389
|
+
Return the dual module `M(\lambda)^{\vee}` in Category `\mathcal{O}`.
|
|
390
|
+
|
|
391
|
+
EXAMPLES::
|
|
392
|
+
|
|
393
|
+
sage: L = lie_algebras.sl(QQ, 2)
|
|
394
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
395
|
+
sage: M = L.verma_module(2*La[1])
|
|
396
|
+
sage: Mc = M.dual()
|
|
397
|
+
|
|
398
|
+
sage: Mp = L.verma_module(-2*La[1])
|
|
399
|
+
sage: Mp.dual() is Mp
|
|
400
|
+
True
|
|
401
|
+
"""
|
|
402
|
+
if self.is_simple():
|
|
403
|
+
return self
|
|
404
|
+
from sage.algebras.lie_algebras.bgg_dual_module import BGGDualModule
|
|
405
|
+
return BGGDualModule(self)
|
|
406
|
+
|
|
407
|
+
def degree_on_basis(self, m):
|
|
408
|
+
r"""
|
|
409
|
+
Return the degree (or weight) of the basis element indexed by ``m``.
|
|
410
|
+
|
|
411
|
+
EXAMPLES::
|
|
412
|
+
|
|
413
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
414
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
415
|
+
sage: M = L.verma_module(2*La[1] + 3*La[2])
|
|
416
|
+
sage: v = M.highest_weight_vector()
|
|
417
|
+
sage: M.degree_on_basis(v.leading_support())
|
|
418
|
+
2*Lambda[1] + 3*Lambda[2]
|
|
419
|
+
|
|
420
|
+
sage: pbw = M.pbw_basis()
|
|
421
|
+
sage: G = list(pbw.gens())
|
|
422
|
+
sage: f1, f2 = L.f()
|
|
423
|
+
sage: x = pbw(f1.bracket(f2)) * pbw(f1) * v
|
|
424
|
+
sage: x.degree()
|
|
425
|
+
-Lambda[1] + 3*Lambda[2]
|
|
426
|
+
"""
|
|
427
|
+
P = self._weight.parent()
|
|
428
|
+
return self._weight + P.sum(P(e * self._g.degree_on_basis(k))
|
|
429
|
+
for k,e in m.dict().items())
|
|
430
|
+
|
|
431
|
+
def _coerce_map_from_(self, R):
|
|
432
|
+
r"""
|
|
433
|
+
Return if there is a coercion map from ``R`` to ``self``.
|
|
434
|
+
|
|
435
|
+
There is a coercion map from ``R`` if and only if
|
|
436
|
+
|
|
437
|
+
- there is a coercion from ``R`` into the base ring;
|
|
438
|
+
- ``R`` is a Verma module over the same Lie algebra and
|
|
439
|
+
there is a nonzero Verma module morphism from ``R``
|
|
440
|
+
into ``self``.
|
|
441
|
+
|
|
442
|
+
EXAMPLES::
|
|
443
|
+
|
|
444
|
+
sage: L = lie_algebras.so(QQ, 8)
|
|
445
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
446
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
447
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
448
|
+
sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
|
|
449
|
+
sage: M._coerce_map_from_(Mp) is not None
|
|
450
|
+
True
|
|
451
|
+
sage: Mp._coerce_map_from_(M)
|
|
452
|
+
sage: M._coerce_map_from_(Mpp)
|
|
453
|
+
sage: M._coerce_map_from_(ZZ)
|
|
454
|
+
True
|
|
455
|
+
"""
|
|
456
|
+
if self.base_ring().has_coerce_map_from(R):
|
|
457
|
+
return True
|
|
458
|
+
if isinstance(R, VermaModule) and R._g is self._g:
|
|
459
|
+
H = Hom(R, self)
|
|
460
|
+
if H.dimension() == 1:
|
|
461
|
+
return H.natural_map()
|
|
462
|
+
return super()._coerce_map_from_(R)
|
|
463
|
+
|
|
464
|
+
def _element_constructor_(self, x):
|
|
465
|
+
r"""
|
|
466
|
+
Construct an element of ``self`` from ``x``.
|
|
467
|
+
|
|
468
|
+
EXAMPLES::
|
|
469
|
+
|
|
470
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
471
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
472
|
+
sage: M = L.verma_module(La[1] + 2*La[2])
|
|
473
|
+
sage: M(3)
|
|
474
|
+
3*v[Lambda[1] + 2*Lambda[2]]
|
|
475
|
+
sage: pbw = M.pbw_basis()
|
|
476
|
+
sage: [M(g) for g in pbw.gens()]
|
|
477
|
+
[0,
|
|
478
|
+
0,
|
|
479
|
+
0,
|
|
480
|
+
v[Lambda[1] + 2*Lambda[2]],
|
|
481
|
+
2*v[Lambda[1] + 2*Lambda[2]],
|
|
482
|
+
f[-alpha[2]]*v[Lambda[1] + 2*Lambda[2]],
|
|
483
|
+
f[-alpha[1]]*v[Lambda[1] + 2*Lambda[2]],
|
|
484
|
+
f[-alpha[1] - alpha[2]]*v[Lambda[1] + 2*Lambda[2]]]
|
|
485
|
+
"""
|
|
486
|
+
if x in self.base_ring():
|
|
487
|
+
return self._from_dict({self._indices.one(): x})
|
|
488
|
+
if isinstance(x, self._pbw.element_class):
|
|
489
|
+
return self.highest_weight_vector()._acted_upon_(x, False)
|
|
490
|
+
return super()._element_constructor_(self, x)
|
|
491
|
+
|
|
492
|
+
def contravariant_form(self, x, y):
|
|
493
|
+
r"""
|
|
494
|
+
Return the contravariant form of ``x`` and ``y``.
|
|
495
|
+
|
|
496
|
+
Let `C(x, y)` denote the (universal) contravariant form on
|
|
497
|
+
`U(\mathfrak{g})`. Then the contravariant form on `M(\lambda)` is
|
|
498
|
+
given by evaluating `C(x, y) \in U(\mathfrak{h})` at `\lambda`.
|
|
499
|
+
|
|
500
|
+
EXAMPLES::
|
|
501
|
+
|
|
502
|
+
sage: g = LieAlgebra(QQ, cartan_type=['A', 1])
|
|
503
|
+
sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
504
|
+
sage: M = g.verma_module(2*La[1])
|
|
505
|
+
sage: U = M.pbw_basis()
|
|
506
|
+
sage: v = M.highest_weight_vector()
|
|
507
|
+
sage: e, h, f = U.algebra_generators()
|
|
508
|
+
sage: elts = [f^k * v for k in range(8)]; elts
|
|
509
|
+
[v[2*Lambda[1]], f[-alpha[1]]*v[2*Lambda[1]],
|
|
510
|
+
f[-alpha[1]]^2*v[2*Lambda[1]], f[-alpha[1]]^3*v[2*Lambda[1]],
|
|
511
|
+
f[-alpha[1]]^4*v[2*Lambda[1]], f[-alpha[1]]^5*v[2*Lambda[1]],
|
|
512
|
+
f[-alpha[1]]^6*v[2*Lambda[1]], f[-alpha[1]]^7*v[2*Lambda[1]]]
|
|
513
|
+
sage: matrix([[M.contravariant_form(x, y) for x in elts] for y in elts])
|
|
514
|
+
[1 0 0 0 0 0 0 0]
|
|
515
|
+
[0 2 0 0 0 0 0 0]
|
|
516
|
+
[0 0 4 0 0 0 0 0]
|
|
517
|
+
[0 0 0 0 0 0 0 0]
|
|
518
|
+
[0 0 0 0 0 0 0 0]
|
|
519
|
+
[0 0 0 0 0 0 0 0]
|
|
520
|
+
[0 0 0 0 0 0 0 0]
|
|
521
|
+
[0 0 0 0 0 0 0 0]
|
|
522
|
+
"""
|
|
523
|
+
pbw = self._pbw
|
|
524
|
+
I = pbw._indices
|
|
525
|
+
xlift = pbw.element_class(pbw, {I(m._monomial): c for m, c in x._monomial_coefficients.items()})
|
|
526
|
+
ylift = pbw.element_class(pbw, {I(m._monomial): c for m, c in y._monomial_coefficients.items()})
|
|
527
|
+
univ = pbw.contravariant_form(xlift, ylift)
|
|
528
|
+
la = self._weight
|
|
529
|
+
R = self.base_ring()
|
|
530
|
+
return R.sum(c * R.prod(la.scalar(k) ** e for k, e in m._monomial.items())
|
|
531
|
+
for m, c in univ._monomial_coefficients.items())
|
|
532
|
+
|
|
533
|
+
@lazy_attribute
|
|
534
|
+
def _dominant_data(self):
|
|
535
|
+
r"""
|
|
536
|
+
Return the closest to dominant weight in the dot orbit of
|
|
537
|
+
the highest weight of ``self`` and the corresponding reduced word.
|
|
538
|
+
|
|
539
|
+
EXAMPLES::
|
|
540
|
+
|
|
541
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
542
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
543
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
544
|
+
sage: M._dominant_data
|
|
545
|
+
(Lambda[1] + Lambda[2], [])
|
|
546
|
+
sage: M = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
547
|
+
sage: M._dominant_data
|
|
548
|
+
(Lambda[1] + Lambda[2], [1, 2])
|
|
549
|
+
sage: M = L.verma_module(-4*La[1] - La[2])
|
|
550
|
+
sage: M._dominant_data
|
|
551
|
+
(-Lambda[1] + 2*Lambda[2], [1, 2])
|
|
552
|
+
"""
|
|
553
|
+
P = self._weight.parent()
|
|
554
|
+
wt, w = (self._weight + P.rho()).to_dominant_chamber(reduced_word=True)
|
|
555
|
+
return (wt - P.rho(), w)
|
|
556
|
+
|
|
557
|
+
def is_singular(self):
|
|
558
|
+
r"""
|
|
559
|
+
Return if ``self`` is a singular Verma module.
|
|
560
|
+
|
|
561
|
+
A Verma module `M_{\lambda}` is *singular* if there does not
|
|
562
|
+
exist a dominant weight `\tilde{\lambda}` that is in the dot
|
|
563
|
+
orbit of `\lambda`. We call a Verma module *regular* otherwise.
|
|
564
|
+
|
|
565
|
+
EXAMPLES::
|
|
566
|
+
|
|
567
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
568
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
569
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
570
|
+
sage: M.is_singular()
|
|
571
|
+
False
|
|
572
|
+
sage: M = L.verma_module(La[1] - La[2])
|
|
573
|
+
sage: M.is_singular()
|
|
574
|
+
True
|
|
575
|
+
sage: M = L.verma_module(2*La[1] - 10*La[2])
|
|
576
|
+
sage: M.is_singular()
|
|
577
|
+
False
|
|
578
|
+
sage: M = L.verma_module(-2*La[1] - 2*La[2])
|
|
579
|
+
sage: M.is_singular()
|
|
580
|
+
False
|
|
581
|
+
sage: M = L.verma_module(-4*La[1] - La[2])
|
|
582
|
+
sage: M.is_singular()
|
|
583
|
+
True
|
|
584
|
+
"""
|
|
585
|
+
return not self._dominant_data[0].is_dominant()
|
|
586
|
+
|
|
587
|
+
def is_simple(self):
|
|
588
|
+
r"""
|
|
589
|
+
Return if ``self`` is a simple module.
|
|
590
|
+
|
|
591
|
+
A Verma module `M_{\lambda}` is simple if and only if `\lambda`
|
|
592
|
+
is *Verma antidominant* in the sense
|
|
593
|
+
|
|
594
|
+
.. MATH::
|
|
595
|
+
|
|
596
|
+
\langle \lambda + \rho, \alpha^{\vee} \rangle \notin \ZZ_{>0}
|
|
597
|
+
|
|
598
|
+
for all positive roots `\alpha`.
|
|
599
|
+
|
|
600
|
+
EXAMPLES::
|
|
601
|
+
|
|
602
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
603
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
604
|
+
sage: L.verma_module(La[1] + La[2]).is_simple()
|
|
605
|
+
False
|
|
606
|
+
sage: L.verma_module(-La[1] - La[2]).is_simple()
|
|
607
|
+
True
|
|
608
|
+
sage: L.verma_module(3/2*La[1] + 1/2*La[2]).is_simple()
|
|
609
|
+
False
|
|
610
|
+
sage: L.verma_module(3/2*La[1] + 1/3*La[2]).is_simple()
|
|
611
|
+
True
|
|
612
|
+
sage: L.verma_module(-3*La[1] + 2/3*La[2]).is_simple()
|
|
613
|
+
True
|
|
614
|
+
"""
|
|
615
|
+
return self._weight.is_verma_dominant(positive=False)
|
|
616
|
+
|
|
617
|
+
def is_projective(self):
|
|
618
|
+
r"""
|
|
619
|
+
Return if ``self`` is a projective module in Category `\mathcal{O}`.
|
|
620
|
+
|
|
621
|
+
A Verma module `M_{\lambda}` is projective (in Category `\mathcal{O}`
|
|
622
|
+
if and only if `\lambda` is *Verma dominant* in the sense
|
|
623
|
+
|
|
624
|
+
.. MATH::
|
|
625
|
+
|
|
626
|
+
\langle \lambda + \rho, \alpha^{\vee} \rangle \notin \ZZ_{<0}
|
|
627
|
+
|
|
628
|
+
for all positive roots `\alpha`.
|
|
629
|
+
|
|
630
|
+
EXAMPLES::
|
|
631
|
+
|
|
632
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
633
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
634
|
+
sage: L.verma_module(La[1] + La[2]).is_projective()
|
|
635
|
+
True
|
|
636
|
+
sage: L.verma_module(-La[1] - La[2]).is_projective()
|
|
637
|
+
True
|
|
638
|
+
sage: L.verma_module(3/2*La[1] + 1/2*La[2]).is_projective()
|
|
639
|
+
True
|
|
640
|
+
sage: L.verma_module(3/2*La[1] + 1/3*La[2]).is_projective()
|
|
641
|
+
True
|
|
642
|
+
sage: L.verma_module(-3*La[1] + 2/3*La[2]).is_projective()
|
|
643
|
+
False
|
|
644
|
+
"""
|
|
645
|
+
return self._weight.is_verma_dominant()
|
|
646
|
+
|
|
647
|
+
def homogeneous_component_basis(self, d):
|
|
648
|
+
r"""
|
|
649
|
+
Return a basis for the ``d``-th homogeneous component of ``self``.
|
|
650
|
+
|
|
651
|
+
EXAMPLES::
|
|
652
|
+
|
|
653
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
654
|
+
sage: P = L.cartan_type().root_system().weight_lattice()
|
|
655
|
+
sage: La = P.fundamental_weights()
|
|
656
|
+
sage: al = P.simple_roots()
|
|
657
|
+
sage: mu = 2*La[1] + 3*La[2]
|
|
658
|
+
sage: M = L.verma_module(mu)
|
|
659
|
+
sage: M.homogeneous_component_basis(mu - al[2])
|
|
660
|
+
[f[-alpha[2]]*v[2*Lambda[1] + 3*Lambda[2]]]
|
|
661
|
+
sage: M.homogeneous_component_basis(mu - 3*al[2])
|
|
662
|
+
[f[-alpha[2]]^3*v[2*Lambda[1] + 3*Lambda[2]]]
|
|
663
|
+
sage: M.homogeneous_component_basis(mu - 3*al[2] - 2*al[1])
|
|
664
|
+
[f[-alpha[2]]*f[-alpha[1] - alpha[2]]^2*v[2*Lambda[1] + 3*Lambda[2]],
|
|
665
|
+
f[-alpha[2]]^2*f[-alpha[1]]*f[-alpha[1] - alpha[2]]*v[2*Lambda[1] + 3*Lambda[2]],
|
|
666
|
+
f[-alpha[2]]^3*f[-alpha[1]]^2*v[2*Lambda[1] + 3*Lambda[2]]]
|
|
667
|
+
sage: M.homogeneous_component_basis(mu - La[1])
|
|
668
|
+
Family ()
|
|
669
|
+
"""
|
|
670
|
+
diff = (d - self._weight)._to_root_vector()
|
|
671
|
+
if diff is None or not all(coeff <= 0 and coeff in ZZ for coeff in diff):
|
|
672
|
+
return Family([])
|
|
673
|
+
return sorted(self._homogeneous_component_f(diff))
|
|
674
|
+
|
|
675
|
+
weight_space_basis = homogeneous_component_basis
|
|
676
|
+
|
|
677
|
+
@cached_method
|
|
678
|
+
def _homogeneous_component_f(self, d):
|
|
679
|
+
r"""
|
|
680
|
+
Return a basis of the PBW given by ``d`` expressed in the
|
|
681
|
+
root lattice in terms of the simple roots.
|
|
682
|
+
|
|
683
|
+
INPUT:
|
|
684
|
+
|
|
685
|
+
- ``d`` -- the coefficients of the simple roots as a vector
|
|
686
|
+
|
|
687
|
+
EXAMPLES::
|
|
688
|
+
|
|
689
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
690
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
691
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
692
|
+
sage: sorted(M._homogeneous_component_f(vector([-1,-2])), key=str)
|
|
693
|
+
[f[-alpha[2]]*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]],
|
|
694
|
+
f[-alpha[2]]^2*f[-alpha[1]]*v[Lambda[1] + Lambda[2]]]
|
|
695
|
+
sage: sorted(M._homogeneous_component_f(vector([-5,-4])), key=str)
|
|
696
|
+
[f[-alpha[1]]*f[-alpha[1] - alpha[2]]^4*v[Lambda[1] + Lambda[2]],
|
|
697
|
+
f[-alpha[2]]*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^3*v[Lambda[1] + Lambda[2]],
|
|
698
|
+
f[-alpha[2]]^2*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]],
|
|
699
|
+
f[-alpha[2]]^3*f[-alpha[1]]^4*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]],
|
|
700
|
+
f[-alpha[2]]^4*f[-alpha[1]]^5*v[Lambda[1] + Lambda[2]]]
|
|
701
|
+
"""
|
|
702
|
+
if not d:
|
|
703
|
+
return frozenset([self.highest_weight_vector()])
|
|
704
|
+
f = {i: self._pbw(g) for i, g in enumerate(self._g.f())}
|
|
705
|
+
basis = d.parent().basis() # Standard basis vectors
|
|
706
|
+
ret = set()
|
|
707
|
+
|
|
708
|
+
def degree(m):
|
|
709
|
+
m = m.dict()
|
|
710
|
+
if not m:
|
|
711
|
+
return d.parent().zero()
|
|
712
|
+
return sum(e * self._g.degree_on_basis(k)
|
|
713
|
+
for k, e in m.items()).to_vector()
|
|
714
|
+
for i, fi in f.items():
|
|
715
|
+
if d[i] == 0:
|
|
716
|
+
continue
|
|
717
|
+
for b in self._homogeneous_component_f(d + basis[i]):
|
|
718
|
+
temp = fi * b
|
|
719
|
+
ret.update([self.monomial(m) for m in temp.support()
|
|
720
|
+
if degree(m) == d])
|
|
721
|
+
return frozenset(ret)
|
|
722
|
+
|
|
723
|
+
def _Hom_(self, Y, category=None, **options):
|
|
724
|
+
r"""
|
|
725
|
+
Return the homset from ``self`` to ``Y`` in the
|
|
726
|
+
category ``category``.
|
|
727
|
+
|
|
728
|
+
INPUT:
|
|
729
|
+
|
|
730
|
+
- ``Y`` -- an object
|
|
731
|
+
- ``category`` -- a subcategory of :class:`Crystals`() or ``None``
|
|
732
|
+
|
|
733
|
+
The sole purpose of this method is to construct the homset as a
|
|
734
|
+
:class:`~sage.algebras.lie_algebras.verma_module.VermaModuleHomset`.
|
|
735
|
+
If ``category`` is specified and is not a subcategory of
|
|
736
|
+
``self.category()``, a :exc:`TypeError` is raised instead.
|
|
737
|
+
|
|
738
|
+
This method is not meant to be called directly. Please use
|
|
739
|
+
:func:`sage.categories.homset.Hom` instead.
|
|
740
|
+
|
|
741
|
+
EXAMPLES::
|
|
742
|
+
|
|
743
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
744
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
745
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
746
|
+
sage: Mp = L.verma_module(3*La[1] - 3*La[2])
|
|
747
|
+
sage: H = Hom(M, Mp)
|
|
748
|
+
sage: type(H)
|
|
749
|
+
<...VermaModuleHomset_with_category_with_equality_by_id'>
|
|
750
|
+
"""
|
|
751
|
+
from sage.algebras.lie_algebras.bgg_dual_module import BGGDualModule, SimpleModule
|
|
752
|
+
if not ((isinstance(Y, (VermaModule, SimpleModule))
|
|
753
|
+
or (isinstance(Y, BGGDualModule) and Y._module is self))
|
|
754
|
+
and self._g is Y.lie_algebra()):
|
|
755
|
+
raise TypeError("{} must be an object in Category O of {}".format(Y, self._g))
|
|
756
|
+
if category is not None and not category.is_subcategory(self.category()):
|
|
757
|
+
raise TypeError("{} is not a subcategory of {}".format(category, self.category()))
|
|
758
|
+
return VermaModuleHomset(self, Y)
|
|
759
|
+
|
|
760
|
+
class Element(CombinatorialFreeModule.Element):
|
|
761
|
+
def _acted_upon_(self, scalar, self_on_left=False):
|
|
762
|
+
r"""
|
|
763
|
+
Return the action of ``scalar`` on ``self``.
|
|
764
|
+
|
|
765
|
+
EXAMPLES:
|
|
766
|
+
|
|
767
|
+
Check that other PBW algebras have an action::
|
|
768
|
+
|
|
769
|
+
sage: L = lie_algebras.sp(QQ, 6)
|
|
770
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
771
|
+
sage: M = L.verma_module(La[1] - 3*La[2])
|
|
772
|
+
sage: PBW = L.pbw_basis()
|
|
773
|
+
sage: F1 = PBW(L.f(1))
|
|
774
|
+
sage: F1 * M.highest_weight_vector()
|
|
775
|
+
f[-alpha[1]]*v[Lambda[1] - 3*Lambda[2]]
|
|
776
|
+
sage: F1.parent() is M.pbw_basis()
|
|
777
|
+
False
|
|
778
|
+
sage: F1 * M.highest_weight_vector()
|
|
779
|
+
f[-alpha[1]]*v[Lambda[1] - 3*Lambda[2]]
|
|
780
|
+
sage: E1 = PBW(L.e(1))
|
|
781
|
+
sage: E1 * F1
|
|
782
|
+
PBW[alpha[1]]*PBW[-alpha[1]]
|
|
783
|
+
sage: E1 * F1 * M.highest_weight_vector()
|
|
784
|
+
v[Lambda[1] - 3*Lambda[2]]
|
|
785
|
+
sage: M.pbw_basis()(E1 * F1)
|
|
786
|
+
PBW[-alpha[1]]*PBW[alpha[1]] + PBW[alphacheck[1]]
|
|
787
|
+
"""
|
|
788
|
+
P = self.parent()
|
|
789
|
+
# Check for scalars first
|
|
790
|
+
# TODO: Pass by these checks if a PBW basis element of the Lie algebra
|
|
791
|
+
if scalar in P.base_ring():
|
|
792
|
+
# Don't have this be a super call
|
|
793
|
+
return CombinatorialFreeModule.Element._acted_upon_(self, scalar, self_on_left)
|
|
794
|
+
|
|
795
|
+
# Check for Lie algebra elements
|
|
796
|
+
try:
|
|
797
|
+
scalar = P._g(scalar)
|
|
798
|
+
except (ValueError, TypeError):
|
|
799
|
+
pass
|
|
800
|
+
|
|
801
|
+
# Check for PBW elements
|
|
802
|
+
try:
|
|
803
|
+
scalar = P._pbw(scalar)
|
|
804
|
+
except (ValueError, TypeError):
|
|
805
|
+
# Cannot be made into a PBW element, so propagate it up
|
|
806
|
+
return CombinatorialFreeModule.Element._acted_upon_(self,
|
|
807
|
+
scalar, self_on_left)
|
|
808
|
+
|
|
809
|
+
# We only implement x * self, i.e., as a left module
|
|
810
|
+
if self_on_left:
|
|
811
|
+
return None
|
|
812
|
+
|
|
813
|
+
# Lift ``self`` to the PBW basis and do multiplication there
|
|
814
|
+
mc = self._monomial_coefficients
|
|
815
|
+
d = {P._pbw._indices(x.dict()): mc[x] for x in mc} # Lift the index set
|
|
816
|
+
ret = scalar * P._pbw._from_dict(d, remove_zeros=False, coerce=False)
|
|
817
|
+
|
|
818
|
+
# Now have ``ret`` act on the highest weight vector
|
|
819
|
+
d = {}
|
|
820
|
+
for m in ret._monomial_coefficients:
|
|
821
|
+
c = ret._monomial_coefficients[m]
|
|
822
|
+
mp = {}
|
|
823
|
+
for k,e in reversed(m._sorted_items()):
|
|
824
|
+
part = P._g._part_on_basis(k)
|
|
825
|
+
if part > 0:
|
|
826
|
+
mp = None
|
|
827
|
+
break
|
|
828
|
+
elif part == 0:
|
|
829
|
+
c *= P._g._weight_action(k, P._weight)**e
|
|
830
|
+
else:
|
|
831
|
+
mp[k] = e
|
|
832
|
+
# This term is 0, so nothing to do
|
|
833
|
+
if mp is None:
|
|
834
|
+
continue
|
|
835
|
+
# Convert back to an element of the indexing set
|
|
836
|
+
mp = P._indices(mp)
|
|
837
|
+
if mp in d:
|
|
838
|
+
d[mp] += c
|
|
839
|
+
else:
|
|
840
|
+
d[mp] = c
|
|
841
|
+
return P._from_dict(d)
|
|
842
|
+
|
|
843
|
+
_lmul_ = _acted_upon_
|
|
844
|
+
_rmul_ = _acted_upon_
|
|
845
|
+
|
|
846
|
+
|
|
847
|
+
#####################################################################
|
|
848
|
+
# Morphisms and Homset
|
|
849
|
+
|
|
850
|
+
|
|
851
|
+
class VermaModuleMorphism(Morphism):
|
|
852
|
+
r"""
|
|
853
|
+
A morphism of a Verma module to another module in Category `\mathcal{O}`.
|
|
854
|
+
"""
|
|
855
|
+
def __init__(self, parent, scalar):
|
|
856
|
+
"""
|
|
857
|
+
Initialize ``self``.
|
|
858
|
+
|
|
859
|
+
EXAMPLES::
|
|
860
|
+
|
|
861
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
862
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
863
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
864
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
865
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
866
|
+
sage: TestSuite(phi).run()
|
|
867
|
+
"""
|
|
868
|
+
self._scalar = scalar
|
|
869
|
+
Morphism.__init__(self, parent)
|
|
870
|
+
|
|
871
|
+
def _repr_type(self):
|
|
872
|
+
"""
|
|
873
|
+
Return a string describing the specific type of this map,
|
|
874
|
+
to be used when printing ``self``.
|
|
875
|
+
|
|
876
|
+
EXAMPLES::
|
|
877
|
+
|
|
878
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
879
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
880
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
881
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
882
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
883
|
+
sage: phi._repr_type()
|
|
884
|
+
'Verma module'
|
|
885
|
+
"""
|
|
886
|
+
return "Verma module"
|
|
887
|
+
|
|
888
|
+
def _repr_defn(self):
|
|
889
|
+
r"""
|
|
890
|
+
Return a string describing the definition of ``self``,
|
|
891
|
+
to be used when printing ``self``.
|
|
892
|
+
|
|
893
|
+
EXAMPLES::
|
|
894
|
+
|
|
895
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
896
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
897
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
898
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
899
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
900
|
+
sage: phi._repr_defn()
|
|
901
|
+
'v[-5*Lambda[1] + Lambda[2]] |--> f[-alpha[2]]^2*f[-alpha[1]]^4*v[Lambda[1]
|
|
902
|
+
+ Lambda[2]] + 8*f[-alpha[2]]*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]*v[Lambda[1]
|
|
903
|
+
+ Lambda[2]] + 12*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]'
|
|
904
|
+
|
|
905
|
+
alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]'
|
|
906
|
+
sage: psi = Hom(M, Mp).natural_map()
|
|
907
|
+
sage: psi
|
|
908
|
+
Verma module morphism:
|
|
909
|
+
From: Verma module with highest weight Lambda[1] + Lambda[2]
|
|
910
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
911
|
+
To: Verma module with highest weight -5*Lambda[1] + Lambda[2]
|
|
912
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
913
|
+
Defn: v[Lambda[1] + Lambda[2]] |--> 0
|
|
914
|
+
"""
|
|
915
|
+
v = self.domain().highest_weight_vector()
|
|
916
|
+
if not self._scalar:
|
|
917
|
+
return "{} |--> {}".format(v, self.codomain().zero())
|
|
918
|
+
return "{} |--> {}".format(v, self._scalar * self.parent().highest_weight_image())
|
|
919
|
+
|
|
920
|
+
def _richcmp_(self, other, op):
|
|
921
|
+
r"""
|
|
922
|
+
Return whether this morphism and ``other`` satisfy ``op``.
|
|
923
|
+
|
|
924
|
+
EXAMPLES::
|
|
925
|
+
|
|
926
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
927
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
928
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
929
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
930
|
+
sage: H = Hom(Mp, M)
|
|
931
|
+
sage: H(1) < H(2)
|
|
932
|
+
True
|
|
933
|
+
sage: H(2) < H(1)
|
|
934
|
+
False
|
|
935
|
+
sage: H.zero() == H(0)
|
|
936
|
+
True
|
|
937
|
+
sage: H(3) <= H(3)
|
|
938
|
+
True
|
|
939
|
+
"""
|
|
940
|
+
return richcmp(self._scalar, other._scalar, op)
|
|
941
|
+
|
|
942
|
+
def _call_(self, x):
|
|
943
|
+
r"""
|
|
944
|
+
Apply this morphism to ``x``.
|
|
945
|
+
|
|
946
|
+
EXAMPLES::
|
|
947
|
+
|
|
948
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
949
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
950
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
951
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
952
|
+
sage: pbw = M.pbw_basis()
|
|
953
|
+
sage: f1, f2 = pbw.f()
|
|
954
|
+
sage: v = Mp.highest_weight_vector()
|
|
955
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
956
|
+
sage: phi(f1 * v) == f1 * phi(v)
|
|
957
|
+
True
|
|
958
|
+
sage: phi(f2 * f1 * v) == f2 * f1 * phi(v)
|
|
959
|
+
True
|
|
960
|
+
sage: phi(f1 * f2 * f1 * v) == f1 * f2 * f1 * phi(v)
|
|
961
|
+
True
|
|
962
|
+
|
|
963
|
+
sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
|
|
964
|
+
sage: psi = Hom(Mpp, M).natural_map()
|
|
965
|
+
sage: v = Mpp.highest_weight_vector()
|
|
966
|
+
sage: psi(v)
|
|
967
|
+
0
|
|
968
|
+
"""
|
|
969
|
+
if not self._scalar or not self.parent().highest_weight_image():
|
|
970
|
+
return self.codomain().zero()
|
|
971
|
+
mc = x.monomial_coefficients(copy=False)
|
|
972
|
+
return self.codomain().linear_combination((self._on_basis(m), self._scalar * c)
|
|
973
|
+
for m,c in mc.items())
|
|
974
|
+
|
|
975
|
+
def _on_basis(self, m):
|
|
976
|
+
r"""
|
|
977
|
+
Return the image of the basis element indexed by ``m``.
|
|
978
|
+
|
|
979
|
+
EXAMPLES::
|
|
980
|
+
|
|
981
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
982
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
983
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
984
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
985
|
+
sage: pbw = M.pbw_basis()
|
|
986
|
+
sage: f1, f2 = pbw.f()
|
|
987
|
+
sage: v = Mp.highest_weight_vector()
|
|
988
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
989
|
+
sage: phi._on_basis((f1 * v).leading_support()) == f1 * phi(v)
|
|
990
|
+
True
|
|
991
|
+
"""
|
|
992
|
+
vec = self.parent().highest_weight_image()
|
|
993
|
+
if not vec:
|
|
994
|
+
return vec
|
|
995
|
+
pbw = self.codomain()._pbw
|
|
996
|
+
return pbw.monomial(pbw._indices(m.dict())) * vec
|
|
997
|
+
|
|
998
|
+
def _add_(self, other):
|
|
999
|
+
"""
|
|
1000
|
+
Add ``self`` and ``other``.
|
|
1001
|
+
|
|
1002
|
+
EXAMPLES::
|
|
1003
|
+
|
|
1004
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1005
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1006
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1007
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1008
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
1009
|
+
sage: (phi + 3/2 * phi)._scalar
|
|
1010
|
+
5/2
|
|
1011
|
+
"""
|
|
1012
|
+
return type(self)(self.parent(), self._scalar + other._scalar)
|
|
1013
|
+
|
|
1014
|
+
def _sub_(self, other):
|
|
1015
|
+
"""
|
|
1016
|
+
Subtract ``self`` and ``other``.
|
|
1017
|
+
|
|
1018
|
+
EXAMPLES::
|
|
1019
|
+
|
|
1020
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1021
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1022
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1023
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1024
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
1025
|
+
sage: (phi - 3/2 * phi)._scalar
|
|
1026
|
+
-1/2
|
|
1027
|
+
"""
|
|
1028
|
+
return type(self)(self.parent(), self._scalar - other._scalar)
|
|
1029
|
+
|
|
1030
|
+
def _acted_upon_(self, other, self_on_left):
|
|
1031
|
+
"""
|
|
1032
|
+
Return the action of ``other`` on ``self``.
|
|
1033
|
+
|
|
1034
|
+
EXAMPLES::
|
|
1035
|
+
|
|
1036
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1037
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1038
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1039
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1040
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
1041
|
+
sage: phi._scalar
|
|
1042
|
+
1
|
|
1043
|
+
sage: (0 * phi)._scalar
|
|
1044
|
+
0
|
|
1045
|
+
sage: R.<x> = QQ[]
|
|
1046
|
+
sage: x * phi
|
|
1047
|
+
Traceback (most recent call last):
|
|
1048
|
+
...
|
|
1049
|
+
TypeError: unsupported operand parent(s) for *: ...
|
|
1050
|
+
"""
|
|
1051
|
+
R = self.parent().base_ring()
|
|
1052
|
+
if other not in R:
|
|
1053
|
+
return None
|
|
1054
|
+
return type(self)(self.parent(), R(other) * self._scalar)
|
|
1055
|
+
|
|
1056
|
+
def _composition_(self, right, homset):
|
|
1057
|
+
r"""
|
|
1058
|
+
Return the composition of ``self`` and ``right``.
|
|
1059
|
+
|
|
1060
|
+
INPUT:
|
|
1061
|
+
|
|
1062
|
+
- ``self``, ``right`` -- maps
|
|
1063
|
+
- ``homset`` -- a homset
|
|
1064
|
+
|
|
1065
|
+
ASSUMPTION:
|
|
1066
|
+
|
|
1067
|
+
The codomain of ``right`` is contained in the domain of ``self``.
|
|
1068
|
+
This assumption is not verified.
|
|
1069
|
+
|
|
1070
|
+
EXAMPLES::
|
|
1071
|
+
|
|
1072
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1073
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1074
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1075
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1076
|
+
sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
|
|
1077
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
1078
|
+
sage: psi = Hom(Mpp, Mp).natural_map()
|
|
1079
|
+
sage: xi = phi * psi
|
|
1080
|
+
sage: xi._scalar
|
|
1081
|
+
0
|
|
1082
|
+
"""
|
|
1083
|
+
if (isinstance(right, VermaModuleMorphism)
|
|
1084
|
+
and right.domain()._g is self.codomain()._g):
|
|
1085
|
+
return homset.element_class(homset, right._scalar * self._scalar)
|
|
1086
|
+
return super()._composition_(right, homset)
|
|
1087
|
+
|
|
1088
|
+
def is_injective(self):
|
|
1089
|
+
r"""
|
|
1090
|
+
Return if ``self`` is injective or not.
|
|
1091
|
+
|
|
1092
|
+
A morphism `\phi : M \to M'` from a Verma module `M` to another
|
|
1093
|
+
Verma module `M'` is injective if and only if `\dim \hom(M, M') = 1`
|
|
1094
|
+
and `\phi \neq 0`. If `M'` is a dual Verma or simple module, then
|
|
1095
|
+
the result is not injective.
|
|
1096
|
+
|
|
1097
|
+
EXAMPLES::
|
|
1098
|
+
|
|
1099
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1100
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1101
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1102
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1103
|
+
sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2]) + La[1])
|
|
1104
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
1105
|
+
sage: phi.is_injective()
|
|
1106
|
+
True
|
|
1107
|
+
sage: (0 * phi).is_injective()
|
|
1108
|
+
False
|
|
1109
|
+
sage: psi = Hom(Mpp, Mp).natural_map()
|
|
1110
|
+
sage: psi.is_injective()
|
|
1111
|
+
False
|
|
1112
|
+
"""
|
|
1113
|
+
if not isinstance(self.codomain(), VermaModule):
|
|
1114
|
+
return False
|
|
1115
|
+
return bool(self._scalar)
|
|
1116
|
+
|
|
1117
|
+
def is_surjective(self):
|
|
1118
|
+
r"""
|
|
1119
|
+
Return if ``self`` is surjective or not.
|
|
1120
|
+
|
|
1121
|
+
A morphism `\phi : M \to M'` from a Verma module `M` to another
|
|
1122
|
+
Verma module `M'` is surjective if and only if the domain is
|
|
1123
|
+
equal to the codomain and it is not the zero morphism.
|
|
1124
|
+
|
|
1125
|
+
If `M'` is a simple module, then this surjective if and only if
|
|
1126
|
+
`\dim \hom(M, M') = 1` and `\phi \neq 0`.
|
|
1127
|
+
|
|
1128
|
+
EXAMPLES::
|
|
1129
|
+
|
|
1130
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1131
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1132
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1133
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1134
|
+
sage: phi = Hom(M, M).natural_map()
|
|
1135
|
+
sage: phi.is_surjective()
|
|
1136
|
+
True
|
|
1137
|
+
sage: (0 * phi).is_surjective()
|
|
1138
|
+
False
|
|
1139
|
+
sage: psi = Hom(Mp, M).natural_map()
|
|
1140
|
+
sage: psi.is_surjective()
|
|
1141
|
+
False
|
|
1142
|
+
"""
|
|
1143
|
+
if not bool(self._scalar):
|
|
1144
|
+
return False
|
|
1145
|
+
|
|
1146
|
+
if isinstance(self.codomain(), VermaModule):
|
|
1147
|
+
return self.domain() == self.codomain()
|
|
1148
|
+
|
|
1149
|
+
from sage.algebras.lie_algebras.bgg_dual_module import SimpleModule
|
|
1150
|
+
if isinstance(self.codomain(), SimpleModule):
|
|
1151
|
+
return self.domain().highest_weight() == self.codomain().highest_weight()
|
|
1152
|
+
|
|
1153
|
+
return False
|
|
1154
|
+
|
|
1155
|
+
def image(self):
|
|
1156
|
+
r"""
|
|
1157
|
+
Return the image of ``self``.
|
|
1158
|
+
|
|
1159
|
+
EXAMPLES::
|
|
1160
|
+
|
|
1161
|
+
sage: g = LieAlgebra(QQ, cartan_type=['B', 2])
|
|
1162
|
+
sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1163
|
+
sage: M = g.verma_module(La[1] + 2*La[2])
|
|
1164
|
+
sage: Mp = g.verma_module(La[1] + 3*La[2])
|
|
1165
|
+
sage: phi = Hom(M, Mp).natural_map()
|
|
1166
|
+
sage: phi.image()
|
|
1167
|
+
Free module generated by {} over Rational Field
|
|
1168
|
+
sage: Mc = M.dual()
|
|
1169
|
+
sage: phi = Hom(M, Mc).natural_map()
|
|
1170
|
+
sage: L = phi.image(); L
|
|
1171
|
+
Simple module with highest weight Lambda[1] + 2*Lambda[2] of
|
|
1172
|
+
Lie algebra of ['B', 2] in the Chevalley basis
|
|
1173
|
+
sage: psi = Hom(M, L).natural_map()
|
|
1174
|
+
sage: psi.image()
|
|
1175
|
+
Simple module with highest weight Lambda[1] + 2*Lambda[2] of
|
|
1176
|
+
Lie algebra of ['B', 2] in the Chevalley basis
|
|
1177
|
+
"""
|
|
1178
|
+
C = self.codomain()
|
|
1179
|
+
if not bool(self._scalar):
|
|
1180
|
+
return C.submodule([])
|
|
1181
|
+
|
|
1182
|
+
if isinstance(C, VermaModule):
|
|
1183
|
+
if self.domain() == C:
|
|
1184
|
+
return C
|
|
1185
|
+
raise NotImplementedError("submodules of Verma modules not yet implemented")
|
|
1186
|
+
|
|
1187
|
+
from sage.algebras.lie_algebras.bgg_dual_module import BGGDualModule, SimpleModule
|
|
1188
|
+
if isinstance(C, BGGDualModule) and isinstance(C._module, VermaModule):
|
|
1189
|
+
return SimpleModule(C.lie_algebra(), C.highest_weight(), prefix=C._indices.prefix(),
|
|
1190
|
+
basis_key=C._module._basis_key)
|
|
1191
|
+
|
|
1192
|
+
if isinstance(self.codomain(), SimpleModule):
|
|
1193
|
+
return self.codomain()
|
|
1194
|
+
|
|
1195
|
+
|
|
1196
|
+
class VermaModuleHomset(Homset):
|
|
1197
|
+
r"""
|
|
1198
|
+
The set of morphisms from a Verma module to another module in
|
|
1199
|
+
Category `\mathcal{O}` considered as `U(\mathfrak{g})`-representations.
|
|
1200
|
+
|
|
1201
|
+
This currently assumes the codomain is a Verma module, its dual,
|
|
1202
|
+
or a simple module.
|
|
1203
|
+
|
|
1204
|
+
Let `M_{w \cdot \lambda}` and `M_{w' \cdot \lambda'}` be
|
|
1205
|
+
Verma modules, `\cdot` is the dot action, and `\lambda + \rho`,
|
|
1206
|
+
`\lambda' + \rho` are dominant weights. Then we have
|
|
1207
|
+
|
|
1208
|
+
.. MATH::
|
|
1209
|
+
|
|
1210
|
+
\dim \hom(M_{w \cdot \lambda}, M_{w' \cdot \lambda'}) = 1
|
|
1211
|
+
|
|
1212
|
+
if and only if `\lambda = \lambda'` and `w' \leq w` in Bruhat
|
|
1213
|
+
order. Otherwise the homset is 0 dimensional.
|
|
1214
|
+
|
|
1215
|
+
If the codomain is a dual Verma module `M_{\mu}^{\vee}`, then the
|
|
1216
|
+
homset is `\delta_{\lambda\mu}` dimensional. When `\mu = \lambda`,
|
|
1217
|
+
the image is the simple module `L_{\lambda}`.
|
|
1218
|
+
"""
|
|
1219
|
+
def __call__(self, x, **options):
|
|
1220
|
+
r"""
|
|
1221
|
+
Construct a morphism in this homset from ``x`` if possible.
|
|
1222
|
+
|
|
1223
|
+
EXAMPLES::
|
|
1224
|
+
|
|
1225
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1226
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1227
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1228
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([1,2]))
|
|
1229
|
+
sage: Mpp = L.verma_module(M.highest_weight().dot_action([1,2,1]))
|
|
1230
|
+
sage: phi = Hom(Mp, M).natural_map()
|
|
1231
|
+
sage: Hom(Mpp, M)(phi)
|
|
1232
|
+
Verma module morphism:
|
|
1233
|
+
From: Verma module with highest weight -3*Lambda[1] - 3*Lambda[2]
|
|
1234
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1235
|
+
To: Verma module with highest weight Lambda[1] + Lambda[2]
|
|
1236
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1237
|
+
Defn: v[-3*Lambda[1] - 3*Lambda[2]] |-->
|
|
1238
|
+
f[-alpha[2]]^4*f[-alpha[1]]^4*v[Lambda[1] + Lambda[2]]
|
|
1239
|
+
+ 8*f[-alpha[2]]^3*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]]
|
|
1240
|
+
+ 12*f[-alpha[2]]^2*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]
|
|
1241
|
+
|
|
1242
|
+
sage: psi = Hom(Mpp, Mp).natural_map()
|
|
1243
|
+
sage: Hom(Mpp, M)(psi)
|
|
1244
|
+
Verma module morphism:
|
|
1245
|
+
From: Verma module with highest weight -3*Lambda[1] - 3*Lambda[2]
|
|
1246
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1247
|
+
To: Verma module with highest weight Lambda[1] + Lambda[2]
|
|
1248
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1249
|
+
Defn: v[-3*Lambda[1] - 3*Lambda[2]] |-->
|
|
1250
|
+
f[-alpha[2]]^4*f[-alpha[1]]^4*v[Lambda[1] + Lambda[2]]
|
|
1251
|
+
+ 8*f[-alpha[2]]^3*f[-alpha[1]]^3*f[-alpha[1] - alpha[2]]*v[Lambda[1] + Lambda[2]]
|
|
1252
|
+
+ 12*f[-alpha[2]]^2*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]^2*v[Lambda[1] + Lambda[2]]
|
|
1253
|
+
"""
|
|
1254
|
+
if isinstance(x, VermaModuleMorphism):
|
|
1255
|
+
if x.parent() is self:
|
|
1256
|
+
return x
|
|
1257
|
+
if x.parent() == self:
|
|
1258
|
+
x._set_parent(self) # needed due to non-uniqueness of homsets
|
|
1259
|
+
return x
|
|
1260
|
+
|
|
1261
|
+
if x.domain() != self.domain():
|
|
1262
|
+
x = x * Hom(self.domain(), x.domain()).natural_map()
|
|
1263
|
+
if x.codomain() != self.codomain():
|
|
1264
|
+
x = Hom(x.codomain(), self.codomain()).natural_map() * x
|
|
1265
|
+
|
|
1266
|
+
return x
|
|
1267
|
+
|
|
1268
|
+
if x in self.base_ring():
|
|
1269
|
+
if self.singular_vector() is None:
|
|
1270
|
+
return self.zero()
|
|
1271
|
+
return self.element_class(self, self.base_ring()(x))
|
|
1272
|
+
|
|
1273
|
+
return super().__call__(x, **options)
|
|
1274
|
+
|
|
1275
|
+
def _an_element_(self):
|
|
1276
|
+
r"""
|
|
1277
|
+
Return an element of ``self``.
|
|
1278
|
+
|
|
1279
|
+
EXAMPLES::
|
|
1280
|
+
|
|
1281
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1282
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1283
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1284
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
|
|
1285
|
+
sage: H = Hom(Mp, M)
|
|
1286
|
+
sage: H._an_element_()
|
|
1287
|
+
Verma module morphism:
|
|
1288
|
+
From: Verma module with highest weight 3*Lambda[1] - 3*Lambda[2]
|
|
1289
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1290
|
+
To: Verma module with highest weight Lambda[1] + Lambda[2]
|
|
1291
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1292
|
+
Defn: v[3*Lambda[1] - 3*Lambda[2]] |-->
|
|
1293
|
+
f[-alpha[2]]^2*v[Lambda[1] + Lambda[2]]
|
|
1294
|
+
"""
|
|
1295
|
+
return self.natural_map()
|
|
1296
|
+
|
|
1297
|
+
def highest_weight_image(self):
|
|
1298
|
+
r"""
|
|
1299
|
+
Return the image of the highest weight vector of the domain
|
|
1300
|
+
in the codomain.
|
|
1301
|
+
|
|
1302
|
+
EXAMPLES::
|
|
1303
|
+
|
|
1304
|
+
sage: g = LieAlgebra(QQ, cartan_type=['C', 3])
|
|
1305
|
+
sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1306
|
+
sage: M = g.verma_module(La[1] + 2*La[3])
|
|
1307
|
+
sage: Mc = M.dual()
|
|
1308
|
+
sage: H = Hom(M, Mc)
|
|
1309
|
+
sage: H.highest_weight_image()
|
|
1310
|
+
v[Lambda[1] + 2*Lambda[3]]^*
|
|
1311
|
+
sage: L = H.natural_map().image()
|
|
1312
|
+
sage: Hp = Hom(M, L)
|
|
1313
|
+
sage: Hp.highest_weight_image()
|
|
1314
|
+
u[Lambda[1] + 2*Lambda[3]]
|
|
1315
|
+
"""
|
|
1316
|
+
C = self.codomain()
|
|
1317
|
+
if isinstance(C, VermaModule):
|
|
1318
|
+
# singular_vector() is cached, so we can safely call it twice
|
|
1319
|
+
if self.singular_vector() is None:
|
|
1320
|
+
return C.zero()
|
|
1321
|
+
return self.singular_vector()
|
|
1322
|
+
# Otherwise, it is a dual Verma or a simple, so the image
|
|
1323
|
+
# must be the highest weight vector.
|
|
1324
|
+
if self.domain().highest_weight() == C.highest_weight():
|
|
1325
|
+
return C.highest_weight_vector()
|
|
1326
|
+
return C.zero()
|
|
1327
|
+
|
|
1328
|
+
@cached_method
|
|
1329
|
+
def singular_vector(self):
|
|
1330
|
+
r"""
|
|
1331
|
+
Return the singular vector in the codomain corresponding
|
|
1332
|
+
to the domain's highest weight element or ``None`` if no
|
|
1333
|
+
such element exists.
|
|
1334
|
+
|
|
1335
|
+
ALGORITHM:
|
|
1336
|
+
|
|
1337
|
+
We essentially follow the algorithm laid out in [deG2005]_.
|
|
1338
|
+
We split the main computation into two cases. If there exists
|
|
1339
|
+
an `i` such that `\langle \lambda + \rho, \alpha_i^{\vee}
|
|
1340
|
+
\rangle = m > 0` (i.e., the weight `\lambda` is `i`-dominant
|
|
1341
|
+
with respect to the dot action), then we use the `\mathfrak{sl}_2`
|
|
1342
|
+
relation on `M_{s_i \cdot \lambda} \to M_{\lambda}` to
|
|
1343
|
+
construct the singular vector `f_i^m v_{\lambda}`. Otherwise
|
|
1344
|
+
we find the shortest root `\alpha` such that `\langle \lambda
|
|
1345
|
+
+ \rho, \alpha^{\vee} \rangle > 0` and explicitly compute the
|
|
1346
|
+
kernel with respect to the weight basis elements. We iterate
|
|
1347
|
+
this until we reach `\mu`.
|
|
1348
|
+
|
|
1349
|
+
EXAMPLES::
|
|
1350
|
+
|
|
1351
|
+
sage: L = lie_algebras.sp(QQ, 6)
|
|
1352
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
1353
|
+
sage: la = La[1] - La[3]
|
|
1354
|
+
sage: mu = la.dot_action([1,2])
|
|
1355
|
+
sage: M = L.verma_module(la)
|
|
1356
|
+
sage: Mp = L.verma_module(mu)
|
|
1357
|
+
sage: H = Hom(Mp, M)
|
|
1358
|
+
sage: v = H.singular_vector(); v # needs sage.rings.number_field
|
|
1359
|
+
f[-alpha[2]]*f[-alpha[1]]^3*v[Lambda[1] - Lambda[3]]
|
|
1360
|
+
+ 3*f[-alpha[1]]^2*f[-alpha[1] - alpha[2]]*v[Lambda[1] - Lambda[3]]
|
|
1361
|
+
sage: v.degree() == Mp.highest_weight() # needs sage.rings.number_field
|
|
1362
|
+
True
|
|
1363
|
+
|
|
1364
|
+
::
|
|
1365
|
+
|
|
1366
|
+
sage: L = LieAlgebra(QQ, cartan_type=['F', 4])
|
|
1367
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
1368
|
+
sage: la = La[1] + La[2] - La[3]
|
|
1369
|
+
sage: mu = la.dot_action([1,2,3,2])
|
|
1370
|
+
sage: M = L.verma_module(la)
|
|
1371
|
+
sage: Mp = L.verma_module(mu)
|
|
1372
|
+
sage: H = Hom(Mp, M)
|
|
1373
|
+
sage: v = H.singular_vector() # needs sage.rings.number_field
|
|
1374
|
+
sage: pbw = M.pbw_basis()
|
|
1375
|
+
sage: E = [pbw(e) for e in L.e()]
|
|
1376
|
+
sage: all(e * v == M.zero() for e in E) # long time # needs sage.rings.number_field
|
|
1377
|
+
True
|
|
1378
|
+
sage: v.degree() == Mp.highest_weight() # needs sage.rings.number_field
|
|
1379
|
+
True
|
|
1380
|
+
|
|
1381
|
+
When `w \cdot \lambda \notin \lambda + Q^-`, there does not
|
|
1382
|
+
exist a singular vector::
|
|
1383
|
+
|
|
1384
|
+
sage: L = lie_algebras.sl(QQ, 4)
|
|
1385
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
1386
|
+
sage: la = 3/7*La[1] - 1/2*La[3]
|
|
1387
|
+
sage: mu = la.dot_action([1,2])
|
|
1388
|
+
sage: M = L.verma_module(la)
|
|
1389
|
+
sage: Mp = L.verma_module(mu)
|
|
1390
|
+
sage: H = Hom(Mp, M)
|
|
1391
|
+
sage: H.singular_vector() is None # needs sage.rings.number_field
|
|
1392
|
+
True
|
|
1393
|
+
|
|
1394
|
+
When we need to apply a non-simple reflection, we can compute
|
|
1395
|
+
the singular vector (see :issue:`36793`)::
|
|
1396
|
+
|
|
1397
|
+
sage: g = LieAlgebra(QQ, cartan_type=['A', 2])
|
|
1398
|
+
sage: La = g.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1399
|
+
sage: M = g.verma_module((0*La[1]).dot_action([1]))
|
|
1400
|
+
sage: Mp = g.verma_module((0*La[1]).dot_action([1,2]))
|
|
1401
|
+
sage: H = Hom(Mp, M)
|
|
1402
|
+
sage: v = H.singular_vector(); v # needs sage.rings.number_field
|
|
1403
|
+
1/2*f[-alpha[2]]*f[-alpha[1]]*v[-2*Lambda[1] + Lambda[2]]
|
|
1404
|
+
+ f[-alpha[1] - alpha[2]]*v[-2*Lambda[1] + Lambda[2]]
|
|
1405
|
+
sage: pbw = M.pbw_basis()
|
|
1406
|
+
sage: E = [pbw(e) for e in g.e()]
|
|
1407
|
+
sage: all(e * v == M.zero() for e in E) # needs sage.rings.number_field
|
|
1408
|
+
True
|
|
1409
|
+
sage: v.degree() == Mp.highest_weight() # needs sage.rings.number_field
|
|
1410
|
+
True
|
|
1411
|
+
|
|
1412
|
+
TESTS::
|
|
1413
|
+
|
|
1414
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1415
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
1416
|
+
sage: al = L.cartan_type().root_system().root_lattice().simple_roots()
|
|
1417
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1418
|
+
sage: pbw = M.pbw_basis()
|
|
1419
|
+
sage: E = {i: pbw(L.e(i)) for i in L.cartan_type().index_set()}
|
|
1420
|
+
sage: all(not E[i] * Hom(L.verma_module(mu), M).singular_vector() # needs sage.rings.number_field
|
|
1421
|
+
....: for i in L.cartan_type().index_set()
|
|
1422
|
+
....: for mu in M.highest_weight().dot_orbit())
|
|
1423
|
+
True
|
|
1424
|
+
"""
|
|
1425
|
+
if self.is_endomorphism_set():
|
|
1426
|
+
return self.codomain().highest_weight_vector()
|
|
1427
|
+
if self.domain()._dominant_data[0] != self.codomain()._dominant_data[0]:
|
|
1428
|
+
return None
|
|
1429
|
+
|
|
1430
|
+
from sage.combinat.root_system.coxeter_group import CoxeterGroup
|
|
1431
|
+
from sage.matrix.constructor import matrix
|
|
1432
|
+
W = CoxeterGroup(self.domain()._g._cartan_type)
|
|
1433
|
+
# We take the inverse to account for the left versus right action
|
|
1434
|
+
wp = W.from_reduced_word(reversed(self.domain()._dominant_data[1]))
|
|
1435
|
+
w = W.from_reduced_word(reversed(self.codomain()._dominant_data[1]))
|
|
1436
|
+
if not w.bruhat_le(wp):
|
|
1437
|
+
return None
|
|
1438
|
+
C = self.codomain()
|
|
1439
|
+
pbw = C._pbw
|
|
1440
|
+
F = pbw.f()
|
|
1441
|
+
E = pbw.e()
|
|
1442
|
+
index_set = F.keys()
|
|
1443
|
+
cur_w = w
|
|
1444
|
+
rho = C._weight.parent().rho()
|
|
1445
|
+
ac = C._weight.parent().simple_coroots()
|
|
1446
|
+
elt = pbw.one()
|
|
1447
|
+
wt = C._weight
|
|
1448
|
+
pos_roots_by_ht = C._g._cartan_type.root_system().root_lattice().positive_roots_by_height()
|
|
1449
|
+
assert all(sum(rt.coefficients()) == 1 for rt in pos_roots_by_ht[:len(index_set)])
|
|
1450
|
+
# for this, we don't need to check the simple roots
|
|
1451
|
+
pos_roots_by_ht = pos_roots_by_ht[len(index_set):]
|
|
1452
|
+
|
|
1453
|
+
while cur_w != wp:
|
|
1454
|
+
ind = None
|
|
1455
|
+
for i in cur_w.descents(side='right', positive=True):
|
|
1456
|
+
exp = (wt + rho).scalar(ac[i])
|
|
1457
|
+
if exp not in ZZ or exp <= 0:
|
|
1458
|
+
continue
|
|
1459
|
+
# We need to check that the result is still smaller in Bruhat order
|
|
1460
|
+
next_w = cur_w.apply_simple_reflection_right(i)
|
|
1461
|
+
if not next_w.bruhat_le(wp):
|
|
1462
|
+
continue
|
|
1463
|
+
ind = i
|
|
1464
|
+
# favor a path in weak order so we only do sl_2 relations
|
|
1465
|
+
if not next_w.weak_le(wp, side="right"):
|
|
1466
|
+
continue
|
|
1467
|
+
break
|
|
1468
|
+
if ind is None: # no simple root; need a more general approach
|
|
1469
|
+
# We search for the shortest root that can be applied to minimize
|
|
1470
|
+
# the size of the basis needed to compute the kernel.
|
|
1471
|
+
for rt in pos_roots_by_ht:
|
|
1472
|
+
exp = (wt + rho).scalar(rt.associated_coroot())
|
|
1473
|
+
# We need to check that the result is still smaller in Bruhat order
|
|
1474
|
+
i, wd = rt.to_simple_root(reduced_word=True)
|
|
1475
|
+
refl = wd + (i,) + tuple(reversed(wd))
|
|
1476
|
+
next_w = cur_w.apply_reflections(refl, side='right', word_type="simple")
|
|
1477
|
+
if exp not in ZZ or exp <= 0:
|
|
1478
|
+
continue
|
|
1479
|
+
if not next_w.bruhat_le(wp):
|
|
1480
|
+
continue
|
|
1481
|
+
# We construct the Verma module of the appropriate weight in
|
|
1482
|
+
# order to reduce the dimension and number of multiplications.
|
|
1483
|
+
Mp = C._g.verma_module(wt)
|
|
1484
|
+
basis = sorted(Mp._homogeneous_component_f(-rt.to_vector()), key=str)
|
|
1485
|
+
for i in index_set:
|
|
1486
|
+
image = [E[i] * b for b in basis]
|
|
1487
|
+
supp = set()
|
|
1488
|
+
for vec in image:
|
|
1489
|
+
supp.update(vec._monomial_coefficients)
|
|
1490
|
+
supp = sorted(supp, key=pbw._monomial_key)
|
|
1491
|
+
if not supp: # everything is in the kernel
|
|
1492
|
+
continue
|
|
1493
|
+
M = matrix(pbw.base_ring(), [[v[s] for v in image] for s in supp])
|
|
1494
|
+
ker = M.right_kernel_matrix()
|
|
1495
|
+
basis = [C.linear_combination((basis[j], c) for j, c in kv.iteritems())
|
|
1496
|
+
for kv in ker.rows()]
|
|
1497
|
+
|
|
1498
|
+
assert len(basis) == 1
|
|
1499
|
+
if Mp is C: # We've constructed the element in the codomain
|
|
1500
|
+
assert next_w == wp
|
|
1501
|
+
assert basis[0].degree() == self.domain().highest_weight()
|
|
1502
|
+
return basis[0]
|
|
1503
|
+
pbw_elt = pbw.element_class(pbw, {pbw._indices(m._monomial): c
|
|
1504
|
+
for m, c in basis[0]._monomial_coefficients.items()})
|
|
1505
|
+
elt = pbw_elt * elt
|
|
1506
|
+
wt = wt.dot_action(refl)
|
|
1507
|
+
cur_w = next_w
|
|
1508
|
+
break
|
|
1509
|
+
else:
|
|
1510
|
+
#assert False, "unable to find root"
|
|
1511
|
+
# Have a more explicit check at the beginning using the integral
|
|
1512
|
+
# orbit action for the correct version of dominance; see, e.g.,
|
|
1513
|
+
# Humphreys "Representations of Semisimple Lie Algebras in the BGG Category O".
|
|
1514
|
+
return None
|
|
1515
|
+
else:
|
|
1516
|
+
# Construct the singular vector by iterated embeddings of Verma
|
|
1517
|
+
# modules from the sl_2 relations (without constructing
|
|
1518
|
+
# the modules themselves)
|
|
1519
|
+
elt = F[ind]**ZZ(exp) * elt
|
|
1520
|
+
wt = wt.dot_action([ind])
|
|
1521
|
+
cur_w = cur_w.apply_simple_reflection_right(ind)
|
|
1522
|
+
ret = C.highest_weight_vector()._acted_upon_(elt, False)
|
|
1523
|
+
assert ret.degree() == self.domain().highest_weight()
|
|
1524
|
+
return ret
|
|
1525
|
+
|
|
1526
|
+
@cached_method
|
|
1527
|
+
def natural_map(self):
|
|
1528
|
+
"""
|
|
1529
|
+
Return the "natural map" of ``self``.
|
|
1530
|
+
|
|
1531
|
+
EXAMPLES::
|
|
1532
|
+
|
|
1533
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1534
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1535
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1536
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
|
|
1537
|
+
sage: H = Hom(Mp, M)
|
|
1538
|
+
sage: H.natural_map()
|
|
1539
|
+
Verma module morphism:
|
|
1540
|
+
From: Verma module with highest weight 3*Lambda[1] - 3*Lambda[2]
|
|
1541
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1542
|
+
To: Verma module with highest weight Lambda[1] + Lambda[2]
|
|
1543
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1544
|
+
Defn: v[3*Lambda[1] - 3*Lambda[2]] |-->
|
|
1545
|
+
f[-alpha[2]]^2*v[Lambda[1] + Lambda[2]]
|
|
1546
|
+
|
|
1547
|
+
sage: Mp = L.verma_module(La[1] + 2*La[2])
|
|
1548
|
+
sage: H = Hom(Mp, M)
|
|
1549
|
+
sage: H.natural_map()
|
|
1550
|
+
Verma module morphism:
|
|
1551
|
+
From: Verma module with highest weight Lambda[1] + 2*Lambda[2]
|
|
1552
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1553
|
+
To: Verma module with highest weight Lambda[1] + Lambda[2]
|
|
1554
|
+
of Lie algebra of ['A', 2] in the Chevalley basis
|
|
1555
|
+
Defn: v[Lambda[1] + 2*Lambda[2]] |--> 0
|
|
1556
|
+
"""
|
|
1557
|
+
if not self.highest_weight_image():
|
|
1558
|
+
return self.zero()
|
|
1559
|
+
return self.element_class(self, self.base_ring().one())
|
|
1560
|
+
|
|
1561
|
+
@cached_method
|
|
1562
|
+
def zero(self):
|
|
1563
|
+
"""
|
|
1564
|
+
Return the zero morphism of ``self``.
|
|
1565
|
+
|
|
1566
|
+
EXAMPLES::
|
|
1567
|
+
|
|
1568
|
+
sage: L = lie_algebras.sp(QQ, 6)
|
|
1569
|
+
sage: La = L.cartan_type().root_system().weight_space().fundamental_weights()
|
|
1570
|
+
sage: M = L.verma_module(La[1] + 2/3*La[2])
|
|
1571
|
+
sage: Mp = L.verma_module(La[2] - La[3])
|
|
1572
|
+
sage: H = Hom(Mp, M)
|
|
1573
|
+
sage: H.zero()
|
|
1574
|
+
Verma module morphism:
|
|
1575
|
+
From: Verma module with highest weight Lambda[2] - Lambda[3]
|
|
1576
|
+
of Lie algebra of ['C', 3] in the Chevalley basis
|
|
1577
|
+
To: Verma module with highest weight Lambda[1] + 2/3*Lambda[2]
|
|
1578
|
+
of Lie algebra of ['C', 3] in the Chevalley basis
|
|
1579
|
+
Defn: v[Lambda[2] - Lambda[3]] |--> 0
|
|
1580
|
+
"""
|
|
1581
|
+
return self.element_class(self, self.base_ring().zero())
|
|
1582
|
+
|
|
1583
|
+
def dimension(self):
|
|
1584
|
+
r"""
|
|
1585
|
+
Return the dimension of ``self`` (as a vector space over
|
|
1586
|
+
the base ring).
|
|
1587
|
+
|
|
1588
|
+
EXAMPLES::
|
|
1589
|
+
|
|
1590
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1591
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1592
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1593
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
|
|
1594
|
+
sage: H = Hom(Mp, M)
|
|
1595
|
+
sage: H.dimension()
|
|
1596
|
+
1
|
|
1597
|
+
|
|
1598
|
+
sage: Mp = L.verma_module(La[1] + 2*La[2])
|
|
1599
|
+
sage: H = Hom(Mp, M)
|
|
1600
|
+
sage: H.dimension()
|
|
1601
|
+
0
|
|
1602
|
+
"""
|
|
1603
|
+
if not self.highest_weight_image():
|
|
1604
|
+
return ZZ.zero()
|
|
1605
|
+
return ZZ.one()
|
|
1606
|
+
|
|
1607
|
+
def basis(self):
|
|
1608
|
+
r"""
|
|
1609
|
+
Return a basis of ``self``.
|
|
1610
|
+
|
|
1611
|
+
EXAMPLES::
|
|
1612
|
+
|
|
1613
|
+
sage: L = lie_algebras.sl(QQ, 3)
|
|
1614
|
+
sage: La = L.cartan_type().root_system().weight_lattice().fundamental_weights()
|
|
1615
|
+
sage: M = L.verma_module(La[1] + La[2])
|
|
1616
|
+
sage: Mp = L.verma_module(M.highest_weight().dot_action([2]))
|
|
1617
|
+
sage: H = Hom(Mp, M)
|
|
1618
|
+
sage: list(H.basis()) == [H.natural_map()]
|
|
1619
|
+
True
|
|
1620
|
+
|
|
1621
|
+
sage: Mp = L.verma_module(La[1] + 2*La[2])
|
|
1622
|
+
sage: H = Hom(Mp, M)
|
|
1623
|
+
sage: H.basis()
|
|
1624
|
+
Family ()
|
|
1625
|
+
"""
|
|
1626
|
+
if not self.highest_weight_image():
|
|
1627
|
+
return Family([])
|
|
1628
|
+
return Family([self.natural_map()])
|
|
1629
|
+
|
|
1630
|
+
Element = VermaModuleMorphism
|