Opened 6 years ago
Closed 5 years ago
#23167 closed enhancement (fixed)
Coercions between Function Fields
Reported by:  Julian Rüth  Owned by:  

Priority:  major  Milestone:  sage8.0 
Component:  commutative algebra  Keywords:  sd86.5 
Cc:  Merged in:  
Authors:  David Roe  Reviewers:  Julian Rüth 
Report Upstream:  N/A  Work issues:  
Branch:  e2ad9b3 (Commits, GitHub, GitLab)  Commit:  e2ad9b3dd3078d4f9e4c2589b0355e99131803fc 
Dependencies:  Stopgaps: 
Description
The following are desired features.
Coercions between base fields should induce coercions on function fields:
sage: K.<x> = FunctionField(QQ) sage: L.<x> = FunctionField(GaussianIntegers().fraction_field()) sage: L.has_coerce_map_from(K) True
Also in towers:
sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^3 + 1) sage: K.<x> = FunctionField(GaussianIntegers().fraction_field()) sage: R.<y> = K[] sage: M.<y> = K.extension(y^3 + 1) sage: M.has_coerce_map_from(L) True
And when the base ring coerces into the extension:
sage: K.<x> = FunctionField(QQ) sage: R.<I> = K[] sage: L.<I> = K.extension(I^2 + 1) sage: M.<x> = FunctionField(GaussianIntegers().fraction_field()) sage: M.has_coerce_map_from(L) # not tested, base_morphism is not implemented True
Change History (18)
comment:1 Changed 6 years ago by
Branch:  → u/roed/coercions_between_function_fields 

comment:2 Changed 6 years ago by
Commit:  → c227ee780c801638bb17ea666379179d2d425f66 

Status:  new → needs_review 
comment:3 Changed 6 years ago by
Authors:  → David Roe 

comment:4 Changed 6 years ago by
Branch:  u/roed/coercions_between_function_fields → u/saraedum/coercions_between_function_fields 

comment:5 Changed 6 years ago by
Commit:  c227ee780c801638bb17ea666379179d2d425f66 → 369a518285a1491274b21a31cd453df16cbe05a6 

Reviewers:  → Julian Rüth 
Positive review. But one doctest fails because an is_injective
is not implemented. I think that we should just disable the doctest because the failing doctest is not in the scope of this. (We discussed several ways of fixing this. The best would probably be to change the DefaultConvertMap
to be a DefaultCoerceMap
[does not exist yet] which is in the category of domain and codomain and would therefore by magically be injective.)
New commits:
369a518  Remove obsolete not implemented comments

comment:6 Changed 6 years ago by
Status:  needs_review → needs_work 

comment:7 Changed 6 years ago by
Work issues:  → one doctest fails 

comment:8 Changed 6 years ago by
Branch:  u/saraedum/coercions_between_function_fields → u/roed/coercions_between_function_fields 

comment:9 Changed 6 years ago by
Commit:  369a518285a1491274b21a31cd453df16cbe05a6 → b3331784fec7ec424b8af1142239d3be9d1315a3 

Status:  needs_work → needs_review 
comment:10 Changed 6 years ago by
Status:  needs_review → positive_review 

comment:13 Changed 5 years ago by
Status:  positive_review → needs_work 

sage t long warnlong 69.1 src/sage/categories/rings.py ********************************************************************** File "src/sage/categories/rings.py", line 97, in sage.categories.rings.Rings.MorphismMethods.is_injective Failed example: f = K.hom([codomain(1)]); f Exception raised: Traceback (most recent call last): File "/mnt/disk/home/release/Sage/local/lib/python2.7/sitepackages/sage/doctest/forker.py", line 509, in _run self.compile_and_execute(example, compiler, test.globs) File "/mnt/disk/home/release/Sage/local/lib/python2.7/sitepackages/sage/doctest/forker.py", line 872, in compile_and_execute exec(compiled, globs) File "<doctest sage.categories.rings.Rings.MorphismMethods.is_injective[8]>", line 1, in <module> f = K.hom([codomain(Integer(1))]); f File "/mnt/disk/home/release/Sage/local/lib/python2.7/sitepackages/sage/rings/function_field/function_field.py", line 1935, in hom raise ValueError("You must specify a morphism on the base field") ValueError: You must specify a morphism on the base field ********************************************************************** File "src/sage/categories/rings.py", line 102, in sage.categories.rings.Rings.MorphismMethods.is_injective Failed example: f.is_injective() Expected: False Got: True **********************************************************************
comment:14 Changed 5 years ago by
Branch:  u/roed/coercions_between_function_fields → u/saraedum/coercions_between_function_fields 

comment:15 Changed 5 years ago by
Commit:  b3331784fec7ec424b8af1142239d3be9d1315a3 → e2ad9b3dd3078d4f9e4c2589b0355e99131803fc 

Branch pushed to git repo; I updated commit sha1. New commits:
e2ad9b3  Fix zero morphism check

comment:16 Changed 5 years ago by
Status:  needs_work → positive_review 

tests pass; david agreed to this fix.
comment:17 Changed 5 years ago by
Work issues:  one doctest fails 

comment:18 Changed 5 years ago by
Branch:  u/saraedum/coercions_between_function_fields → e2ad9b3dd3078d4f9e4c2589b0355e99131803fc 

Resolution:  → fixed 
Status:  positive_review → closed 
New commits:
Adding more coercions between function fields and the ability to specify a morphism on the base field or constant field