Simon, Many thanks for your patient answers.
> > However if all coercion maps involved are injective then > > can't I expect == to be preserved? > > Why do you think that all coercions are injective? The coercion from ZZ > to GF(2) is certainly not injective. I meant not that all coercions were injective, but that all the coercion maps involved in my situation were injective homomorphisms. I suppose it would be hard in general for the coercion mechanism to keep track of such details on the fly (remember whether all the maps used so far been injective). > > Since the coercion from S to FractionField(R) > > is injective, the pushout must necessarily be > > FractionField(R). > > Here is the problem: > > sage: S.<x> = LaurentPolynomialRing(QQ) > sage: R = S.polynomial_ring() > sage: K = R.fraction_field() > sage: K.has_coerce_map_from(S) > False > > There are two possibilities: Either the "obvious" embedding of S into K > would create problems with the axioms above. Probably it is fine. > > Or it was forgotten to teach Sage that it is fine. > > Note that conversion from S to K is implemented: > sage: K(x) > x > sage: K(1/x) > 1/x > > So, the only problem is that Sage does not think (yet) that this > conversion qualifies as coercion. I am not sure how to fix it. The first > one might think of is the method K._coerce_map_from_: This is where > the existence of basic coercion maps is defined. However, K is a generic > fraction field - it would be very bad style to have tests for "Laurent > polynomial rings" in a very general method. Yeah, how can K generally know about some "random" subring like S? I understand that part. --Mark -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org