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,1251 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-combinat
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Elementary crystals
|
|
5
|
+
|
|
6
|
+
Let `\lambda` be a weight. The crystals `T_{\lambda}`, `R_{\lambda}`, `B_i`,
|
|
7
|
+
and `C` are important objects in the tensor category of crystals.
|
|
8
|
+
For example, the crystal `T_0` is the neutral object in this category; i.e.,
|
|
9
|
+
`T_0 \otimes B \cong B \otimes T_0 \cong B` for any crystal `B`. We list
|
|
10
|
+
some other properties of these crystals:
|
|
11
|
+
|
|
12
|
+
- The crystal `T_{\lambda} \otimes B(\infty)` is the crystal of the Verma
|
|
13
|
+
module with highest weight `\lambda`, where `\lambda` is a dominant integral
|
|
14
|
+
weight.
|
|
15
|
+
|
|
16
|
+
- Let `u_{\infty}` be the highest weight vector of `B(\infty)` and `\lambda`
|
|
17
|
+
be a dominant integral weight. There is an embedding of crystals `B(\lambda)
|
|
18
|
+
\longrightarrow T_{\lambda} \otimes B(\infty)` sending `u_{\lambda} \mapsto
|
|
19
|
+
t_{\lambda} \otimes u_{\infty}` which is not strict, but the embedding
|
|
20
|
+
`B(\lambda) \longrightarrow C \otimes T_{\lambda} \otimes B(\infty)` by
|
|
21
|
+
`u_{\lambda} \mapsto c \otimes t_{\lambda} \otimes u_{\infty}` is a strict
|
|
22
|
+
embedding.
|
|
23
|
+
|
|
24
|
+
- For any dominant integral weight `\lambda`, there is a surjective crystal
|
|
25
|
+
morphism `\Psi_{\lambda} \colon R_{\lambda} \otimes B(\infty) \longrightarrow
|
|
26
|
+
B(\lambda)`. More precisely, if `B = \{r_{\lambda} \otimes b \in R_{\lambda}
|
|
27
|
+
\otimes B(\infty) : \Psi_{\lambda}(r_{\lambda} \otimes b) \neq 0 \}`, then
|
|
28
|
+
`B \cong B(\lambda)` as crystals.
|
|
29
|
+
|
|
30
|
+
- For all Cartan types and all weights `\lambda`, we have `R_{\lambda} \cong C
|
|
31
|
+
\otimes T_{\lambda}` as crystals.
|
|
32
|
+
|
|
33
|
+
- For each `i`, there is a strict crystal morphism `\Psi_i \colon B(\infty)
|
|
34
|
+
\longrightarrow B_i \otimes B(\infty)` defined by `u_{\infty} \mapsto
|
|
35
|
+
b_i(0) \otimes u_{\infty}`, where `u_\infty` is the highest weight vector
|
|
36
|
+
of `B(\infty)`.
|
|
37
|
+
|
|
38
|
+
For more information on `B(\infty)`, see
|
|
39
|
+
:class:`~sage.combinat.crystals.infinity_crystals.InfinityCrystalOfTableaux`.
|
|
40
|
+
|
|
41
|
+
.. NOTE::
|
|
42
|
+
|
|
43
|
+
As with
|
|
44
|
+
:class:`~sage.combinat.crystals.tensor_product.TensorProductOfCrystals`,
|
|
45
|
+
we are using the opposite of Kashiwara's convention.
|
|
46
|
+
|
|
47
|
+
AUTHORS:
|
|
48
|
+
|
|
49
|
+
- Ben Salisbury: Initial version
|
|
50
|
+
|
|
51
|
+
REFERENCES:
|
|
52
|
+
|
|
53
|
+
- [Ka1993]_
|
|
54
|
+
|
|
55
|
+
- [NZ1997]_
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
# ****************************************************************************
|
|
59
|
+
# Copyright (C) 2013 Ben Salisbury <benjamin_salisbury at brown dot edu>
|
|
60
|
+
#
|
|
61
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
62
|
+
#
|
|
63
|
+
# This code is distributed in the hope that it will be useful,
|
|
64
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
65
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
66
|
+
# General Public License for more details.
|
|
67
|
+
#
|
|
68
|
+
# The full text of the GPL is available at:
|
|
69
|
+
#
|
|
70
|
+
# https://www.gnu.org/licenses/
|
|
71
|
+
# ***************************************************************************
|
|
72
|
+
|
|
73
|
+
from sage.categories.crystals import Crystals
|
|
74
|
+
from sage.categories.finite_crystals import FiniteCrystals
|
|
75
|
+
from sage.categories.highest_weight_crystals import HighestWeightCrystals
|
|
76
|
+
from sage.categories.regular_crystals import RegularCrystals
|
|
77
|
+
from sage.categories.supercrystals import SuperCrystals
|
|
78
|
+
from sage.categories.regular_supercrystals import RegularSuperCrystals
|
|
79
|
+
from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets
|
|
80
|
+
from sage.structure.element import Element
|
|
81
|
+
from sage.structure.parent import Parent
|
|
82
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
83
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
84
|
+
from sage.combinat.root_system.root_lattice_realizations import RootLatticeRealizations
|
|
85
|
+
from sage.rings.integer import Integer
|
|
86
|
+
from sage.rings.integer_ring import ZZ
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class AbstractSingleCrystalElement(Element):
|
|
90
|
+
r"""
|
|
91
|
+
Abstract base class for elements in crystals with a single element.
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
def __lt__(self, other):
|
|
95
|
+
r"""
|
|
96
|
+
EXAMPLES::
|
|
97
|
+
|
|
98
|
+
sage: La = RootSystem("D4").ambient_space().fundamental_weights()
|
|
99
|
+
sage: T = crystals.elementary.T("D4",La[3]+La[4])
|
|
100
|
+
sage: t = T.highest_weight_vector()
|
|
101
|
+
sage: t < t.e(1)
|
|
102
|
+
False
|
|
103
|
+
sage: t < t
|
|
104
|
+
False
|
|
105
|
+
"""
|
|
106
|
+
return False
|
|
107
|
+
|
|
108
|
+
def __hash__(self):
|
|
109
|
+
r"""
|
|
110
|
+
TESTS::
|
|
111
|
+
|
|
112
|
+
sage: C = crystals.elementary.Component("D7")
|
|
113
|
+
sage: c = C.highest_weight_vector()
|
|
114
|
+
sage: hash(c) # random
|
|
115
|
+
879
|
|
116
|
+
"""
|
|
117
|
+
return hash(self.parent())
|
|
118
|
+
|
|
119
|
+
def __eq__(self, other):
|
|
120
|
+
r"""
|
|
121
|
+
EXAMPLES::
|
|
122
|
+
|
|
123
|
+
sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
|
|
124
|
+
sage: T = crystals.elementary.T("A2",La[1])
|
|
125
|
+
sage: U = crystals.elementary.T("A2",La[2])
|
|
126
|
+
sage: la = RootSystem("B2").weight_lattice().fundamental_weights()
|
|
127
|
+
sage: V = crystals.elementary.T("B2",la[1])
|
|
128
|
+
sage: t = T.highest_weight_vector()
|
|
129
|
+
sage: u = U.highest_weight_vector()
|
|
130
|
+
sage: v = V.highest_weight_vector()
|
|
131
|
+
sage: [t == t, u == u, v == v]
|
|
132
|
+
[True, True, True]
|
|
133
|
+
sage: [t == u, u == v, t == v]
|
|
134
|
+
[False, False, False]
|
|
135
|
+
|
|
136
|
+
sage: C = crystals.elementary.Component("D7")
|
|
137
|
+
sage: c = C.highest_weight_vector()
|
|
138
|
+
sage: c == c
|
|
139
|
+
True
|
|
140
|
+
sage: c == c.f(7)
|
|
141
|
+
False
|
|
142
|
+
"""
|
|
143
|
+
if isinstance(other, AbstractSingleCrystalElement):
|
|
144
|
+
return self.parent() is other.parent()
|
|
145
|
+
return False
|
|
146
|
+
|
|
147
|
+
def __ne__(self, other):
|
|
148
|
+
r"""
|
|
149
|
+
EXAMPLES::
|
|
150
|
+
|
|
151
|
+
sage: La = RootSystem("A2").weight_lattice().fundamental_weights()
|
|
152
|
+
sage: T = crystals.elementary.T("A2",La[1])
|
|
153
|
+
sage: T.highest_weight_vector() != T.highest_weight_vector()
|
|
154
|
+
False
|
|
155
|
+
sage: T.highest_weight_vector() != T.highest_weight_vector().e(1)
|
|
156
|
+
True
|
|
157
|
+
"""
|
|
158
|
+
return not self == other
|
|
159
|
+
|
|
160
|
+
def e(self, i):
|
|
161
|
+
r"""
|
|
162
|
+
Return `e_i` of ``self``, which is ``None`` for all `i`.
|
|
163
|
+
|
|
164
|
+
INPUT:
|
|
165
|
+
|
|
166
|
+
- ``i`` -- an element of the index set
|
|
167
|
+
|
|
168
|
+
EXAMPLES::
|
|
169
|
+
|
|
170
|
+
sage: ct = CartanType(['A',2])
|
|
171
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
172
|
+
sage: T = crystals.elementary.T(ct,la[1])
|
|
173
|
+
sage: t = T.highest_weight_vector()
|
|
174
|
+
sage: t.e(1)
|
|
175
|
+
sage: t.e(2)
|
|
176
|
+
"""
|
|
177
|
+
return None
|
|
178
|
+
|
|
179
|
+
def f(self, i):
|
|
180
|
+
r"""
|
|
181
|
+
Return `f_i` of ``self``, which is ``None`` for all `i`.
|
|
182
|
+
|
|
183
|
+
INPUT:
|
|
184
|
+
|
|
185
|
+
- ``i`` -- an element of the index set
|
|
186
|
+
|
|
187
|
+
EXAMPLES::
|
|
188
|
+
|
|
189
|
+
sage: ct = CartanType(['A',2])
|
|
190
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
191
|
+
sage: T = crystals.elementary.T(ct,la[1])
|
|
192
|
+
sage: t = T.highest_weight_vector()
|
|
193
|
+
sage: t.f(1)
|
|
194
|
+
sage: t.f(2)
|
|
195
|
+
"""
|
|
196
|
+
return None
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class TCrystal(UniqueRepresentation, Parent):
|
|
200
|
+
r"""
|
|
201
|
+
The crystal `T_{\lambda}`.
|
|
202
|
+
|
|
203
|
+
Let `\lambda` be a weight. As defined in [Ka1993]_ the crystal
|
|
204
|
+
`T_{\lambda} = \{ t_{\lambda} \}` is a single element crystal with the
|
|
205
|
+
crystal structure defined by
|
|
206
|
+
|
|
207
|
+
.. MATH::
|
|
208
|
+
|
|
209
|
+
\mathrm{wt}(t_\lambda) = \lambda, \quad
|
|
210
|
+
e_i t_{\lambda} = f_i t_{\lambda} = 0, \quad
|
|
211
|
+
\varepsilon_i(t_{\lambda}) = \varphi_i(t_{\lambda}) = -\infty.
|
|
212
|
+
|
|
213
|
+
The crystal `T_{\lambda}` shifts the weights of the vertices in a crystal
|
|
214
|
+
`B` by `\lambda` when tensored with `B`, but leaves the graph structure of
|
|
215
|
+
`B` unchanged. That is to say, for all `b \in B`, we have `\mathrm{wt}(b
|
|
216
|
+
\otimes t_{\lambda}) = \mathrm{wt}(b) + \lambda`.
|
|
217
|
+
|
|
218
|
+
INPUT:
|
|
219
|
+
|
|
220
|
+
- ``cartan_type`` -- a Cartan type
|
|
221
|
+
|
|
222
|
+
- ``weight`` -- an element of the weight lattice of type ``cartan_type``
|
|
223
|
+
|
|
224
|
+
EXAMPLES::
|
|
225
|
+
|
|
226
|
+
sage: ct = CartanType(['A',2])
|
|
227
|
+
sage: C = crystals.Tableaux(ct, shape=[1])
|
|
228
|
+
sage: for x in C: x.weight()
|
|
229
|
+
(1, 0, 0)
|
|
230
|
+
(0, 1, 0)
|
|
231
|
+
(0, 0, 1)
|
|
232
|
+
sage: La = RootSystem(ct).ambient_space().fundamental_weights()
|
|
233
|
+
sage: TLa = crystals.elementary.T(ct, 3*(La[1] + La[2]))
|
|
234
|
+
sage: TP = crystals.TensorProduct(TLa, C)
|
|
235
|
+
sage: for x in TP: x.weight()
|
|
236
|
+
(7, 3, 0)
|
|
237
|
+
(6, 4, 0)
|
|
238
|
+
(6, 3, 1)
|
|
239
|
+
sage: G = C.digraph()
|
|
240
|
+
sage: H = TP.digraph()
|
|
241
|
+
sage: G.is_isomorphic(H,edge_labels=True)
|
|
242
|
+
True
|
|
243
|
+
"""
|
|
244
|
+
|
|
245
|
+
@staticmethod
|
|
246
|
+
def __classcall_private__(cls, cartan_type, weight=None):
|
|
247
|
+
r"""
|
|
248
|
+
Normalize input to ensure a unique representation.
|
|
249
|
+
|
|
250
|
+
EXAMPLES::
|
|
251
|
+
|
|
252
|
+
sage: ct = CartanType(['A',3])
|
|
253
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
254
|
+
sage: wts = RootSystem(ct).ambient_space().fundamental_weights()
|
|
255
|
+
sage: X = crystals.elementary.T(['A',3], la[1])
|
|
256
|
+
sage: Y = crystals.elementary.T(la[1])
|
|
257
|
+
sage: X is Y
|
|
258
|
+
True
|
|
259
|
+
"""
|
|
260
|
+
if weight is None:
|
|
261
|
+
weight = cartan_type
|
|
262
|
+
cartan_type = weight.parent().cartan_type()
|
|
263
|
+
cartan_type = CartanType(cartan_type)
|
|
264
|
+
return super().__classcall__(cls, cartan_type, weight)
|
|
265
|
+
|
|
266
|
+
def __init__(self, cartan_type, weight):
|
|
267
|
+
r"""
|
|
268
|
+
Initialize ``self``.
|
|
269
|
+
|
|
270
|
+
EXAMPLES::
|
|
271
|
+
|
|
272
|
+
sage: la = RootSystem("A2").weight_lattice().fundamental_weights()
|
|
273
|
+
sage: B = crystals.elementary.T("A2", 5*la[2])
|
|
274
|
+
sage: TestSuite(B).run()
|
|
275
|
+
"""
|
|
276
|
+
self._weight = weight
|
|
277
|
+
self._cartan_type = cartan_type
|
|
278
|
+
if self._cartan_type.type() == 'Q':
|
|
279
|
+
category = SuperCrystals().Finite()
|
|
280
|
+
else:
|
|
281
|
+
category = (FiniteCrystals(), HighestWeightCrystals())
|
|
282
|
+
Parent.__init__(self, category=category)
|
|
283
|
+
self.module_generators = (self.element_class(self),)
|
|
284
|
+
|
|
285
|
+
def _repr_(self):
|
|
286
|
+
r"""
|
|
287
|
+
Return a string representation of ``self``.
|
|
288
|
+
|
|
289
|
+
EXAMPLES::
|
|
290
|
+
|
|
291
|
+
sage: la = RootSystem(['E',6]).weight_lattice().fundamental_weights()
|
|
292
|
+
sage: B = crystals.elementary.T(['E',6], la[6])
|
|
293
|
+
sage: B
|
|
294
|
+
The T crystal of type ['E', 6] and weight Lambda[6]
|
|
295
|
+
"""
|
|
296
|
+
return "The T crystal of type {1!s} and weight {0!s}".format(self._weight, self._cartan_type)
|
|
297
|
+
|
|
298
|
+
def _element_constructor_(self, weight):
|
|
299
|
+
r"""
|
|
300
|
+
Construct an element of ``self`` from ``weight``.
|
|
301
|
+
|
|
302
|
+
INPUT:
|
|
303
|
+
|
|
304
|
+
- ``weight`` -- an element of the weight lattice
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: la = RootSystem("E8").weight_lattice().fundamental_weights()
|
|
309
|
+
sage: T = crystals.elementary.T("E8",la[7]+la[8])
|
|
310
|
+
sage: T(la[7]+la[8])
|
|
311
|
+
Lambda[7] + Lambda[8]
|
|
312
|
+
"""
|
|
313
|
+
if weight != self._weight:
|
|
314
|
+
raise ValueError("only element is t(%s)" % self._weight)
|
|
315
|
+
return self.element_class(self)
|
|
316
|
+
|
|
317
|
+
def cardinality(self):
|
|
318
|
+
r"""
|
|
319
|
+
Return the cardinality of ``self``, which is always `1`.
|
|
320
|
+
|
|
321
|
+
EXAMPLES::
|
|
322
|
+
|
|
323
|
+
sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
|
|
324
|
+
sage: T = crystals.elementary.T(['C',12], La[9])
|
|
325
|
+
sage: T.cardinality()
|
|
326
|
+
1
|
|
327
|
+
"""
|
|
328
|
+
return ZZ.one()
|
|
329
|
+
|
|
330
|
+
def weight_lattice_realization(self):
|
|
331
|
+
"""
|
|
332
|
+
Return a realization of the lattice containing the weights
|
|
333
|
+
of ``self``.
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
|
|
338
|
+
sage: T = crystals.elementary.T(['C',12], La[9])
|
|
339
|
+
sage: T.weight_lattice_realization()
|
|
340
|
+
Weight lattice of the Root system of type ['C', 12]
|
|
341
|
+
|
|
342
|
+
sage: ct = CartanMatrix([[2, -4], [-5, 2]])
|
|
343
|
+
sage: La = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
344
|
+
sage: T = crystals.elementary.T(ct, La[1])
|
|
345
|
+
sage: T.weight_lattice_realization()
|
|
346
|
+
Weight lattice of the Root system of type
|
|
347
|
+
[ 2 -4]
|
|
348
|
+
[-5 2]
|
|
349
|
+
"""
|
|
350
|
+
return self._weight.parent()
|
|
351
|
+
|
|
352
|
+
class Element(AbstractSingleCrystalElement):
|
|
353
|
+
r"""
|
|
354
|
+
Element of a `T_{\lambda}` crystal.
|
|
355
|
+
"""
|
|
356
|
+
|
|
357
|
+
def _repr_(self):
|
|
358
|
+
r"""
|
|
359
|
+
EXAMPLES::
|
|
360
|
+
|
|
361
|
+
sage: ct = CartanType(['F',4])
|
|
362
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
363
|
+
sage: T = crystals.elementary.T(ct,2*la[1]-3*la[3])
|
|
364
|
+
sage: t = T.highest_weight_vector()
|
|
365
|
+
sage: t
|
|
366
|
+
2*Lambda[1] - 3*Lambda[3]
|
|
367
|
+
"""
|
|
368
|
+
return repr(self.parent()._weight)
|
|
369
|
+
|
|
370
|
+
def _latex_(self):
|
|
371
|
+
r"""
|
|
372
|
+
Return a LaTeX representation of ``self``.
|
|
373
|
+
|
|
374
|
+
EXAMPLES::
|
|
375
|
+
|
|
376
|
+
sage: ct = CartanType(['B',5,1])
|
|
377
|
+
sage: la = RootSystem(ct).ambient_space().fundamental_weights()
|
|
378
|
+
sage: T = crystals.elementary.T(ct, 2*la[1]-3*la[3]+la[0])
|
|
379
|
+
sage: t = T.highest_weight_vector()
|
|
380
|
+
sage: latex(t)
|
|
381
|
+
{t_{-e_{0} - 3 e_{1} - 3 e_{2} - 3 e_{deltacheck}}}
|
|
382
|
+
"""
|
|
383
|
+
return "{t_{" + self.parent()._weight._latex_() + "}}"
|
|
384
|
+
|
|
385
|
+
def epsilon(self, i):
|
|
386
|
+
r"""
|
|
387
|
+
Return `\varepsilon_i` of ``self``, which is `-\infty` for all `i`.
|
|
388
|
+
|
|
389
|
+
INPUT:
|
|
390
|
+
|
|
391
|
+
- ``i`` -- an element of the index set
|
|
392
|
+
|
|
393
|
+
EXAMPLES::
|
|
394
|
+
|
|
395
|
+
sage: ct = CartanType(['C',5])
|
|
396
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
397
|
+
sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
|
|
398
|
+
sage: t = T.highest_weight_vector()
|
|
399
|
+
sage: [t.epsilon(i) for i in T.index_set()]
|
|
400
|
+
[-inf, -inf, -inf, -inf, -inf]
|
|
401
|
+
"""
|
|
402
|
+
return float("-inf")
|
|
403
|
+
|
|
404
|
+
def phi(self, i):
|
|
405
|
+
r"""
|
|
406
|
+
Return `\varphi_i` of ``self``, which is `-\infty` for all `i`.
|
|
407
|
+
|
|
408
|
+
INPUT:
|
|
409
|
+
|
|
410
|
+
- ``i`` -- an element of the index set
|
|
411
|
+
|
|
412
|
+
EXAMPLES::
|
|
413
|
+
|
|
414
|
+
sage: ct = CartanType(['C',5])
|
|
415
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
416
|
+
sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
|
|
417
|
+
sage: t = T.highest_weight_vector()
|
|
418
|
+
sage: [t.phi(i) for i in T.index_set()]
|
|
419
|
+
[-inf, -inf, -inf, -inf, -inf]
|
|
420
|
+
"""
|
|
421
|
+
return float("-inf")
|
|
422
|
+
|
|
423
|
+
def weight(self):
|
|
424
|
+
r"""
|
|
425
|
+
Return the weight of ``self``, which is always `\lambda`.
|
|
426
|
+
|
|
427
|
+
EXAMPLES::
|
|
428
|
+
|
|
429
|
+
sage: ct = CartanType(['C',5])
|
|
430
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
431
|
+
sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
|
|
432
|
+
sage: t = T.highest_weight_vector()
|
|
433
|
+
sage: t.weight()
|
|
434
|
+
-Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]
|
|
435
|
+
"""
|
|
436
|
+
return self.parent()._weight
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
class RCrystal(UniqueRepresentation, Parent):
|
|
440
|
+
r"""
|
|
441
|
+
The crystal `R_{\lambda}`.
|
|
442
|
+
|
|
443
|
+
For a fixed weight `\lambda`, the crystal `R_{\lambda} = \{ r_{\lambda} \}`
|
|
444
|
+
is a single element crystal with the crystal structure defined by
|
|
445
|
+
|
|
446
|
+
.. MATH::
|
|
447
|
+
|
|
448
|
+
\mathrm{wt}(r_{\lambda}) = \lambda, \quad
|
|
449
|
+
e_i r_{\lambda} = f_i r_{\lambda} = 0, \quad
|
|
450
|
+
\varepsilon_i(r_{\lambda}) = -\langle h_i, \lambda\rangle, \quad
|
|
451
|
+
\varphi_i(r_{\lambda}) = 0,
|
|
452
|
+
|
|
453
|
+
where `\{h_i\}` are the simple coroots.
|
|
454
|
+
|
|
455
|
+
Tensoring `R_{\lambda}` with a crystal `B` results in shifting the weights
|
|
456
|
+
of the vertices in `B` by `\lambda` and may also cut a subset out of the
|
|
457
|
+
original graph of `B`. That is, `\mathrm{wt}(r_{\lambda} \otimes b) =
|
|
458
|
+
\mathrm{wt}(b) + \lambda`, where `b \in B`, provided `r_{\lambda} \otimes
|
|
459
|
+
b \neq 0`. For example, the crystal graph of `B(\lambda)` is the same as
|
|
460
|
+
the crystal graph of `R_{\lambda} \otimes B(\infty)` generated from the
|
|
461
|
+
component `r_{\lambda} \otimes u_{\infty}`.
|
|
462
|
+
|
|
463
|
+
There is also a dual version of this crystal given by
|
|
464
|
+
`R^{\vee}_{\lambda} = \{ r^{\vee}_{\lambda} \}` with the crystal
|
|
465
|
+
structure defined by
|
|
466
|
+
|
|
467
|
+
.. MATH::
|
|
468
|
+
|
|
469
|
+
\mathrm{wt}(r^{\vee}_{\lambda}) = \lambda, \quad
|
|
470
|
+
e_i r^{\vee}_{\lambda} = f_i r^{\vee}_{\lambda} = 0, \quad
|
|
471
|
+
\varepsilon_i(r^{\vee}_{\lambda}) = 0, \quad
|
|
472
|
+
\varphi_i(r^{\vee}_{\lambda}) = \langle h_i, \lambda\rangle.
|
|
473
|
+
|
|
474
|
+
INPUT:
|
|
475
|
+
|
|
476
|
+
- ``cartan_type`` -- a Cartan type
|
|
477
|
+
- ``weight`` -- an element of the weight lattice of type ``cartan_type``
|
|
478
|
+
- ``dual`` -- boolean (default: ``False``)
|
|
479
|
+
|
|
480
|
+
EXAMPLES:
|
|
481
|
+
|
|
482
|
+
We check by tensoring `R_{\lambda}` with `B(\infty)` results in a
|
|
483
|
+
component of `B(\lambda)`::
|
|
484
|
+
|
|
485
|
+
sage: B = crystals.infinity.Tableaux("A2")
|
|
486
|
+
sage: R = crystals.elementary.R("A2", B.Lambda()[1]+B.Lambda()[2])
|
|
487
|
+
sage: T = crystals.TensorProduct(R, B)
|
|
488
|
+
sage: mg = T(R.highest_weight_vector(), B.highest_weight_vector())
|
|
489
|
+
sage: S = T.subcrystal(generators=[mg])
|
|
490
|
+
sage: sorted([x.weight() for x in S], key=str)
|
|
491
|
+
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
|
|
492
|
+
(1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
|
|
493
|
+
sage: C = crystals.Tableaux("A2", shape=[2,1])
|
|
494
|
+
sage: sorted([x.weight() for x in C], key=str)
|
|
495
|
+
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 1, 1),
|
|
496
|
+
(1, 1, 1), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
|
|
497
|
+
sage: GT = T.digraph(subset=S)
|
|
498
|
+
sage: GC = C.digraph()
|
|
499
|
+
sage: GT.is_isomorphic(GC, edge_labels=True)
|
|
500
|
+
True
|
|
501
|
+
"""
|
|
502
|
+
|
|
503
|
+
@staticmethod
|
|
504
|
+
def __classcall_private__(cls, cartan_type, weight=None, dual=False):
|
|
505
|
+
r"""
|
|
506
|
+
Normalize input to ensure a unique representation.
|
|
507
|
+
|
|
508
|
+
EXAMPLES::
|
|
509
|
+
|
|
510
|
+
sage: ct = CartanType(['A',3])
|
|
511
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
512
|
+
sage: X = crystals.elementary.R(['A',3], la[1])
|
|
513
|
+
sage: Y = crystals.elementary.R(la[1])
|
|
514
|
+
sage: X is Y
|
|
515
|
+
True
|
|
516
|
+
"""
|
|
517
|
+
if weight is None:
|
|
518
|
+
weight = cartan_type
|
|
519
|
+
cartan_type = weight.parent().cartan_type()
|
|
520
|
+
cartan_type = CartanType(cartan_type)
|
|
521
|
+
return super().__classcall__(cls, cartan_type, weight, dual)
|
|
522
|
+
|
|
523
|
+
def __init__(self, cartan_type, weight, dual):
|
|
524
|
+
r"""
|
|
525
|
+
Initialize ``self``.
|
|
526
|
+
|
|
527
|
+
EXAMPLES::
|
|
528
|
+
|
|
529
|
+
sage: la = RootSystem("A2").weight_lattice().fundamental_weights()
|
|
530
|
+
sage: B = crystals.elementary.R("A2",5*la[2])
|
|
531
|
+
sage: TestSuite(B).run()
|
|
532
|
+
"""
|
|
533
|
+
self._weight = weight
|
|
534
|
+
self._cartan_type = cartan_type
|
|
535
|
+
self._dual = dual
|
|
536
|
+
if self._cartan_type.type() == 'Q':
|
|
537
|
+
category = SuperCrystals().Finite()
|
|
538
|
+
else:
|
|
539
|
+
category = (FiniteCrystals(), HighestWeightCrystals())
|
|
540
|
+
Parent.__init__(self, category=category)
|
|
541
|
+
self.module_generators = (self.element_class(self),)
|
|
542
|
+
|
|
543
|
+
def _repr_(self):
|
|
544
|
+
r"""
|
|
545
|
+
Return a string representation of ``self``.
|
|
546
|
+
|
|
547
|
+
EXAMPLES::
|
|
548
|
+
|
|
549
|
+
sage: la = RootSystem(['E',6]).weight_lattice().fundamental_weights()
|
|
550
|
+
sage: B = crystals.elementary.R(['E',6], la[6])
|
|
551
|
+
sage: B
|
|
552
|
+
The R crystal of weight Lambda[6] and type ['E', 6]
|
|
553
|
+
|
|
554
|
+
sage: crystals.elementary.R(['E',6], la[1], dual=True)
|
|
555
|
+
The dual R crystal of weight Lambda[1] and type ['E', 6]
|
|
556
|
+
"""
|
|
557
|
+
dual_str = " dual" if self._dual else ""
|
|
558
|
+
return "The{} R crystal of weight {} and type {}".format(
|
|
559
|
+
dual_str, self._weight, self._cartan_type)
|
|
560
|
+
|
|
561
|
+
def _element_constructor_(self, weight):
|
|
562
|
+
r"""
|
|
563
|
+
Construct an element of ``self`` from ``weight``.
|
|
564
|
+
|
|
565
|
+
INPUT:
|
|
566
|
+
|
|
567
|
+
- ``weight`` -- an element of the weight lattice
|
|
568
|
+
|
|
569
|
+
EXAMPLES::
|
|
570
|
+
|
|
571
|
+
sage: la = RootSystem("E8").weight_lattice().fundamental_weights()
|
|
572
|
+
sage: R = crystals.elementary.R("E8",la[7]+la[8])
|
|
573
|
+
sage: R(la[7]+la[8])
|
|
574
|
+
Lambda[7] + Lambda[8]
|
|
575
|
+
"""
|
|
576
|
+
if weight != self._weight:
|
|
577
|
+
raise ValueError("Only element is r(%s)" % self._weight)
|
|
578
|
+
return self.element_class(self)
|
|
579
|
+
|
|
580
|
+
def cardinality(self):
|
|
581
|
+
r"""
|
|
582
|
+
Return the cardinality of ``self``, which is always `1`.
|
|
583
|
+
|
|
584
|
+
EXAMPLES::
|
|
585
|
+
|
|
586
|
+
sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
|
|
587
|
+
sage: R = crystals.elementary.R(['C',12],La[9])
|
|
588
|
+
sage: R.cardinality()
|
|
589
|
+
1
|
|
590
|
+
"""
|
|
591
|
+
return ZZ.one()
|
|
592
|
+
|
|
593
|
+
def weight_lattice_realization(self):
|
|
594
|
+
"""
|
|
595
|
+
Return a realization of the lattice containing the weights
|
|
596
|
+
of ``self``.
|
|
597
|
+
|
|
598
|
+
EXAMPLES::
|
|
599
|
+
|
|
600
|
+
sage: La = RootSystem(['C',12]).weight_lattice().fundamental_weights()
|
|
601
|
+
sage: R = crystals.elementary.R(['C',12], La[9])
|
|
602
|
+
sage: R.weight_lattice_realization()
|
|
603
|
+
Weight lattice of the Root system of type ['C', 12]
|
|
604
|
+
|
|
605
|
+
sage: ct = CartanMatrix([[2, -4], [-5, 2]])
|
|
606
|
+
sage: La = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
607
|
+
sage: R = crystals.elementary.R(ct, La[1])
|
|
608
|
+
sage: R.weight_lattice_realization()
|
|
609
|
+
Weight lattice of the Root system of type
|
|
610
|
+
[ 2 -4]
|
|
611
|
+
[-5 2]
|
|
612
|
+
"""
|
|
613
|
+
return self._weight.parent()
|
|
614
|
+
|
|
615
|
+
class Element(AbstractSingleCrystalElement):
|
|
616
|
+
r"""
|
|
617
|
+
Element of a `R_{\lambda}` crystal.
|
|
618
|
+
"""
|
|
619
|
+
|
|
620
|
+
def _repr_(self):
|
|
621
|
+
r"""
|
|
622
|
+
EXAMPLES::
|
|
623
|
+
|
|
624
|
+
sage: ct = CartanType(['F',4])
|
|
625
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
626
|
+
sage: T = crystals.elementary.T(ct,2*la[1]-3*la[3])
|
|
627
|
+
sage: t = T.highest_weight_vector()
|
|
628
|
+
sage: t
|
|
629
|
+
2*Lambda[1] - 3*Lambda[3]
|
|
630
|
+
"""
|
|
631
|
+
return repr(self.parent()._weight)
|
|
632
|
+
|
|
633
|
+
def _latex_(self):
|
|
634
|
+
r"""
|
|
635
|
+
Return a LaTeX representation of ``self``.
|
|
636
|
+
|
|
637
|
+
EXAMPLES::
|
|
638
|
+
|
|
639
|
+
sage: la = RootSystem("G2").weight_lattice().fundamental_weights()
|
|
640
|
+
sage: R = crystals.elementary.R("G2",la[1])
|
|
641
|
+
sage: r = R.highest_weight_vector()
|
|
642
|
+
sage: latex(r)
|
|
643
|
+
{r_{\Lambda_{1}}}
|
|
644
|
+
|
|
645
|
+
sage: R = crystals.elementary.R("G2", la[1], dual=True)
|
|
646
|
+
sage: latex(R.highest_weight_vector())
|
|
647
|
+
{r^{\vee}_{\Lambda_{1}}}
|
|
648
|
+
"""
|
|
649
|
+
if self.parent()._dual:
|
|
650
|
+
return r"{r^{\vee}_{" + self.parent()._weight._latex_() + "}}"
|
|
651
|
+
return "{r_{" + self.parent()._weight._latex_() + "}}"
|
|
652
|
+
|
|
653
|
+
def epsilon(self, i):
|
|
654
|
+
r"""
|
|
655
|
+
Return `\varepsilon_i` of ``self``.
|
|
656
|
+
|
|
657
|
+
We have `\varepsilon_i(r_{\lambda}) = -\langle h_i, \lambda
|
|
658
|
+
\rangle` for all `i`, where `h_i` is a simple coroot.
|
|
659
|
+
|
|
660
|
+
INPUT:
|
|
661
|
+
|
|
662
|
+
- ``i`` -- an element of the index set
|
|
663
|
+
|
|
664
|
+
EXAMPLES::
|
|
665
|
+
|
|
666
|
+
sage: la = RootSystem(['A',2]).weight_lattice().fundamental_weights()
|
|
667
|
+
sage: R = crystals.elementary.R("A2", la[1])
|
|
668
|
+
sage: r = R.highest_weight_vector()
|
|
669
|
+
sage: [r.epsilon(i) for i in R.index_set()]
|
|
670
|
+
[-1, 0]
|
|
671
|
+
|
|
672
|
+
sage: R = crystals.elementary.R("A2", la[1], dual=True)
|
|
673
|
+
sage: r = R.highest_weight_vector()
|
|
674
|
+
sage: [r.epsilon(i) for i in R.index_set()]
|
|
675
|
+
[0, 0]
|
|
676
|
+
"""
|
|
677
|
+
if self.parent()._dual:
|
|
678
|
+
return ZZ.zero()
|
|
679
|
+
else:
|
|
680
|
+
P = self.parent().weight_lattice_realization()
|
|
681
|
+
h = P.simple_coroots()
|
|
682
|
+
return -P(self.weight()).scalar(h[i])
|
|
683
|
+
|
|
684
|
+
def phi(self, i):
|
|
685
|
+
r"""
|
|
686
|
+
Return `\varphi_i` of ``self``, which is `0` for all `i`.
|
|
687
|
+
|
|
688
|
+
INPUT:
|
|
689
|
+
|
|
690
|
+
- ``i`` -- an element of the index set
|
|
691
|
+
|
|
692
|
+
EXAMPLES::
|
|
693
|
+
|
|
694
|
+
sage: la = RootSystem("C5").weight_lattice().fundamental_weights()
|
|
695
|
+
sage: R = crystals.elementary.R("C5", la[4]+la[5])
|
|
696
|
+
sage: r = R.highest_weight_vector()
|
|
697
|
+
sage: [r.phi(i) for i in R.index_set()]
|
|
698
|
+
[0, 0, 0, 0, 0]
|
|
699
|
+
|
|
700
|
+
sage: R = crystals.elementary.R("C5", la[4]+la[5], dual=True)
|
|
701
|
+
sage: r = R.highest_weight_vector()
|
|
702
|
+
sage: [r.phi(i) for i in R.index_set()]
|
|
703
|
+
[0, 0, 0, 1, 1]
|
|
704
|
+
"""
|
|
705
|
+
if self.parent()._dual:
|
|
706
|
+
P = self.parent().weight_lattice_realization()
|
|
707
|
+
h = P.simple_coroots()
|
|
708
|
+
return P(self.weight()).scalar(h[i])
|
|
709
|
+
else:
|
|
710
|
+
return ZZ.zero()
|
|
711
|
+
|
|
712
|
+
def weight(self):
|
|
713
|
+
r"""
|
|
714
|
+
Return the weight of ``self``, which is always `\lambda`.
|
|
715
|
+
|
|
716
|
+
EXAMPLES::
|
|
717
|
+
|
|
718
|
+
sage: ct = CartanType(['C',5])
|
|
719
|
+
sage: la = RootSystem(ct).weight_lattice().fundamental_weights()
|
|
720
|
+
sage: T = crystals.elementary.T(ct,la[4]+la[5]-la[1]-la[2])
|
|
721
|
+
sage: t = T.highest_weight_vector()
|
|
722
|
+
sage: t.weight()
|
|
723
|
+
-Lambda[1] - Lambda[2] + Lambda[4] + Lambda[5]
|
|
724
|
+
"""
|
|
725
|
+
return self.parent()._weight
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
class ElementaryCrystal(UniqueRepresentation, Parent):
|
|
729
|
+
r"""
|
|
730
|
+
The elementary crystal `B_i`.
|
|
731
|
+
|
|
732
|
+
For `i` an element of the index set of type `X`, the crystal `B_i` of type
|
|
733
|
+
`X` is the set
|
|
734
|
+
|
|
735
|
+
.. MATH::
|
|
736
|
+
|
|
737
|
+
B_i = \{ b_i(m) : m \in \ZZ \},
|
|
738
|
+
|
|
739
|
+
where the crystal structure is given by
|
|
740
|
+
|
|
741
|
+
.. MATH::
|
|
742
|
+
|
|
743
|
+
\begin{aligned}
|
|
744
|
+
\mathrm{wt}\bigl(b_i(m)\bigr) &= m\alpha_i \\
|
|
745
|
+
\varphi_j\bigl(b_i(m)\bigr) &= \begin{cases}
|
|
746
|
+
m & \text{ if } j=i, \\
|
|
747
|
+
-\infty & \text{ if } j\neq i,
|
|
748
|
+
\end{cases} \\
|
|
749
|
+
\varepsilon_j\bigl(b_i(m)\bigr) &= \begin{cases}
|
|
750
|
+
-m & \text{ if } j=i, \\
|
|
751
|
+
-\infty & \text{ if } j\neq i,
|
|
752
|
+
\end{cases} \\
|
|
753
|
+
e_j b_i(m) &= \begin{cases}
|
|
754
|
+
b_i(m+1) & \text{ if } j=i, \\
|
|
755
|
+
0 & \text{ if } j\neq i,
|
|
756
|
+
\end{cases} \\
|
|
757
|
+
f_j b_i(m) &= \begin{cases}
|
|
758
|
+
b_i(m-1) & \text{ if } j=i, \\
|
|
759
|
+
0 & \text{ if } j\neq i.
|
|
760
|
+
\end{cases}
|
|
761
|
+
\end{aligned}
|
|
762
|
+
|
|
763
|
+
The *Kashiwara embedding theorem* asserts there is a unique strict crystal
|
|
764
|
+
embedding of crystals
|
|
765
|
+
|
|
766
|
+
.. MATH::
|
|
767
|
+
|
|
768
|
+
B(\infty) \hookrightarrow B_i \otimes B(\infty),
|
|
769
|
+
|
|
770
|
+
satisfying certain properties (see [Ka1993]_). The above embedding
|
|
771
|
+
may be iterated to obtain a new embedding
|
|
772
|
+
|
|
773
|
+
.. MATH::
|
|
774
|
+
|
|
775
|
+
B(\infty) \hookrightarrow B_{i_N} \otimes B_{i_{N-1}}
|
|
776
|
+
\otimes \cdots \otimes B_{i_2} \otimes B_{i_1} \otimes B(\infty),
|
|
777
|
+
|
|
778
|
+
which is a foundational object in the study of *polyhedral realizations of
|
|
779
|
+
crystals* (see, for example, [NZ1997]_).
|
|
780
|
+
"""
|
|
781
|
+
|
|
782
|
+
@staticmethod
|
|
783
|
+
def __classcall_private__(cls, cartan_type, i):
|
|
784
|
+
r"""
|
|
785
|
+
Normalize input to ensure a unique representation.
|
|
786
|
+
|
|
787
|
+
EXAMPLES::
|
|
788
|
+
|
|
789
|
+
sage: B = crystals.elementary.Elementary(['A',4], 3)
|
|
790
|
+
sage: C = crystals.elementary.Elementary(CartanType("A4"), int(3))
|
|
791
|
+
sage: B is C
|
|
792
|
+
True
|
|
793
|
+
"""
|
|
794
|
+
cartan_type = CartanType(cartan_type)
|
|
795
|
+
if i not in cartan_type.index_set():
|
|
796
|
+
raise ValueError('i must an element of the index set')
|
|
797
|
+
return super().__classcall__(cls, cartan_type, i)
|
|
798
|
+
|
|
799
|
+
def __init__(self, cartan_type, i):
|
|
800
|
+
r"""
|
|
801
|
+
Initialize ``self``.
|
|
802
|
+
|
|
803
|
+
EXAMPLES::
|
|
804
|
+
|
|
805
|
+
sage: B = crystals.elementary.Elementary("D4",3)
|
|
806
|
+
sage: TestSuite(B).run()
|
|
807
|
+
"""
|
|
808
|
+
Parent.__init__(self, category=(Crystals(), InfiniteEnumeratedSets()))
|
|
809
|
+
self._i = i
|
|
810
|
+
self._cartan_type = cartan_type
|
|
811
|
+
self.module_generators = (self.element_class(self, 0),)
|
|
812
|
+
|
|
813
|
+
def _repr_(self):
|
|
814
|
+
r"""
|
|
815
|
+
Return a string representation of ``self``.
|
|
816
|
+
|
|
817
|
+
EXAMPLES::
|
|
818
|
+
|
|
819
|
+
sage: B = crystals.elementary.Elementary(['B',5,1], 4)
|
|
820
|
+
sage: B
|
|
821
|
+
The 4-elementary crystal of type ['B', 5, 1]
|
|
822
|
+
"""
|
|
823
|
+
return "The {0!s}-elementary crystal of type {1!s}".format(self._i, self._cartan_type)
|
|
824
|
+
|
|
825
|
+
def _element_constructor_(self, m):
|
|
826
|
+
r"""
|
|
827
|
+
Construct an element of ``self`` from ``weight``.
|
|
828
|
+
|
|
829
|
+
INPUT:
|
|
830
|
+
|
|
831
|
+
- ``m`` -- integer
|
|
832
|
+
|
|
833
|
+
EXAMPLES::
|
|
834
|
+
|
|
835
|
+
sage: B = crystals.elementary.Elementary(['F',4], 2)
|
|
836
|
+
sage: B(0)
|
|
837
|
+
0
|
|
838
|
+
sage: B(-15)
|
|
839
|
+
-15
|
|
840
|
+
sage: B(721)
|
|
841
|
+
721
|
|
842
|
+
"""
|
|
843
|
+
return self.element_class(self, ZZ(m))
|
|
844
|
+
|
|
845
|
+
def weight_lattice_realization(self):
|
|
846
|
+
"""
|
|
847
|
+
Return a realization of the lattice containing the weights
|
|
848
|
+
of ``self``.
|
|
849
|
+
|
|
850
|
+
EXAMPLES::
|
|
851
|
+
|
|
852
|
+
sage: B = crystals.elementary.Elementary(['A',4, 1], 2)
|
|
853
|
+
sage: B.weight_lattice_realization()
|
|
854
|
+
Root lattice of the Root system of type ['A', 4, 1]
|
|
855
|
+
"""
|
|
856
|
+
return self.cartan_type().root_system().root_lattice()
|
|
857
|
+
|
|
858
|
+
class Element(Element):
|
|
859
|
+
r"""
|
|
860
|
+
Element of a `B_i` crystal.
|
|
861
|
+
"""
|
|
862
|
+
|
|
863
|
+
def __init__(self, parent, m):
|
|
864
|
+
r"""
|
|
865
|
+
EXAMPLES::
|
|
866
|
+
|
|
867
|
+
sage: B = crystals.elementary.Elementary(['B',7],7)
|
|
868
|
+
sage: elt = B(17); elt
|
|
869
|
+
17
|
|
870
|
+
"""
|
|
871
|
+
self._m = m
|
|
872
|
+
Element.__init__(self, parent)
|
|
873
|
+
|
|
874
|
+
def __hash__(self):
|
|
875
|
+
r"""
|
|
876
|
+
TESTS::
|
|
877
|
+
|
|
878
|
+
sage: B = crystals.elementary.Elementary(['B',7],7)
|
|
879
|
+
sage: hash(B(17))
|
|
880
|
+
17
|
|
881
|
+
"""
|
|
882
|
+
return hash(self._m)
|
|
883
|
+
|
|
884
|
+
def _repr_(self):
|
|
885
|
+
r"""
|
|
886
|
+
EXAMPLES::
|
|
887
|
+
|
|
888
|
+
sage: B = crystals.elementary.Elementary(['A',4],3)
|
|
889
|
+
sage: B(-47)
|
|
890
|
+
-47
|
|
891
|
+
"""
|
|
892
|
+
return repr(self._m)
|
|
893
|
+
|
|
894
|
+
def __lt__(self, other):
|
|
895
|
+
r"""
|
|
896
|
+
EXAMPLES::
|
|
897
|
+
|
|
898
|
+
sage: B = crystals.elementary.Elementary("D4",3)
|
|
899
|
+
sage: b = B(1)
|
|
900
|
+
sage: c = B(-1)
|
|
901
|
+
sage: b.__lt__(c)
|
|
902
|
+
False
|
|
903
|
+
sage: c.__lt__(b)
|
|
904
|
+
True
|
|
905
|
+
"""
|
|
906
|
+
if self.parent() is not other.parent():
|
|
907
|
+
return False
|
|
908
|
+
return Integer(self._m) < Integer(other._m)
|
|
909
|
+
|
|
910
|
+
def __eq__(self, other):
|
|
911
|
+
r"""
|
|
912
|
+
EXAMPLES::
|
|
913
|
+
|
|
914
|
+
sage: B = crystals.elementary.Elementary("A2",1)
|
|
915
|
+
sage: C = crystals.elementary.Elementary("A2",2)
|
|
916
|
+
sage: D = crystals.elementary.Elementary("B2",1)
|
|
917
|
+
sage: [B(0) == B(1), B(0) == C(0), B(0) == D(0), C(0) == D(0)]
|
|
918
|
+
[False, False, False, False]
|
|
919
|
+
sage: [B(1) == B(1), C(12) == C(12), D(-1) == D(-1)]
|
|
920
|
+
[True, True, True]
|
|
921
|
+
"""
|
|
922
|
+
if isinstance(other, ElementaryCrystal.Element):
|
|
923
|
+
return self.parent() is other.parent() and self._m == other._m
|
|
924
|
+
return False
|
|
925
|
+
|
|
926
|
+
def __ne__(self, other):
|
|
927
|
+
r"""
|
|
928
|
+
EXAMPLES::
|
|
929
|
+
|
|
930
|
+
sage: B = crystals.elementary.Elementary("A2",1)
|
|
931
|
+
sage: B(0) != B(2)
|
|
932
|
+
True
|
|
933
|
+
sage: B(0) != B(0)
|
|
934
|
+
False
|
|
935
|
+
"""
|
|
936
|
+
return not self == other
|
|
937
|
+
|
|
938
|
+
def _latex_(self):
|
|
939
|
+
r"""
|
|
940
|
+
Return a LaTeX representation of ``self``.
|
|
941
|
+
|
|
942
|
+
EXAMPLES::
|
|
943
|
+
|
|
944
|
+
sage: B = crystals.elementary.Elementary(['B',11,1],6)
|
|
945
|
+
sage: latex(B(26))
|
|
946
|
+
{b_{6}(26)}
|
|
947
|
+
"""
|
|
948
|
+
return "{b_{%s}(%s)}" % (self.parent()._i, self._m)
|
|
949
|
+
|
|
950
|
+
def e(self, i):
|
|
951
|
+
r"""
|
|
952
|
+
Return the action of `e_i` on ``self``.
|
|
953
|
+
|
|
954
|
+
INPUT:
|
|
955
|
+
|
|
956
|
+
- ``i`` -- an element of the index set
|
|
957
|
+
|
|
958
|
+
EXAMPLES::
|
|
959
|
+
|
|
960
|
+
sage: B = crystals.elementary.Elementary(['E',7],1)
|
|
961
|
+
sage: B(3).e(1)
|
|
962
|
+
4
|
|
963
|
+
sage: B(172).e_string([1]*171)
|
|
964
|
+
343
|
|
965
|
+
sage: B(0).e(2)
|
|
966
|
+
"""
|
|
967
|
+
if i == self.parent()._i:
|
|
968
|
+
return self.__class__(self.parent(), self._m + 1)
|
|
969
|
+
else:
|
|
970
|
+
return None
|
|
971
|
+
|
|
972
|
+
def f(self, i):
|
|
973
|
+
r"""
|
|
974
|
+
Return the action of `f_i` on ``self``.
|
|
975
|
+
|
|
976
|
+
INPUT:
|
|
977
|
+
|
|
978
|
+
- ``i`` -- an element of the index set
|
|
979
|
+
|
|
980
|
+
EXAMPLES::
|
|
981
|
+
|
|
982
|
+
sage: B = crystals.elementary.Elementary(['E',7],1)
|
|
983
|
+
sage: B(3).f(1)
|
|
984
|
+
2
|
|
985
|
+
sage: B(172).f_string([1]*171)
|
|
986
|
+
1
|
|
987
|
+
sage: B(0).e(2)
|
|
988
|
+
"""
|
|
989
|
+
if i == self.parent()._i:
|
|
990
|
+
return self.__class__(self.parent(), self._m - 1)
|
|
991
|
+
else:
|
|
992
|
+
return None
|
|
993
|
+
|
|
994
|
+
def epsilon(self, i):
|
|
995
|
+
r"""
|
|
996
|
+
Return `\varepsilon_i` of ``self``.
|
|
997
|
+
|
|
998
|
+
INPUT:
|
|
999
|
+
|
|
1000
|
+
- ``i`` -- an element of the index set
|
|
1001
|
+
|
|
1002
|
+
EXAMPLES::
|
|
1003
|
+
|
|
1004
|
+
sage: B = crystals.elementary.Elementary(['F',4],3)
|
|
1005
|
+
sage: [[B(j).epsilon(i) for i in B.index_set()] for j in range(5)]
|
|
1006
|
+
[[-inf, -inf, 0, -inf],
|
|
1007
|
+
[-inf, -inf, -1, -inf],
|
|
1008
|
+
[-inf, -inf, -2, -inf],
|
|
1009
|
+
[-inf, -inf, -3, -inf],
|
|
1010
|
+
[-inf, -inf, -4, -inf]]
|
|
1011
|
+
"""
|
|
1012
|
+
if i == self.parent()._i:
|
|
1013
|
+
return -self._m
|
|
1014
|
+
else:
|
|
1015
|
+
return float("-inf")
|
|
1016
|
+
|
|
1017
|
+
def phi(self, i):
|
|
1018
|
+
r"""
|
|
1019
|
+
Return `\varphi_i` of ``self``.
|
|
1020
|
+
|
|
1021
|
+
INPUT:
|
|
1022
|
+
|
|
1023
|
+
- ``i`` -- an element of the index set
|
|
1024
|
+
|
|
1025
|
+
EXAMPLES::
|
|
1026
|
+
|
|
1027
|
+
sage: B = crystals.elementary.Elementary(['E',8,1],4)
|
|
1028
|
+
sage: [[B(m).phi(j) for j in B.index_set()] for m in range(44,49)]
|
|
1029
|
+
[[-inf, -inf, -inf, -inf, 44, -inf, -inf, -inf, -inf],
|
|
1030
|
+
[-inf, -inf, -inf, -inf, 45, -inf, -inf, -inf, -inf],
|
|
1031
|
+
[-inf, -inf, -inf, -inf, 46, -inf, -inf, -inf, -inf],
|
|
1032
|
+
[-inf, -inf, -inf, -inf, 47, -inf, -inf, -inf, -inf],
|
|
1033
|
+
[-inf, -inf, -inf, -inf, 48, -inf, -inf, -inf, -inf]]
|
|
1034
|
+
"""
|
|
1035
|
+
if i == self.parent()._i:
|
|
1036
|
+
return self._m
|
|
1037
|
+
else:
|
|
1038
|
+
return float("-inf")
|
|
1039
|
+
|
|
1040
|
+
def weight(self):
|
|
1041
|
+
r"""
|
|
1042
|
+
Return the weight of ``self``.
|
|
1043
|
+
|
|
1044
|
+
EXAMPLES::
|
|
1045
|
+
|
|
1046
|
+
sage: B = crystals.elementary.Elementary(['C',14],12)
|
|
1047
|
+
sage: B(-385).weight()
|
|
1048
|
+
-385*alpha[12]
|
|
1049
|
+
"""
|
|
1050
|
+
Q = self.parent().weight_lattice_realization()
|
|
1051
|
+
return self._m * Q.simple_root(self.parent()._i)
|
|
1052
|
+
|
|
1053
|
+
|
|
1054
|
+
class ComponentCrystal(UniqueRepresentation, Parent):
|
|
1055
|
+
r"""
|
|
1056
|
+
The component crystal.
|
|
1057
|
+
|
|
1058
|
+
Defined in [Ka1993]_, the component crystal `C = \{c\}` is the single
|
|
1059
|
+
element crystal whose crystal structure is defined by
|
|
1060
|
+
|
|
1061
|
+
.. MATH::
|
|
1062
|
+
|
|
1063
|
+
\mathrm{wt}(c) = 0, \quad
|
|
1064
|
+
e_i c = f_i c = 0, \quad
|
|
1065
|
+
\varepsilon_i(c) = \varphi_i(c) = 0.
|
|
1066
|
+
|
|
1067
|
+
Note `C \cong B(0)`, where `B(0)` is the highest weight crystal of highest
|
|
1068
|
+
weight `0`.
|
|
1069
|
+
|
|
1070
|
+
INPUT:
|
|
1071
|
+
|
|
1072
|
+
- ``cartan_type`` -- a Cartan type
|
|
1073
|
+
"""
|
|
1074
|
+
|
|
1075
|
+
@staticmethod
|
|
1076
|
+
def __classcall_private__(cls, cartan_type, P=None):
|
|
1077
|
+
r"""
|
|
1078
|
+
Normalize input to ensure a unique representation.
|
|
1079
|
+
|
|
1080
|
+
EXAMPLES::
|
|
1081
|
+
|
|
1082
|
+
sage: C = crystals.elementary.Component("A2")
|
|
1083
|
+
sage: D = crystals.elementary.Component(CartanType(['A',2]))
|
|
1084
|
+
sage: C is D
|
|
1085
|
+
True
|
|
1086
|
+
sage: AS = RootSystem(['A',2]).ambient_space()
|
|
1087
|
+
sage: E = crystals.elementary.Component(AS)
|
|
1088
|
+
sage: F = crystals.elementary.Component(CartanType(['A',2]), AS)
|
|
1089
|
+
sage: C is E and C is F
|
|
1090
|
+
True
|
|
1091
|
+
"""
|
|
1092
|
+
if cartan_type in RootLatticeRealizations:
|
|
1093
|
+
P = cartan_type
|
|
1094
|
+
cartan_type = P.cartan_type()
|
|
1095
|
+
elif P is None:
|
|
1096
|
+
cartan_type = CartanType(cartan_type)
|
|
1097
|
+
P = cartan_type.root_system().ambient_space()
|
|
1098
|
+
if P is None:
|
|
1099
|
+
P = cartan_type.root_system().weight_lattice()
|
|
1100
|
+
return super().__classcall__(cls, cartan_type, P)
|
|
1101
|
+
|
|
1102
|
+
def __init__(self, cartan_type, P):
|
|
1103
|
+
r"""
|
|
1104
|
+
Initialize ``self``.
|
|
1105
|
+
|
|
1106
|
+
EXAMPLES::
|
|
1107
|
+
|
|
1108
|
+
sage: B = crystals.elementary.Component("D4")
|
|
1109
|
+
sage: TestSuite(B).run()
|
|
1110
|
+
"""
|
|
1111
|
+
self._weight_lattice_realization = P
|
|
1112
|
+
self._cartan_type = cartan_type
|
|
1113
|
+
if self._cartan_type.type() == 'Q':
|
|
1114
|
+
category = RegularSuperCrystals()
|
|
1115
|
+
else:
|
|
1116
|
+
category = (RegularCrystals().Finite(), HighestWeightCrystals())
|
|
1117
|
+
Parent.__init__(self, category=category)
|
|
1118
|
+
self.module_generators = (self.element_class(self),)
|
|
1119
|
+
|
|
1120
|
+
def _repr_(self):
|
|
1121
|
+
r"""
|
|
1122
|
+
Return a string representation of ``self``.
|
|
1123
|
+
|
|
1124
|
+
EXAMPLES::
|
|
1125
|
+
|
|
1126
|
+
sage: C = crystals.elementary.Component("D4")
|
|
1127
|
+
sage: C
|
|
1128
|
+
The component crystal of type ['D', 4]
|
|
1129
|
+
"""
|
|
1130
|
+
return "The component crystal of type {0!s}".format(self._cartan_type)
|
|
1131
|
+
|
|
1132
|
+
def _element_constructor_(self, weight):
|
|
1133
|
+
r"""
|
|
1134
|
+
Construct an element of ``self``.
|
|
1135
|
+
|
|
1136
|
+
EXAMPLES::
|
|
1137
|
+
|
|
1138
|
+
sage: C = crystals.elementary.Component("E6")
|
|
1139
|
+
sage: c = C.highest_weight_vector()
|
|
1140
|
+
sage: c
|
|
1141
|
+
c
|
|
1142
|
+
"""
|
|
1143
|
+
if weight != self.weight_lattice_realization().zero():
|
|
1144
|
+
raise ValueError("only element is c")
|
|
1145
|
+
return self.element_class(self)
|
|
1146
|
+
|
|
1147
|
+
def cardinality(self):
|
|
1148
|
+
r"""
|
|
1149
|
+
Return the cardinality of ``self``, which is always `1`.
|
|
1150
|
+
|
|
1151
|
+
EXAMPLES::
|
|
1152
|
+
|
|
1153
|
+
sage: C = crystals.elementary.Component("E6")
|
|
1154
|
+
sage: c = C.highest_weight_vector()
|
|
1155
|
+
sage: C.cardinality()
|
|
1156
|
+
1
|
|
1157
|
+
"""
|
|
1158
|
+
return ZZ.one()
|
|
1159
|
+
|
|
1160
|
+
def weight_lattice_realization(self):
|
|
1161
|
+
"""
|
|
1162
|
+
Return the weight lattice realization of ``self``.
|
|
1163
|
+
|
|
1164
|
+
EXAMPLES::
|
|
1165
|
+
|
|
1166
|
+
sage: C = crystals.elementary.Component("A2")
|
|
1167
|
+
sage: C.weight_lattice_realization()
|
|
1168
|
+
Ambient space of the Root system of type ['A', 2]
|
|
1169
|
+
|
|
1170
|
+
sage: P = RootSystem(['A',2]).weight_lattice()
|
|
1171
|
+
sage: C = crystals.elementary.Component(P)
|
|
1172
|
+
sage: C.weight_lattice_realization() is P
|
|
1173
|
+
True
|
|
1174
|
+
"""
|
|
1175
|
+
return self._weight_lattice_realization
|
|
1176
|
+
|
|
1177
|
+
class Element(AbstractSingleCrystalElement):
|
|
1178
|
+
r"""
|
|
1179
|
+
Element of a component crystal.
|
|
1180
|
+
"""
|
|
1181
|
+
|
|
1182
|
+
def _repr_(self):
|
|
1183
|
+
r"""
|
|
1184
|
+
EXAMPLES::
|
|
1185
|
+
|
|
1186
|
+
sage: C = crystals.elementary.Component("F4")
|
|
1187
|
+
sage: c = C.highest_weight_vector()
|
|
1188
|
+
sage: c
|
|
1189
|
+
c
|
|
1190
|
+
"""
|
|
1191
|
+
return 'c'
|
|
1192
|
+
|
|
1193
|
+
def _latex_(self):
|
|
1194
|
+
r"""
|
|
1195
|
+
Return a LaTeX representation of ``self``.
|
|
1196
|
+
|
|
1197
|
+
EXAMPLES::
|
|
1198
|
+
|
|
1199
|
+
sage: C = crystals.elementary.Component("E7")
|
|
1200
|
+
sage: c = C.highest_weight_vector()
|
|
1201
|
+
sage: latex(c)
|
|
1202
|
+
{c}
|
|
1203
|
+
"""
|
|
1204
|
+
return "{c}"
|
|
1205
|
+
|
|
1206
|
+
def epsilon(self, i):
|
|
1207
|
+
r"""
|
|
1208
|
+
Return `\varepsilon_i` of ``self``, which is `0` for all `i`.
|
|
1209
|
+
|
|
1210
|
+
INPUT:
|
|
1211
|
+
|
|
1212
|
+
- ``i`` -- an element of the index set
|
|
1213
|
+
|
|
1214
|
+
EXAMPLES::
|
|
1215
|
+
|
|
1216
|
+
sage: C = crystals.elementary.Component("C5")
|
|
1217
|
+
sage: c = C.highest_weight_vector()
|
|
1218
|
+
sage: [c.epsilon(i) for i in C.index_set()]
|
|
1219
|
+
[0, 0, 0, 0, 0]
|
|
1220
|
+
"""
|
|
1221
|
+
return 0
|
|
1222
|
+
|
|
1223
|
+
def phi(self, i):
|
|
1224
|
+
r"""
|
|
1225
|
+
Return `\varphi_i` of ``self``, which is `0` for all `i`.
|
|
1226
|
+
|
|
1227
|
+
INPUT:
|
|
1228
|
+
|
|
1229
|
+
- ``i`` -- an element of the index set
|
|
1230
|
+
|
|
1231
|
+
EXAMPLES::
|
|
1232
|
+
|
|
1233
|
+
sage: C = crystals.elementary.Component("C5")
|
|
1234
|
+
sage: c = C.highest_weight_vector()
|
|
1235
|
+
sage: [c.phi(i) for i in C.index_set()]
|
|
1236
|
+
[0, 0, 0, 0, 0]
|
|
1237
|
+
"""
|
|
1238
|
+
return 0
|
|
1239
|
+
|
|
1240
|
+
def weight(self):
|
|
1241
|
+
r"""
|
|
1242
|
+
Return the weight of ``self``, which is always `0`.
|
|
1243
|
+
|
|
1244
|
+
EXAMPLES::
|
|
1245
|
+
|
|
1246
|
+
sage: C = crystals.elementary.Component("F4")
|
|
1247
|
+
sage: c = C.highest_weight_vector()
|
|
1248
|
+
sage: c.weight()
|
|
1249
|
+
(0, 0, 0, 0)
|
|
1250
|
+
"""
|
|
1251
|
+
return self.parent().weight_lattice_realization().zero()
|