passagemath-combinat 10.6.42__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_combinat/__init__.py +3 -0
- passagemath_combinat-10.6.42.dist-info/METADATA +160 -0
- passagemath_combinat-10.6.42.dist-info/RECORD +400 -0
- passagemath_combinat-10.6.42.dist-info/WHEEL +5 -0
- passagemath_combinat-10.6.42.dist-info/top_level.txt +3 -0
- passagemath_combinat.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_combinat.libs/libsymmetrica-81fe8739.so.3.0.0 +0 -0
- sage/algebras/affine_nil_temperley_lieb.py +263 -0
- sage/algebras/all.py +24 -0
- sage/algebras/all__sagemath_combinat.py +35 -0
- sage/algebras/askey_wilson.py +935 -0
- sage/algebras/associated_graded.py +345 -0
- sage/algebras/cellular_basis.py +350 -0
- sage/algebras/cluster_algebra.py +2766 -0
- sage/algebras/down_up_algebra.py +860 -0
- sage/algebras/free_algebra.py +1698 -0
- sage/algebras/free_algebra_element.py +345 -0
- sage/algebras/free_algebra_quotient.py +405 -0
- sage/algebras/free_algebra_quotient_element.py +295 -0
- sage/algebras/free_zinbiel_algebra.py +885 -0
- sage/algebras/hall_algebra.py +783 -0
- sage/algebras/hecke_algebras/all.py +4 -0
- sage/algebras/hecke_algebras/ariki_koike_algebra.py +1796 -0
- sage/algebras/hecke_algebras/ariki_koike_specht_modules.py +475 -0
- sage/algebras/hecke_algebras/cubic_hecke_algebra.py +3520 -0
- sage/algebras/hecke_algebras/cubic_hecke_base_ring.py +1473 -0
- sage/algebras/hecke_algebras/cubic_hecke_matrix_rep.py +1079 -0
- sage/algebras/iwahori_hecke_algebra.py +3095 -0
- sage/algebras/jordan_algebra.py +1773 -0
- sage/algebras/lie_conformal_algebras/abelian_lie_conformal_algebra.py +113 -0
- sage/algebras/lie_conformal_algebras/affine_lie_conformal_algebra.py +156 -0
- sage/algebras/lie_conformal_algebras/all.py +18 -0
- sage/algebras/lie_conformal_algebras/bosonic_ghosts_lie_conformal_algebra.py +134 -0
- sage/algebras/lie_conformal_algebras/examples.py +43 -0
- sage/algebras/lie_conformal_algebras/fermionic_ghosts_lie_conformal_algebra.py +131 -0
- sage/algebras/lie_conformal_algebras/finitely_freely_generated_lca.py +139 -0
- sage/algebras/lie_conformal_algebras/free_bosons_lie_conformal_algebra.py +174 -0
- sage/algebras/lie_conformal_algebras/free_fermions_lie_conformal_algebra.py +167 -0
- sage/algebras/lie_conformal_algebras/freely_generated_lie_conformal_algebra.py +107 -0
- sage/algebras/lie_conformal_algebras/graded_lie_conformal_algebra.py +135 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra.py +353 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +236 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_basis.py +78 -0
- sage/algebras/lie_conformal_algebras/lie_conformal_algebra_with_structure_coefs.py +328 -0
- sage/algebras/lie_conformal_algebras/n2_lie_conformal_algebra.py +117 -0
- sage/algebras/lie_conformal_algebras/neveu_schwarz_lie_conformal_algebra.py +86 -0
- sage/algebras/lie_conformal_algebras/virasoro_lie_conformal_algebra.py +82 -0
- sage/algebras/lie_conformal_algebras/weyl_lie_conformal_algebra.py +205 -0
- sage/algebras/nil_coxeter_algebra.py +191 -0
- sage/algebras/q_commuting_polynomials.py +673 -0
- sage/algebras/q_system.py +608 -0
- sage/algebras/quantum_clifford.py +959 -0
- sage/algebras/quantum_groups/ace_quantum_onsager.py +693 -0
- sage/algebras/quantum_groups/all.py +9 -0
- sage/algebras/quantum_groups/fock_space.py +2219 -0
- sage/algebras/quantum_groups/q_numbers.py +207 -0
- sage/algebras/quantum_groups/quantum_group_gap.py +2695 -0
- sage/algebras/quantum_groups/representations.py +591 -0
- sage/algebras/quantum_matrix_coordinate_algebra.py +1006 -0
- sage/algebras/quantum_oscillator.py +623 -0
- sage/algebras/quaternion_algebra.py +20 -0
- sage/algebras/quaternion_algebra_element.py +55 -0
- sage/algebras/rational_cherednik_algebra.py +525 -0
- sage/algebras/schur_algebra.py +670 -0
- sage/algebras/shuffle_algebra.py +1011 -0
- sage/algebras/splitting_algebra.py +779 -0
- sage/algebras/tensor_algebra.py +709 -0
- sage/algebras/yangian.py +1082 -0
- sage/algebras/yokonuma_hecke_algebra.py +1018 -0
- sage/all__sagemath_combinat.py +35 -0
- sage/combinat/SJT.py +255 -0
- sage/combinat/affine_permutation.py +2405 -0
- sage/combinat/algebraic_combinatorics.py +55 -0
- sage/combinat/all.py +53 -0
- sage/combinat/all__sagemath_combinat.py +195 -0
- sage/combinat/alternating_sign_matrix.py +2063 -0
- sage/combinat/baxter_permutations.py +346 -0
- sage/combinat/bijectionist.py +3220 -0
- sage/combinat/binary_recurrence_sequences.py +1180 -0
- sage/combinat/blob_algebra.py +685 -0
- sage/combinat/catalog_partitions.py +27 -0
- sage/combinat/chas/all.py +23 -0
- sage/combinat/chas/fsym.py +1180 -0
- sage/combinat/chas/wqsym.py +2601 -0
- sage/combinat/cluster_complex.py +326 -0
- sage/combinat/colored_permutations.py +2039 -0
- sage/combinat/colored_permutations_representations.py +964 -0
- sage/combinat/composition_signed.py +142 -0
- sage/combinat/composition_tableau.py +855 -0
- sage/combinat/constellation.py +1729 -0
- sage/combinat/core.py +751 -0
- sage/combinat/counting.py +12 -0
- sage/combinat/crystals/affine.py +742 -0
- sage/combinat/crystals/affine_factorization.py +518 -0
- sage/combinat/crystals/affinization.py +331 -0
- sage/combinat/crystals/alcove_path.py +2013 -0
- sage/combinat/crystals/all.py +22 -0
- sage/combinat/crystals/bkk_crystals.py +141 -0
- sage/combinat/crystals/catalog.py +115 -0
- sage/combinat/crystals/catalog_elementary_crystals.py +18 -0
- sage/combinat/crystals/catalog_infinity_crystals.py +33 -0
- sage/combinat/crystals/catalog_kirillov_reshetikhin.py +18 -0
- sage/combinat/crystals/crystals.py +257 -0
- sage/combinat/crystals/direct_sum.py +260 -0
- sage/combinat/crystals/elementary_crystals.py +1251 -0
- sage/combinat/crystals/fast_crystals.py +441 -0
- sage/combinat/crystals/fully_commutative_stable_grothendieck.py +1205 -0
- sage/combinat/crystals/generalized_young_walls.py +1076 -0
- sage/combinat/crystals/highest_weight_crystals.py +436 -0
- sage/combinat/crystals/induced_structure.py +695 -0
- sage/combinat/crystals/infinity_crystals.py +730 -0
- sage/combinat/crystals/kac_modules.py +863 -0
- sage/combinat/crystals/kirillov_reshetikhin.py +4196 -0
- sage/combinat/crystals/kyoto_path_model.py +497 -0
- sage/combinat/crystals/letters.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/letters.pxd +79 -0
- sage/combinat/crystals/letters.pyx +3056 -0
- sage/combinat/crystals/littelmann_path.py +1518 -0
- sage/combinat/crystals/monomial_crystals.py +1262 -0
- sage/combinat/crystals/multisegments.py +462 -0
- sage/combinat/crystals/mv_polytopes.py +467 -0
- sage/combinat/crystals/pbw_crystal.py +511 -0
- sage/combinat/crystals/pbw_datum.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/pbw_datum.pxd +4 -0
- sage/combinat/crystals/pbw_datum.pyx +487 -0
- sage/combinat/crystals/polyhedral_realization.py +372 -0
- sage/combinat/crystals/spins.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/spins.pxd +21 -0
- sage/combinat/crystals/spins.pyx +756 -0
- sage/combinat/crystals/star_crystal.py +290 -0
- sage/combinat/crystals/subcrystal.py +464 -0
- sage/combinat/crystals/tensor_product.py +1177 -0
- sage/combinat/crystals/tensor_product_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/crystals/tensor_product_element.pxd +35 -0
- sage/combinat/crystals/tensor_product_element.pyx +1870 -0
- sage/combinat/crystals/virtual_crystal.py +420 -0
- sage/combinat/cyclic_sieving_phenomenon.py +204 -0
- sage/combinat/debruijn_sequence.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/debruijn_sequence.pyx +355 -0
- sage/combinat/decorated_permutation.py +270 -0
- sage/combinat/degree_sequences.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/degree_sequences.pyx +588 -0
- sage/combinat/derangements.py +527 -0
- sage/combinat/descent_algebra.py +1008 -0
- sage/combinat/diagram.py +1551 -0
- sage/combinat/diagram_algebras.py +5886 -0
- sage/combinat/dyck_word.py +4349 -0
- sage/combinat/e_one_star.py +1623 -0
- sage/combinat/enumerated_sets.py +123 -0
- sage/combinat/expnums.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/expnums.pyx +148 -0
- sage/combinat/fast_vector_partitions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/fast_vector_partitions.pyx +346 -0
- sage/combinat/fqsym.py +1977 -0
- sage/combinat/free_dendriform_algebra.py +954 -0
- sage/combinat/free_prelie_algebra.py +1141 -0
- sage/combinat/fully_commutative_elements.py +1077 -0
- sage/combinat/fully_packed_loop.py +1523 -0
- sage/combinat/gelfand_tsetlin_patterns.py +1409 -0
- sage/combinat/gray_codes.py +311 -0
- sage/combinat/grossman_larson_algebras.py +667 -0
- sage/combinat/growth.py +4352 -0
- sage/combinat/hall_polynomial.py +188 -0
- sage/combinat/hillman_grassl.py +866 -0
- sage/combinat/integer_matrices.py +329 -0
- sage/combinat/integer_vectors_mod_permgroup.py +1238 -0
- sage/combinat/k_tableau.py +4564 -0
- sage/combinat/kazhdan_lusztig.py +215 -0
- sage/combinat/key_polynomial.py +885 -0
- sage/combinat/knutson_tao_puzzles.py +2286 -0
- sage/combinat/lr_tableau.py +311 -0
- sage/combinat/matrices/all.py +24 -0
- sage/combinat/matrices/hadamard_matrix.py +3790 -0
- sage/combinat/matrices/latin.py +2912 -0
- sage/combinat/misc.py +401 -0
- sage/combinat/multiset_partition_into_sets_ordered.py +3541 -0
- sage/combinat/ncsf_qsym/all.py +21 -0
- sage/combinat/ncsf_qsym/combinatorics.py +317 -0
- sage/combinat/ncsf_qsym/generic_basis_code.py +1427 -0
- sage/combinat/ncsf_qsym/ncsf.py +5637 -0
- sage/combinat/ncsf_qsym/qsym.py +4053 -0
- sage/combinat/ncsf_qsym/tutorial.py +447 -0
- sage/combinat/ncsym/all.py +21 -0
- sage/combinat/ncsym/bases.py +855 -0
- sage/combinat/ncsym/dual.py +593 -0
- sage/combinat/ncsym/ncsym.py +2076 -0
- sage/combinat/necklace.py +551 -0
- sage/combinat/non_decreasing_parking_function.py +634 -0
- sage/combinat/nu_dyck_word.py +1474 -0
- sage/combinat/output.py +861 -0
- sage/combinat/parallelogram_polyomino.py +4326 -0
- sage/combinat/parking_functions.py +1602 -0
- sage/combinat/partition_algebra.py +1998 -0
- sage/combinat/partition_kleshchev.py +1982 -0
- sage/combinat/partition_shifting_algebras.py +584 -0
- sage/combinat/partition_tuple.py +3114 -0
- sage/combinat/path_tableaux/all.py +13 -0
- sage/combinat/path_tableaux/catalog.py +29 -0
- sage/combinat/path_tableaux/dyck_path.py +380 -0
- sage/combinat/path_tableaux/frieze.py +476 -0
- sage/combinat/path_tableaux/path_tableau.py +728 -0
- sage/combinat/path_tableaux/semistandard.py +510 -0
- sage/combinat/perfect_matching.py +779 -0
- sage/combinat/plane_partition.py +3300 -0
- sage/combinat/q_bernoulli.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/q_bernoulli.pyx +128 -0
- sage/combinat/quickref.py +81 -0
- sage/combinat/recognizable_series.py +2051 -0
- sage/combinat/regular_sequence.py +4316 -0
- sage/combinat/regular_sequence_bounded.py +543 -0
- sage/combinat/restricted_growth.py +81 -0
- sage/combinat/ribbon.py +20 -0
- sage/combinat/ribbon_shaped_tableau.py +489 -0
- sage/combinat/ribbon_tableau.py +1180 -0
- sage/combinat/rigged_configurations/all.py +46 -0
- sage/combinat/rigged_configurations/bij_abstract_class.py +548 -0
- sage/combinat/rigged_configurations/bij_infinity.py +370 -0
- sage/combinat/rigged_configurations/bij_type_A.py +163 -0
- sage/combinat/rigged_configurations/bij_type_A2_dual.py +338 -0
- sage/combinat/rigged_configurations/bij_type_A2_even.py +218 -0
- sage/combinat/rigged_configurations/bij_type_A2_odd.py +199 -0
- sage/combinat/rigged_configurations/bij_type_B.py +900 -0
- sage/combinat/rigged_configurations/bij_type_C.py +267 -0
- sage/combinat/rigged_configurations/bij_type_D.py +771 -0
- sage/combinat/rigged_configurations/bij_type_D_tri.py +392 -0
- sage/combinat/rigged_configurations/bij_type_D_twisted.py +576 -0
- sage/combinat/rigged_configurations/bij_type_E67.py +402 -0
- sage/combinat/rigged_configurations/bijection.py +143 -0
- sage/combinat/rigged_configurations/kleber_tree.py +1475 -0
- sage/combinat/rigged_configurations/kr_tableaux.py +1898 -0
- sage/combinat/rigged_configurations/rc_crystal.py +461 -0
- sage/combinat/rigged_configurations/rc_infinity.py +540 -0
- sage/combinat/rigged_configurations/rigged_configuration_element.py +2403 -0
- sage/combinat/rigged_configurations/rigged_configurations.py +1918 -0
- sage/combinat/rigged_configurations/rigged_partition.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/rigged_configurations/rigged_partition.pxd +15 -0
- sage/combinat/rigged_configurations/rigged_partition.pyx +680 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux.py +499 -0
- sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py +428 -0
- sage/combinat/rsk.py +3438 -0
- sage/combinat/schubert_polynomial.py +508 -0
- sage/combinat/set_partition.py +3318 -0
- sage/combinat/set_partition_iterator.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/set_partition_iterator.pyx +136 -0
- sage/combinat/set_partition_ordered.py +1590 -0
- sage/combinat/sf/abreu_nigro.py +346 -0
- sage/combinat/sf/all.py +52 -0
- sage/combinat/sf/character.py +576 -0
- sage/combinat/sf/classical.py +319 -0
- sage/combinat/sf/dual.py +996 -0
- sage/combinat/sf/elementary.py +549 -0
- sage/combinat/sf/hall_littlewood.py +1028 -0
- sage/combinat/sf/hecke.py +336 -0
- sage/combinat/sf/homogeneous.py +464 -0
- sage/combinat/sf/jack.py +1428 -0
- sage/combinat/sf/k_dual.py +1458 -0
- sage/combinat/sf/kfpoly.py +447 -0
- sage/combinat/sf/llt.py +789 -0
- sage/combinat/sf/macdonald.py +2019 -0
- sage/combinat/sf/monomial.py +525 -0
- sage/combinat/sf/multiplicative.py +113 -0
- sage/combinat/sf/new_kschur.py +1786 -0
- sage/combinat/sf/ns_macdonald.py +964 -0
- sage/combinat/sf/orthogonal.py +246 -0
- sage/combinat/sf/orthotriang.py +355 -0
- sage/combinat/sf/powersum.py +963 -0
- sage/combinat/sf/schur.py +880 -0
- sage/combinat/sf/sf.py +1653 -0
- sage/combinat/sf/sfa.py +7053 -0
- sage/combinat/sf/symplectic.py +253 -0
- sage/combinat/sf/witt.py +721 -0
- sage/combinat/shifted_primed_tableau.py +2735 -0
- sage/combinat/shuffle.py +830 -0
- sage/combinat/sidon_sets.py +146 -0
- sage/combinat/similarity_class_type.py +1721 -0
- sage/combinat/sine_gordon.py +618 -0
- sage/combinat/six_vertex_model.py +784 -0
- sage/combinat/skew_partition.py +2053 -0
- sage/combinat/skew_tableau.py +2989 -0
- sage/combinat/sloane_functions.py +8935 -0
- sage/combinat/specht_module.py +1403 -0
- sage/combinat/species/all.py +48 -0
- sage/combinat/species/characteristic_species.py +321 -0
- sage/combinat/species/composition_species.py +273 -0
- sage/combinat/species/cycle_species.py +284 -0
- sage/combinat/species/empty_species.py +155 -0
- sage/combinat/species/functorial_composition_species.py +148 -0
- sage/combinat/species/generating_series.py +673 -0
- sage/combinat/species/library.py +148 -0
- sage/combinat/species/linear_order_species.py +169 -0
- sage/combinat/species/misc.py +83 -0
- sage/combinat/species/partition_species.py +290 -0
- sage/combinat/species/permutation_species.py +268 -0
- sage/combinat/species/product_species.py +423 -0
- sage/combinat/species/recursive_species.py +476 -0
- sage/combinat/species/set_species.py +192 -0
- sage/combinat/species/species.py +820 -0
- sage/combinat/species/structure.py +539 -0
- sage/combinat/species/subset_species.py +243 -0
- sage/combinat/species/sum_species.py +225 -0
- sage/combinat/subword.py +564 -0
- sage/combinat/subword_complex.py +2122 -0
- sage/combinat/subword_complex_c.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/subword_complex_c.pyx +119 -0
- sage/combinat/super_tableau.py +821 -0
- sage/combinat/superpartition.py +1154 -0
- sage/combinat/symmetric_group_algebra.py +3774 -0
- sage/combinat/symmetric_group_representations.py +1830 -0
- sage/combinat/t_sequences.py +877 -0
- sage/combinat/tableau.py +9506 -0
- sage/combinat/tableau_residues.py +860 -0
- sage/combinat/tableau_tuple.py +5353 -0
- sage/combinat/tiling.py +2432 -0
- sage/combinat/triangles_FHM.py +777 -0
- sage/combinat/tutorial.py +1857 -0
- sage/combinat/vector_partition.py +337 -0
- sage/combinat/words/abstract_word.py +1722 -0
- sage/combinat/words/all.py +59 -0
- sage/combinat/words/alphabet.py +268 -0
- sage/combinat/words/finite_word.py +7201 -0
- sage/combinat/words/infinite_word.py +113 -0
- sage/combinat/words/lyndon_word.py +652 -0
- sage/combinat/words/morphic.py +351 -0
- sage/combinat/words/morphism.py +3878 -0
- sage/combinat/words/paths.py +2932 -0
- sage/combinat/words/shuffle_product.py +278 -0
- sage/combinat/words/suffix_trees.py +1873 -0
- sage/combinat/words/word.py +769 -0
- sage/combinat/words/word_char.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_char.pyx +847 -0
- sage/combinat/words/word_datatypes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/words/word_datatypes.pxd +4 -0
- sage/combinat/words/word_datatypes.pyx +1067 -0
- sage/combinat/words/word_generators.py +2026 -0
- sage/combinat/words/word_infinite_datatypes.py +1218 -0
- sage/combinat/words/word_options.py +99 -0
- sage/combinat/words/words.py +2396 -0
- sage/data_structures/all__sagemath_combinat.py +1 -0
- sage/databases/all__sagemath_combinat.py +13 -0
- sage/databases/findstat.py +4897 -0
- sage/databases/oeis.py +2058 -0
- sage/databases/sloane.py +393 -0
- sage/dynamics/all__sagemath_combinat.py +14 -0
- sage/dynamics/cellular_automata/all.py +7 -0
- sage/dynamics/cellular_automata/catalog.py +34 -0
- sage/dynamics/cellular_automata/elementary.py +612 -0
- sage/dynamics/cellular_automata/glca.py +477 -0
- sage/dynamics/cellular_automata/solitons.py +1463 -0
- sage/dynamics/finite_dynamical_system.py +1249 -0
- sage/dynamics/finite_dynamical_system_catalog.py +382 -0
- sage/games/all.py +7 -0
- sage/games/hexad.py +704 -0
- sage/games/quantumino.py +591 -0
- sage/games/sudoku.py +889 -0
- sage/games/sudoku_backtrack.cpython-314-x86_64-linux-musl.so +0 -0
- sage/games/sudoku_backtrack.pyx +189 -0
- sage/groups/all__sagemath_combinat.py +1 -0
- sage/groups/indexed_free_group.py +489 -0
- sage/libs/all__sagemath_combinat.py +6 -0
- sage/libs/lrcalc/__init__.py +1 -0
- sage/libs/lrcalc/lrcalc.py +525 -0
- sage/libs/symmetrica/__init__.py +7 -0
- sage/libs/symmetrica/all.py +101 -0
- sage/libs/symmetrica/kostka.pxi +168 -0
- sage/libs/symmetrica/part.pxi +193 -0
- sage/libs/symmetrica/plet.pxi +42 -0
- sage/libs/symmetrica/sab.pxi +196 -0
- sage/libs/symmetrica/sb.pxi +332 -0
- sage/libs/symmetrica/sc.pxi +192 -0
- sage/libs/symmetrica/schur.pxi +956 -0
- sage/libs/symmetrica/symmetrica.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/symmetrica/symmetrica.pxi +1172 -0
- sage/libs/symmetrica/symmetrica.pyx +39 -0
- sage/monoids/all.py +13 -0
- sage/monoids/automatic_semigroup.py +1054 -0
- sage/monoids/free_abelian_monoid.py +315 -0
- sage/monoids/free_abelian_monoid_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/monoids/free_abelian_monoid_element.pxd +16 -0
- sage/monoids/free_abelian_monoid_element.pyx +397 -0
- sage/monoids/free_monoid.py +335 -0
- sage/monoids/free_monoid_element.py +431 -0
- sage/monoids/hecke_monoid.py +65 -0
- sage/monoids/string_monoid.py +817 -0
- sage/monoids/string_monoid_element.py +547 -0
- sage/monoids/string_ops.py +143 -0
- sage/monoids/trace_monoid.py +972 -0
- sage/rings/all__sagemath_combinat.py +2 -0
- sage/sat/all.py +4 -0
- sage/sat/boolean_polynomials.py +405 -0
- sage/sat/converters/__init__.py +6 -0
- sage/sat/converters/anf2cnf.py +14 -0
- sage/sat/converters/polybori.py +611 -0
- sage/sat/solvers/__init__.py +5 -0
- sage/sat/solvers/cryptominisat.py +287 -0
- sage/sat/solvers/dimacs.py +783 -0
- sage/sat/solvers/picosat.py +228 -0
- sage/sat/solvers/sat_lp.py +156 -0
- sage/sat/solvers/satsolver.cpython-314-x86_64-linux-musl.so +0 -0
- sage/sat/solvers/satsolver.pxd +3 -0
- sage/sat/solvers/satsolver.pyx +405 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Associated Graded Algebras To Filtered Algebras
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2014-10-08): Initial version
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2014 Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
# https://www.gnu.org/licenses/
|
|
16
|
+
# ****************************************************************************
|
|
17
|
+
|
|
18
|
+
from sage.misc.cachefunc import cached_method
|
|
19
|
+
from copy import copy
|
|
20
|
+
|
|
21
|
+
from sage.categories.modules_with_basis import ModulesWithBasis
|
|
22
|
+
from sage.sets.family import Family
|
|
23
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AssociatedGradedAlgebra(CombinatorialFreeModule):
|
|
27
|
+
r"""
|
|
28
|
+
The associated graded algebra/module `\operatorname{gr} A`
|
|
29
|
+
of a filtered algebra/module with basis `A`.
|
|
30
|
+
|
|
31
|
+
Let `A` be a filtered module over a commutative ring `R`.
|
|
32
|
+
Let `(F_i)_{i \in I}` be the filtration of `A`, with `I` being
|
|
33
|
+
a totally ordered set. Define
|
|
34
|
+
|
|
35
|
+
.. MATH::
|
|
36
|
+
|
|
37
|
+
G_i = F_i / \sum_{j < i} F_j
|
|
38
|
+
|
|
39
|
+
for every `i \in I`, and then
|
|
40
|
+
|
|
41
|
+
.. MATH::
|
|
42
|
+
|
|
43
|
+
\operatorname{gr} A = \bigoplus_{i \in I} G_i.
|
|
44
|
+
|
|
45
|
+
There are canonical projections `p_i : F_i \to G_i` for
|
|
46
|
+
every `i \in I`. Moreover `\operatorname{gr} A` is naturally a
|
|
47
|
+
graded `R`-module with `G_i` being the `i`-th graded component.
|
|
48
|
+
This graded `R`-module is known as the *associated graded module*
|
|
49
|
+
(or, for short, just *graded module*) of `A`.
|
|
50
|
+
|
|
51
|
+
Now, assume that `A` (endowed with the filtration
|
|
52
|
+
`(F_i)_{i \in I}`) is not just a filtered `R`-module, but also
|
|
53
|
+
a filtered `R`-algebra.
|
|
54
|
+
Let `u \in G_i` and `v \in G_j`, and let `u' \in F_i` and
|
|
55
|
+
`v' \in F_j` be lifts of `u` and `v`, respectively (so that
|
|
56
|
+
`u = p_i(u')` and `v = p_j(v')`). Then, we define a
|
|
57
|
+
multiplication `*` on `\operatorname{gr} A` (not to be mistaken
|
|
58
|
+
for the multiplication of the original algebra `A`) by
|
|
59
|
+
|
|
60
|
+
.. MATH::
|
|
61
|
+
|
|
62
|
+
u * v = p_{i+j} (u' v').
|
|
63
|
+
|
|
64
|
+
The *associated graded algebra* (or, for short, just
|
|
65
|
+
*graded algebra*) of `A` is the graded algebra
|
|
66
|
+
`\operatorname{gr} A` (endowed with this multiplication).
|
|
67
|
+
|
|
68
|
+
Now, assume that `A` is a filtered `R`-algebra with basis.
|
|
69
|
+
Let `(b_x)_{x \in X}` be the basis of `A`,
|
|
70
|
+
and consider the partition `X = \bigsqcup_{i \in I} X_i` of
|
|
71
|
+
the set `X`, which is part of the data of a filtered
|
|
72
|
+
algebra with basis. We know (see
|
|
73
|
+
:class:`~sage.categories.filtered_modules_with_basis.FilteredModulesWithBasis`)
|
|
74
|
+
that `A` (being a filtered `R`-module with basis) is canonically
|
|
75
|
+
(when the basis is considered to be part of the data)
|
|
76
|
+
isomorphic to `\operatorname{gr} A` as an `R`-module. Therefore
|
|
77
|
+
the `k`-th graded component `G_k` can be identified with
|
|
78
|
+
the span of `(b_x)_{x \in X_k}`, or equivalently the
|
|
79
|
+
`k`-th homogeneous component of `A`. Suppose
|
|
80
|
+
that `u' v' = \sum_{k \leq i+j} m_k` where `m_k \in G_k` (which
|
|
81
|
+
has been identified with the `k`-th homogeneous component of `A`).
|
|
82
|
+
Then `u * v = m_{i+j}`. We also note that the choice of
|
|
83
|
+
identification of `G_k` with the `k`-th homogeneous component
|
|
84
|
+
of `A` depends on the given basis.
|
|
85
|
+
|
|
86
|
+
The basis `(b_x)_{x \in X}` of `A` gives rise to a basis
|
|
87
|
+
of `\operatorname{gr} A`. This latter basis is still indexed
|
|
88
|
+
by the elements of `X`, and consists of the images of the
|
|
89
|
+
`b_x` under the `R`-module isomorphism from `A` to
|
|
90
|
+
`\operatorname{gr} A`. It makes `\operatorname{gr} A` into
|
|
91
|
+
a graded `R`-algebra with basis.
|
|
92
|
+
|
|
93
|
+
In this class, the `R`-module isomorphism from `A` to
|
|
94
|
+
`\operatorname{gr} A` is implemented as
|
|
95
|
+
:meth:`to_graded_conversion` and also as the default
|
|
96
|
+
conversion from `A` to `\operatorname{gr} A`. Its
|
|
97
|
+
inverse map is implemented as
|
|
98
|
+
:meth:`from_graded_conversion`.
|
|
99
|
+
The projection `p_i : F_i \to G_i` is implemented as
|
|
100
|
+
:meth:`projection` ``(i)``.
|
|
101
|
+
|
|
102
|
+
INPUT:
|
|
103
|
+
|
|
104
|
+
- ``A`` -- a filtered module (or algebra) with basis
|
|
105
|
+
|
|
106
|
+
OUTPUT:
|
|
107
|
+
|
|
108
|
+
The associated graded module of `A`, if `A` is just a filtered
|
|
109
|
+
`R`-module.
|
|
110
|
+
The associated graded algebra of `A`, if `A` is a filtered
|
|
111
|
+
`R`-algebra.
|
|
112
|
+
|
|
113
|
+
EXAMPLES:
|
|
114
|
+
|
|
115
|
+
Associated graded module of a filtered module::
|
|
116
|
+
|
|
117
|
+
sage: A = Modules(QQ).WithBasis().Filtered().example()
|
|
118
|
+
sage: grA = A.graded_algebra()
|
|
119
|
+
sage: grA.category()
|
|
120
|
+
Category of graded vector spaces with basis over Rational Field
|
|
121
|
+
sage: x = A.basis()[Partition([3,2,1])]
|
|
122
|
+
sage: grA(x)
|
|
123
|
+
Bbar[[3, 2, 1]]
|
|
124
|
+
|
|
125
|
+
Associated graded algebra of a filtered algebra::
|
|
126
|
+
|
|
127
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
128
|
+
sage: grA = A.graded_algebra()
|
|
129
|
+
sage: grA.category()
|
|
130
|
+
Category of graded algebras with basis over Rational Field
|
|
131
|
+
sage: x,y,z = [grA.algebra_generators()[s] for s in ['x','y','z']]
|
|
132
|
+
sage: x
|
|
133
|
+
bar(U['x'])
|
|
134
|
+
sage: y * x + z
|
|
135
|
+
bar(U['x']*U['y']) + bar(U['z'])
|
|
136
|
+
sage: A(y) * A(x) + A(z)
|
|
137
|
+
U['x']*U['y']
|
|
138
|
+
|
|
139
|
+
We note that the conversion between ``A`` and ``grA`` is
|
|
140
|
+
the canonical ``QQ``-module isomorphism stemming from the
|
|
141
|
+
fact that the underlying ``QQ``-modules of ``A`` and
|
|
142
|
+
``grA`` are isomorphic::
|
|
143
|
+
|
|
144
|
+
sage: grA(A.an_element())
|
|
145
|
+
bar(U['x']^2*U['y']^2*U['z']^3) + 2*bar(U['x']) + 3*bar(U['y']) + bar(1)
|
|
146
|
+
sage: elt = A.an_element() + A.algebra_generators()['x'] + 2
|
|
147
|
+
sage: grelt = grA(elt); grelt
|
|
148
|
+
bar(U['x']^2*U['y']^2*U['z']^3) + 3*bar(U['x']) + 3*bar(U['y']) + 3*bar(1)
|
|
149
|
+
sage: A(grelt) == elt
|
|
150
|
+
True
|
|
151
|
+
|
|
152
|
+
.. TODO::
|
|
153
|
+
|
|
154
|
+
The algebra ``A`` must currently be an instance of (a subclass of)
|
|
155
|
+
:class:`CombinatorialFreeModule`. This should work with any
|
|
156
|
+
filtered algebra with a basis.
|
|
157
|
+
|
|
158
|
+
.. TODO::
|
|
159
|
+
|
|
160
|
+
Implement a version of associated graded algebra for
|
|
161
|
+
filtered algebras without a distinguished basis.
|
|
162
|
+
|
|
163
|
+
REFERENCES:
|
|
164
|
+
|
|
165
|
+
- :wikipedia:`Filtered_algebra#Associated_graded_algebra`
|
|
166
|
+
"""
|
|
167
|
+
def __init__(self, A, category=None):
|
|
168
|
+
"""
|
|
169
|
+
Initialize ``self``.
|
|
170
|
+
|
|
171
|
+
EXAMPLES::
|
|
172
|
+
|
|
173
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
174
|
+
sage: grA = A.graded_algebra()
|
|
175
|
+
sage: TestSuite(grA).run(elements=[prod(grA.algebra_generators())])
|
|
176
|
+
"""
|
|
177
|
+
if A not in ModulesWithBasis(A.base_ring().category()).Filtered():
|
|
178
|
+
raise ValueError("the base algebra must be filtered and with basis")
|
|
179
|
+
self._A = A
|
|
180
|
+
|
|
181
|
+
base_ring = A.base_ring()
|
|
182
|
+
base_one = base_ring.one()
|
|
183
|
+
|
|
184
|
+
category = A.category().Graded().or_subcategory(category)
|
|
185
|
+
try:
|
|
186
|
+
opts = copy(A.print_options())
|
|
187
|
+
if not opts['prefix'] and not opts['bracket']:
|
|
188
|
+
opts['bracket'] = '('
|
|
189
|
+
opts['prefix'] = opts['prefix'] + 'bar'
|
|
190
|
+
except AttributeError:
|
|
191
|
+
opts = {'prefix': 'Abar'}
|
|
192
|
+
|
|
193
|
+
CombinatorialFreeModule.__init__(self, base_ring, A.basis().keys(),
|
|
194
|
+
category=category, **opts)
|
|
195
|
+
|
|
196
|
+
# Setup the conversion back
|
|
197
|
+
phi = self.module_morphism(diagonal=lambda x: base_one, codomain=A)
|
|
198
|
+
self._A.register_conversion(phi)
|
|
199
|
+
|
|
200
|
+
def _repr_(self):
|
|
201
|
+
"""
|
|
202
|
+
Return a string representation of ``self``.
|
|
203
|
+
|
|
204
|
+
EXAMPLES::
|
|
205
|
+
|
|
206
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
207
|
+
sage: A.graded_algebra()
|
|
208
|
+
Graded Algebra of An example of a filtered algebra with basis:
|
|
209
|
+
the universal enveloping algebra of Lie algebra of RR^3
|
|
210
|
+
with cross product over Rational Field
|
|
211
|
+
"""
|
|
212
|
+
from sage.categories.algebras_with_basis import AlgebrasWithBasis
|
|
213
|
+
if self in AlgebrasWithBasis:
|
|
214
|
+
return "Graded Algebra of {}".format(self._A)
|
|
215
|
+
return "Graded Module of {}".format(self._A)
|
|
216
|
+
|
|
217
|
+
def _latex_(self):
|
|
218
|
+
r"""
|
|
219
|
+
Return a latex representation of ``self``.
|
|
220
|
+
|
|
221
|
+
EXAMPLES::
|
|
222
|
+
|
|
223
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
224
|
+
sage: latex(A.graded_algebra())
|
|
225
|
+
\operatorname{gr} ...
|
|
226
|
+
"""
|
|
227
|
+
from sage.misc.latex import latex
|
|
228
|
+
return "\\operatorname{gr} " + latex(self._A)
|
|
229
|
+
|
|
230
|
+
def _element_constructor_(self, x):
|
|
231
|
+
r"""
|
|
232
|
+
Construct an element of ``self`` from ``x``.
|
|
233
|
+
|
|
234
|
+
If ``self`` `= \operatorname{gr} A` for a filtered algebra
|
|
235
|
+
`A` with basis, and if ``x`` is an element of `A`, then
|
|
236
|
+
this returns the image of `x` under the canonical `R`-module
|
|
237
|
+
isomorphism `A \to \operatorname{gr} A`. (In this case,
|
|
238
|
+
this is equivalent to calling
|
|
239
|
+
``self.to_graded_conversion()(x)``.)
|
|
240
|
+
|
|
241
|
+
EXAMPLES::
|
|
242
|
+
|
|
243
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
244
|
+
sage: grA = A.graded_algebra()
|
|
245
|
+
sage: grA(A.an_element())
|
|
246
|
+
bar(U['x']^2*U['y']^2*U['z']^3)
|
|
247
|
+
+ 2*bar(U['x']) + 3*bar(U['y']) + bar(1)
|
|
248
|
+
sage: grA(A.an_element() + A.algebra_generators()['x'] + 2)
|
|
249
|
+
bar(U['x']^2*U['y']^2*U['z']^3)
|
|
250
|
+
+ 3*bar(U['x']) + 3*bar(U['y']) + 3*bar(1)
|
|
251
|
+
"""
|
|
252
|
+
if isinstance(x, CombinatorialFreeModule.Element):
|
|
253
|
+
if x.parent() is self._A:
|
|
254
|
+
return self._from_dict(dict(x))
|
|
255
|
+
return super()._element_constructor_(x)
|
|
256
|
+
|
|
257
|
+
def gen(self, *args, **kwds):
|
|
258
|
+
"""
|
|
259
|
+
Return a generator of ``self``.
|
|
260
|
+
|
|
261
|
+
EXAMPLES::
|
|
262
|
+
|
|
263
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
264
|
+
sage: grA = A.graded_algebra()
|
|
265
|
+
sage: grA.gen('x')
|
|
266
|
+
bar(U['x'])
|
|
267
|
+
"""
|
|
268
|
+
try:
|
|
269
|
+
x = self._A.gen(*args, **kwds)
|
|
270
|
+
except AttributeError:
|
|
271
|
+
x = self._A.algebra_generators()[args[0]]
|
|
272
|
+
return self(x)
|
|
273
|
+
|
|
274
|
+
@cached_method
|
|
275
|
+
def algebra_generators(self):
|
|
276
|
+
"""
|
|
277
|
+
Return the algebra generators of ``self``.
|
|
278
|
+
|
|
279
|
+
This assumes that the algebra generators of `A` provided by
|
|
280
|
+
its ``algebra_generators`` method are homogeneous.
|
|
281
|
+
|
|
282
|
+
EXAMPLES::
|
|
283
|
+
|
|
284
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
285
|
+
sage: grA = A.graded_algebra()
|
|
286
|
+
sage: grA.algebra_generators()
|
|
287
|
+
Finite family {'x': bar(U['x']), 'y': bar(U['y']), 'z': bar(U['z'])}
|
|
288
|
+
"""
|
|
289
|
+
G = self._A.algebra_generators()
|
|
290
|
+
return Family(G.keys(), lambda x: self(G[x]), name='generator')
|
|
291
|
+
|
|
292
|
+
def degree_on_basis(self, x):
|
|
293
|
+
"""
|
|
294
|
+
Return the degree of the basis element indexed by ``x``.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
299
|
+
sage: grA = A.graded_algebra()
|
|
300
|
+
sage: all(A.degree_on_basis(x) == grA.degree_on_basis(x)
|
|
301
|
+
....: for g in grA.algebra_generators() for x in g.support())
|
|
302
|
+
True
|
|
303
|
+
"""
|
|
304
|
+
return self._A.degree_on_basis(x)
|
|
305
|
+
|
|
306
|
+
@cached_method
|
|
307
|
+
def one_basis(self):
|
|
308
|
+
r"""
|
|
309
|
+
Return the basis index of the element `1` of
|
|
310
|
+
`\operatorname{gr} A`.
|
|
311
|
+
|
|
312
|
+
This assumes that the unity `1` of `A` belongs to `F_0`.
|
|
313
|
+
|
|
314
|
+
EXAMPLES::
|
|
315
|
+
|
|
316
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
317
|
+
sage: grA = A.graded_algebra()
|
|
318
|
+
sage: grA.one_basis()
|
|
319
|
+
1
|
|
320
|
+
"""
|
|
321
|
+
return self._A.one_basis()
|
|
322
|
+
|
|
323
|
+
def product_on_basis(self, x, y):
|
|
324
|
+
"""
|
|
325
|
+
Return the product on basis elements given by the
|
|
326
|
+
indices ``x`` and ``y``.
|
|
327
|
+
|
|
328
|
+
EXAMPLES::
|
|
329
|
+
|
|
330
|
+
sage: A = Algebras(QQ).WithBasis().Filtered().example()
|
|
331
|
+
sage: grA = A.graded_algebra()
|
|
332
|
+
sage: G = grA.algebra_generators()
|
|
333
|
+
sage: x,y,z = G['x'], G['y'], G['z']
|
|
334
|
+
sage: x * y # indirect doctest
|
|
335
|
+
bar(U['x']*U['y'])
|
|
336
|
+
sage: y * x
|
|
337
|
+
bar(U['x']*U['y'])
|
|
338
|
+
sage: z * y * x
|
|
339
|
+
bar(U['x']*U['y']*U['z'])
|
|
340
|
+
"""
|
|
341
|
+
ret = self._A.product_on_basis(x, y)
|
|
342
|
+
deg = self._A.degree_on_basis(x) + self._A.degree_on_basis(y)
|
|
343
|
+
return self.sum_of_terms([(i,c) for i,c in ret
|
|
344
|
+
if self._A.degree_on_basis(i) == deg],
|
|
345
|
+
distinct=True)
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Cellular Basis
|
|
5
|
+
==============
|
|
6
|
+
|
|
7
|
+
Cellular algebras are a class of algebras introduced by Graham and Lehrer
|
|
8
|
+
[GrLe1996]_. The :class:`CellularBasis` class provides a general framework for
|
|
9
|
+
implementing cellular algebras and their cell modules and simple modules.
|
|
10
|
+
|
|
11
|
+
Let `R` be a commutative ring. A `R`-algebra `A` is a *cellular algebra*
|
|
12
|
+
if it has a *cell datum*, which is a tuple `(\Lambda, i, M, C)`,
|
|
13
|
+
where `\Lambda` is finite poset with order `\ge`, if `\mu \in \Lambda`
|
|
14
|
+
then `T(\mu)` is a finite set and
|
|
15
|
+
|
|
16
|
+
.. MATH::
|
|
17
|
+
|
|
18
|
+
C \colon \coprod_{\mu \in \Lambda} T(\mu) \times T(\mu)
|
|
19
|
+
\longrightarrow A; (\mu,s,t) \mapsto c^\mu_{st}
|
|
20
|
+
\text{ is an injective map}
|
|
21
|
+
|
|
22
|
+
such that the following holds:
|
|
23
|
+
|
|
24
|
+
* The set `\{c^\mu_{st}\mid \mu\in\Lambda, s,t\in T(\mu)\}` is a basis of `A`.
|
|
25
|
+
* If `a \in A` and `\mu\in\Lambda, s,t \in T(\mu)` then:
|
|
26
|
+
|
|
27
|
+
.. MATH::
|
|
28
|
+
|
|
29
|
+
a c^\mu_{st} = \sum_{u\in T(\mu)} r_a(s,u) c^\mu_{ut} \pmod{A^{>\mu}},
|
|
30
|
+
|
|
31
|
+
where `A^{>\mu}` is spanned by
|
|
32
|
+
|
|
33
|
+
.. MATH::
|
|
34
|
+
|
|
35
|
+
`\{c^\nu_{ab} | \nu > \mu\text{ and } a,b \in T(\nu)\}`.
|
|
36
|
+
|
|
37
|
+
Moreover, the scalar `r_a(s,u)` depends only on `a`, `s` and
|
|
38
|
+
`u` and, in particular, is independent of `t`.
|
|
39
|
+
|
|
40
|
+
* The map `\iota \colon A \longrightarrow A; c^\mu_{st} \mapsto c^\mu_{ts}`
|
|
41
|
+
is an algebra anti-isomorphism.
|
|
42
|
+
|
|
43
|
+
A *cellular basis* for `A` is any basis of the form
|
|
44
|
+
`\{c^\mu_{st} \mid \mu \in \Lambda, s,t \in T(\mu) \}`.
|
|
45
|
+
|
|
46
|
+
Note that the scalars `r_a(s,u) \in R` depend only if `a`, `s` and `u` and,
|
|
47
|
+
in particular, they do not depend on `t`. It follows from the definition of
|
|
48
|
+
a cell datum that `A^{>\mu}` is a two-sided ideal of `A`. More importantly,
|
|
49
|
+
if `\mu \in \Lambda` then the
|
|
50
|
+
:class:`~sage.modules.with_basis.cell_module.CellModule` `C^\mu` is the
|
|
51
|
+
free `R`-module with basis `\{c^\mu_s \mid \mu \in \Lambda, s \in T(\mu)\}`
|
|
52
|
+
and with `A`-action:
|
|
53
|
+
|
|
54
|
+
.. MATH::
|
|
55
|
+
|
|
56
|
+
a c^\mu_{s} = \sum_{u \in T(\mu)} r_a(s,u) c^\mu_{u},
|
|
57
|
+
|
|
58
|
+
where the scalars `r_a(s,u)` are those appearing in the definition of the cell
|
|
59
|
+
datum. It follows from the cellular basis axioms that `C^\mu` comes
|
|
60
|
+
equipped with a bilinear form `\langle\ ,\ \rangle` that is determined by:
|
|
61
|
+
|
|
62
|
+
.. MATH::
|
|
63
|
+
|
|
64
|
+
c^\mu_{st} c^\mu_u = \langle c^\mu_{s}, c^\mu_t \rangle c^\mu_u.
|
|
65
|
+
|
|
66
|
+
The *radical* of `C^\mu` is the `A`-submodule
|
|
67
|
+
`\operatorname{rad} C^\mu = \{x \in C^\mu | \langle x,y \rangle = 0 \}`.
|
|
68
|
+
Hence, `D^\mu = C^\mu / \operatorname{rad} C^\mu` is also an `A`-module.
|
|
69
|
+
It is not difficult to show that `\{ D^\mu \mid D^\mu \neq 0 \}` is a
|
|
70
|
+
complete set of pairwise non-isomorphic `A`-modules. Hence, a cell datum for
|
|
71
|
+
`A` gives an explicit construction of the irreducible `A`-modules. The module
|
|
72
|
+
:meth:`~sage.modules.with_basis.cell_module.CellModule.simple_module()`
|
|
73
|
+
`D^\mu` is either zero or absolutely irreducible.
|
|
74
|
+
|
|
75
|
+
EXAMPLES:
|
|
76
|
+
|
|
77
|
+
We compute a cellular basis and do some basic computations::
|
|
78
|
+
|
|
79
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
80
|
+
sage: C = S.cellular_basis()
|
|
81
|
+
sage: C
|
|
82
|
+
Cellular basis of Symmetric group algebra of order 3
|
|
83
|
+
over Rational Field
|
|
84
|
+
|
|
85
|
+
.. SEEALSO::
|
|
86
|
+
|
|
87
|
+
:class:`~sage.modules.with_basis.cell_module.CellModule`
|
|
88
|
+
|
|
89
|
+
AUTHOR:
|
|
90
|
+
|
|
91
|
+
- Travis Scrimshaw (2015-11-5): Initial version
|
|
92
|
+
|
|
93
|
+
REFERENCES:
|
|
94
|
+
|
|
95
|
+
- [GrLe1996]_
|
|
96
|
+
- [KX1998]_
|
|
97
|
+
- [Mat1999]_
|
|
98
|
+
- :wikipedia:`Cellular_algebra`
|
|
99
|
+
- http://webusers.imj-prg.fr/~bernhard.keller/ictp2006/lecturenotes/xi.pdf
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
# ****************************************************************************
|
|
103
|
+
# Copyright (C) 2015-2018 Travis Scrimshaw <tcscrims at gmail.com>
|
|
104
|
+
#
|
|
105
|
+
# This program is free software: you can redistribute it and/or modify
|
|
106
|
+
# it under the terms of the GNU General Public License as published by
|
|
107
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
108
|
+
# (at your option) any later version.
|
|
109
|
+
# https://www.gnu.org/licenses/
|
|
110
|
+
# ****************************************************************************
|
|
111
|
+
|
|
112
|
+
try:
|
|
113
|
+
from typing import Self # type: ignore (Python >= 3.11)
|
|
114
|
+
except ImportError:
|
|
115
|
+
from typing_extensions import Self # type: ignore (Python 3.10)
|
|
116
|
+
|
|
117
|
+
from sage.categories.algebras import Algebras
|
|
118
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
119
|
+
from sage.misc.cachefunc import cached_method
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class CellularBasis(CombinatorialFreeModule):
|
|
123
|
+
r"""
|
|
124
|
+
The cellular basis of a cellular algebra, in the sense of
|
|
125
|
+
Graham and Lehrer [GrLe1996]_.
|
|
126
|
+
|
|
127
|
+
INPUT:
|
|
128
|
+
|
|
129
|
+
- ``A`` -- the cellular algebra
|
|
130
|
+
|
|
131
|
+
EXAMPLES:
|
|
132
|
+
|
|
133
|
+
We compute a cellular basis and do some basic computations::
|
|
134
|
+
|
|
135
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
136
|
+
sage: C = S.cellular_basis()
|
|
137
|
+
sage: C
|
|
138
|
+
Cellular basis of Symmetric group algebra of order 3
|
|
139
|
+
over Rational Field
|
|
140
|
+
sage: len(C.basis())
|
|
141
|
+
6
|
|
142
|
+
sage: len(S.basis())
|
|
143
|
+
6
|
|
144
|
+
sage: a,b,c,d,e,f = C.basis()
|
|
145
|
+
sage: f
|
|
146
|
+
C([3], [[1, 2, 3]], [[1, 2, 3]])
|
|
147
|
+
sage: c
|
|
148
|
+
C([2, 1], [[1, 3], [2]], [[1, 2], [3]])
|
|
149
|
+
sage: d
|
|
150
|
+
C([2, 1], [[1, 2], [3]], [[1, 3], [2]])
|
|
151
|
+
sage: f * f
|
|
152
|
+
C([3], [[1, 2, 3]], [[1, 2, 3]])
|
|
153
|
+
sage: f * c
|
|
154
|
+
0
|
|
155
|
+
sage: d * c
|
|
156
|
+
C([2, 1], [[1, 2], [3]], [[1, 2], [3]])
|
|
157
|
+
sage: c * d
|
|
158
|
+
C([2, 1], [[1, 3], [2]], [[1, 3], [2]])
|
|
159
|
+
sage: S(f)
|
|
160
|
+
1/6*[1, 2, 3] + 1/6*[1, 3, 2] + 1/6*[2, 1, 3] + 1/6*[2, 3, 1]
|
|
161
|
+
+ 1/6*[3, 1, 2] + 1/6*[3, 2, 1]
|
|
162
|
+
sage: S(d)
|
|
163
|
+
1/4*[1, 3, 2] - 1/4*[2, 3, 1] + 1/4*[3, 1, 2] - 1/4*[3, 2, 1]
|
|
164
|
+
sage: B = list(S.basis())
|
|
165
|
+
sage: B[2]
|
|
166
|
+
[2, 1, 3]
|
|
167
|
+
sage: C(B[2])
|
|
168
|
+
-C([1, 1, 1], [[1], [2], [3]], [[1], [2], [3]])
|
|
169
|
+
+ C([2, 1], [[1, 2], [3]], [[1, 2], [3]])
|
|
170
|
+
- C([2, 1], [[1, 3], [2]], [[1, 3], [2]])
|
|
171
|
+
+ C([3], [[1, 2, 3]], [[1, 2, 3]])
|
|
172
|
+
"""
|
|
173
|
+
def __init__(self, A, to_algebra=None, from_algebra=None, **kwargs):
|
|
174
|
+
r"""
|
|
175
|
+
Initialize ``self``.
|
|
176
|
+
|
|
177
|
+
EXAMPLES::
|
|
178
|
+
|
|
179
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
180
|
+
sage: C = S.cellular_basis()
|
|
181
|
+
sage: TestSuite(C).run()
|
|
182
|
+
"""
|
|
183
|
+
self._algebra = A
|
|
184
|
+
I = [(la, s, t) for la in A.cell_poset()
|
|
185
|
+
for s in A.cell_module_indices(la)
|
|
186
|
+
for t in A.cell_module_indices(la)]
|
|
187
|
+
|
|
188
|
+
# TODO: Use instead A.category().Realizations() so
|
|
189
|
+
# operations are defined by coercion?
|
|
190
|
+
prefix = kwargs.pop('prefix', 'C')
|
|
191
|
+
cat = Algebras(A.category().base_ring()).FiniteDimensional().WithBasis().Cellular()
|
|
192
|
+
CombinatorialFreeModule.__init__(self, A.base_ring(), I,
|
|
193
|
+
prefix=prefix, bracket=False,
|
|
194
|
+
category=cat, **kwargs)
|
|
195
|
+
|
|
196
|
+
# Register coercions
|
|
197
|
+
if from_algebra is None:
|
|
198
|
+
from_algebra = A._to_cellular_element
|
|
199
|
+
if to_algebra is None:
|
|
200
|
+
to_algebra = A._from_cellular_index
|
|
201
|
+
if from_algebra is not NotImplemented:
|
|
202
|
+
to_cellular = A.module_morphism(from_algebra, codomain=self,
|
|
203
|
+
category=cat)
|
|
204
|
+
if to_algebra is NotImplemented:
|
|
205
|
+
from_cellular = ~to_cellular
|
|
206
|
+
else:
|
|
207
|
+
from_cellular = self.module_morphism(to_algebra, codomain=A,
|
|
208
|
+
category=cat)
|
|
209
|
+
if from_algebra is NotImplemented:
|
|
210
|
+
to_cellular = ~from_cellular
|
|
211
|
+
to_cellular.register_as_coercion()
|
|
212
|
+
from_cellular.register_as_coercion()
|
|
213
|
+
|
|
214
|
+
def _repr_(self):
|
|
215
|
+
r"""
|
|
216
|
+
String representation of ``self``.
|
|
217
|
+
|
|
218
|
+
EXAMPLES::
|
|
219
|
+
|
|
220
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
221
|
+
sage: S.cellular_basis()
|
|
222
|
+
Cellular basis of Symmetric group algebra of order 3 over Rational Field
|
|
223
|
+
"""
|
|
224
|
+
return "Cellular basis of {}".format(self._algebra)
|
|
225
|
+
|
|
226
|
+
def _latex_term(self, x):
|
|
227
|
+
r"""
|
|
228
|
+
Return a latex representation of the term indexed by ``x``.
|
|
229
|
+
|
|
230
|
+
EXAMPLES::
|
|
231
|
+
|
|
232
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
233
|
+
sage: C = S.cellular_basis()
|
|
234
|
+
sage: s = Tableau([[1,2],[3]])
|
|
235
|
+
sage: C._latex_term((Partition([2,1]), s, s))
|
|
236
|
+
'C^{...}_{\\left(...\\right)}'
|
|
237
|
+
"""
|
|
238
|
+
from sage.misc.latex import latex
|
|
239
|
+
la = x[0]
|
|
240
|
+
m = (x[1], x[2])
|
|
241
|
+
# m contains "non-LaTeXed" strings, use string representation
|
|
242
|
+
sla = latex(la)
|
|
243
|
+
if sla.find('\\text{\\textt') != -1:
|
|
244
|
+
sla = str(la)
|
|
245
|
+
sm = latex(m)
|
|
246
|
+
if sm.find('\\text{\\textt') != -1:
|
|
247
|
+
sm = str(m)
|
|
248
|
+
return "C^{%s}_{%s}" % (sla, sm)
|
|
249
|
+
|
|
250
|
+
def cellular_basis_of(self):
|
|
251
|
+
"""
|
|
252
|
+
Return the defining algebra of ``self``.
|
|
253
|
+
|
|
254
|
+
EXAMPLES::
|
|
255
|
+
|
|
256
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
257
|
+
sage: C = S.cellular_basis()
|
|
258
|
+
sage: C.cellular_basis_of() is S
|
|
259
|
+
True
|
|
260
|
+
"""
|
|
261
|
+
return self._algebra
|
|
262
|
+
|
|
263
|
+
def cell_poset(self):
|
|
264
|
+
"""
|
|
265
|
+
Return the cell poset of ``self``.
|
|
266
|
+
|
|
267
|
+
EXAMPLES::
|
|
268
|
+
|
|
269
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
270
|
+
sage: C = S.cellular_basis()
|
|
271
|
+
sage: C.cell_poset()
|
|
272
|
+
Finite poset containing 3 elements
|
|
273
|
+
"""
|
|
274
|
+
return self._algebra.cell_poset()
|
|
275
|
+
|
|
276
|
+
def cell_module_indices(self, la):
|
|
277
|
+
r"""
|
|
278
|
+
Return the indices of the cell module of ``self``
|
|
279
|
+
indexed by ``la`` .
|
|
280
|
+
|
|
281
|
+
This is the finite set `M(\lambda)`.
|
|
282
|
+
|
|
283
|
+
EXAMPLES::
|
|
284
|
+
|
|
285
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
286
|
+
sage: C = S.cellular_basis()
|
|
287
|
+
sage: C.cell_module_indices([2,1])
|
|
288
|
+
Standard tableaux of shape [2, 1]
|
|
289
|
+
"""
|
|
290
|
+
return self._algebra.cell_module_indices(la)
|
|
291
|
+
|
|
292
|
+
def cellular_basis(self) -> Self:
|
|
293
|
+
"""
|
|
294
|
+
Return the cellular basis of ``self``, which is ``self``.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
299
|
+
sage: C = S.cellular_basis()
|
|
300
|
+
sage: C.cellular_basis() is C
|
|
301
|
+
True
|
|
302
|
+
"""
|
|
303
|
+
return self
|
|
304
|
+
|
|
305
|
+
@cached_method
|
|
306
|
+
def one(self):
|
|
307
|
+
"""
|
|
308
|
+
Return the element `1` in ``self``.
|
|
309
|
+
|
|
310
|
+
EXAMPLES::
|
|
311
|
+
|
|
312
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
313
|
+
sage: C = S.cellular_basis()
|
|
314
|
+
sage: C.one()
|
|
315
|
+
C([1, 1, 1], [[1], [2], [3]], [[1], [2], [3]])
|
|
316
|
+
+ C([2, 1], [[1, 2], [3]], [[1, 2], [3]])
|
|
317
|
+
+ C([2, 1], [[1, 3], [2]], [[1, 3], [2]])
|
|
318
|
+
+ C([3], [[1, 2, 3]], [[1, 2, 3]])
|
|
319
|
+
"""
|
|
320
|
+
return self(self._algebra.one())
|
|
321
|
+
|
|
322
|
+
@cached_method
|
|
323
|
+
def product_on_basis(self, x, y):
|
|
324
|
+
"""
|
|
325
|
+
Return the product of basis indices by ``x`` and ``y``.
|
|
326
|
+
|
|
327
|
+
EXAMPLES::
|
|
328
|
+
|
|
329
|
+
sage: S = SymmetricGroupAlgebra(QQ, 3)
|
|
330
|
+
sage: C = S.cellular_basis()
|
|
331
|
+
sage: la = Partition([2,1])
|
|
332
|
+
sage: s = StandardTableau([[1,2],[3]])
|
|
333
|
+
sage: t = StandardTableau([[1,3],[2]])
|
|
334
|
+
sage: C.product_on_basis((la, s, t), (la, s, t))
|
|
335
|
+
0
|
|
336
|
+
|
|
337
|
+
TESTS::
|
|
338
|
+
|
|
339
|
+
sage: C5.<z5> = CyclotomicField(5)
|
|
340
|
+
sage: TL = TemperleyLiebAlgebra(2, z5 + ~z5, C5)
|
|
341
|
+
sage: m = TL.cell_module(0)
|
|
342
|
+
sage: c = m.basis().keys()[0]
|
|
343
|
+
sage: B = TL.cellular_basis()
|
|
344
|
+
sage: B.product_on_basis((0, c, c), (0, c, c))
|
|
345
|
+
(-z5^3-z5^2-1)*C(0, {{1, 2}}, {{1, 2}})
|
|
346
|
+
|
|
347
|
+
sage: p = TL(B.monomial((0,c,c))) * TL(B.monomial((0,c,c)))
|
|
348
|
+
"""
|
|
349
|
+
A = self._algebra
|
|
350
|
+
return self(A(self.monomial(x)) * A(self.monomial(y)))
|