passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- sage/typeset/unicode_characters.py +101 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Finite lattice posets
|
|
4
|
+
"""
|
|
5
|
+
#*****************************************************************************
|
|
6
|
+
# Copyright (C) 2011 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# http://www.gnu.org/licenses/
|
|
10
|
+
#******************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FiniteLatticePosets(CategoryWithAxiom):
|
|
16
|
+
r"""
|
|
17
|
+
The category of finite lattices, i.e. finite partially ordered
|
|
18
|
+
sets which are also lattices.
|
|
19
|
+
|
|
20
|
+
EXAMPLES::
|
|
21
|
+
|
|
22
|
+
sage: FiniteLatticePosets()
|
|
23
|
+
Category of finite lattice posets
|
|
24
|
+
sage: FiniteLatticePosets().super_categories()
|
|
25
|
+
[Category of lattice posets, Category of finite posets]
|
|
26
|
+
sage: FiniteLatticePosets().example()
|
|
27
|
+
NotImplemented
|
|
28
|
+
|
|
29
|
+
.. SEEALSO::
|
|
30
|
+
|
|
31
|
+
:class:`FinitePosets`, :class:`LatticePosets`, :class:`~sage.combinat.posets.lattices.FiniteLatticePoset`
|
|
32
|
+
|
|
33
|
+
TESTS::
|
|
34
|
+
|
|
35
|
+
sage: C = FiniteLatticePosets()
|
|
36
|
+
sage: C is FiniteLatticePosets().Finite()
|
|
37
|
+
True
|
|
38
|
+
sage: TestSuite(C).run()
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
class ParentMethods:
|
|
42
|
+
|
|
43
|
+
def join_irreducibles(self):
|
|
44
|
+
r"""
|
|
45
|
+
Return the join-irreducible elements of this finite lattice.
|
|
46
|
+
|
|
47
|
+
A *join-irreducible element* of ``self`` is an element
|
|
48
|
+
`x` that is not minimal and that can not be written as
|
|
49
|
+
the join of two elements different from `x`.
|
|
50
|
+
|
|
51
|
+
EXAMPLES::
|
|
52
|
+
|
|
53
|
+
sage: L = LatticePoset({0:[1,2],1:[3],2:[3,4],3:[5],4:[5]}) # needs sage.graphs sage.modules
|
|
54
|
+
sage: L.join_irreducibles() # needs sage.graphs sage.modules
|
|
55
|
+
[1, 2, 4]
|
|
56
|
+
|
|
57
|
+
.. SEEALSO::
|
|
58
|
+
|
|
59
|
+
- Dual function: :meth:`meet_irreducibles`
|
|
60
|
+
- Other: :meth:`~sage.combinat.posets.lattices.FiniteLatticePoset.double_irreducibles`,
|
|
61
|
+
:meth:`join_irreducibles_poset`
|
|
62
|
+
"""
|
|
63
|
+
return [x for x in self if len(self.lower_covers(x)) == 1]
|
|
64
|
+
|
|
65
|
+
def join_irreducibles_poset(self):
|
|
66
|
+
r"""
|
|
67
|
+
Return the poset of join-irreducible elements of this finite lattice.
|
|
68
|
+
|
|
69
|
+
A *join-irreducible element* of ``self`` is an element `x`
|
|
70
|
+
that is not minimal and can not be written as the join of two
|
|
71
|
+
elements different from `x`.
|
|
72
|
+
|
|
73
|
+
EXAMPLES::
|
|
74
|
+
|
|
75
|
+
sage: L = LatticePoset({0:[1,2,3],1:[4],2:[4],3:[4]}) # needs sage.graphs sage.modules
|
|
76
|
+
sage: L.join_irreducibles_poset() # needs sage.graphs sage.modules
|
|
77
|
+
Finite poset containing 3 elements
|
|
78
|
+
|
|
79
|
+
.. SEEALSO::
|
|
80
|
+
|
|
81
|
+
- Dual function: :meth:`meet_irreducibles_poset`
|
|
82
|
+
- Other: :meth:`join_irreducibles`
|
|
83
|
+
"""
|
|
84
|
+
return self.subposet(self.join_irreducibles())
|
|
85
|
+
|
|
86
|
+
def meet_irreducibles(self):
|
|
87
|
+
r"""
|
|
88
|
+
Return the meet-irreducible elements of this finite lattice.
|
|
89
|
+
|
|
90
|
+
A *meet-irreducible element* of ``self`` is an element
|
|
91
|
+
`x` that is not maximal and that can not be written as
|
|
92
|
+
the meet of two elements different from `x`.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: L = LatticePoset({0:[1,2],1:[3],2:[3,4],3:[5],4:[5]}) # needs sage.graphs sage.modules
|
|
97
|
+
sage: L.meet_irreducibles() # needs sage.graphs sage.modules
|
|
98
|
+
[1, 3, 4]
|
|
99
|
+
|
|
100
|
+
.. SEEALSO::
|
|
101
|
+
|
|
102
|
+
- Dual function: :meth:`join_irreducibles`
|
|
103
|
+
- Other: :meth:`~sage.combinat.posets.lattices.FiniteLatticePoset.double_irreducibles`,
|
|
104
|
+
:meth:`meet_irreducibles_poset`
|
|
105
|
+
"""
|
|
106
|
+
return [x for x in self if len(self.upper_covers(x)) == 1]
|
|
107
|
+
|
|
108
|
+
def meet_irreducibles_poset(self):
|
|
109
|
+
r"""
|
|
110
|
+
Return the poset of join-irreducible elements of this finite lattice.
|
|
111
|
+
|
|
112
|
+
A *meet-irreducible element* of ``self`` is an element `x`
|
|
113
|
+
that is not maximal and can not be written as the meet of two
|
|
114
|
+
elements different from `x`.
|
|
115
|
+
|
|
116
|
+
EXAMPLES::
|
|
117
|
+
|
|
118
|
+
sage: L = LatticePoset({0:[1,2,3],1:[4],2:[4],3:[4]}) # needs sage.graphs sage.modules
|
|
119
|
+
sage: L.join_irreducibles_poset() # needs sage.graphs sage.modules
|
|
120
|
+
Finite poset containing 3 elements
|
|
121
|
+
|
|
122
|
+
.. SEEALSO::
|
|
123
|
+
|
|
124
|
+
- Dual function: :meth:`join_irreducibles_poset`
|
|
125
|
+
- Other: :meth:`meet_irreducibles`
|
|
126
|
+
"""
|
|
127
|
+
return self.subposet(self.meet_irreducibles())
|
|
128
|
+
|
|
129
|
+
def irreducibles_poset(self):
|
|
130
|
+
"""
|
|
131
|
+
Return the poset of meet- or join-irreducibles of the lattice.
|
|
132
|
+
|
|
133
|
+
A *join-irreducible* element of a lattice is an element with
|
|
134
|
+
exactly one lower cover. Dually a *meet-irreducible* element
|
|
135
|
+
has exactly one upper cover.
|
|
136
|
+
|
|
137
|
+
This is the smallest poset with completion by cuts being
|
|
138
|
+
isomorphic to the lattice. As a special case this returns
|
|
139
|
+
one-element poset from one-element lattice.
|
|
140
|
+
|
|
141
|
+
.. SEEALSO::
|
|
142
|
+
|
|
143
|
+
:meth:`~sage.combinat.posets.posets.FinitePoset.completion_by_cuts`.
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: # needs sage.combinat sage.graphs sage.modules
|
|
148
|
+
sage: L = LatticePoset({1: [2, 3, 4], 2: [5, 6], 3: [5],
|
|
149
|
+
....: 4: [6], 5: [9, 7], 6: [9, 8], 7: [10],
|
|
150
|
+
....: 8: [10], 9: [10], 10: [11]})
|
|
151
|
+
sage: L_ = L.irreducibles_poset()
|
|
152
|
+
sage: sorted(L_)
|
|
153
|
+
[2, 3, 4, 7, 8, 9, 10, 11]
|
|
154
|
+
sage: L_.completion_by_cuts().is_isomorphic(L)
|
|
155
|
+
True
|
|
156
|
+
|
|
157
|
+
TESTS::
|
|
158
|
+
|
|
159
|
+
sage: LatticePoset().irreducibles_poset() # needs sage.graphs
|
|
160
|
+
Finite poset containing 0 elements
|
|
161
|
+
sage: posets.ChainPoset(1).irreducibles_poset() # needs sage.graphs
|
|
162
|
+
Finite poset containing 1 elements
|
|
163
|
+
"""
|
|
164
|
+
if self.cardinality() == 1:
|
|
165
|
+
from sage.combinat.posets.posets import Poset
|
|
166
|
+
return Poset({self[0]: []})
|
|
167
|
+
return self.subposet(self.join_irreducibles()+self.meet_irreducibles())
|
|
168
|
+
|
|
169
|
+
##########################################################################
|
|
170
|
+
# Lattice morphisms
|
|
171
|
+
|
|
172
|
+
def is_lattice_morphism(self, f, codomain):
|
|
173
|
+
r"""
|
|
174
|
+
Return whether ``f`` is a morphism of posets from ``self``
|
|
175
|
+
to ``codomain``.
|
|
176
|
+
|
|
177
|
+
A map `f : P \to Q` is a poset morphism if
|
|
178
|
+
|
|
179
|
+
.. MATH::
|
|
180
|
+
|
|
181
|
+
x \leq y \Rightarrow f(x) \leq f(y)
|
|
182
|
+
|
|
183
|
+
for all `x,y \in P`.
|
|
184
|
+
|
|
185
|
+
INPUT:
|
|
186
|
+
|
|
187
|
+
- ``f`` -- a function from ``self`` to ``codomain``
|
|
188
|
+
- ``codomain`` -- a lattice
|
|
189
|
+
|
|
190
|
+
EXAMPLES:
|
|
191
|
+
|
|
192
|
+
We build the boolean lattice of `\{2,2,3\}` and the
|
|
193
|
+
lattice of divisors of `60`, and check that the map
|
|
194
|
+
`b \mapsto 5 \prod_{x\in b} x` is a morphism of lattices::
|
|
195
|
+
|
|
196
|
+
sage: D = LatticePoset((divisors(60), attrcall("divides"))) # needs sage.graphs sage.modules
|
|
197
|
+
sage: B = LatticePoset((Subsets([2,2,3]), attrcall("issubset"))) # needs sage.graphs sage.modules
|
|
198
|
+
sage: def f(b): return D(5*prod(b))
|
|
199
|
+
sage: B.is_lattice_morphism(f, D) # needs sage.graphs sage.modules
|
|
200
|
+
True
|
|
201
|
+
|
|
202
|
+
We construct the boolean lattice `B_2`::
|
|
203
|
+
|
|
204
|
+
sage: B = posets.BooleanLattice(2) # needs sage.graphs
|
|
205
|
+
sage: B.cover_relations() # needs sage.graphs
|
|
206
|
+
[[0, 1], [0, 2], [1, 3], [2, 3]]
|
|
207
|
+
|
|
208
|
+
And the same lattice with new top and bottom elements
|
|
209
|
+
numbered respectively `-1` and `3`::
|
|
210
|
+
|
|
211
|
+
sage: G = DiGraph({-1:[0], 0:[1,2], 1:[3], 2:[3], 3:[4]}) # needs sage.graphs
|
|
212
|
+
sage: L = LatticePoset(G) # needs sage.graphs sage.modules
|
|
213
|
+
sage: L.cover_relations() # needs sage.graphs sage.modules
|
|
214
|
+
[[-1, 0], [0, 1], [0, 2], [1, 3], [2, 3], [3, 4]]
|
|
215
|
+
|
|
216
|
+
sage: f = {B(0): L(0), B(1): L(1), B(2): L(2), B(3): L(3)}.__getitem__ # needs sage.graphs sage.modules
|
|
217
|
+
sage: B.is_lattice_morphism(f, L) # needs sage.graphs sage.modules
|
|
218
|
+
True
|
|
219
|
+
|
|
220
|
+
sage: f = {B(0): L(-1),B(1): L(1), B(2): L(2), B(3): L(3)}.__getitem__ # needs sage.graphs sage.modules
|
|
221
|
+
sage: B.is_lattice_morphism(f, L) # needs sage.graphs sage.modules
|
|
222
|
+
False
|
|
223
|
+
|
|
224
|
+
sage: f = {B(0): L(0), B(1): L(1), B(2): L(2), B(3): L(4)}.__getitem__ # needs sage.graphs sage.modules
|
|
225
|
+
sage: B.is_lattice_morphism(f, L) # needs sage.graphs sage.modules
|
|
226
|
+
False
|
|
227
|
+
|
|
228
|
+
.. SEEALSO::
|
|
229
|
+
|
|
230
|
+
:meth:`~sage.categories.finite_posets.FinitePosets.ParentMethods.is_poset_morphism`
|
|
231
|
+
"""
|
|
232
|
+
# Note: in a lattice, x <= y iff join(x,y) = y .
|
|
233
|
+
# Therefore checking joins and meets is sufficient to
|
|
234
|
+
# ensure that this is a poset morphism. It actually may
|
|
235
|
+
# be sufficient to check just joins (or just meets).
|
|
236
|
+
from sage.combinat.subset import Subsets
|
|
237
|
+
for x,y in Subsets(self,2):
|
|
238
|
+
if f(self.join(x,y)) != codomain.join(f(x), f(y)):
|
|
239
|
+
return False
|
|
240
|
+
if f(self.meet(x,y)) != codomain.meet(f(x), f(y)):
|
|
241
|
+
return False
|
|
242
|
+
return True
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Finite monoids
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# https://www.gnu.org/licenses/
|
|
10
|
+
# *****************************************************************************
|
|
11
|
+
from sage.misc.cachefunc import cached_method
|
|
12
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FiniteMonoids(CategoryWithAxiom):
|
|
16
|
+
"""
|
|
17
|
+
The category of finite (multiplicative) :class:`monoids <Monoids>`.
|
|
18
|
+
|
|
19
|
+
A finite monoid is a :class:`finite sets <FiniteSets>` endowed
|
|
20
|
+
with an associative unital binary operation `*`.
|
|
21
|
+
|
|
22
|
+
EXAMPLES::
|
|
23
|
+
|
|
24
|
+
sage: FiniteMonoids()
|
|
25
|
+
Category of finite monoids
|
|
26
|
+
sage: FiniteMonoids().super_categories()
|
|
27
|
+
[Category of monoids, Category of finite semigroups]
|
|
28
|
+
|
|
29
|
+
TESTS::
|
|
30
|
+
|
|
31
|
+
sage: TestSuite(FiniteMonoids()).run()
|
|
32
|
+
|
|
33
|
+
sage: # needs sage.combinat
|
|
34
|
+
sage: R = IntegerModRing(15)
|
|
35
|
+
sage: M = R.subsemigroup([R(5)], one=R(10),
|
|
36
|
+
....: category=Semigroups().Finite().Subobjects() & Groups())
|
|
37
|
+
sage: M.one()
|
|
38
|
+
10
|
|
39
|
+
"""
|
|
40
|
+
class ParentMethods:
|
|
41
|
+
|
|
42
|
+
def nerve(self):
|
|
43
|
+
r"""
|
|
44
|
+
The nerve (classifying space) of this monoid.
|
|
45
|
+
|
|
46
|
+
OUTPUT:
|
|
47
|
+
|
|
48
|
+
the nerve `BG` (if `G` denotes this monoid), as a
|
|
49
|
+
simplicial set. The `k`-dimensional simplices of this
|
|
50
|
+
object are indexed by products of `k` elements in the
|
|
51
|
+
monoid:
|
|
52
|
+
|
|
53
|
+
.. MATH::
|
|
54
|
+
|
|
55
|
+
a_1 * a_2 * \cdots * a_k
|
|
56
|
+
|
|
57
|
+
The `0`-th face of this is obtained by deleting `a_1`, and
|
|
58
|
+
the `k`-th face is obtained by deleting `a_k`. The other
|
|
59
|
+
faces are obtained by multiplying elements: the 1st face
|
|
60
|
+
is
|
|
61
|
+
|
|
62
|
+
.. MATH::
|
|
63
|
+
|
|
64
|
+
(a1 * a_2) * \cdots * a_k
|
|
65
|
+
|
|
66
|
+
and so on. See :wikipedia:`Nerve_(category_theory)`, which
|
|
67
|
+
describes the construction of the nerve as a simplicial
|
|
68
|
+
set.
|
|
69
|
+
|
|
70
|
+
A simplex in this simplicial set will be degenerate if in
|
|
71
|
+
the corresponding product of `k` elements, one of those
|
|
72
|
+
elements is the identity. So we only need to keep track of
|
|
73
|
+
the products of non-identity elements. Similarly, if a
|
|
74
|
+
product `a_{i-1} a_i` is the identity element, then the
|
|
75
|
+
corresponding face of the simplex will be a degenerate
|
|
76
|
+
simplex.
|
|
77
|
+
|
|
78
|
+
EXAMPLES:
|
|
79
|
+
|
|
80
|
+
The nerve (classifying space) of the cyclic group of order
|
|
81
|
+
2 is infinite-dimensional real projective space. ::
|
|
82
|
+
|
|
83
|
+
sage: Sigma2 = groups.permutation.Cyclic(2) # needs sage.groups
|
|
84
|
+
sage: BSigma2 = Sigma2.nerve() # needs sage.graphs sage.groups
|
|
85
|
+
sage: BSigma2.cohomology(4, base_ring=GF(2)) # needs sage.graphs sage.groups sage.modules
|
|
86
|
+
Vector space of dimension 1 over Finite Field of size 2
|
|
87
|
+
|
|
88
|
+
The `k`-simplices of the nerve are named after the chains
|
|
89
|
+
of `k` non-unit elements to be multiplied. The group
|
|
90
|
+
`\Sigma_2` has two elements, written ``()`` (the identity
|
|
91
|
+
element) and ``(1,2)`` in Sage. So the 1-cells and 2-cells
|
|
92
|
+
in `B\Sigma_2` are::
|
|
93
|
+
|
|
94
|
+
sage: BSigma2.n_cells(1) # needs sage.graphs sage.groups
|
|
95
|
+
[(1,2)]
|
|
96
|
+
sage: BSigma2.n_cells(2) # needs sage.graphs sage.groups
|
|
97
|
+
[(1,2) * (1,2)]
|
|
98
|
+
|
|
99
|
+
Another construction of the group, with different names
|
|
100
|
+
for its elements::
|
|
101
|
+
|
|
102
|
+
sage: # needs sage.groups sage.rings.number_field
|
|
103
|
+
sage: C2 = groups.misc.MultiplicativeAbelian([2])
|
|
104
|
+
sage: BC2 = C2.nerve()
|
|
105
|
+
sage: BC2.n_cells(0)
|
|
106
|
+
[1]
|
|
107
|
+
sage: BC2.n_cells(1)
|
|
108
|
+
[f]
|
|
109
|
+
sage: BC2.n_cells(2)
|
|
110
|
+
[f * f]
|
|
111
|
+
|
|
112
|
+
With mod `p` coefficients, `B \Sigma_p` should have its
|
|
113
|
+
first nonvanishing homology group in dimension `p`::
|
|
114
|
+
|
|
115
|
+
sage: Sigma3 = groups.permutation.Symmetric(3) # needs sage.groups
|
|
116
|
+
sage: BSigma3 = Sigma3.nerve() # needs sage.graphs sage.groups
|
|
117
|
+
sage: BSigma3.homology(range(4), base_ring=GF(3)) # needs sage.graphs sage.groups
|
|
118
|
+
{0: Vector space of dimension 0 over Finite Field of size 3,
|
|
119
|
+
1: Vector space of dimension 0 over Finite Field of size 3,
|
|
120
|
+
2: Vector space of dimension 0 over Finite Field of size 3,
|
|
121
|
+
3: Vector space of dimension 1 over Finite Field of size 3}
|
|
122
|
+
|
|
123
|
+
Note that we can construct the `n`-skeleton for
|
|
124
|
+
`B\Sigma_2` for relatively large values of `n`, while for
|
|
125
|
+
`B\Sigma_3`, the complexes get large pretty quickly::
|
|
126
|
+
|
|
127
|
+
sage: # needs sage.graphs sage.groups
|
|
128
|
+
sage: Sigma2.nerve().n_skeleton(14)
|
|
129
|
+
Simplicial set with 15 non-degenerate simplices
|
|
130
|
+
sage: BSigma3 = Sigma3.nerve()
|
|
131
|
+
sage: BSigma3.n_skeleton(3)
|
|
132
|
+
Simplicial set with 156 non-degenerate simplices
|
|
133
|
+
sage: BSigma3.n_skeleton(4)
|
|
134
|
+
Simplicial set with 781 non-degenerate simplices
|
|
135
|
+
|
|
136
|
+
Finally, note that the classifying space of the order `p`
|
|
137
|
+
cyclic group is smaller than that of the symmetric group
|
|
138
|
+
on `p` letters, and its first homology group appears
|
|
139
|
+
earlier::
|
|
140
|
+
|
|
141
|
+
sage: # needs sage.graphs sage.groups sage.rings.number_field
|
|
142
|
+
sage: C3 = groups.misc.MultiplicativeAbelian([3])
|
|
143
|
+
sage: list(C3)
|
|
144
|
+
[1, f, f^2]
|
|
145
|
+
sage: BC3 = C3.nerve()
|
|
146
|
+
sage: BC3.n_cells(1)
|
|
147
|
+
[f, f^2]
|
|
148
|
+
sage: BC3.n_cells(2)
|
|
149
|
+
[f * f, f * f^2, f^2 * f, f^2 * f^2]
|
|
150
|
+
sage: len(BSigma3.n_cells(2))
|
|
151
|
+
25
|
|
152
|
+
sage: len(BC3.n_cells(3))
|
|
153
|
+
8
|
|
154
|
+
sage: len(BSigma3.n_cells(3))
|
|
155
|
+
125
|
|
156
|
+
sage: BC3.homology(range(4), base_ring=GF(3))
|
|
157
|
+
{0: Vector space of dimension 0 over Finite Field of size 3,
|
|
158
|
+
1: Vector space of dimension 1 over Finite Field of size 3,
|
|
159
|
+
2: Vector space of dimension 1 over Finite Field of size 3,
|
|
160
|
+
3: Vector space of dimension 1 over Finite Field of size 3}
|
|
161
|
+
sage: BC5 = groups.permutation.Cyclic(5).nerve()
|
|
162
|
+
sage: BC5.homology(range(4), base_ring=GF(5))
|
|
163
|
+
{0: Vector space of dimension 0 over Finite Field of size 5,
|
|
164
|
+
1: Vector space of dimension 1 over Finite Field of size 5,
|
|
165
|
+
2: Vector space of dimension 1 over Finite Field of size 5,
|
|
166
|
+
3: Vector space of dimension 1 over Finite Field of size 5}
|
|
167
|
+
"""
|
|
168
|
+
from sage.topology.simplicial_set_examples import Nerve
|
|
169
|
+
return Nerve(self)
|
|
170
|
+
|
|
171
|
+
def rhodes_radical_congruence(self, base_ring=None):
|
|
172
|
+
r"""
|
|
173
|
+
Return the Rhodes radical congruence of the semigroup.
|
|
174
|
+
|
|
175
|
+
The Rhodes radical congruence is the congruence induced on S by the
|
|
176
|
+
map `S \rightarrow kS \rightarrow kS / rad kS` with k a field.
|
|
177
|
+
|
|
178
|
+
INPUT:
|
|
179
|
+
|
|
180
|
+
- ``base_ring`` -- (default: `\QQ`) a field
|
|
181
|
+
|
|
182
|
+
OUTPUT:
|
|
183
|
+
|
|
184
|
+
- A list of couples (m, n) with `m \neq n` in the lexicographic
|
|
185
|
+
order for the enumeration of the monoid ``self``.
|
|
186
|
+
|
|
187
|
+
EXAMPLES::
|
|
188
|
+
|
|
189
|
+
sage: M = Monoids().Finite().example()
|
|
190
|
+
sage: M.rhodes_radical_congruence() # needs sage.modules
|
|
191
|
+
[(0, 6), (2, 8), (4, 10)]
|
|
192
|
+
|
|
193
|
+
sage: # needs sage.combinat sage.groups sage.modules
|
|
194
|
+
sage: from sage.monoids.hecke_monoid import HeckeMonoid
|
|
195
|
+
sage: H3 = HeckeMonoid(SymmetricGroup(3))
|
|
196
|
+
sage: H3.repr_element_method(style='reduced')
|
|
197
|
+
sage: H3.rhodes_radical_congruence()
|
|
198
|
+
[([1, 2], [2, 1]), ([1, 2], [1, 2, 1]), ([2, 1], [1, 2, 1])]
|
|
199
|
+
|
|
200
|
+
By Maschke's theorem, every group algebra over `\QQ`
|
|
201
|
+
is semisimple hence the Rhodes radical of a group must be trivial::
|
|
202
|
+
|
|
203
|
+
sage: SymmetricGroup(3).rhodes_radical_congruence() # needs sage.combinat sage.groups sage.modules
|
|
204
|
+
[]
|
|
205
|
+
sage: DihedralGroup(10).rhodes_radical_congruence() # needs sage.groups sage.modules
|
|
206
|
+
[]
|
|
207
|
+
|
|
208
|
+
REFERENCES:
|
|
209
|
+
|
|
210
|
+
- [Rho69]_
|
|
211
|
+
"""
|
|
212
|
+
from sage.rings.rational_field import QQ
|
|
213
|
+
if base_ring is None:
|
|
214
|
+
base_ring = QQ
|
|
215
|
+
kS = self.algebra(base_ring)
|
|
216
|
+
kSrad = kS.radical()
|
|
217
|
+
res = []
|
|
218
|
+
for m in self:
|
|
219
|
+
for n in self:
|
|
220
|
+
if m == n or (n, m) in res:
|
|
221
|
+
continue
|
|
222
|
+
try:
|
|
223
|
+
kSrad.retract(kS(m) - kS(n))
|
|
224
|
+
except ValueError:
|
|
225
|
+
pass
|
|
226
|
+
else:
|
|
227
|
+
res.append((m, n))
|
|
228
|
+
return res
|
|
229
|
+
|
|
230
|
+
class ElementMethods:
|
|
231
|
+
def pseudo_order(self):
|
|
232
|
+
r"""
|
|
233
|
+
Return the pair `[k, j]` with `k` minimal and `0\leq j <k` such
|
|
234
|
+
that ``self^k == self^j``.
|
|
235
|
+
|
|
236
|
+
Note that `j` is uniquely determined.
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: M = FiniteMonoids().example(); M
|
|
241
|
+
An example of a finite multiplicative monoid: the integers modulo 12
|
|
242
|
+
|
|
243
|
+
sage: x = M(2)
|
|
244
|
+
sage: [ x^i for i in range(7) ]
|
|
245
|
+
[1, 2, 4, 8, 4, 8, 4]
|
|
246
|
+
sage: x.pseudo_order()
|
|
247
|
+
[4, 2]
|
|
248
|
+
|
|
249
|
+
sage: x = M(3)
|
|
250
|
+
sage: [ x^i for i in range(7) ]
|
|
251
|
+
[1, 3, 9, 3, 9, 3, 9]
|
|
252
|
+
sage: x.pseudo_order()
|
|
253
|
+
[3, 1]
|
|
254
|
+
|
|
255
|
+
sage: x = M(4)
|
|
256
|
+
sage: [ x^i for i in range(7) ]
|
|
257
|
+
[1, 4, 4, 4, 4, 4, 4]
|
|
258
|
+
sage: x.pseudo_order()
|
|
259
|
+
[2, 1]
|
|
260
|
+
|
|
261
|
+
sage: x = M(5)
|
|
262
|
+
sage: [ x^i for i in range(7) ]
|
|
263
|
+
[1, 5, 1, 5, 1, 5, 1]
|
|
264
|
+
sage: x.pseudo_order()
|
|
265
|
+
[2, 0]
|
|
266
|
+
|
|
267
|
+
.. TODO::
|
|
268
|
+
|
|
269
|
+
more appropriate name? see, for example, Jean-Eric Pin's
|
|
270
|
+
lecture notes on semigroups.
|
|
271
|
+
"""
|
|
272
|
+
self_powers = {self.parent().one(): 0}
|
|
273
|
+
k = 1
|
|
274
|
+
self_power_k = self
|
|
275
|
+
while self_power_k not in self_powers:
|
|
276
|
+
self_powers[self_power_k] = k
|
|
277
|
+
k += 1
|
|
278
|
+
self_power_k = self_power_k * self
|
|
279
|
+
return [k, self_powers[self_power_k]]
|
|
280
|
+
|
|
281
|
+
@cached_method
|
|
282
|
+
def __invert__(self):
|
|
283
|
+
"""
|
|
284
|
+
Return the inverse of ``self`` if it exists.
|
|
285
|
+
|
|
286
|
+
This is the generic implementation, very naive and slow.
|
|
287
|
+
|
|
288
|
+
EXAMPLES::
|
|
289
|
+
|
|
290
|
+
sage: # needs sage.combinat
|
|
291
|
+
sage: R = IntegerModRing(15)
|
|
292
|
+
sage: M = R.subsemigroup([R(5)], one=R(10),
|
|
293
|
+
....: category=Semigroups().Finite().Subobjects() & Groups())
|
|
294
|
+
sage: [~x for x in M]
|
|
295
|
+
[10, 5]
|
|
296
|
+
|
|
297
|
+
TESTS::
|
|
298
|
+
|
|
299
|
+
sage: # needs sage.combinat
|
|
300
|
+
sage: R = IntegerModRing(15)
|
|
301
|
+
sage: M = R.subsemigroup([R(3)], one=R(1),
|
|
302
|
+
....: category=Semigroups().Finite().Subobjects())
|
|
303
|
+
sage: ~M(3)
|
|
304
|
+
Traceback (most recent call last):
|
|
305
|
+
...
|
|
306
|
+
ValueError: the element 3 is not invertible
|
|
307
|
+
"""
|
|
308
|
+
parent = self.parent()
|
|
309
|
+
one = parent.one()
|
|
310
|
+
if self == one:
|
|
311
|
+
return one
|
|
312
|
+
it = (v for v in parent if v * self == one == self * v)
|
|
313
|
+
try:
|
|
314
|
+
return next(it)
|
|
315
|
+
except StopIteration:
|
|
316
|
+
raise ValueError(f"the element {self} is not invertible")
|