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,1262 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Crystals of modified Nakajima monomials
|
|
5
|
+
|
|
6
|
+
Let `Y_{i,k}`, for `i \in I` and `k \in \ZZ`, be a commuting set of
|
|
7
|
+
variables, and let `\boldsymbol{1}` be a new variable which commutes with
|
|
8
|
+
each `Y_{i,k}`. (Here, `I` represents the index set of a Cartan datum.) One
|
|
9
|
+
may endow the structure of a crystal on the set `\widehat{\mathcal{M}}` of
|
|
10
|
+
monomials of the form
|
|
11
|
+
|
|
12
|
+
.. MATH::
|
|
13
|
+
|
|
14
|
+
M = \prod_{(i,k) \in I\times \ZZ_{\ge0}} Y_{i,k}^{y_i(k)}\boldsymbol{1}.
|
|
15
|
+
|
|
16
|
+
Elements of `\widehat{\mathcal{M}}` are called *modified Nakajima monomials*.
|
|
17
|
+
We will omit the `\boldsymbol{1}` from the end of a monomial if there exists
|
|
18
|
+
at least one `y_i(k) \neq 0`. The crystal structure on this set is defined by
|
|
19
|
+
|
|
20
|
+
.. MATH::
|
|
21
|
+
|
|
22
|
+
\begin{aligned}
|
|
23
|
+
\mathrm{wt}(M) &= \sum_{i\in I} \Bigl( \sum_{k\ge 0} y_i(k) \Bigr) \Lambda_i, \\
|
|
24
|
+
\varphi_i(M) &= \max\Bigl\{ \sum_{0\le j \le k} y_i(j) : k\ge 0 \Bigr\}, \\
|
|
25
|
+
\varepsilon_i(M) &= \varphi_i(M) - \langle h_i, \mathrm{wt}(M) \rangle, \\
|
|
26
|
+
k_f = k_f(M) &= \min\Bigl\{ k\ge 0 : \varphi_i(M) = \sum_{0\le j\le k} y_i(j) \Bigr\}, \\
|
|
27
|
+
k_e = k_e(M) &= \max\Bigl\{ k\ge 0 : \varphi_i(M) = \sum_{0\le j\le k} y_i(j) \Bigr\},
|
|
28
|
+
\end{aligned}
|
|
29
|
+
|
|
30
|
+
where `\{h_i : i \in I\}` and `\{\Lambda_i : i \in I \}` are the simple
|
|
31
|
+
coroots and fundamental weights, respectively. With a chosen set of integers
|
|
32
|
+
`C = (c_{ij})_{i\neq j}` such that `c_{ij}+c_{ji} =1`, one defines
|
|
33
|
+
|
|
34
|
+
.. MATH::
|
|
35
|
+
|
|
36
|
+
A_{i,k} = Y_{i,k} Y_{i,k+1} \prod_{j\neq i} Y_{j,k+c_{ji}}^{a_{ji}},
|
|
37
|
+
|
|
38
|
+
where `(a_{ij})` is a Cartan matrix. Then
|
|
39
|
+
|
|
40
|
+
.. MATH::
|
|
41
|
+
|
|
42
|
+
\begin{aligned}
|
|
43
|
+
e_iM &= \begin{cases} 0 & \text{if } \varepsilon_i(M) = 0, \\
|
|
44
|
+
A_{i,k_e}M & \text{if } \varepsilon_i(M) > 0, \end{cases} \\
|
|
45
|
+
f_iM &= A_{i,k_f}^{-1} M.
|
|
46
|
+
\end{aligned}
|
|
47
|
+
|
|
48
|
+
It is shown in [KKS2007]_ that the connected component of `\widehat{\mathcal{M}}`
|
|
49
|
+
containing the element `\boldsymbol{1}`, which we denote by
|
|
50
|
+
`\mathcal{M}(\infty)`, is crystal isomorphic to the crystal `B(\infty)`.
|
|
51
|
+
|
|
52
|
+
Let `\widetilde{\mathcal{M}}` be `\widehat{\mathcal{M}}` as a set, and with
|
|
53
|
+
crystal structure defined as on `\widehat{\mathcal{M}}` with the exception
|
|
54
|
+
that
|
|
55
|
+
|
|
56
|
+
.. MATH::
|
|
57
|
+
|
|
58
|
+
f_iM = \begin{cases} 0 & \text{if } \varphi_i(M) = 0, \\
|
|
59
|
+
A_{i,k_f}^{-1}M & \text{if } \varphi_i(M) > 0. \end{cases}
|
|
60
|
+
|
|
61
|
+
Then Kashiwara [Ka2003]_ showed that the connected component in
|
|
62
|
+
`\widetilde{\mathcal{M}}` containing a monomial `M` such that `e_iM = 0`, for
|
|
63
|
+
all `i \in I`, is crystal isomorphic to the irreducible highest weight
|
|
64
|
+
crystal `B(\mathrm{wt}(M))`.
|
|
65
|
+
|
|
66
|
+
WARNING:
|
|
67
|
+
|
|
68
|
+
Monomial crystals depend on the choice of positive integers
|
|
69
|
+
`C = (c_{ij})_{i\neq j}` satisfying the condition `c_{ij}+c_{ji}=1`.
|
|
70
|
+
We have chosen such integers uniformly such that `c_{ij} = 1` if
|
|
71
|
+
`i < j` and `c_{ij} = 0` if `i>j`.
|
|
72
|
+
|
|
73
|
+
AUTHORS:
|
|
74
|
+
|
|
75
|
+
- Arthur Lubovsky: initial version
|
|
76
|
+
- Ben Salisbury: initial version
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# *****************************************************************************
|
|
80
|
+
# Copyright (C) 2013
|
|
81
|
+
#
|
|
82
|
+
# Arthur Lubovsky (alubovsky at albany dot edu)
|
|
83
|
+
# Ben Salisbury (ben dot salisbury at cmich dot edu)
|
|
84
|
+
#
|
|
85
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
86
|
+
# https://www.gnu.org/licenses/
|
|
87
|
+
# *****************************************************************************
|
|
88
|
+
|
|
89
|
+
from copy import copy
|
|
90
|
+
from sage.structure.element import Element
|
|
91
|
+
from sage.structure.parent import Parent
|
|
92
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
93
|
+
from sage.categories.classical_crystals import ClassicalCrystals
|
|
94
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
95
|
+
from sage.categories.regular_crystals import RegularCrystals
|
|
96
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
97
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
98
|
+
from sage.combinat.root_system.root_system import RootSystem
|
|
99
|
+
from sage.rings.infinity import Infinity
|
|
100
|
+
from sage.rings.integer_ring import ZZ
|
|
101
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class NakajimaMonomial(Element):
|
|
105
|
+
r"""
|
|
106
|
+
An element of the monomial crystal.
|
|
107
|
+
|
|
108
|
+
Monomials of the form `Y_{i_1,k_1}^{y_1} \cdots Y_{i_t,k_t}^{y_t}`,
|
|
109
|
+
where `i_1, \dots, i_t` are elements of the index set, `k_1, \dots, k_t`
|
|
110
|
+
are nonnegative integers, and `y_1, \dots, y_t` are integers.
|
|
111
|
+
|
|
112
|
+
EXAMPLES::
|
|
113
|
+
|
|
114
|
+
sage: M = crystals.infinity.NakajimaMonomials(['B',3,1])
|
|
115
|
+
sage: mg = M.module_generators[0]
|
|
116
|
+
sage: mg
|
|
117
|
+
1
|
|
118
|
+
sage: mg.f_string([1,3,2,0,1,2,3,0,0,1])
|
|
119
|
+
Y(0,0)^-1 Y(0,1)^-1 Y(0,2)^-1 Y(0,3)^-1 Y(1,0)^-3
|
|
120
|
+
Y(1,1)^-2 Y(1,2) Y(2,0)^3 Y(2,2) Y(3,0) Y(3,2)^-1
|
|
121
|
+
|
|
122
|
+
An example using the `A` variables::
|
|
123
|
+
|
|
124
|
+
sage: M = crystals.infinity.NakajimaMonomials("A3")
|
|
125
|
+
sage: M.set_variables('A')
|
|
126
|
+
sage: mg = M.module_generators[0]
|
|
127
|
+
sage: mg.f_string([1,2,3,2,1])
|
|
128
|
+
A(1,0)^-1 A(1,1)^-1 A(2,0)^-2 A(3,0)^-1
|
|
129
|
+
sage: mg.f_string([3,2,1])
|
|
130
|
+
A(1,2)^-1 A(2,1)^-1 A(3,0)^-1
|
|
131
|
+
sage: M.set_variables('Y')
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
def __init__(self, parent, Y, A):
|
|
135
|
+
r"""
|
|
136
|
+
INPUT:
|
|
137
|
+
|
|
138
|
+
- ``d`` -- dictionary of with pairs of the form ``{(i,k): y}``
|
|
139
|
+
|
|
140
|
+
EXAMPLES::
|
|
141
|
+
|
|
142
|
+
sage: M = crystals.infinity.NakajimaMonomials("C5")
|
|
143
|
+
sage: mg = M.module_generators[0]
|
|
144
|
+
sage: TestSuite(mg).run()
|
|
145
|
+
"""
|
|
146
|
+
self._Y = Y
|
|
147
|
+
self._A = A
|
|
148
|
+
Element.__init__(self, parent)
|
|
149
|
+
|
|
150
|
+
def _repr_(self):
|
|
151
|
+
r"""
|
|
152
|
+
Return a string representation of ``self``.
|
|
153
|
+
|
|
154
|
+
EXAMPLES::
|
|
155
|
+
|
|
156
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A',5,2])
|
|
157
|
+
sage: x = M({(1,0):1, (2,2):-2, (0,5):10}); x
|
|
158
|
+
Y(0,5)^10 Y(1,0) Y(2,2)^-2
|
|
159
|
+
sage: M.set_variables('A')
|
|
160
|
+
sage: x
|
|
161
|
+
A(1,0)^-2 A(1,1)^-2 A(2,0)^-4 A(2,1)^-2 A(3,0)^-2
|
|
162
|
+
sage: M.set_variables('Y')
|
|
163
|
+
"""
|
|
164
|
+
return getattr(self, '_repr_' + self.parent()._variable)()
|
|
165
|
+
|
|
166
|
+
def _repr_Y(self):
|
|
167
|
+
r"""
|
|
168
|
+
Return a string representation of ``self`` in the `Y` variables.
|
|
169
|
+
|
|
170
|
+
EXAMPLES::
|
|
171
|
+
|
|
172
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A',5,2])
|
|
173
|
+
sage: M({(1,0):1,(2,2):-2,(0,5):10})
|
|
174
|
+
Y(0,5)^10 Y(1,0) Y(2,2)^-2
|
|
175
|
+
"""
|
|
176
|
+
if not self._Y:
|
|
177
|
+
return "1"
|
|
178
|
+
|
|
179
|
+
L = sorted(self._Y.items(), key=lambda x: (x[0][0], x[0][1]))
|
|
180
|
+
exp = lambda e: "^{}".format(e) if e != 1 else ""
|
|
181
|
+
return ' '.join("Y({},{})".format(mon[0][0], mon[0][1]) + exp(mon[1])
|
|
182
|
+
for mon in L)
|
|
183
|
+
|
|
184
|
+
def _repr_A(self):
|
|
185
|
+
r"""
|
|
186
|
+
Return a string representation of ``self`` in the `A` variables.
|
|
187
|
+
|
|
188
|
+
EXAMPLES::
|
|
189
|
+
|
|
190
|
+
sage: M = crystals.infinity.NakajimaMonomials(['B',4,1])
|
|
191
|
+
sage: m = M.module_generators[0].f_string([4,2,1])
|
|
192
|
+
sage: m._repr_A()
|
|
193
|
+
'A(1,1)^-1 A(2,0)^-1 A(4,0)^-1'
|
|
194
|
+
"""
|
|
195
|
+
try:
|
|
196
|
+
Y = {(i,0): c for i,c in self.parent().hw}
|
|
197
|
+
except Exception:
|
|
198
|
+
Y = {}
|
|
199
|
+
|
|
200
|
+
if not Y and not self._A:
|
|
201
|
+
return "1"
|
|
202
|
+
|
|
203
|
+
L = sorted(Y.items(), key=lambda x: (x[0][0], x[0][1]))
|
|
204
|
+
exp = lambda e: "^{}".format(e) if e != 1 else ""
|
|
205
|
+
ret = ' '.join("Y({},{})".format(mon[0][0], mon[0][1]) + exp(mon[1])
|
|
206
|
+
for mon in L)
|
|
207
|
+
if not self._A:
|
|
208
|
+
return ret
|
|
209
|
+
if Y:
|
|
210
|
+
ret += ' '
|
|
211
|
+
L = sorted(self._A.items(), key=lambda x: (x[0][0], x[0][1]))
|
|
212
|
+
return ret + ' '.join("A({},{})".format(mon[0][0], mon[0][1]) + exp(mon[1])
|
|
213
|
+
for mon in L)
|
|
214
|
+
|
|
215
|
+
def __hash__(self):
|
|
216
|
+
r"""
|
|
217
|
+
TESTS::
|
|
218
|
+
|
|
219
|
+
sage: M = crystals.infinity.NakajimaMonomials(['C',5])
|
|
220
|
+
sage: m1 = M.module_generators[0].f(1)
|
|
221
|
+
sage: m2 = M.module_generators[0].f(2)
|
|
222
|
+
sage: hash(m1) != hash(m2)
|
|
223
|
+
True
|
|
224
|
+
"""
|
|
225
|
+
return hash(frozenset(tuple(self._Y.items())))
|
|
226
|
+
|
|
227
|
+
def __eq__(self, other):
|
|
228
|
+
r"""
|
|
229
|
+
EXAMPLES::
|
|
230
|
+
|
|
231
|
+
sage: M = crystals.infinity.NakajimaMonomials(['C',5])
|
|
232
|
+
sage: m1 = M.module_generators[0].f(1)
|
|
233
|
+
sage: m2 = M.module_generators[0].f(2)
|
|
234
|
+
sage: m1.__eq__(m2)
|
|
235
|
+
False
|
|
236
|
+
sage: m1.__eq__(m1)
|
|
237
|
+
True
|
|
238
|
+
"""
|
|
239
|
+
if isinstance(other, NakajimaMonomial):
|
|
240
|
+
return self._Y == other._Y
|
|
241
|
+
return self._Y == other
|
|
242
|
+
|
|
243
|
+
def __ne__(self, other):
|
|
244
|
+
r"""
|
|
245
|
+
EXAMPLES::
|
|
246
|
+
|
|
247
|
+
sage: La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
|
|
248
|
+
sage: M = crystals.NakajimaMonomials(['A',2],La[1]+La[2])
|
|
249
|
+
sage: m0 = M.module_generators[0]
|
|
250
|
+
sage: m = M.module_generators[0].f(1).f(2).f(2).f(1)
|
|
251
|
+
sage: m.__ne__(m0)
|
|
252
|
+
True
|
|
253
|
+
sage: m.__ne__(m)
|
|
254
|
+
False
|
|
255
|
+
"""
|
|
256
|
+
return not self == other
|
|
257
|
+
|
|
258
|
+
def __lt__(self, other):
|
|
259
|
+
r"""
|
|
260
|
+
EXAMPLES::
|
|
261
|
+
|
|
262
|
+
sage: M = crystals.infinity.NakajimaMonomials(['F',4])
|
|
263
|
+
sage: mg = M.module_generators[0]
|
|
264
|
+
sage: m = mg.f(4)
|
|
265
|
+
sage: m.__lt__(mg)
|
|
266
|
+
False
|
|
267
|
+
sage: mg.__lt__(m)
|
|
268
|
+
False
|
|
269
|
+
"""
|
|
270
|
+
return False
|
|
271
|
+
|
|
272
|
+
def _latex_(self):
|
|
273
|
+
r"""
|
|
274
|
+
Return a `\LaTeX` representation of ``self``.
|
|
275
|
+
|
|
276
|
+
EXAMPLES::
|
|
277
|
+
|
|
278
|
+
sage: M = crystals.infinity.NakajimaMonomials(['G',2,1])
|
|
279
|
+
sage: x = M.module_generators[0].f_string([1,0,2])
|
|
280
|
+
sage: latex(x)
|
|
281
|
+
Y_{0,0}^{-1} Y_{1,0}^{-1} Y_{1,1}^{2} Y_{2,0} Y_{2,1}^{-1}
|
|
282
|
+
sage: M.set_variables('A')
|
|
283
|
+
sage: latex(x)
|
|
284
|
+
A_{0,0}^{-1} A_{1,0}^{-1} A_{2,0}^{-1}
|
|
285
|
+
sage: M.set_variables('Y')
|
|
286
|
+
"""
|
|
287
|
+
return getattr(self, '_latex_' + self.parent()._variable)()
|
|
288
|
+
|
|
289
|
+
def _latex_Y(self):
|
|
290
|
+
r"""
|
|
291
|
+
Return a `\LaTeX` representation of ``self`` in the `Y` variables.
|
|
292
|
+
|
|
293
|
+
EXAMPLES::
|
|
294
|
+
|
|
295
|
+
sage: M = crystals.infinity.NakajimaMonomials(['G',2,1])
|
|
296
|
+
sage: M.module_generators[0].f_string([1,0,2])._latex_Y()
|
|
297
|
+
'Y_{0,0}^{-1} Y_{1,0}^{-1} Y_{1,1}^{2} Y_{2,0} Y_{2,1}^{-1} '
|
|
298
|
+
"""
|
|
299
|
+
if not self._Y:
|
|
300
|
+
return "\\boldsymbol{1}"
|
|
301
|
+
|
|
302
|
+
L = sorted(self._Y.items(), key=lambda x:(x[0][0],x[0][1]))
|
|
303
|
+
return_str = ''
|
|
304
|
+
for x in L:
|
|
305
|
+
if x[1] != 1:
|
|
306
|
+
return_str += "Y_{%s,%s}" % (x[0][0],x[0][1]) + "^{%s} " % x[1]
|
|
307
|
+
else:
|
|
308
|
+
return_str += "Y_{%s,%s} " % (x[0][0],x[0][1])
|
|
309
|
+
return return_str
|
|
310
|
+
|
|
311
|
+
def _latex_A(self):
|
|
312
|
+
r"""
|
|
313
|
+
Return a `\LaTeX` representation of ``self`` in the `A` variables.
|
|
314
|
+
|
|
315
|
+
EXAMPLES::
|
|
316
|
+
|
|
317
|
+
sage: M = crystals.infinity.NakajimaMonomials(['C',4,1])
|
|
318
|
+
sage: m = M.module_generators[0].f_string([4,2,3])
|
|
319
|
+
sage: m._latex_A()
|
|
320
|
+
'A_{2,0}^{-1} A_{3,1}^{-1} A_{4,0}^{-1} '
|
|
321
|
+
"""
|
|
322
|
+
try:
|
|
323
|
+
Y = {(i,0): c for i,c in self.parent().hw}
|
|
324
|
+
except Exception:
|
|
325
|
+
Y = {}
|
|
326
|
+
|
|
327
|
+
if not Y and not self._A:
|
|
328
|
+
return "\\boldsymbol{1}"
|
|
329
|
+
|
|
330
|
+
L = sorted(Y.items(), key=lambda x:(x[0][0],x[0][1]))
|
|
331
|
+
return_str = ''
|
|
332
|
+
for x in L:
|
|
333
|
+
if x[1] != 1:
|
|
334
|
+
return_str += "Y_{%s,%s}" % (x[0][0],x[0][1]) + "^{%s} " % x[1]
|
|
335
|
+
else:
|
|
336
|
+
return_str += "Y_{%s,%s} " % (x[0][0],x[0][1])
|
|
337
|
+
L = sorted(self._A.items(), key=lambda x:(x[0][0],x[0][1]))
|
|
338
|
+
for x in L:
|
|
339
|
+
if x[1] != 1:
|
|
340
|
+
return_str += "A_{%s,%s}" % (x[0][0],x[0][1]) + "^{%s} " % x[1]
|
|
341
|
+
else:
|
|
342
|
+
return_str += "A_{%s,%s} " % (x[0][0],x[0][1])
|
|
343
|
+
return return_str
|
|
344
|
+
|
|
345
|
+
def _classical_weight(self):
|
|
346
|
+
r"""
|
|
347
|
+
Return the weight of ``self`` as an element of the classical version of
|
|
348
|
+
``self.parent().weight_lattice_realization``.
|
|
349
|
+
|
|
350
|
+
EXAMPLES::
|
|
351
|
+
|
|
352
|
+
sage: M = crystals.infinity.NakajimaMonomials(['D',4,2])
|
|
353
|
+
sage: m = M.module_generators[0].f_string([0,3,2,0,1])
|
|
354
|
+
sage: m._classical_weight()
|
|
355
|
+
-2*Lambda[0] + Lambda[1]
|
|
356
|
+
|
|
357
|
+
sage: M = crystals.infinity.NakajimaMonomials(['E',6])
|
|
358
|
+
sage: m = M.module_generators[0].f_string([1,5,2,6,3])
|
|
359
|
+
sage: m._classical_weight()
|
|
360
|
+
(-1/2, -3/2, 3/2, 1/2, -1/2, 1/2, 1/2, -1/2)
|
|
361
|
+
"""
|
|
362
|
+
P = self.parent().weight_lattice_realization()
|
|
363
|
+
La = P.fundamental_weights()
|
|
364
|
+
return P(sum(v*La[k[0]] for k,v in self._Y.items()))
|
|
365
|
+
|
|
366
|
+
def weight_in_root_lattice(self):
|
|
367
|
+
r"""
|
|
368
|
+
Return the weight of ``self`` as an element of the root lattice.
|
|
369
|
+
|
|
370
|
+
EXAMPLES::
|
|
371
|
+
|
|
372
|
+
sage: M = crystals.infinity.NakajimaMonomials(['F',4])
|
|
373
|
+
sage: m = M.module_generators[0].f_string([3,3,1,2,4])
|
|
374
|
+
sage: m.weight_in_root_lattice()
|
|
375
|
+
-alpha[1] - alpha[2] - 2*alpha[3] - alpha[4]
|
|
376
|
+
|
|
377
|
+
sage: M = crystals.infinity.NakajimaMonomials(['B',3,1])
|
|
378
|
+
sage: mg = M.module_generators[0]
|
|
379
|
+
sage: m = mg.f_string([1,3,2,0,1,2,3,0,0,1])
|
|
380
|
+
sage: m.weight_in_root_lattice()
|
|
381
|
+
-3*alpha[0] - 3*alpha[1] - 2*alpha[2] - 2*alpha[3]
|
|
382
|
+
|
|
383
|
+
sage: M = crystals.infinity.NakajimaMonomials(['C',3,1])
|
|
384
|
+
sage: m = M.module_generators[0].f_string([3,0,1,2,0])
|
|
385
|
+
sage: m.weight_in_root_lattice()
|
|
386
|
+
-2*alpha[0] - alpha[1] - alpha[2] - alpha[3]
|
|
387
|
+
"""
|
|
388
|
+
Q = RootSystem(self.parent().cartan_type()).root_lattice()
|
|
389
|
+
al = Q.simple_roots()
|
|
390
|
+
return Q.sum(e*al[k[0]] for k,e in self._A.items())
|
|
391
|
+
|
|
392
|
+
def weight(self):
|
|
393
|
+
r"""
|
|
394
|
+
Return the weight of ``self`` as an element of the weight lattice.
|
|
395
|
+
|
|
396
|
+
EXAMPLES::
|
|
397
|
+
|
|
398
|
+
sage: C = crystals.infinity.NakajimaMonomials(['A',1,1])
|
|
399
|
+
sage: v = C.highest_weight_vector()
|
|
400
|
+
sage: v.f(1).weight() + v.f(0).weight()
|
|
401
|
+
-delta
|
|
402
|
+
|
|
403
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A',4,2])
|
|
404
|
+
sage: m = M.highest_weight_vector().f_string([1,2,0,1])
|
|
405
|
+
sage: m.weight()
|
|
406
|
+
2*Lambda[0] - Lambda[1] - delta
|
|
407
|
+
"""
|
|
408
|
+
P = self.parent().weight_lattice_realization()
|
|
409
|
+
return P(self.weight_in_root_lattice())
|
|
410
|
+
|
|
411
|
+
def epsilon(self, i):
|
|
412
|
+
r"""
|
|
413
|
+
Return the value of `\varepsilon_i` on ``self``.
|
|
414
|
+
|
|
415
|
+
INPUT:
|
|
416
|
+
|
|
417
|
+
- ``i`` -- an element of the index set
|
|
418
|
+
|
|
419
|
+
EXAMPLES::
|
|
420
|
+
|
|
421
|
+
sage: M = crystals.infinity.NakajimaMonomials(['G',2,1])
|
|
422
|
+
sage: m = M.module_generators[0].f(2)
|
|
423
|
+
sage: [m.epsilon(i) for i in M.index_set()]
|
|
424
|
+
[0, 0, 1]
|
|
425
|
+
|
|
426
|
+
sage: M = crystals.infinity.NakajimaMonomials(['C',4,1])
|
|
427
|
+
sage: m = M.module_generators[0].f_string([4,2,3])
|
|
428
|
+
sage: [m.epsilon(i) for i in M.index_set()]
|
|
429
|
+
[0, 0, 0, 1, 0]
|
|
430
|
+
"""
|
|
431
|
+
if i not in self.parent().index_set():
|
|
432
|
+
raise ValueError("i must be an element of the index set")
|
|
433
|
+
h = self.parent().weight_lattice_realization().simple_coroots()
|
|
434
|
+
return self.phi(i) - self._classical_weight().scalar(h[i])
|
|
435
|
+
|
|
436
|
+
def phi(self, i):
|
|
437
|
+
r"""
|
|
438
|
+
Return the value of `\varphi_i` on ``self``.
|
|
439
|
+
|
|
440
|
+
INPUT:
|
|
441
|
+
|
|
442
|
+
- ``i`` -- an element of the index set
|
|
443
|
+
|
|
444
|
+
EXAMPLES::
|
|
445
|
+
|
|
446
|
+
sage: M = crystals.infinity.NakajimaMonomials(['D',4,3])
|
|
447
|
+
sage: m = M.module_generators[0].f(1)
|
|
448
|
+
sage: [m.phi(i) for i in M.index_set()]
|
|
449
|
+
[1, -1, 1]
|
|
450
|
+
|
|
451
|
+
sage: M = crystals.infinity.NakajimaMonomials(['C',4,1])
|
|
452
|
+
sage: m = M.module_generators[0].f_string([4,2,3])
|
|
453
|
+
sage: [m.phi(i) for i in M.index_set()]
|
|
454
|
+
[0, 1, -1, 2, -1]
|
|
455
|
+
"""
|
|
456
|
+
if i not in self.parent().index_set():
|
|
457
|
+
raise ValueError("i must be an element of the index set")
|
|
458
|
+
if not self._Y or all(x[0] != i for x in self._Y):
|
|
459
|
+
return ZZ.zero()
|
|
460
|
+
|
|
461
|
+
d = copy(self._Y)
|
|
462
|
+
K = max(x[1] for x in d if x[0] == i)
|
|
463
|
+
for a in range(K):
|
|
464
|
+
if (i,a) in d:
|
|
465
|
+
continue
|
|
466
|
+
else:
|
|
467
|
+
d[(i,a)] = 0
|
|
468
|
+
S = sorted((x for x in d.items() if x[0][0] == i), key=lambda x: x[0][1])
|
|
469
|
+
return max(sum(S[k][1] for k in range(s)) for s in range(1,len(S)+1))
|
|
470
|
+
|
|
471
|
+
def _ke(self, i):
|
|
472
|
+
r"""
|
|
473
|
+
Return the value `k_e` with respect to ``i`` and ``self``.
|
|
474
|
+
|
|
475
|
+
INPUT:
|
|
476
|
+
|
|
477
|
+
- ``i`` -- an element of the index set
|
|
478
|
+
|
|
479
|
+
EXAMPLES::
|
|
480
|
+
|
|
481
|
+
sage: M = crystals.infinity.NakajimaMonomials(['D',4,3])
|
|
482
|
+
sage: m = M.module_generators[0].f(1)
|
|
483
|
+
sage: [m._ke(i) for i in M.index_set()]
|
|
484
|
+
[+Infinity, 0, +Infinity]
|
|
485
|
+
"""
|
|
486
|
+
h = self.parent().weight_lattice_realization().simple_coroots()
|
|
487
|
+
phi = self.phi(i)
|
|
488
|
+
if phi == self._classical_weight().scalar(h[i]): # self.epsilon(i) == 0
|
|
489
|
+
return Infinity
|
|
490
|
+
|
|
491
|
+
d = copy(self._Y)
|
|
492
|
+
K = max(x[1] for x in d if x[0] == i)
|
|
493
|
+
for a in range(K):
|
|
494
|
+
if (i,a) in d:
|
|
495
|
+
continue
|
|
496
|
+
else:
|
|
497
|
+
d[(i,a)] = 0
|
|
498
|
+
total = ZZ.zero()
|
|
499
|
+
L = []
|
|
500
|
+
S = sorted((x for x in d.items() if x[0][0] == i), key=lambda x: x[0][1])
|
|
501
|
+
for var,exp in S:
|
|
502
|
+
total += exp
|
|
503
|
+
if total == phi:
|
|
504
|
+
L.append(var[1])
|
|
505
|
+
|
|
506
|
+
return max(L) if L else ZZ.zero()
|
|
507
|
+
|
|
508
|
+
def _kf(self, i):
|
|
509
|
+
r"""
|
|
510
|
+
Return the value `k_f` with respect to ``i`` and ``self``.
|
|
511
|
+
|
|
512
|
+
INPUT:
|
|
513
|
+
|
|
514
|
+
- ``i`` -- an element of the index set
|
|
515
|
+
|
|
516
|
+
EXAMPLES::
|
|
517
|
+
|
|
518
|
+
sage: M = crystals.infinity.NakajimaMonomials(['F',4,1])
|
|
519
|
+
sage: m = M.module_generators[0].f_string([0,1,4,3])
|
|
520
|
+
sage: [m._kf(i) for i in M.index_set()]
|
|
521
|
+
[0, 0, 2, 0, 0]
|
|
522
|
+
"""
|
|
523
|
+
if all(i != x[0] for x in self._Y):
|
|
524
|
+
return ZZ.zero()
|
|
525
|
+
|
|
526
|
+
d = copy(self._Y)
|
|
527
|
+
K = max(key[1] for key in d if key[0] == i)
|
|
528
|
+
for a in range(K):
|
|
529
|
+
if (i,a) in d:
|
|
530
|
+
continue
|
|
531
|
+
else:
|
|
532
|
+
d[(i,a)] = 0
|
|
533
|
+
S = sorted((x for x in d.items() if x[0][0] == i), key=lambda x: x[0][1])
|
|
534
|
+
sum = 0
|
|
535
|
+
phi = self.phi(i)
|
|
536
|
+
for var,exp in S:
|
|
537
|
+
sum += exp
|
|
538
|
+
if sum == phi:
|
|
539
|
+
return var[1]
|
|
540
|
+
|
|
541
|
+
def e(self, i):
|
|
542
|
+
r"""
|
|
543
|
+
Return the action of `e_i` on ``self``.
|
|
544
|
+
|
|
545
|
+
INPUT:
|
|
546
|
+
|
|
547
|
+
- ``i`` -- an element of the index set
|
|
548
|
+
|
|
549
|
+
EXAMPLES::
|
|
550
|
+
|
|
551
|
+
sage: M = crystals.infinity.NakajimaMonomials(['E',7,1])
|
|
552
|
+
sage: m = M.module_generators[0].f_string([0,1,4,3])
|
|
553
|
+
sage: [m.e(i) for i in M.index_set()]
|
|
554
|
+
[None,
|
|
555
|
+
None,
|
|
556
|
+
None,
|
|
557
|
+
Y(0,0)^-1 Y(1,1)^-1 Y(2,1) Y(3,0) Y(3,1) Y(4,0)^-1 Y(4,1)^-1 Y(5,0),
|
|
558
|
+
None,
|
|
559
|
+
None,
|
|
560
|
+
None,
|
|
561
|
+
None]
|
|
562
|
+
|
|
563
|
+
sage: M = crystals.infinity.NakajimaMonomials("C5")
|
|
564
|
+
sage: m = M.module_generators[0].f_string([1,3])
|
|
565
|
+
sage: [m.e(i) for i in M.index_set()]
|
|
566
|
+
[Y(2,1) Y(3,0)^-1 Y(3,1)^-1 Y(4,0),
|
|
567
|
+
None,
|
|
568
|
+
Y(1,0)^-1 Y(1,1)^-1 Y(2,0),
|
|
569
|
+
None,
|
|
570
|
+
None]
|
|
571
|
+
|
|
572
|
+
sage: M = crystals.infinity.NakajimaMonomials(['D',4,1])
|
|
573
|
+
sage: M.set_variables('A')
|
|
574
|
+
sage: m = M.module_generators[0].f_string([4,2,3,0])
|
|
575
|
+
sage: [m.e(i) for i in M.index_set()]
|
|
576
|
+
[A(2,1)^-1 A(3,1)^-1 A(4,0)^-1,
|
|
577
|
+
None,
|
|
578
|
+
None,
|
|
579
|
+
A(0,2)^-1 A(2,1)^-1 A(4,0)^-1,
|
|
580
|
+
None]
|
|
581
|
+
sage: M.set_variables('Y')
|
|
582
|
+
"""
|
|
583
|
+
if i not in self.parent().index_set():
|
|
584
|
+
raise ValueError("i must be an element of the index set")
|
|
585
|
+
if self.epsilon(i) == 0:
|
|
586
|
+
return None
|
|
587
|
+
|
|
588
|
+
newdict = copy(self._Y)
|
|
589
|
+
ke = self._ke(i)
|
|
590
|
+
Aik = {(i, ke): 1, (i, ke+1): 1}
|
|
591
|
+
ct = self.parent().cartan_type()
|
|
592
|
+
cm = ct.cartan_matrix()
|
|
593
|
+
shift = 0
|
|
594
|
+
if self.parent().cartan_type().is_finite():
|
|
595
|
+
shift = 1
|
|
596
|
+
for j_index,j in enumerate(self.parent().index_set()):
|
|
597
|
+
if i == j:
|
|
598
|
+
continue
|
|
599
|
+
c = self.parent()._c[j_index,i-shift]
|
|
600
|
+
if cm[j_index,i-shift] != 0:
|
|
601
|
+
Aik[(j, ke+c)] = cm[j_index,i-shift]
|
|
602
|
+
# Multiply by Aik
|
|
603
|
+
for key,value in Aik.items():
|
|
604
|
+
if key in newdict:
|
|
605
|
+
if newdict[key] == -value: # The result would be a 0 exponent
|
|
606
|
+
del newdict[key]
|
|
607
|
+
else:
|
|
608
|
+
newdict[key] += value
|
|
609
|
+
else:
|
|
610
|
+
newdict[key] = value
|
|
611
|
+
A = copy(self._A)
|
|
612
|
+
A[(i,ke)] = A.get((i,ke),0) + 1
|
|
613
|
+
if not A[(i,ke)]:
|
|
614
|
+
del A[(i,ke)]
|
|
615
|
+
return self.__class__(self.parent(), newdict, A)
|
|
616
|
+
|
|
617
|
+
def f(self, i):
|
|
618
|
+
r"""
|
|
619
|
+
Return the action of `f_i` on ``self``.
|
|
620
|
+
|
|
621
|
+
INPUT:
|
|
622
|
+
|
|
623
|
+
- ``i`` -- an element of the index set
|
|
624
|
+
|
|
625
|
+
EXAMPLES::
|
|
626
|
+
|
|
627
|
+
sage: M = crystals.infinity.NakajimaMonomials("B4")
|
|
628
|
+
sage: m = M.module_generators[0].f_string([1,3,4])
|
|
629
|
+
sage: [m.f(i) for i in M.index_set()]
|
|
630
|
+
[Y(1,0)^-2 Y(1,1)^-2 Y(2,0)^2 Y(2,1) Y(3,0)^-1 Y(4,0) Y(4,1)^-1,
|
|
631
|
+
Y(1,0)^-1 Y(1,1)^-1 Y(1,2) Y(2,0) Y(2,2)^-1 Y(3,0)^-1 Y(3,1) Y(4,0) Y(4,1)^-1,
|
|
632
|
+
Y(1,0)^-1 Y(1,1)^-1 Y(2,0) Y(2,1)^2 Y(3,0)^-2 Y(3,1)^-1 Y(4,0)^3 Y(4,1)^-1,
|
|
633
|
+
Y(1,0)^-1 Y(1,1)^-1 Y(2,0) Y(2,1) Y(3,0)^-1 Y(3,1) Y(4,1)^-2]
|
|
634
|
+
"""
|
|
635
|
+
if i not in self.parent().index_set():
|
|
636
|
+
raise ValueError("i must be an element of the index set")
|
|
637
|
+
newdict = copy(self._Y)
|
|
638
|
+
kf = self._kf(i)
|
|
639
|
+
Aik = {(i, kf): -1, (i, kf+1): -1}
|
|
640
|
+
ct = self.parent().cartan_type()
|
|
641
|
+
cm = ct.cartan_matrix()
|
|
642
|
+
shift = 0
|
|
643
|
+
if ct.is_finite():
|
|
644
|
+
shift = 1
|
|
645
|
+
for j_index,j in enumerate(self.parent().index_set()):
|
|
646
|
+
if i == j:
|
|
647
|
+
continue
|
|
648
|
+
c = self.parent()._c[j_index,i-shift]
|
|
649
|
+
if cm[j_index,i-shift] != 0:
|
|
650
|
+
Aik[(j, kf+c)] = -cm[j_index,i-shift]
|
|
651
|
+
# Multiply by Aik
|
|
652
|
+
for key,value in Aik.items():
|
|
653
|
+
if key in newdict:
|
|
654
|
+
if newdict[key] == -value: # The result would be a 0 exponent
|
|
655
|
+
del newdict[key]
|
|
656
|
+
else:
|
|
657
|
+
newdict[key] += value
|
|
658
|
+
else:
|
|
659
|
+
newdict[key] = value
|
|
660
|
+
A = copy(self._A)
|
|
661
|
+
A[(i,kf)] = A.get((i,kf),0) - 1
|
|
662
|
+
if not A[(i,kf)]:
|
|
663
|
+
del A[(i,kf)]
|
|
664
|
+
return self.__class__(self.parent(), newdict, A)
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
class InfinityCrystalOfNakajimaMonomials(UniqueRepresentation, Parent):
|
|
668
|
+
r"""
|
|
669
|
+
Crystal `B(\infty)` in terms of (modified) Nakajima monomials.
|
|
670
|
+
|
|
671
|
+
Let `Y_{i,k}`, for `i \in I` and `k \in \ZZ`, be a commuting set of
|
|
672
|
+
variables, and let `\boldsymbol{1}` be a new variable which commutes
|
|
673
|
+
with each `Y_{i,k}`. (Here, `I` represents the index set of a Cartan
|
|
674
|
+
datum.) One may endow the structure of a crystal on the
|
|
675
|
+
set `\widehat{\mathcal{M}}` of monomials of the form
|
|
676
|
+
|
|
677
|
+
.. MATH::
|
|
678
|
+
|
|
679
|
+
M = \prod_{(i,k) \in I\times \ZZ_{\ge0}} Y_{i,k}^{y_i(k)}\boldsymbol{1}.
|
|
680
|
+
|
|
681
|
+
Elements of `\widehat{\mathcal{M}}` are called
|
|
682
|
+
*modified Nakajima monomials*. We will omit the `\boldsymbol{1}`
|
|
683
|
+
from the end of a monomial if there exists at least one `y_i(k) \neq 0`.
|
|
684
|
+
The crystal structure on this set is defined by
|
|
685
|
+
|
|
686
|
+
.. MATH::
|
|
687
|
+
|
|
688
|
+
\begin{aligned}
|
|
689
|
+
\mathrm{wt}(M) & = \sum_{i\in I} \Bigl( \sum_{k \ge 0}
|
|
690
|
+
y_i(k) \Bigr) \Lambda_i, \\
|
|
691
|
+
\varphi_i(M) & = \max\Bigl\{ \sum_{0 \le j \le k} y_i(j) :
|
|
692
|
+
k \ge 0 \Bigr\}, \\
|
|
693
|
+
\varepsilon_i(M) & = \varphi_i(M) -
|
|
694
|
+
\langle h_i, \mathrm{wt}(M) \rangle, \\
|
|
695
|
+
k_f = k_f(M) & = \min\Bigl\{ k \ge 0 :
|
|
696
|
+
\varphi_i(M) = \sum_{0 \le j \le k} y_i(j) \Bigr\}, \\
|
|
697
|
+
k_e = k_e(M) & = \max\Bigl\{ k \ge 0 :
|
|
698
|
+
\varphi_i(M) = \sum_{0 \le j \le k} y_i(j) \Bigr\},
|
|
699
|
+
\end{aligned}
|
|
700
|
+
|
|
701
|
+
where `\{h_i : i \in I\}` and `\{\Lambda_i : i \in I \}` are the simple
|
|
702
|
+
coroots and fundamental weights, respectively. With a chosen set of
|
|
703
|
+
nonnegative integers `C = (c_{ij})_{i\neq j}` such that
|
|
704
|
+
`c_{ij} + c_{ji} = 1`, one defines
|
|
705
|
+
|
|
706
|
+
.. MATH::
|
|
707
|
+
|
|
708
|
+
A_{i,k} = Y_{i,k} Y_{i,k+1} \prod_{j\neq i} Y_{j,k+c_{ji}}^{a_{ji}},
|
|
709
|
+
|
|
710
|
+
where `(a_{ij})_{i,j \in I}` is a Cartan matrix. Then
|
|
711
|
+
|
|
712
|
+
.. MATH::
|
|
713
|
+
|
|
714
|
+
\begin{aligned}
|
|
715
|
+
e_iM &= \begin{cases} 0 & \text{if } \varepsilon_i(M) = 0, \\
|
|
716
|
+
A_{i,k_e}M & \text{if } \varepsilon_i(M) > 0, \end{cases} \\
|
|
717
|
+
f_iM &= A_{i,k_f}^{-1} M.
|
|
718
|
+
\end{aligned}
|
|
719
|
+
|
|
720
|
+
It is shown in [KKS2007]_ that the connected component of
|
|
721
|
+
`\widehat{\mathcal{M}}` containing the element `\boldsymbol{1}`,
|
|
722
|
+
which we denote by `\mathcal{M}(\infty)`, is crystal isomorphic
|
|
723
|
+
to the crystal `B(\infty)`.
|
|
724
|
+
|
|
725
|
+
INPUT:
|
|
726
|
+
|
|
727
|
+
- ``cartan_type`` -- a Cartan type
|
|
728
|
+
|
|
729
|
+
- ``c`` -- (optional) the matrix `(c_{ij})_{i,j \in I}` such that
|
|
730
|
+
`c_{ii} = 0` for all `i \in I`, `c_{ij} \in \ZZ_{>0}` for all
|
|
731
|
+
`i,j \in I`, and `c_{ij} + c_{ji} = 1` for all `i \neq j`; the
|
|
732
|
+
default is `c_{ij} = 0` if `i < j` and `0` otherwise
|
|
733
|
+
|
|
734
|
+
EXAMPLES::
|
|
735
|
+
|
|
736
|
+
sage: B = crystals.infinity.Tableaux("C3")
|
|
737
|
+
sage: S = B.subcrystal(max_depth=4)
|
|
738
|
+
sage: G = B.digraph(subset=S) # long time
|
|
739
|
+
sage: M = crystals.infinity.NakajimaMonomials("C3") # long time
|
|
740
|
+
sage: T = M.subcrystal(max_depth=4) # long time
|
|
741
|
+
sage: H = M.digraph(subset=T) # long time
|
|
742
|
+
sage: G.is_isomorphic(H,edge_labels=True) # long time
|
|
743
|
+
True
|
|
744
|
+
|
|
745
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A',2,1])
|
|
746
|
+
sage: T = M.subcrystal(max_depth=3)
|
|
747
|
+
sage: H = M.digraph(subset=T) # long time
|
|
748
|
+
sage: Y = crystals.infinity.GeneralizedYoungWalls(2)
|
|
749
|
+
sage: YS = Y.subcrystal(max_depth=3)
|
|
750
|
+
sage: YG = Y.digraph(subset=YS) # long time
|
|
751
|
+
sage: YG.is_isomorphic(H,edge_labels=True) # long time
|
|
752
|
+
True
|
|
753
|
+
|
|
754
|
+
sage: M = crystals.infinity.NakajimaMonomials("D4")
|
|
755
|
+
sage: B = crystals.infinity.Tableaux("D4")
|
|
756
|
+
sage: MS = M.subcrystal(max_depth=3)
|
|
757
|
+
sage: BS = B.subcrystal(max_depth=3)
|
|
758
|
+
sage: MG = M.digraph(subset=MS) # long time
|
|
759
|
+
sage: BG = B.digraph(subset=BS) # long time
|
|
760
|
+
sage: BG.is_isomorphic(MG,edge_labels=True) # long time
|
|
761
|
+
True
|
|
762
|
+
"""
|
|
763
|
+
@staticmethod
|
|
764
|
+
def _normalize_c(c, n):
|
|
765
|
+
"""
|
|
766
|
+
Normalize the input ``c``.
|
|
767
|
+
|
|
768
|
+
EXAMPLES::
|
|
769
|
+
|
|
770
|
+
sage: from sage.combinat.crystals.monomial_crystals import InfinityCrystalOfNakajimaMonomials
|
|
771
|
+
sage: InfinityCrystalOfNakajimaMonomials._normalize_c(None, 4)
|
|
772
|
+
[0 1 1 1]
|
|
773
|
+
[0 0 1 1]
|
|
774
|
+
[0 0 0 1]
|
|
775
|
+
[0 0 0 0]
|
|
776
|
+
sage: c = matrix([[0,1,1],[0,0,0],[0,1,0]]); c
|
|
777
|
+
[0 1 1]
|
|
778
|
+
[0 0 0]
|
|
779
|
+
[0 1 0]
|
|
780
|
+
sage: c.is_mutable()
|
|
781
|
+
True
|
|
782
|
+
sage: C = InfinityCrystalOfNakajimaMonomials._normalize_c(c, 3); C
|
|
783
|
+
[0 1 1]
|
|
784
|
+
[0 0 0]
|
|
785
|
+
[0 1 0]
|
|
786
|
+
sage: C.is_mutable()
|
|
787
|
+
False
|
|
788
|
+
|
|
789
|
+
TESTS::
|
|
790
|
+
|
|
791
|
+
sage: c = matrix([[0,1],[0,1]])
|
|
792
|
+
sage: C = InfinityCrystalOfNakajimaMonomials._normalize_c(c, 2)
|
|
793
|
+
Traceback (most recent call last):
|
|
794
|
+
...
|
|
795
|
+
ValueError: the c matrix must have 0s on the diagonal
|
|
796
|
+
sage: c = matrix([[0,2],[-1,0]])
|
|
797
|
+
sage: C = InfinityCrystalOfNakajimaMonomials._normalize_c(c, 2)
|
|
798
|
+
Traceback (most recent call last):
|
|
799
|
+
...
|
|
800
|
+
ValueError: the c matrix must have nonnegative entries
|
|
801
|
+
sage: c = matrix([[0,1],[1,0]])
|
|
802
|
+
sage: C = InfinityCrystalOfNakajimaMonomials._normalize_c(c, 2)
|
|
803
|
+
Traceback (most recent call last):
|
|
804
|
+
...
|
|
805
|
+
ValueError: transpose entries do not sum to 1
|
|
806
|
+
"""
|
|
807
|
+
if c is None:
|
|
808
|
+
# Default is i < j <=> c_{ij} = 1 (0 otherwise)
|
|
809
|
+
c = [[1 if i < j else 0 for j in range(n)] for i in range(n)]
|
|
810
|
+
MS = MatrixSpace(ZZ, n, n)
|
|
811
|
+
c = MS(c)
|
|
812
|
+
c.set_immutable()
|
|
813
|
+
if any(c[i,i] != 0 for i in range(n)):
|
|
814
|
+
raise ValueError("the c matrix must have 0s on the diagonal")
|
|
815
|
+
if any(c[i,j] + c[j,i] != 1 for i in range(n) for j in range(i)):
|
|
816
|
+
raise ValueError("transpose entries do not sum to 1")
|
|
817
|
+
if any(c[i,j] < 0 or c[j,i] < 0 for i in range(n) for j in range(i)):
|
|
818
|
+
raise ValueError("the c matrix must have nonnegative entries")
|
|
819
|
+
return c
|
|
820
|
+
|
|
821
|
+
@staticmethod
|
|
822
|
+
def __classcall_private__(cls, ct, c=None):
|
|
823
|
+
r"""
|
|
824
|
+
Normalize input to ensure a unique representation.
|
|
825
|
+
|
|
826
|
+
INPUT:
|
|
827
|
+
|
|
828
|
+
- ``ct`` -- a Cartan type
|
|
829
|
+
|
|
830
|
+
EXAMPLES::
|
|
831
|
+
|
|
832
|
+
sage: M = crystals.infinity.NakajimaMonomials("E8")
|
|
833
|
+
sage: M1 = crystals.infinity.NakajimaMonomials(['E',8])
|
|
834
|
+
sage: M2 = crystals.infinity.NakajimaMonomials(CartanType(['E',8]))
|
|
835
|
+
sage: M is M1 is M2
|
|
836
|
+
True
|
|
837
|
+
"""
|
|
838
|
+
cartan_type = CartanType(ct)
|
|
839
|
+
n = len(cartan_type.index_set())
|
|
840
|
+
c = InfinityCrystalOfNakajimaMonomials._normalize_c(c, n)
|
|
841
|
+
M = super().__classcall__(cls, cartan_type, c)
|
|
842
|
+
M.set_variables('Y')
|
|
843
|
+
return M
|
|
844
|
+
|
|
845
|
+
def __init__(self, ct, c, category=None):
|
|
846
|
+
r"""
|
|
847
|
+
EXAMPLES::
|
|
848
|
+
|
|
849
|
+
sage: Minf = crystals.infinity.NakajimaMonomials(['A',3])
|
|
850
|
+
sage: TestSuite(Minf).run() # long time
|
|
851
|
+
"""
|
|
852
|
+
self._cartan_type = ct
|
|
853
|
+
self._c = c
|
|
854
|
+
self._variable = 'Y'
|
|
855
|
+
|
|
856
|
+
if category is None:
|
|
857
|
+
category = (HighestWeightCrystals(), InfiniteEnumeratedSets())
|
|
858
|
+
Parent.__init__(self, category=category)
|
|
859
|
+
self.module_generators = (self.element_class(self, {}, {}),)
|
|
860
|
+
|
|
861
|
+
def _element_constructor_(self, Y=None, A=None):
|
|
862
|
+
r"""
|
|
863
|
+
Construct an element of ``self`` from ``Y``.
|
|
864
|
+
|
|
865
|
+
INPUT:
|
|
866
|
+
|
|
867
|
+
- ``Y`` -- dictionary whose key is a pair and whose value
|
|
868
|
+
is an integer
|
|
869
|
+
- ``A`` -- dictionary whose key is a pair and whose value
|
|
870
|
+
is an integer
|
|
871
|
+
|
|
872
|
+
EXAMPLES::
|
|
873
|
+
|
|
874
|
+
sage: M = crystals.infinity.NakajimaMonomials(['D',4,1])
|
|
875
|
+
sage: m = M({(1,0):-1,(1,1):-1,(2,0):1})
|
|
876
|
+
sage: m
|
|
877
|
+
Y(1,0)^-1 Y(1,1)^-1 Y(2,0)
|
|
878
|
+
|
|
879
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A',2,1])
|
|
880
|
+
sage: m = M(A={(0,1): -1, (1,1): -2, (2,0): -1, (2,1): -1})
|
|
881
|
+
sage: m._repr_A()
|
|
882
|
+
'A(0,1)^-1 A(1,1)^-2 A(2,0)^-1 A(2,1)^-1'
|
|
883
|
+
sage: m
|
|
884
|
+
Y(0,2)^2 Y(1,2)^-1 Y(2,0)^-1 Y(2,1) Y(2,2)^-1
|
|
885
|
+
sage: m == M.highest_weight_vector().f_string([2,0,1,2,1])
|
|
886
|
+
True
|
|
887
|
+
"""
|
|
888
|
+
if A is None:
|
|
889
|
+
if Y is None:
|
|
890
|
+
return self.module_generators[0]
|
|
891
|
+
# This is a crude way to determine the A, but it works
|
|
892
|
+
hw,path = self.element_class(self, Y, {}).to_highest_weight()
|
|
893
|
+
hw._A = {}
|
|
894
|
+
return hw.f_string(reversed(path))
|
|
895
|
+
elif Y is None or Y == 0:
|
|
896
|
+
# The Y == 0 check is because the parent's __call__ has that
|
|
897
|
+
# as the first default value
|
|
898
|
+
ct = self.cartan_type()
|
|
899
|
+
cm = ct.cartan_matrix()
|
|
900
|
+
I = self.index_set()
|
|
901
|
+
shift = 0
|
|
902
|
+
if ct.is_finite():
|
|
903
|
+
shift = 1
|
|
904
|
+
Y = {}
|
|
905
|
+
for k,v in A.items():
|
|
906
|
+
Y[k] = Y.get(k, 0) + v
|
|
907
|
+
Y[(k[0],k[1]+1)] = Y.get((k[0],k[1]+1), 0) + v
|
|
908
|
+
for j_index,j in enumerate(I):
|
|
909
|
+
if k[0] == j:
|
|
910
|
+
continue
|
|
911
|
+
c = self._c[j_index,k[0]-shift]
|
|
912
|
+
if cm[j_index,k[0]-shift] != 0:
|
|
913
|
+
Y[(j,k[1]+c)] = Y.get((j,k[1]+c), 0) + v*cm[j_index,k[0]-shift]
|
|
914
|
+
for k in list(Y):
|
|
915
|
+
if Y[k] == 0:
|
|
916
|
+
del Y[k]
|
|
917
|
+
return self.element_class(self, Y, A)
|
|
918
|
+
|
|
919
|
+
def _repr_(self):
|
|
920
|
+
r"""
|
|
921
|
+
EXAMPLES::
|
|
922
|
+
|
|
923
|
+
sage: M = crystals.infinity.NakajimaMonomials(['D',4,1])
|
|
924
|
+
sage: m = M({(1,0):-1,(1,1):-1,(2,0):1})
|
|
925
|
+
sage: m
|
|
926
|
+
Y(1,0)^-1 Y(1,1)^-1 Y(2,0)
|
|
927
|
+
"""
|
|
928
|
+
return "Infinity Crystal of modified Nakajima monomials of type {}".format(self._cartan_type)
|
|
929
|
+
|
|
930
|
+
def c(self):
|
|
931
|
+
"""
|
|
932
|
+
Return the matrix `c_{ij}` of ``self``.
|
|
933
|
+
|
|
934
|
+
EXAMPLES::
|
|
935
|
+
|
|
936
|
+
sage: La = RootSystem(['B',3]).weight_lattice().fundamental_weights()
|
|
937
|
+
sage: M = crystals.NakajimaMonomials(La[1]+La[2])
|
|
938
|
+
sage: M.c()
|
|
939
|
+
[0 1 1]
|
|
940
|
+
[0 0 1]
|
|
941
|
+
[0 0 0]
|
|
942
|
+
|
|
943
|
+
sage: c = Matrix([[0,0,1],[1,0,0],[0,1,0]])
|
|
944
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
|
|
945
|
+
sage: M = crystals.NakajimaMonomials(2*La[1], c=c)
|
|
946
|
+
sage: M.c() == c
|
|
947
|
+
True
|
|
948
|
+
"""
|
|
949
|
+
return self._c
|
|
950
|
+
|
|
951
|
+
def cardinality(self):
|
|
952
|
+
r"""
|
|
953
|
+
Return the cardinality of ``self``, which is always `\infty`.
|
|
954
|
+
|
|
955
|
+
EXAMPLES::
|
|
956
|
+
|
|
957
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A',5,2])
|
|
958
|
+
sage: M.cardinality()
|
|
959
|
+
+Infinity
|
|
960
|
+
"""
|
|
961
|
+
return Infinity
|
|
962
|
+
|
|
963
|
+
def set_variables(self, letter):
|
|
964
|
+
r"""
|
|
965
|
+
Set the type of monomials to use for the element output.
|
|
966
|
+
|
|
967
|
+
If the `A` variables are used, the output is written as
|
|
968
|
+
`\prod_{i\in I} Y_{i,0}^{\lambda_i} \prod_{i,k} A_{i,k}^{c_{i,k}}`, where
|
|
969
|
+
`\sum_{i \in I} \lambda_i \Lambda_i` is the corresponding
|
|
970
|
+
dominant weight.
|
|
971
|
+
|
|
972
|
+
INPUT:
|
|
973
|
+
|
|
974
|
+
- ``letter`` -- can be one of the following:
|
|
975
|
+
|
|
976
|
+
* ``'Y'`` -- use `Y_{i,k}`, corresponds to fundamental weights
|
|
977
|
+
* ``'A'`` -- use `A_{i,k}`, corresponds to simple roots
|
|
978
|
+
|
|
979
|
+
EXAMPLES::
|
|
980
|
+
|
|
981
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A', 4])
|
|
982
|
+
sage: elt = M.highest_weight_vector().f_string([2,1,3,2,3,2,4,3])
|
|
983
|
+
sage: elt
|
|
984
|
+
Y(1,2) Y(2,0)^-1 Y(2,2)^-1 Y(3,0)^-1 Y(3,2)^-1 Y(4,0)
|
|
985
|
+
sage: M.set_variables('A')
|
|
986
|
+
sage: elt
|
|
987
|
+
A(1,1)^-1 A(2,0)^-1 A(2,1)^-2 A(3,0)^-2 A(3,1)^-1 A(4,0)^-1
|
|
988
|
+
sage: M.set_variables('Y')
|
|
989
|
+
|
|
990
|
+
::
|
|
991
|
+
|
|
992
|
+
sage: La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
|
|
993
|
+
sage: M = crystals.NakajimaMonomials(La[1]+La[2])
|
|
994
|
+
sage: lw = M.lowest_weight_vectors()[0]
|
|
995
|
+
sage: lw
|
|
996
|
+
Y(1,2)^-1 Y(2,1)^-1
|
|
997
|
+
sage: M.set_variables('A')
|
|
998
|
+
sage: lw
|
|
999
|
+
Y(1,0) Y(2,0) A(1,0)^-1 A(1,1)^-1 A(2,0)^-2
|
|
1000
|
+
sage: M.set_variables('Y')
|
|
1001
|
+
"""
|
|
1002
|
+
if letter not in ['Y', 'A']:
|
|
1003
|
+
raise ValueError("invalid monomial type")
|
|
1004
|
+
self._variable = letter
|
|
1005
|
+
|
|
1006
|
+
def get_variables(self):
|
|
1007
|
+
"""
|
|
1008
|
+
Return the type of monomials to use for the element output.
|
|
1009
|
+
|
|
1010
|
+
EXAMPLES::
|
|
1011
|
+
|
|
1012
|
+
sage: M = crystals.infinity.NakajimaMonomials(['A', 4])
|
|
1013
|
+
sage: M.get_variables()
|
|
1014
|
+
'Y'
|
|
1015
|
+
"""
|
|
1016
|
+
return self._variable
|
|
1017
|
+
|
|
1018
|
+
Element = NakajimaMonomial
|
|
1019
|
+
|
|
1020
|
+
|
|
1021
|
+
class CrystalOfNakajimaMonomialsElement(NakajimaMonomial):
|
|
1022
|
+
r"""
|
|
1023
|
+
Element class for
|
|
1024
|
+
:class:`~sage.combinat.crystals.monomial_crystals.CrystalOfNakajimaMonomials`.
|
|
1025
|
+
|
|
1026
|
+
The `f_i` operators need to be modified from the version in
|
|
1027
|
+
:class:`~sage.combinat.crystals.monomial_crystalsNakajimaMonomial`
|
|
1028
|
+
in order to create irreducible highest weight realizations.
|
|
1029
|
+
This modified `f_i` is defined as
|
|
1030
|
+
|
|
1031
|
+
.. MATH::
|
|
1032
|
+
|
|
1033
|
+
f_iM = \begin{cases} 0 & \text{if } \varphi_i(M) = 0, \\
|
|
1034
|
+
A_{i,k_f}^{-1}M & \text{if } \varphi_i(M) > 0. \end{cases}
|
|
1035
|
+
|
|
1036
|
+
EXAMPLES::
|
|
1037
|
+
|
|
1038
|
+
sage: La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
|
|
1039
|
+
sage: M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
|
|
1040
|
+
sage: m = M.module_generators[0].f(0); m
|
|
1041
|
+
Y(0,0)^2 Y(0,1)^-1 Y(2,0)
|
|
1042
|
+
sage: TestSuite(m).run()
|
|
1043
|
+
"""
|
|
1044
|
+
|
|
1045
|
+
def f(self, i):
|
|
1046
|
+
r"""
|
|
1047
|
+
Return the action of `f_i` on ``self``.
|
|
1048
|
+
|
|
1049
|
+
INPUT:
|
|
1050
|
+
|
|
1051
|
+
- ``i`` -- an element of the index set
|
|
1052
|
+
|
|
1053
|
+
EXAMPLES::
|
|
1054
|
+
|
|
1055
|
+
sage: La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
|
|
1056
|
+
sage: M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
|
|
1057
|
+
sage: m = M.module_generators[0]
|
|
1058
|
+
sage: [m.f(i) for i in M.index_set()]
|
|
1059
|
+
[Y(0,0)^2 Y(0,1)^-1 Y(2,0), None, None, None]
|
|
1060
|
+
|
|
1061
|
+
::
|
|
1062
|
+
|
|
1063
|
+
sage: M = crystals.infinity.NakajimaMonomials("E8")
|
|
1064
|
+
sage: M.set_variables('A')
|
|
1065
|
+
sage: m = M.module_generators[0].f_string([4,2,3,8])
|
|
1066
|
+
sage: m
|
|
1067
|
+
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1
|
|
1068
|
+
sage: [m.f(i) for i in M.index_set()]
|
|
1069
|
+
[A(1,2)^-1 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
|
|
1070
|
+
A(2,0)^-1 A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
|
|
1071
|
+
A(2,1)^-1 A(3,0)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-1,
|
|
1072
|
+
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(4,1)^-1 A(8,0)^-1,
|
|
1073
|
+
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(5,0)^-1 A(8,0)^-1,
|
|
1074
|
+
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(6,0)^-1 A(8,0)^-1,
|
|
1075
|
+
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(7,1)^-1 A(8,0)^-1,
|
|
1076
|
+
A(2,1)^-1 A(3,1)^-1 A(4,0)^-1 A(8,0)^-2]
|
|
1077
|
+
sage: M.set_variables('Y')
|
|
1078
|
+
"""
|
|
1079
|
+
if self.phi(i) == 0:
|
|
1080
|
+
return None
|
|
1081
|
+
return super().f(i)
|
|
1082
|
+
|
|
1083
|
+
def weight(self):
|
|
1084
|
+
r"""
|
|
1085
|
+
Return the weight of ``self`` as an element of the weight lattice.
|
|
1086
|
+
|
|
1087
|
+
EXAMPLES::
|
|
1088
|
+
|
|
1089
|
+
sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
|
|
1090
|
+
sage: M = crystals.NakajimaMonomials("A2",La[1]+La[2])
|
|
1091
|
+
sage: M.module_generators[0].weight()
|
|
1092
|
+
(2, 1, 0)
|
|
1093
|
+
"""
|
|
1094
|
+
P = self.parent().weight_lattice_realization()
|
|
1095
|
+
return P(self.weight_in_root_lattice()) + P(self.parent().hw)
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
class CrystalOfNakajimaMonomials(InfinityCrystalOfNakajimaMonomials):
|
|
1099
|
+
r"""
|
|
1100
|
+
Let `\widetilde{\mathcal{M}}` be `\widehat{\mathcal{M}}` as a set, and with
|
|
1101
|
+
crystal structure defined as on `\widehat{\mathcal{M}}` with the exception
|
|
1102
|
+
that
|
|
1103
|
+
|
|
1104
|
+
.. MATH::
|
|
1105
|
+
|
|
1106
|
+
f_iM = \begin{cases} 0 & \text{if } \varphi_i(M) = 0, \\
|
|
1107
|
+
A_{i,k_f}^{-1}M & \text{if } \varphi_i(M) > 0. \end{cases}
|
|
1108
|
+
|
|
1109
|
+
Then Kashiwara [Ka2003]_ showed that the connected component in
|
|
1110
|
+
`\widetilde{\mathcal{M}}` containing a monomial `M` such that `e_iM = 0`,
|
|
1111
|
+
for all `i \in I`, is crystal isomorphic to the irreducible highest weight
|
|
1112
|
+
crystal `B(\mathrm{wt}(M))`.
|
|
1113
|
+
|
|
1114
|
+
INPUT:
|
|
1115
|
+
|
|
1116
|
+
- ``ct`` -- a Cartan type
|
|
1117
|
+
|
|
1118
|
+
- ``La`` -- an element of the weight lattice
|
|
1119
|
+
|
|
1120
|
+
EXAMPLES::
|
|
1121
|
+
|
|
1122
|
+
sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
|
|
1123
|
+
sage: M = crystals.NakajimaMonomials("A2",La[1]+La[2])
|
|
1124
|
+
sage: B = crystals.Tableaux("A2",shape=[2,1])
|
|
1125
|
+
sage: GM = M.digraph()
|
|
1126
|
+
sage: GB = B.digraph()
|
|
1127
|
+
sage: GM.is_isomorphic(GB,edge_labels=True)
|
|
1128
|
+
True
|
|
1129
|
+
|
|
1130
|
+
sage: La = RootSystem("G2").weight_lattice().fundamental_weights()
|
|
1131
|
+
sage: M = crystals.NakajimaMonomials("G2",La[1]+La[2])
|
|
1132
|
+
sage: B = crystals.Tableaux("G2",shape=[2,1])
|
|
1133
|
+
sage: GM = M.digraph()
|
|
1134
|
+
sage: GB = B.digraph()
|
|
1135
|
+
sage: GM.is_isomorphic(GB,edge_labels=True)
|
|
1136
|
+
True
|
|
1137
|
+
|
|
1138
|
+
sage: La = RootSystem("B2").weight_lattice().fundamental_weights()
|
|
1139
|
+
sage: M = crystals.NakajimaMonomials(['B',2],La[1]+La[2])
|
|
1140
|
+
sage: B = crystals.Tableaux("B2",shape=[3/2,1/2])
|
|
1141
|
+
sage: GM = M.digraph()
|
|
1142
|
+
sage: GB = B.digraph()
|
|
1143
|
+
sage: GM.is_isomorphic(GB,edge_labels=True)
|
|
1144
|
+
True
|
|
1145
|
+
|
|
1146
|
+
sage: La = RootSystem(['A',3,1]).weight_lattice(extended=True).fundamental_weights()
|
|
1147
|
+
sage: M = crystals.NakajimaMonomials(['A',3,1],La[0]+La[2])
|
|
1148
|
+
sage: B = crystals.GeneralizedYoungWalls(3,La[0]+La[2])
|
|
1149
|
+
sage: SM = M.subcrystal(max_depth=4)
|
|
1150
|
+
sage: SB = B.subcrystal(max_depth=4)
|
|
1151
|
+
sage: GM = M.digraph(subset=SM) # long time
|
|
1152
|
+
sage: GB = B.digraph(subset=SB) # long time
|
|
1153
|
+
sage: GM.is_isomorphic(GB,edge_labels=True) # long time
|
|
1154
|
+
True
|
|
1155
|
+
|
|
1156
|
+
sage: La = RootSystem(['A',5,2]).weight_lattice(extended=True).fundamental_weights()
|
|
1157
|
+
sage: LA = RootSystem(['A',5,2]).weight_space().fundamental_weights()
|
|
1158
|
+
sage: M = crystals.NakajimaMonomials(['A',5,2],3*La[0])
|
|
1159
|
+
sage: B = crystals.LSPaths(3*LA[0])
|
|
1160
|
+
sage: SM = M.subcrystal(max_depth=4)
|
|
1161
|
+
sage: SB = B.subcrystal(max_depth=4)
|
|
1162
|
+
sage: GM = M.digraph(subset=SM)
|
|
1163
|
+
sage: GB = B.digraph(subset=SB)
|
|
1164
|
+
sage: GM.is_isomorphic(GB,edge_labels=True)
|
|
1165
|
+
True
|
|
1166
|
+
|
|
1167
|
+
sage: c = matrix([[0,1,0],[0,0,1],[1,0,0]])
|
|
1168
|
+
sage: La = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
|
|
1169
|
+
sage: M = crystals.NakajimaMonomials(2*La[1], c=c)
|
|
1170
|
+
sage: sorted(M.subcrystal(max_depth=3), key=str)
|
|
1171
|
+
[Y(0,0) Y(0,1) Y(1,0) Y(2,1)^-1,
|
|
1172
|
+
Y(0,0) Y(0,1)^2 Y(1,1)^-1 Y(2,0) Y(2,1)^-1,
|
|
1173
|
+
Y(0,0) Y(0,2)^-1 Y(1,0) Y(1,1) Y(2,1)^-1 Y(2,2),
|
|
1174
|
+
Y(0,1) Y(0,2)^-1 Y(1,1)^-1 Y(2,0)^2 Y(2,2),
|
|
1175
|
+
Y(0,1) Y(1,0) Y(1,1)^-1 Y(2,0),
|
|
1176
|
+
Y(0,1)^2 Y(1,1)^-2 Y(2,0)^2,
|
|
1177
|
+
Y(0,2)^-1 Y(1,0) Y(2,0) Y(2,2),
|
|
1178
|
+
Y(1,0) Y(1,3) Y(2,0) Y(2,3)^-1,
|
|
1179
|
+
Y(1,0)^2]
|
|
1180
|
+
"""
|
|
1181
|
+
@staticmethod
|
|
1182
|
+
def __classcall_private__(cls, cartan_type, La=None, c=None):
|
|
1183
|
+
r"""
|
|
1184
|
+
Normalize input to ensure a unique representation.
|
|
1185
|
+
|
|
1186
|
+
EXAMPLES::
|
|
1187
|
+
|
|
1188
|
+
sage: La = RootSystem(['E',8,1]).weight_lattice(extended=True).fundamental_weights()
|
|
1189
|
+
sage: M = crystals.NakajimaMonomials(['E',8,1],La[0]+La[8])
|
|
1190
|
+
sage: M1 = crystals.NakajimaMonomials(CartanType(['E',8,1]),La[0]+La[8])
|
|
1191
|
+
sage: M2 = crystals.NakajimaMonomials(['E',8,1],M.Lambda()[0] + M.Lambda()[8])
|
|
1192
|
+
sage: M is M1 is M2
|
|
1193
|
+
True
|
|
1194
|
+
"""
|
|
1195
|
+
if La is None:
|
|
1196
|
+
La = cartan_type
|
|
1197
|
+
cartan_type = La.parent().cartan_type()
|
|
1198
|
+
cartan_type = CartanType(cartan_type)
|
|
1199
|
+
if cartan_type.is_affine():
|
|
1200
|
+
La = RootSystem(cartan_type).weight_lattice(extended=True)(La)
|
|
1201
|
+
else:
|
|
1202
|
+
La = RootSystem(cartan_type).weight_lattice()(La)
|
|
1203
|
+
n = len(cartan_type.index_set())
|
|
1204
|
+
c = InfinityCrystalOfNakajimaMonomials._normalize_c(c, n)
|
|
1205
|
+
return super().__classcall__(cls, cartan_type, La, c)
|
|
1206
|
+
|
|
1207
|
+
def __init__(self, ct, La, c):
|
|
1208
|
+
r"""
|
|
1209
|
+
EXAMPLES::
|
|
1210
|
+
|
|
1211
|
+
sage: La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
|
|
1212
|
+
sage: M = crystals.NakajimaMonomials(['A',2], La[1]+La[2])
|
|
1213
|
+
sage: TestSuite(M).run()
|
|
1214
|
+
|
|
1215
|
+
sage: La = RootSystem(['C',2,1]).weight_lattice(extended=True).fundamental_weights()
|
|
1216
|
+
sage: M = crystals.NakajimaMonomials(['C',2,1], La[0])
|
|
1217
|
+
sage: TestSuite(M).run(max_runs=100)
|
|
1218
|
+
"""
|
|
1219
|
+
if ct.is_finite():
|
|
1220
|
+
cat = ClassicalCrystals()
|
|
1221
|
+
else:
|
|
1222
|
+
cat = (RegularCrystals(), HighestWeightCrystals(), InfiniteEnumeratedSets())
|
|
1223
|
+
InfinityCrystalOfNakajimaMonomials.__init__(self, ct, c, cat)
|
|
1224
|
+
self._cartan_type = ct
|
|
1225
|
+
self.hw = La
|
|
1226
|
+
gen = {(i,0): c for i,c in La}
|
|
1227
|
+
self.module_generators = (self.element_class(self, gen, {}),)
|
|
1228
|
+
|
|
1229
|
+
def _repr_(self):
|
|
1230
|
+
r"""
|
|
1231
|
+
Return a string representation of ``self``.
|
|
1232
|
+
|
|
1233
|
+
EXAMPLES::
|
|
1234
|
+
|
|
1235
|
+
sage: La = RootSystem(['C',3,1]).weight_lattice(extended=True).fundamental_weights()
|
|
1236
|
+
sage: M = crystals.NakajimaMonomials(['C',3,1],La[0]+5*La[3])
|
|
1237
|
+
sage: M
|
|
1238
|
+
Highest weight crystal of modified Nakajima monomials of Cartan type ['C', 3, 1] and highest weight Lambda[0] + 5*Lambda[3]
|
|
1239
|
+
"""
|
|
1240
|
+
return "Highest weight crystal of modified Nakajima monomials of Cartan type {1!s} and highest weight {0!s}".format(self.hw, self._cartan_type)
|
|
1241
|
+
|
|
1242
|
+
def cardinality(self):
|
|
1243
|
+
r"""
|
|
1244
|
+
Return the cardinality of ``self``.
|
|
1245
|
+
|
|
1246
|
+
EXAMPLES::
|
|
1247
|
+
|
|
1248
|
+
sage: La = RootSystem(['A',2]).weight_lattice().fundamental_weights()
|
|
1249
|
+
sage: M = crystals.NakajimaMonomials(['A',2], La[1])
|
|
1250
|
+
sage: M.cardinality()
|
|
1251
|
+
3
|
|
1252
|
+
|
|
1253
|
+
sage: La = RootSystem(['D',4,2]).weight_lattice(extended=True).fundamental_weights()
|
|
1254
|
+
sage: M = crystals.NakajimaMonomials(['D',4,2], La[1])
|
|
1255
|
+
sage: M.cardinality()
|
|
1256
|
+
+Infinity
|
|
1257
|
+
"""
|
|
1258
|
+
if not self.cartan_type().is_finite():
|
|
1259
|
+
return Infinity
|
|
1260
|
+
return super(InfinityCrystalOfNakajimaMonomials, self).cardinality()
|
|
1261
|
+
|
|
1262
|
+
Element = CrystalOfNakajimaMonomialsElement
|