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,1155 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Ideals of function fields
|
|
4
|
+
|
|
5
|
+
Ideals of an order of a function field include all fractional ideals of the order.
|
|
6
|
+
Sage provides basic arithmetic with fractional ideals.
|
|
7
|
+
|
|
8
|
+
The fractional ideals of the maximal order of a global function field forms a multiplicative
|
|
9
|
+
monoid. Sage allows advanced arithmetic with the fractional ideals. For example, an ideal
|
|
10
|
+
of the maximal order can be factored into a product of prime ideals.
|
|
11
|
+
|
|
12
|
+
EXAMPLES:
|
|
13
|
+
|
|
14
|
+
Ideals in the maximal order of a rational function field::
|
|
15
|
+
|
|
16
|
+
sage: K.<x> = FunctionField(QQ)
|
|
17
|
+
sage: O = K.maximal_order()
|
|
18
|
+
sage: I = O.ideal(x^3 + 1); I
|
|
19
|
+
Ideal (x^3 + 1) of Maximal order of Rational function field in x over Rational Field
|
|
20
|
+
sage: I^2
|
|
21
|
+
Ideal (x^6 + 2*x^3 + 1) of Maximal order of Rational function field in x over Rational Field
|
|
22
|
+
sage: ~I
|
|
23
|
+
Ideal (1/(x^3 + 1)) of Maximal order of Rational function field in x over Rational Field
|
|
24
|
+
sage: ~I * I
|
|
25
|
+
Ideal (1) of Maximal order of Rational function field in x over Rational Field
|
|
26
|
+
|
|
27
|
+
Ideals in the equation order of an extension of a rational function field::
|
|
28
|
+
|
|
29
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
30
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1) # needs sage.rings.function_field
|
|
31
|
+
sage: O = L.equation_order() # needs sage.rings.function_field
|
|
32
|
+
sage: I = O.ideal(y); I # needs sage.rings.function_field
|
|
33
|
+
Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
34
|
+
sage: I^2 # needs sage.rings.function_field
|
|
35
|
+
Ideal (x^3 + 1, (-x^3 - 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
36
|
+
|
|
37
|
+
Ideals in the maximal order of a global function field::
|
|
38
|
+
|
|
39
|
+
sage: # needs sage.rings.finite_rings
|
|
40
|
+
sage: K.<x> = FunctionField(GF(2)); R.<y> = K[]
|
|
41
|
+
sage: L.<y> = K.extension(y^2 - x^3*y - x) # needs sage.rings.function_field
|
|
42
|
+
sage: O = L.maximal_order() # needs sage.rings.function_field
|
|
43
|
+
sage: I = O.ideal(y) # needs sage.rings.function_field
|
|
44
|
+
sage: I^2 # needs sage.rings.function_field
|
|
45
|
+
Ideal (x) of Maximal order of Function field in y defined by y^2 + x^3*y + x
|
|
46
|
+
sage: ~I # needs sage.rings.function_field
|
|
47
|
+
Ideal (1/x*y) of Maximal order of Function field in y defined by y^2 + x^3*y + x
|
|
48
|
+
sage: ~I * I # needs sage.rings.function_field
|
|
49
|
+
Ideal (1) of Maximal order of Function field in y defined by y^2 + x^3*y + x
|
|
50
|
+
|
|
51
|
+
sage: J = O.ideal(x + y) * I # needs sage.rings.finite_rings sage.rings.function_field
|
|
52
|
+
sage: J.factor() # needs sage.rings.finite_rings sage.rings.function_field
|
|
53
|
+
(Ideal (y) of Maximal order of Function field in y defined by y^2 + x^3*y + x)^2 *
|
|
54
|
+
(Ideal (x^3 + x + 1, y + x) of Maximal order of Function field in y defined by y^2 + x^3*y + x)
|
|
55
|
+
|
|
56
|
+
Ideals in the maximal infinite order of a global function field::
|
|
57
|
+
|
|
58
|
+
sage: # needs sage.rings.finite_rings
|
|
59
|
+
sage: K.<x> = FunctionField(GF(3^2)); R.<t> = K[]
|
|
60
|
+
sage: F.<y> = K.extension(t^3 + t^2 - x^4) # needs sage.rings.function_field
|
|
61
|
+
sage: Oinf = F.maximal_order_infinite() # needs sage.rings.function_field
|
|
62
|
+
sage: I = Oinf.ideal(1/y) # needs sage.rings.function_field
|
|
63
|
+
sage: I + I == I
|
|
64
|
+
True
|
|
65
|
+
sage: I^2 # needs sage.rings.function_field
|
|
66
|
+
Ideal (1/x^4*y) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4
|
|
67
|
+
sage: ~I # needs sage.rings.function_field
|
|
68
|
+
Ideal (y) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4
|
|
69
|
+
sage: ~I * I # needs sage.rings.function_field
|
|
70
|
+
Ideal (1) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4
|
|
71
|
+
sage: I.factor() # needs sage.rings.function_field
|
|
72
|
+
(Ideal (1/x^3*y^2) of Maximal infinite order of Function field in y defined by y^3 + y^2 + 2*x^4)^4
|
|
73
|
+
|
|
74
|
+
AUTHORS:
|
|
75
|
+
|
|
76
|
+
- William Stein (2010): initial version
|
|
77
|
+
|
|
78
|
+
- Maarten Derickx (2011-09-14): fixed ideal_with_gens_over_base()
|
|
79
|
+
|
|
80
|
+
- Kwankyu Lee (2017-04-30): added ideals for global function fields
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
# ****************************************************************************
|
|
84
|
+
# Copyright (C) 2010 William Stein <wstein@gmail.com>
|
|
85
|
+
# 2011 Maarten Derickx <m.derickx.student@gmail.com>
|
|
86
|
+
# 2017-2021 Kwankyu Lee
|
|
87
|
+
# 2018 Frédéric Chapoton
|
|
88
|
+
# 2019 Brent Baccala
|
|
89
|
+
# 2021 Jonathan Kliem
|
|
90
|
+
#
|
|
91
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
92
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
93
|
+
# the License, or (at your option) any later version.
|
|
94
|
+
# https://www.gnu.org/licenses/
|
|
95
|
+
# ****************************************************************************
|
|
96
|
+
|
|
97
|
+
from sage.misc.latex import latex
|
|
98
|
+
from sage.combinat.subset import powerset
|
|
99
|
+
from sage.structure.parent import Parent
|
|
100
|
+
from sage.structure.element import Element
|
|
101
|
+
from sage.structure.richcmp import richcmp
|
|
102
|
+
from sage.structure.factorization import Factorization
|
|
103
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
104
|
+
from sage.categories.monoids import Monoids
|
|
105
|
+
from sage.rings.ideal import Ideal_generic
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class FunctionFieldIdeal(Element):
|
|
109
|
+
"""
|
|
110
|
+
Base class of fractional ideals of function fields.
|
|
111
|
+
|
|
112
|
+
INPUT:
|
|
113
|
+
|
|
114
|
+
- ``ring`` -- ring of the ideal
|
|
115
|
+
|
|
116
|
+
EXAMPLES::
|
|
117
|
+
|
|
118
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
119
|
+
sage: O = K.equation_order()
|
|
120
|
+
sage: O.ideal(x^3 + 1)
|
|
121
|
+
Ideal (x^3 + 1) of Maximal order of Rational function field in x over Finite Field of size 7
|
|
122
|
+
"""
|
|
123
|
+
def __init__(self, ring):
|
|
124
|
+
"""
|
|
125
|
+
Initialize.
|
|
126
|
+
|
|
127
|
+
TESTS::
|
|
128
|
+
|
|
129
|
+
sage: # needs sage.rings.finite_rings
|
|
130
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
131
|
+
sage: O = K.equation_order()
|
|
132
|
+
sage: I = O.ideal(x^3 + 1)
|
|
133
|
+
sage: TestSuite(I).run()
|
|
134
|
+
"""
|
|
135
|
+
Element.__init__(self, ring.ideal_monoid())
|
|
136
|
+
self._ring = ring
|
|
137
|
+
|
|
138
|
+
def _repr_short(self):
|
|
139
|
+
"""
|
|
140
|
+
Return a string representation of this ideal that doesn't
|
|
141
|
+
include the name of the ambient ring.
|
|
142
|
+
|
|
143
|
+
EXAMPLES::
|
|
144
|
+
|
|
145
|
+
sage: # needs sage.rings.finite_rings
|
|
146
|
+
sage: K.<x> = FunctionField(GF(3^2)); R.<t> = K[]
|
|
147
|
+
sage: F.<y> = K.extension(t^3 + t^2 - x^4) # needs sage.rings.function_field
|
|
148
|
+
sage: Oinf = F.maximal_order_infinite() # needs sage.rings.function_field
|
|
149
|
+
sage: I = Oinf.ideal(1/y) # needs sage.rings.function_field
|
|
150
|
+
sage: I._repr_short() # needs sage.rings.function_field
|
|
151
|
+
'(1/x^4*y^2)'
|
|
152
|
+
"""
|
|
153
|
+
if self.is_zero():
|
|
154
|
+
return "(0)"
|
|
155
|
+
|
|
156
|
+
return "(%s)" % (', '.join([repr(g) for g in self.gens_reduced()]), )
|
|
157
|
+
|
|
158
|
+
def _repr_(self):
|
|
159
|
+
"""
|
|
160
|
+
Return a string representation of this ideal.
|
|
161
|
+
|
|
162
|
+
EXAMPLES::
|
|
163
|
+
|
|
164
|
+
sage: K.<x> = FunctionField(QQ)
|
|
165
|
+
sage: O = K.maximal_order()
|
|
166
|
+
sage: I = O.ideal(x, 1/(x+1)); I
|
|
167
|
+
Ideal (1/(x + 1)) of Maximal order of Rational function field in x over Rational Field
|
|
168
|
+
|
|
169
|
+
sage: # needs sage.rings.function_field
|
|
170
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
171
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
172
|
+
sage: O = L.equation_order()
|
|
173
|
+
sage: O.ideal(x^2 + 1)
|
|
174
|
+
Ideal (x^2 + 1) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
175
|
+
|
|
176
|
+
sage: # needs sage.rings.function_field
|
|
177
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
178
|
+
sage: L.<y> = K.extension(Y^2 - x^3*Y - x)
|
|
179
|
+
sage: O = L.maximal_order()
|
|
180
|
+
sage: I = O.ideal(y); I
|
|
181
|
+
Ideal (y) of Maximal order of Function field in y defined by y^2 + x^3*y + x
|
|
182
|
+
|
|
183
|
+
sage: # needs sage.rings.function_field
|
|
184
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
185
|
+
sage: O = L.maximal_order()
|
|
186
|
+
sage: I = O.ideal(y); I
|
|
187
|
+
Ideal (y) of Maximal order of Function field in y
|
|
188
|
+
defined by y^2 + y + (x^2 + 1)/x
|
|
189
|
+
|
|
190
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
191
|
+
sage: Oinf = K.maximal_order_infinite()
|
|
192
|
+
sage: I = Oinf.ideal(x/(x^2+1))
|
|
193
|
+
sage: I
|
|
194
|
+
Ideal (1/x) of Maximal infinite order of Rational function field
|
|
195
|
+
in x over Finite Field of size 2
|
|
196
|
+
|
|
197
|
+
sage: # needs sage.rings.finite_rings sage.rings.function_field
|
|
198
|
+
sage: K.<x> = FunctionField(GF(3^2)); _.<t> = PolynomialRing(K)
|
|
199
|
+
sage: F.<y> = K.extension(t^3 + t^2 - x^4)
|
|
200
|
+
sage: Oinf = F.maximal_order_infinite()
|
|
201
|
+
sage: Oinf.ideal(1/y)
|
|
202
|
+
Ideal (1/x^4*y^2) of Maximal infinite order of Function field
|
|
203
|
+
in y defined by y^3 + y^2 + 2*x^4
|
|
204
|
+
|
|
205
|
+
sage: # needs sage.rings.function_field
|
|
206
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
207
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
208
|
+
sage: Oinf = L.maximal_order_infinite()
|
|
209
|
+
sage: Oinf.ideal(1/y)
|
|
210
|
+
Ideal (1/x*y) of Maximal infinite order of Function field in y
|
|
211
|
+
defined by y^2 + y + (x^2 + 1)/x
|
|
212
|
+
"""
|
|
213
|
+
if self.is_zero():
|
|
214
|
+
return "Zero ideal of %s" % (self._ring,)
|
|
215
|
+
|
|
216
|
+
return "Ideal %s of %s" % (self._repr_short(), self.ring())
|
|
217
|
+
|
|
218
|
+
def _latex_(self):
|
|
219
|
+
r"""
|
|
220
|
+
Return the LaTeX representation of the ideal.
|
|
221
|
+
|
|
222
|
+
EXAMPLES::
|
|
223
|
+
|
|
224
|
+
sage: # needs sage.rings.function_field
|
|
225
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
226
|
+
sage: L.<y> = K.extension(Y^2 - x^3*Y - x)
|
|
227
|
+
sage: O = L.maximal_order()
|
|
228
|
+
sage: I = O.ideal(y)
|
|
229
|
+
sage: latex(I)
|
|
230
|
+
\left(y\right)
|
|
231
|
+
"""
|
|
232
|
+
return '\\left(' + ', '.join(latex(g) for g in self.gens_reduced()) + '\\right)'
|
|
233
|
+
|
|
234
|
+
def _div_(self, other):
|
|
235
|
+
"""
|
|
236
|
+
Return the ideal divided by the ``other`` ideal.
|
|
237
|
+
|
|
238
|
+
INPUT:
|
|
239
|
+
|
|
240
|
+
- ``other`` -- ideal
|
|
241
|
+
|
|
242
|
+
EXAMPLES::
|
|
243
|
+
|
|
244
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
245
|
+
sage: O = K.equation_order()
|
|
246
|
+
sage: I = O.ideal(x^3 + 1)
|
|
247
|
+
sage: I / I
|
|
248
|
+
Ideal (1) of Maximal order of Rational function field in x
|
|
249
|
+
over Finite Field of size 7
|
|
250
|
+
"""
|
|
251
|
+
return self * ~other
|
|
252
|
+
|
|
253
|
+
def gens_reduced(self):
|
|
254
|
+
r"""
|
|
255
|
+
Return reduced generators.
|
|
256
|
+
|
|
257
|
+
For now, this method just looks at the generators and sees if any
|
|
258
|
+
can be removed without changing the ideal. It prefers principal
|
|
259
|
+
representations (a single generator) over all others, and otherwise
|
|
260
|
+
picks the generator set with the shortest print representation.
|
|
261
|
+
|
|
262
|
+
This method is provided so that ideals in function fields have
|
|
263
|
+
the method :meth:`gens_reduced()`, just like ideals of number
|
|
264
|
+
fields. Sage linear algebra machinery sometimes requires this.
|
|
265
|
+
|
|
266
|
+
EXAMPLES::
|
|
267
|
+
|
|
268
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
269
|
+
sage: O = K.equation_order()
|
|
270
|
+
sage: I = O.ideal(x, x^2, x^2 + x)
|
|
271
|
+
sage: I.gens_reduced()
|
|
272
|
+
(x,)
|
|
273
|
+
"""
|
|
274
|
+
gens = self.gens()
|
|
275
|
+
if len(gens) == 1:
|
|
276
|
+
return gens
|
|
277
|
+
candidate_gensets = []
|
|
278
|
+
for genset in powerset(gens):
|
|
279
|
+
if self.parent()(genset) == self:
|
|
280
|
+
candidate_gensets.append(genset)
|
|
281
|
+
candidate_gensets.sort(key=lambda item: (len(item), len(repr(item)), item))
|
|
282
|
+
return candidate_gensets[0]
|
|
283
|
+
|
|
284
|
+
def ring(self):
|
|
285
|
+
"""
|
|
286
|
+
Return the ring to which this ideal belongs.
|
|
287
|
+
|
|
288
|
+
EXAMPLES::
|
|
289
|
+
|
|
290
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
291
|
+
sage: O = K.equation_order()
|
|
292
|
+
sage: I = O.ideal(x, x^2, x^2 + x)
|
|
293
|
+
sage: I.ring()
|
|
294
|
+
Maximal order of Rational function field in x over Finite Field of size 7
|
|
295
|
+
"""
|
|
296
|
+
return self._ring
|
|
297
|
+
|
|
298
|
+
def base_ring(self):
|
|
299
|
+
r"""
|
|
300
|
+
Return the base ring of this ideal.
|
|
301
|
+
|
|
302
|
+
EXAMPLES::
|
|
303
|
+
|
|
304
|
+
sage: # needs sage.rings.function_field
|
|
305
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
306
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
307
|
+
sage: O = L.equation_order()
|
|
308
|
+
sage: I = O.ideal(x^2 + 1)
|
|
309
|
+
sage: I.base_ring()
|
|
310
|
+
Order in Function field in y defined by y^2 - x^3 - 1
|
|
311
|
+
"""
|
|
312
|
+
return self.ring()
|
|
313
|
+
|
|
314
|
+
def place(self):
|
|
315
|
+
"""
|
|
316
|
+
Return the place associated with this prime ideal.
|
|
317
|
+
|
|
318
|
+
EXAMPLES::
|
|
319
|
+
|
|
320
|
+
sage: # needs sage.rings.finite_rings
|
|
321
|
+
sage: K.<x> = FunctionField(GF(4))
|
|
322
|
+
sage: O = K.maximal_order()
|
|
323
|
+
sage: I = O.ideal(x^2 + x + 1)
|
|
324
|
+
sage: I.place()
|
|
325
|
+
Traceback (most recent call last):
|
|
326
|
+
...
|
|
327
|
+
TypeError: not a prime ideal
|
|
328
|
+
sage: I = O.ideal(x^3 + x + 1)
|
|
329
|
+
sage: I.place()
|
|
330
|
+
Place (x^3 + x + 1)
|
|
331
|
+
|
|
332
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
333
|
+
sage: Oinf = K.maximal_order_infinite()
|
|
334
|
+
sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
|
|
335
|
+
sage: p = I.factor()[0][0]
|
|
336
|
+
sage: p.place()
|
|
337
|
+
Place (1/x)
|
|
338
|
+
|
|
339
|
+
sage: # needs sage.rings.function_field
|
|
340
|
+
sage: K.<x> = FunctionField(GF(2)); _.<t> = PolynomialRing(K)
|
|
341
|
+
sage: F.<y> = K.extension(t^3 - x^2*(x^2+x+1)^2)
|
|
342
|
+
sage: O = F.maximal_order()
|
|
343
|
+
sage: I = O.ideal(y)
|
|
344
|
+
sage: [f.place() for f,_ in I.factor()]
|
|
345
|
+
[Place (x, (1/(x^3 + x^2 + x))*y^2),
|
|
346
|
+
Place (x^2 + x + 1, (1/(x^3 + x^2 + x))*y^2)]
|
|
347
|
+
|
|
348
|
+
sage: # needs sage.rings.function_field
|
|
349
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
350
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
351
|
+
sage: O = L.maximal_order()
|
|
352
|
+
sage: I = O.ideal(y)
|
|
353
|
+
sage: [f.place() for f,_ in I.factor()]
|
|
354
|
+
[Place (x, x*y), Place (x + 1, x*y)]
|
|
355
|
+
|
|
356
|
+
sage: # needs sage.rings.finite_rings sage.rings.function_field
|
|
357
|
+
sage: K.<x> = FunctionField(GF(3^2)); R.<t> = PolynomialRing(K)
|
|
358
|
+
sage: F.<y> = K.extension(t^3 + t^2 - x^4)
|
|
359
|
+
sage: Oinf = F.maximal_order_infinite()
|
|
360
|
+
sage: I = Oinf.ideal(1/x)
|
|
361
|
+
sage: I.factor()
|
|
362
|
+
(Ideal (1/x^3*y^2) of Maximal infinite order of Function field
|
|
363
|
+
in y defined by y^3 + y^2 + 2*x^4)^3
|
|
364
|
+
sage: J = I.factor()[0][0]
|
|
365
|
+
sage: J.is_prime()
|
|
366
|
+
True
|
|
367
|
+
sage: J.place()
|
|
368
|
+
Place (1/x, 1/x^3*y^2)
|
|
369
|
+
|
|
370
|
+
sage: # needs sage.rings.function_field
|
|
371
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
372
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
373
|
+
sage: Oinf = L.maximal_order_infinite()
|
|
374
|
+
sage: I = Oinf.ideal(1/x)
|
|
375
|
+
sage: I.factor()
|
|
376
|
+
(Ideal (1/x*y) of Maximal infinite order of Function field in y
|
|
377
|
+
defined by y^2 + y + (x^2 + 1)/x)^2
|
|
378
|
+
sage: J = I.factor()[0][0]
|
|
379
|
+
sage: J.is_prime()
|
|
380
|
+
True
|
|
381
|
+
sage: J.place()
|
|
382
|
+
Place (1/x, 1/x*y)
|
|
383
|
+
"""
|
|
384
|
+
if not self.is_prime():
|
|
385
|
+
raise TypeError("not a prime ideal")
|
|
386
|
+
|
|
387
|
+
place_set = self.ring().fraction_field().place_set()
|
|
388
|
+
return place_set.element_class(place_set, self)
|
|
389
|
+
|
|
390
|
+
def factor(self):
|
|
391
|
+
"""
|
|
392
|
+
Return the factorization of this ideal.
|
|
393
|
+
|
|
394
|
+
Subclass of this class should define :meth:`_factor` method that
|
|
395
|
+
returns a list of prime ideal and multiplicity pairs.
|
|
396
|
+
|
|
397
|
+
EXAMPLES::
|
|
398
|
+
|
|
399
|
+
sage: # needs sage.rings.finite_rings
|
|
400
|
+
sage: K.<x> = FunctionField(GF(4))
|
|
401
|
+
sage: O = K.maximal_order()
|
|
402
|
+
sage: I = O.ideal(x^3*(x + 1)^2)
|
|
403
|
+
sage: I.factor()
|
|
404
|
+
(Ideal (x) of Maximal order of Rational function field in x
|
|
405
|
+
over Finite Field in z2 of size 2^2)^3 *
|
|
406
|
+
(Ideal (x + 1) of Maximal order of Rational function field in x
|
|
407
|
+
over Finite Field in z2 of size 2^2)^2
|
|
408
|
+
|
|
409
|
+
sage: # needs sage.rings.finite_rings
|
|
410
|
+
sage: Oinf = K.maximal_order_infinite()
|
|
411
|
+
sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
|
|
412
|
+
sage: I.factor()
|
|
413
|
+
(Ideal (1/x) of Maximal infinite order of Rational function field in x
|
|
414
|
+
over Finite Field in z2 of size 2^2)^2
|
|
415
|
+
|
|
416
|
+
sage: # needs sage.rings.function_field
|
|
417
|
+
sage: K.<x> = FunctionField(GF(2)); _.<T> = PolynomialRing(K)
|
|
418
|
+
sage: F.<y> = K.extension(T^3 - x^2*(x^2 + x + 1)^2)
|
|
419
|
+
sage: O = F.maximal_order()
|
|
420
|
+
sage: I = O.ideal(y)
|
|
421
|
+
sage: I == I.factor().prod()
|
|
422
|
+
True
|
|
423
|
+
|
|
424
|
+
sage: # needs sage.rings.function_field
|
|
425
|
+
sage: Oinf = F.maximal_order_infinite()
|
|
426
|
+
sage: f= 1/x
|
|
427
|
+
sage: I = Oinf.ideal(f)
|
|
428
|
+
sage: I.factor()
|
|
429
|
+
(Ideal ((1/(x^4 + x^3 + x^2))*y^2 + 1/x^2*y + 1) of Maximal infinite order
|
|
430
|
+
of Function field in y defined by y^3 + x^6 + x^4 + x^2) *
|
|
431
|
+
(Ideal ((1/(x^4 + x^3 + x^2))*y^2 + 1) of Maximal infinite order
|
|
432
|
+
of Function field in y defined by y^3 + x^6 + x^4 + x^2)
|
|
433
|
+
|
|
434
|
+
sage: # needs sage.rings.function_field
|
|
435
|
+
sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
|
|
436
|
+
sage: F.<y> = K.extension(Y^3 - x^2*(x^2 + x + 1)^2)
|
|
437
|
+
sage: O = F.maximal_order()
|
|
438
|
+
sage: I = O.ideal(y)
|
|
439
|
+
sage: I == I.factor().prod()
|
|
440
|
+
True
|
|
441
|
+
|
|
442
|
+
sage: # needs sage.rings.function_field
|
|
443
|
+
sage: K.<x> = FunctionField(QQ); _.<Y> = K[]
|
|
444
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
445
|
+
sage: O = L.maximal_order()
|
|
446
|
+
sage: I = O.ideal(y)
|
|
447
|
+
sage: I == I.factor().prod()
|
|
448
|
+
True
|
|
449
|
+
"""
|
|
450
|
+
return Factorization(self._factor(), cr=True)
|
|
451
|
+
|
|
452
|
+
def divisor(self):
|
|
453
|
+
"""
|
|
454
|
+
Return the divisor corresponding to the ideal.
|
|
455
|
+
|
|
456
|
+
EXAMPLES::
|
|
457
|
+
|
|
458
|
+
sage: # needs sage.modules sage.rings.finite_rings
|
|
459
|
+
sage: K.<x> = FunctionField(GF(4))
|
|
460
|
+
sage: O = K.maximal_order()
|
|
461
|
+
sage: I = O.ideal(x*(x + 1)^2/(x^2 + x + 1))
|
|
462
|
+
sage: I.divisor()
|
|
463
|
+
Place (x) + 2*Place (x + 1) - Place (x + z2) - Place (x + z2 + 1)
|
|
464
|
+
|
|
465
|
+
sage: # needs sage.modules sage.rings.finite_rings
|
|
466
|
+
sage: Oinf = K.maximal_order_infinite()
|
|
467
|
+
sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
|
|
468
|
+
sage: I.divisor()
|
|
469
|
+
2*Place (1/x)
|
|
470
|
+
|
|
471
|
+
sage: # needs sage.rings.function_field
|
|
472
|
+
sage: K.<x> = FunctionField(GF(2)); _.<T> = PolynomialRing(K)
|
|
473
|
+
sage: F.<y> = K.extension(T^3 - x^2*(x^2 + x + 1)^2)
|
|
474
|
+
sage: O = F.maximal_order()
|
|
475
|
+
sage: I = O.ideal(y)
|
|
476
|
+
sage: I.divisor()
|
|
477
|
+
2*Place (x, (1/(x^3 + x^2 + x))*y^2)
|
|
478
|
+
+ 2*Place (x^2 + x + 1, (1/(x^3 + x^2 + x))*y^2)
|
|
479
|
+
|
|
480
|
+
sage: # needs sage.rings.function_field
|
|
481
|
+
sage: Oinf = F.maximal_order_infinite()
|
|
482
|
+
sage: I = Oinf.ideal(y)
|
|
483
|
+
sage: I.divisor()
|
|
484
|
+
-2*Place (1/x, 1/x^4*y^2 + 1/x^2*y + 1)
|
|
485
|
+
- 2*Place (1/x, 1/x^2*y + 1)
|
|
486
|
+
|
|
487
|
+
sage: # needs sage.rings.function_field
|
|
488
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
489
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
490
|
+
sage: O = L.maximal_order()
|
|
491
|
+
sage: I = O.ideal(y)
|
|
492
|
+
sage: I.divisor()
|
|
493
|
+
- Place (x, x*y)
|
|
494
|
+
+ 2*Place (x + 1, x*y)
|
|
495
|
+
|
|
496
|
+
sage: # needs sage.rings.function_field
|
|
497
|
+
sage: Oinf = L.maximal_order_infinite()
|
|
498
|
+
sage: I = Oinf.ideal(y)
|
|
499
|
+
sage: I.divisor()
|
|
500
|
+
- Place (1/x, 1/x*y)
|
|
501
|
+
"""
|
|
502
|
+
from .divisor import divisor
|
|
503
|
+
|
|
504
|
+
if self.is_zero():
|
|
505
|
+
raise ValueError("not defined for zero ideal")
|
|
506
|
+
|
|
507
|
+
F = self.ring().fraction_field()
|
|
508
|
+
data = {prime.place(): multiplicity for prime, multiplicity in self._factor()}
|
|
509
|
+
return divisor(F, data)
|
|
510
|
+
|
|
511
|
+
def divisor_of_zeros(self):
|
|
512
|
+
"""
|
|
513
|
+
Return the divisor of zeros corresponding to the ideal.
|
|
514
|
+
|
|
515
|
+
EXAMPLES::
|
|
516
|
+
|
|
517
|
+
sage: # needs sage.modules sage.rings.finite_rings
|
|
518
|
+
sage: K.<x> = FunctionField(GF(4))
|
|
519
|
+
sage: O = K.maximal_order()
|
|
520
|
+
sage: I = O.ideal(x*(x + 1)^2/(x^2 + x + 1))
|
|
521
|
+
sage: I.divisor_of_zeros()
|
|
522
|
+
Place (x) + 2*Place (x + 1)
|
|
523
|
+
|
|
524
|
+
sage: # needs sage.modules
|
|
525
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
526
|
+
sage: Oinf = K.maximal_order_infinite()
|
|
527
|
+
sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
|
|
528
|
+
sage: I.divisor_of_zeros()
|
|
529
|
+
2*Place (1/x)
|
|
530
|
+
|
|
531
|
+
sage: # needs sage.rings.function_field
|
|
532
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
533
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
534
|
+
sage: O = L.maximal_order()
|
|
535
|
+
sage: I = O.ideal(y)
|
|
536
|
+
sage: I.divisor_of_zeros()
|
|
537
|
+
2*Place (x + 1, x*y)
|
|
538
|
+
"""
|
|
539
|
+
from .divisor import divisor
|
|
540
|
+
|
|
541
|
+
if self.is_zero():
|
|
542
|
+
raise ValueError("not defined for zero ideal")
|
|
543
|
+
|
|
544
|
+
F = self.ring().fraction_field()
|
|
545
|
+
data = {prime.place(): multiplicity for prime, multiplicity in self._factor() if multiplicity > 0}
|
|
546
|
+
return divisor(F, data)
|
|
547
|
+
|
|
548
|
+
def divisor_of_poles(self):
|
|
549
|
+
"""
|
|
550
|
+
Return the divisor of poles corresponding to the ideal.
|
|
551
|
+
|
|
552
|
+
EXAMPLES::
|
|
553
|
+
|
|
554
|
+
sage: # needs sage.modules sage.rings.finite_rings
|
|
555
|
+
sage: K.<x> = FunctionField(GF(4))
|
|
556
|
+
sage: O = K.maximal_order()
|
|
557
|
+
sage: I = O.ideal(x*(x + 1)^2/(x^2 + x + 1))
|
|
558
|
+
sage: I.divisor_of_poles()
|
|
559
|
+
Place (x + z2) + Place (x + z2 + 1)
|
|
560
|
+
|
|
561
|
+
sage: # needs sage.modules
|
|
562
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
563
|
+
sage: Oinf = K.maximal_order_infinite()
|
|
564
|
+
sage: I = Oinf.ideal((x + 1)/(x^3 + 1))
|
|
565
|
+
sage: I.divisor_of_poles()
|
|
566
|
+
0
|
|
567
|
+
|
|
568
|
+
sage: # needs sage.rings.function_field
|
|
569
|
+
sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
|
|
570
|
+
sage: L.<y> = K.extension(Y^2 + Y + x + 1/x)
|
|
571
|
+
sage: O = L.maximal_order()
|
|
572
|
+
sage: I = O.ideal(y)
|
|
573
|
+
sage: I.divisor_of_poles()
|
|
574
|
+
Place (x, x*y)
|
|
575
|
+
"""
|
|
576
|
+
from .divisor import divisor
|
|
577
|
+
|
|
578
|
+
if self.is_zero():
|
|
579
|
+
raise ValueError("not defined for zero ideal")
|
|
580
|
+
|
|
581
|
+
F = self.ring().fraction_field()
|
|
582
|
+
data = {prime.place(): - multiplicity for prime, multiplicity in self._factor() if multiplicity < 0}
|
|
583
|
+
return divisor(F, data)
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
class FunctionFieldIdeal_module(FunctionFieldIdeal, Ideal_generic):
|
|
587
|
+
"""
|
|
588
|
+
A fractional ideal specified by a finitely generated module over
|
|
589
|
+
the integers of the base field.
|
|
590
|
+
|
|
591
|
+
INPUT:
|
|
592
|
+
|
|
593
|
+
- ``ring`` -- an order in a function field
|
|
594
|
+
|
|
595
|
+
- ``module`` -- a module of the order
|
|
596
|
+
|
|
597
|
+
EXAMPLES:
|
|
598
|
+
|
|
599
|
+
An ideal in an extension of a rational function field::
|
|
600
|
+
|
|
601
|
+
sage: # needs sage.rings.function_field
|
|
602
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
603
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
604
|
+
sage: O = L.equation_order()
|
|
605
|
+
sage: I = O.ideal(y)
|
|
606
|
+
sage: I
|
|
607
|
+
Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
608
|
+
sage: I^2
|
|
609
|
+
Ideal (x^3 + 1, (-x^3 - 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
610
|
+
"""
|
|
611
|
+
def __init__(self, ring, module):
|
|
612
|
+
"""
|
|
613
|
+
Initialize.
|
|
614
|
+
|
|
615
|
+
EXAMPLES::
|
|
616
|
+
|
|
617
|
+
sage: # needs sage.rings.function_field
|
|
618
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
619
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
620
|
+
sage: O = L.equation_order()
|
|
621
|
+
sage: I = O.ideal(y)
|
|
622
|
+
sage: TestSuite(I).run()
|
|
623
|
+
"""
|
|
624
|
+
FunctionFieldIdeal.__init__(self, ring)
|
|
625
|
+
|
|
626
|
+
self._module = module
|
|
627
|
+
self._structure = ring.fraction_field().vector_space()
|
|
628
|
+
|
|
629
|
+
V, from_V, to_V = self._structure
|
|
630
|
+
self._gens = tuple([from_V(a) for a in module.basis()])
|
|
631
|
+
|
|
632
|
+
# module generators are still ideal generators
|
|
633
|
+
Ideal_generic.__init__(self, ring, self._gens, coerce=False)
|
|
634
|
+
|
|
635
|
+
def __contains__(self, x):
|
|
636
|
+
"""
|
|
637
|
+
Return ``True`` if ``x`` is in this ideal.
|
|
638
|
+
|
|
639
|
+
EXAMPLES::
|
|
640
|
+
|
|
641
|
+
sage: # needs sage.rings.function_field
|
|
642
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
643
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
644
|
+
sage: O = L.equation_order()
|
|
645
|
+
sage: I = O.ideal(y); I
|
|
646
|
+
Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
647
|
+
sage: y in I
|
|
648
|
+
True
|
|
649
|
+
sage: y/x in I
|
|
650
|
+
False
|
|
651
|
+
sage: y^2 - 2 in I
|
|
652
|
+
False
|
|
653
|
+
"""
|
|
654
|
+
return self._structure[2](x) in self._module
|
|
655
|
+
|
|
656
|
+
def __hash__(self):
|
|
657
|
+
"""
|
|
658
|
+
Return the hash of this ideal.
|
|
659
|
+
|
|
660
|
+
EXAMPLES::
|
|
661
|
+
|
|
662
|
+
sage: # needs sage.rings.function_field
|
|
663
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
664
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
665
|
+
sage: O = L.equation_order()
|
|
666
|
+
sage: I = O.ideal(y)
|
|
667
|
+
sage: d = {I: 1} # indirect doctest
|
|
668
|
+
"""
|
|
669
|
+
return hash((self._ring,self._module))
|
|
670
|
+
|
|
671
|
+
def _richcmp_(self, other, op):
|
|
672
|
+
"""
|
|
673
|
+
Compare this ideal with the ``other`` ideal with respect to ``op``.
|
|
674
|
+
|
|
675
|
+
EXAMPLES::
|
|
676
|
+
|
|
677
|
+
sage: # needs sage.rings.function_field
|
|
678
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
679
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
680
|
+
sage: O = L.equation_order()
|
|
681
|
+
sage: I = O.ideal(x, y); J = O.ideal(y^2 - 2)
|
|
682
|
+
sage: I + J == J + I # indirect test
|
|
683
|
+
True
|
|
684
|
+
sage: I + I == I # indirect doctest
|
|
685
|
+
True
|
|
686
|
+
sage: I == J
|
|
687
|
+
False
|
|
688
|
+
sage: I < J
|
|
689
|
+
True
|
|
690
|
+
sage: J < I
|
|
691
|
+
False
|
|
692
|
+
"""
|
|
693
|
+
return richcmp(self.module().basis(), other.module().basis(), op)
|
|
694
|
+
|
|
695
|
+
def module(self):
|
|
696
|
+
"""
|
|
697
|
+
Return the module over the maximal order of the base field that
|
|
698
|
+
underlies this ideal.
|
|
699
|
+
|
|
700
|
+
The formation of the module is compatible with the vector
|
|
701
|
+
space corresponding to the function field.
|
|
702
|
+
|
|
703
|
+
OUTPUT: a module over the maximal order of the base field of the ideal
|
|
704
|
+
|
|
705
|
+
EXAMPLES::
|
|
706
|
+
|
|
707
|
+
sage: # needs sage.rings.function_field
|
|
708
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
709
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
710
|
+
sage: O = L.equation_order(); O
|
|
711
|
+
Order in Function field in y defined by y^2 - x^3 - 1
|
|
712
|
+
sage: I = O.ideal(x^2 + 1)
|
|
713
|
+
sage: I.gens()
|
|
714
|
+
(x^2 + 1, (x^2 + 1)*y)
|
|
715
|
+
sage: I.module()
|
|
716
|
+
Free module of degree 2 and rank 2 over Maximal order of Rational function field in x over Rational Field
|
|
717
|
+
Echelon basis matrix:
|
|
718
|
+
[x^2 + 1 0]
|
|
719
|
+
[ 0 x^2 + 1]
|
|
720
|
+
sage: V, from_V, to_V = L.vector_space(); V
|
|
721
|
+
Vector space of dimension 2 over Rational function field in x over Rational Field
|
|
722
|
+
sage: I.module().is_submodule(V)
|
|
723
|
+
True
|
|
724
|
+
"""
|
|
725
|
+
return self._module
|
|
726
|
+
|
|
727
|
+
def gens(self) -> tuple:
|
|
728
|
+
"""
|
|
729
|
+
Return a set of generators of this ideal.
|
|
730
|
+
|
|
731
|
+
EXAMPLES::
|
|
732
|
+
|
|
733
|
+
sage: # needs sage.rings.function_field
|
|
734
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
735
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
736
|
+
sage: O = L.equation_order()
|
|
737
|
+
sage: I = O.ideal(x^2 + 1)
|
|
738
|
+
sage: I.gens()
|
|
739
|
+
(x^2 + 1, (x^2 + 1)*y)
|
|
740
|
+
"""
|
|
741
|
+
return self._gens
|
|
742
|
+
|
|
743
|
+
def gen(self, i):
|
|
744
|
+
"""
|
|
745
|
+
Return the ``i``-th generator in the current basis of this ideal.
|
|
746
|
+
|
|
747
|
+
EXAMPLES::
|
|
748
|
+
|
|
749
|
+
sage: # needs sage.rings.function_field
|
|
750
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
751
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
752
|
+
sage: O = L.equation_order()
|
|
753
|
+
sage: I = O.ideal(x^2 + 1)
|
|
754
|
+
sage: I.gen(1)
|
|
755
|
+
(x^2 + 1)*y
|
|
756
|
+
"""
|
|
757
|
+
return self._gens[i]
|
|
758
|
+
|
|
759
|
+
def ngens(self):
|
|
760
|
+
"""
|
|
761
|
+
Return the number of generators in the basis.
|
|
762
|
+
|
|
763
|
+
EXAMPLES::
|
|
764
|
+
|
|
765
|
+
sage: # needs sage.rings.function_field
|
|
766
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
767
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
768
|
+
sage: O = L.equation_order()
|
|
769
|
+
sage: I = O.ideal(x^2 + 1)
|
|
770
|
+
sage: I.ngens()
|
|
771
|
+
2
|
|
772
|
+
"""
|
|
773
|
+
return len(self._gens)
|
|
774
|
+
|
|
775
|
+
def _add_(self, other):
|
|
776
|
+
"""
|
|
777
|
+
Add this ideal with the ``other`` ideal.
|
|
778
|
+
|
|
779
|
+
EXAMPLES::
|
|
780
|
+
|
|
781
|
+
sage: # needs sage.rings.function_field
|
|
782
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
783
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
784
|
+
sage: O = L.equation_order()
|
|
785
|
+
sage: I = O.ideal(y)
|
|
786
|
+
sage: J = O.ideal(x+y)
|
|
787
|
+
sage: I + J
|
|
788
|
+
Ideal ((-x^2 + x)*y + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
789
|
+
"""
|
|
790
|
+
return self.ring().ideal(self.gens() + other.gens())
|
|
791
|
+
|
|
792
|
+
def _mul_(self, other):
|
|
793
|
+
"""
|
|
794
|
+
Multiply this ideal with the ``other`` ideal.
|
|
795
|
+
|
|
796
|
+
EXAMPLES::
|
|
797
|
+
|
|
798
|
+
sage: # needs sage.rings.function_field
|
|
799
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
800
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
801
|
+
sage: O = L.equation_order()
|
|
802
|
+
sage: I = O.ideal(y)
|
|
803
|
+
sage: J = O.ideal(x+y)
|
|
804
|
+
sage: I * J
|
|
805
|
+
Ideal ((-x^5 + x^4 - x^2 + x)*y + x^3 + 1, (x^3 - x^2 + 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
806
|
+
"""
|
|
807
|
+
return self.ring().ideal([x*y for x in self.gens() for y in other.gens()])
|
|
808
|
+
|
|
809
|
+
def _acted_upon_(self, other, on_left):
|
|
810
|
+
"""
|
|
811
|
+
Multiply this ideal on the right with ``other``.
|
|
812
|
+
|
|
813
|
+
EXAMPLES::
|
|
814
|
+
|
|
815
|
+
sage: # needs sage.rings.function_field
|
|
816
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
817
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
818
|
+
sage: O = L.equation_order()
|
|
819
|
+
sage: I = O.ideal(y)
|
|
820
|
+
sage: x * I
|
|
821
|
+
Ideal (x^4 + x, -x*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
822
|
+
"""
|
|
823
|
+
return self.ring().ideal([other * x for x in self.gens()])
|
|
824
|
+
|
|
825
|
+
def intersection(self, other):
|
|
826
|
+
"""
|
|
827
|
+
Return the intersection of this ideal and ``other``.
|
|
828
|
+
|
|
829
|
+
EXAMPLES::
|
|
830
|
+
|
|
831
|
+
sage: # needs sage.rings.function_field
|
|
832
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
833
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
834
|
+
sage: O = L.equation_order()
|
|
835
|
+
sage: I = O.ideal(y^3); J = O.ideal(y^2)
|
|
836
|
+
sage: Z = I.intersection(J); Z
|
|
837
|
+
Ideal (x^6 + 2*x^3 + 1, (-x^3 - 1)*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
838
|
+
sage: y^2 in Z
|
|
839
|
+
False
|
|
840
|
+
sage: y^3 in Z
|
|
841
|
+
True
|
|
842
|
+
"""
|
|
843
|
+
if not isinstance(other, FunctionFieldIdeal):
|
|
844
|
+
try:
|
|
845
|
+
if self.ring().has_coerce_map_from(other):
|
|
846
|
+
return self
|
|
847
|
+
except (TypeError,ArithmeticError,ValueError):
|
|
848
|
+
pass
|
|
849
|
+
other = self.ring().ideal(other)
|
|
850
|
+
|
|
851
|
+
basis = self.module().intersection(other.module()).basis()
|
|
852
|
+
|
|
853
|
+
V, from_V, to_V = self._structure
|
|
854
|
+
return self.ring().ideal_with_gens_over_base([from_V(a) for a in basis])
|
|
855
|
+
|
|
856
|
+
def __invert__(self):
|
|
857
|
+
"""
|
|
858
|
+
Return the inverse of this ideal.
|
|
859
|
+
|
|
860
|
+
EXAMPLES::
|
|
861
|
+
|
|
862
|
+
sage: # needs sage.rings.function_field
|
|
863
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
864
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
865
|
+
sage: O = L.equation_order()
|
|
866
|
+
sage: I = O.ideal(y)
|
|
867
|
+
sage: ~I
|
|
868
|
+
Ideal (-1, (1/(x^3 + 1))*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
869
|
+
sage: I^-1
|
|
870
|
+
Ideal (-1, (1/(x^3 + 1))*y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
871
|
+
sage: ~I * I
|
|
872
|
+
Ideal (1) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
873
|
+
"""
|
|
874
|
+
if len(self.gens()) == 0:
|
|
875
|
+
raise ZeroDivisionError
|
|
876
|
+
|
|
877
|
+
# NOTE: If I = (g0, ..., gn), then {x : x*I is in R}
|
|
878
|
+
# is the intersection over i of {x : x*gi is in R}
|
|
879
|
+
# Thus (I + J)^(-1) = I^(-1) intersect J^(-1).
|
|
880
|
+
|
|
881
|
+
G = self.gens()
|
|
882
|
+
R = self.ring()
|
|
883
|
+
inv = R.ideal(~G[0])
|
|
884
|
+
for g in G[1:]:
|
|
885
|
+
inv = inv.intersection(R.ideal(~g))
|
|
886
|
+
return inv
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
class FunctionFieldIdealInfinite(FunctionFieldIdeal):
|
|
890
|
+
"""
|
|
891
|
+
Base class of ideals of maximal infinite orders
|
|
892
|
+
"""
|
|
893
|
+
pass
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
class FunctionFieldIdealInfinite_module(FunctionFieldIdealInfinite, Ideal_generic):
|
|
897
|
+
"""
|
|
898
|
+
A fractional ideal specified by a finitely generated module over
|
|
899
|
+
the integers of the base field.
|
|
900
|
+
|
|
901
|
+
INPUT:
|
|
902
|
+
|
|
903
|
+
- ``ring`` -- order in a function field
|
|
904
|
+
|
|
905
|
+
- ``module`` -- module
|
|
906
|
+
|
|
907
|
+
EXAMPLES::
|
|
908
|
+
|
|
909
|
+
sage: # needs sage.rings.function_field
|
|
910
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
911
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
912
|
+
sage: O = L.equation_order()
|
|
913
|
+
sage: O.ideal(y)
|
|
914
|
+
Ideal (x^3 + 1, -y) of Order in Function field in y defined by y^2 - x^3 - 1
|
|
915
|
+
"""
|
|
916
|
+
def __init__(self, ring, module):
|
|
917
|
+
"""
|
|
918
|
+
Initialize.
|
|
919
|
+
|
|
920
|
+
TESTS::
|
|
921
|
+
|
|
922
|
+
sage: # needs sage.rings.function_field
|
|
923
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
924
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
925
|
+
sage: O = L.equation_order()
|
|
926
|
+
sage: I = O.ideal(y)
|
|
927
|
+
sage: TestSuite(I).run()
|
|
928
|
+
"""
|
|
929
|
+
FunctionFieldIdealInfinite.__init__(self, ring)
|
|
930
|
+
|
|
931
|
+
self._module = module
|
|
932
|
+
self._structure = ring.fraction_field().vector_space()
|
|
933
|
+
|
|
934
|
+
V, from_V, to_V = self._structure
|
|
935
|
+
gens = tuple([from_V(a) for a in module.basis()])
|
|
936
|
+
self._gens = gens
|
|
937
|
+
|
|
938
|
+
# module generators are still ideal generators
|
|
939
|
+
Ideal_generic.__init__(self, ring, self._gens, coerce=False)
|
|
940
|
+
|
|
941
|
+
def __contains__(self, x):
|
|
942
|
+
"""
|
|
943
|
+
Return ``True`` if ``x`` is in this ideal.
|
|
944
|
+
|
|
945
|
+
INPUT:
|
|
946
|
+
|
|
947
|
+
- ``x`` -- element of the function field
|
|
948
|
+
|
|
949
|
+
EXAMPLES::
|
|
950
|
+
|
|
951
|
+
sage: # needs sage.rings.function_field
|
|
952
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
953
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
954
|
+
sage: O = L.equation_order()
|
|
955
|
+
sage: I = O.ideal_with_gens_over_base([1, y]); I
|
|
956
|
+
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
957
|
+
sage: y in I
|
|
958
|
+
True
|
|
959
|
+
sage: y/x in I
|
|
960
|
+
False
|
|
961
|
+
sage: y^2 - 2 in I
|
|
962
|
+
True
|
|
963
|
+
"""
|
|
964
|
+
return self._structure[2](x) in self._module
|
|
965
|
+
|
|
966
|
+
def __hash__(self):
|
|
967
|
+
"""
|
|
968
|
+
Return the hash of this ideal.
|
|
969
|
+
|
|
970
|
+
EXAMPLES::
|
|
971
|
+
|
|
972
|
+
sage: # needs sage.rings.function_field
|
|
973
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
974
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
975
|
+
sage: O = L.equation_order()
|
|
976
|
+
sage: I = O.ideal_with_gens_over_base([1, y])
|
|
977
|
+
sage: d = {I: 2} # indirect doctest
|
|
978
|
+
"""
|
|
979
|
+
return hash((self._ring,self._module))
|
|
980
|
+
|
|
981
|
+
def __eq__(self, other):
|
|
982
|
+
"""
|
|
983
|
+
Test equality of this ideal with the ``other`` ideal.
|
|
984
|
+
|
|
985
|
+
INPUT:
|
|
986
|
+
|
|
987
|
+
- ``other`` -- ideal
|
|
988
|
+
|
|
989
|
+
EXAMPLES::
|
|
990
|
+
|
|
991
|
+
sage: # needs sage.rings.function_field
|
|
992
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
993
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
994
|
+
sage: O = L.equation_order()
|
|
995
|
+
sage: I = O.ideal_with_gens_over_base([1, y])
|
|
996
|
+
sage: I == I + I # indirect doctest
|
|
997
|
+
True
|
|
998
|
+
"""
|
|
999
|
+
if not isinstance(other, FunctionFieldIdeal_module):
|
|
1000
|
+
other = self.ring().ideal(other)
|
|
1001
|
+
if self.ring() != other.ring():
|
|
1002
|
+
raise ValueError("rings must be the same")
|
|
1003
|
+
|
|
1004
|
+
if (self.module().is_submodule(other.module()) and
|
|
1005
|
+
other.module().is_submodule(self.module())):
|
|
1006
|
+
return True
|
|
1007
|
+
else:
|
|
1008
|
+
return False
|
|
1009
|
+
|
|
1010
|
+
def module(self):
|
|
1011
|
+
"""
|
|
1012
|
+
Return the module over the maximal order of the base field that
|
|
1013
|
+
underlies this ideal.
|
|
1014
|
+
|
|
1015
|
+
The formation of the module is compatible with the vector
|
|
1016
|
+
space corresponding to the function field.
|
|
1017
|
+
|
|
1018
|
+
EXAMPLES::
|
|
1019
|
+
|
|
1020
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
1021
|
+
sage: O = K.maximal_order(); O
|
|
1022
|
+
Maximal order of Rational function field in x over Finite Field of size 7
|
|
1023
|
+
sage: K.polynomial_ring()
|
|
1024
|
+
Univariate Polynomial Ring in x over
|
|
1025
|
+
Rational function field in x over Finite Field of size 7
|
|
1026
|
+
sage: I = O.ideal([x^2 + 1, x*(x^2+1)])
|
|
1027
|
+
sage: I.gens()
|
|
1028
|
+
(x^2 + 1,)
|
|
1029
|
+
sage: I.module() # needs sage.modules
|
|
1030
|
+
Free module of degree 1 and rank 1 over
|
|
1031
|
+
Maximal order of Rational function field in x over Finite Field of size 7
|
|
1032
|
+
Echelon basis matrix:
|
|
1033
|
+
[x^2 + 1]
|
|
1034
|
+
sage: V, from_V, to_V = K.vector_space(); V # needs sage.modules
|
|
1035
|
+
Vector space of dimension 1 over
|
|
1036
|
+
Rational function field in x over Finite Field of size 7
|
|
1037
|
+
sage: I.module().is_submodule(V) # needs sage.modules
|
|
1038
|
+
True
|
|
1039
|
+
"""
|
|
1040
|
+
return self._module
|
|
1041
|
+
|
|
1042
|
+
|
|
1043
|
+
class IdealMonoid(UniqueRepresentation, Parent):
|
|
1044
|
+
r"""
|
|
1045
|
+
The monoid of ideals in orders of function fields.
|
|
1046
|
+
|
|
1047
|
+
INPUT:
|
|
1048
|
+
|
|
1049
|
+
- ``R`` -- order
|
|
1050
|
+
|
|
1051
|
+
EXAMPLES::
|
|
1052
|
+
|
|
1053
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1054
|
+
sage: O = K.maximal_order()
|
|
1055
|
+
sage: M = O.ideal_monoid(); M
|
|
1056
|
+
Monoid of ideals of Maximal order of Rational function field in x over Finite Field of size 2
|
|
1057
|
+
"""
|
|
1058
|
+
|
|
1059
|
+
def __init__(self, R):
|
|
1060
|
+
"""
|
|
1061
|
+
Initialize the ideal monoid.
|
|
1062
|
+
|
|
1063
|
+
TESTS::
|
|
1064
|
+
|
|
1065
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1066
|
+
sage: O = K.maximal_order()
|
|
1067
|
+
sage: M = O.ideal_monoid()
|
|
1068
|
+
sage: TestSuite(M).run()
|
|
1069
|
+
"""
|
|
1070
|
+
self.Element = R._ideal_class_
|
|
1071
|
+
Parent.__init__(self, category=Monoids())
|
|
1072
|
+
|
|
1073
|
+
self.__R = R
|
|
1074
|
+
self._populate_coercion_lists_()
|
|
1075
|
+
|
|
1076
|
+
def _repr_(self):
|
|
1077
|
+
"""
|
|
1078
|
+
Return the string representation of the ideal monoid.
|
|
1079
|
+
|
|
1080
|
+
TESTS::
|
|
1081
|
+
|
|
1082
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1083
|
+
sage: O = K.maximal_order()
|
|
1084
|
+
sage: M = O.ideal_monoid(); M._repr_()
|
|
1085
|
+
'Monoid of ideals of Maximal order of Rational function field in x over Finite Field of size 2'
|
|
1086
|
+
"""
|
|
1087
|
+
return "Monoid of ideals of %s" % self.__R
|
|
1088
|
+
|
|
1089
|
+
def ring(self):
|
|
1090
|
+
"""
|
|
1091
|
+
Return the ring of which this is the ideal monoid.
|
|
1092
|
+
|
|
1093
|
+
EXAMPLES::
|
|
1094
|
+
|
|
1095
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1096
|
+
sage: O = K.maximal_order()
|
|
1097
|
+
sage: M = O.ideal_monoid(); M.ring() is O
|
|
1098
|
+
True
|
|
1099
|
+
"""
|
|
1100
|
+
return self.__R
|
|
1101
|
+
|
|
1102
|
+
def _element_constructor_(self, x):
|
|
1103
|
+
"""
|
|
1104
|
+
Create an ideal in the monoid from ``x``.
|
|
1105
|
+
|
|
1106
|
+
EXAMPLES::
|
|
1107
|
+
|
|
1108
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1109
|
+
sage: O = K.maximal_order()
|
|
1110
|
+
sage: M = O.ideal_monoid()
|
|
1111
|
+
sage: M(x)
|
|
1112
|
+
Ideal (x) of Maximal order of Rational function field in x over Finite Field of size 2
|
|
1113
|
+
sage: M([x-4, 1/x])
|
|
1114
|
+
Ideal (1/x) of Maximal order of Rational function field in x over Finite Field of size 2
|
|
1115
|
+
"""
|
|
1116
|
+
try: # x is an ideal
|
|
1117
|
+
x = x.gens()
|
|
1118
|
+
except AttributeError:
|
|
1119
|
+
pass
|
|
1120
|
+
return self.__R.ideal(x)
|
|
1121
|
+
|
|
1122
|
+
def _coerce_map_from_(self, x):
|
|
1123
|
+
"""
|
|
1124
|
+
Used by coercion framework.
|
|
1125
|
+
|
|
1126
|
+
EXAMPLES::
|
|
1127
|
+
|
|
1128
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1129
|
+
sage: O = K.maximal_order()
|
|
1130
|
+
sage: M = O.ideal_monoid()
|
|
1131
|
+
sage: M.has_coerce_map_from(O) # indirect doctest
|
|
1132
|
+
True
|
|
1133
|
+
sage: M.has_coerce_map_from(O.ideal_monoid())
|
|
1134
|
+
True
|
|
1135
|
+
"""
|
|
1136
|
+
if isinstance(x, IdealMonoid):
|
|
1137
|
+
return self.ring().has_coerce_map_from(x.ring())
|
|
1138
|
+
else:
|
|
1139
|
+
return self.ring().has_coerce_map_from(x)
|
|
1140
|
+
|
|
1141
|
+
def _an_element_(self):
|
|
1142
|
+
"""
|
|
1143
|
+
Return an element of the ideal monoid.
|
|
1144
|
+
|
|
1145
|
+
EXAMPLES::
|
|
1146
|
+
|
|
1147
|
+
sage: K.<x> = FunctionField(GF(2))
|
|
1148
|
+
sage: O = K.maximal_order()
|
|
1149
|
+
sage: M = O.ideal_monoid()
|
|
1150
|
+
sage: M.an_element() # indirect doctest; random
|
|
1151
|
+
Ideal (x) of Maximal order of Rational function field in x
|
|
1152
|
+
over Finite Field of size 2
|
|
1153
|
+
"""
|
|
1154
|
+
x = self.__R.an_element()
|
|
1155
|
+
return self.__R.ideal([x])
|