@@ -412,45 +412,54 @@ For an affine scheme `X` over a `base_ring` ``𝕜`` and a morphism
412
412
``φ : 𝕜 → 𝕂`` this computes ``Y = X × Spec(𝕂)`` and returns a pair
413
413
`(Y, psi)` where `psi` is the canonical map ``Y → X``.
414
414
"""
415
- function base_change (phi:: Any , X:: AbsAffineScheme )
416
- kk = base_ring (X)
417
- kk_red = parent (phi (zero (kk)))
415
+ function base_change (
416
+ phi:: Any , X:: AbsAffineScheme ;
417
+ ambient_ring_map:: Map = _change_base_ring (phi, ambient_coordinate_ring (X))[2 ]
418
+ )
418
419
R = OO (X)
419
- R_red, Phi = _change_base_ring (phi, R)
420
+ R_red, Phi = _change_base_ring (phi, R; ambient_ring_map )
420
421
Y = spec (R_red)
421
422
return Y, morphism (Y, X, Phi; check= false )
422
423
end
423
424
424
425
# ## Some helper functions
425
- function _change_base_ring (phi:: Any , R:: MPolyRing )
426
- K = coefficient_ring (R)
427
- kk = parent (phi (zero (K)))
428
- P, _ = polynomial_ring (kk, symbols (R); cached= false )
429
- Phi = hom (R, P, phi, gens (P); check= false )
430
- return P, Phi
426
+ function _change_base_ring (
427
+ phi:: Any , R:: MPolyRing ;
428
+ ambient_ring_map:: Map = begin
429
+ K = coefficient_ring (R)
430
+ kk = parent (phi (zero (K)))
431
+ P, _ = polynomial_ring (kk, symbols (R); cached= false )
432
+ Phi = hom (R, P, phi, gens (P); check= false )
433
+ Phi
434
+ end
435
+ )
436
+ return codomain (ambient_ring_map), ambient_ring_map
431
437
end
432
438
433
- function _change_base_ring (phi:: Any , A:: MPolyQuoRing )
434
- R = base_ring (A)
439
+ function _change_base_ring (
440
+ phi:: Any , A:: MPolyQuoRing ;
441
+ ambient_ring_map:: Map = _change_base_ring (phi, base_ring (A))[2 ]
442
+ )
435
443
I = modulus (A)
436
- P, Phi = _change_base_ring (phi, R )
437
- I_red = ideal (P, Phi .(gens (I)))
444
+ P = codomain (ambient_ring_map )
445
+ I_red = ideal (P, ambient_ring_map .(gens (I)))
438
446
Q, pr = quo (P, I_red)
439
447
Phi_bar = hom (A, Q, phi, gens (Q), check= false )
440
448
return Q, Phi_bar
441
449
end
442
450
443
- function _change_base_ring (phi:: Any ,
451
+ function _change_base_ring (
452
+ phi:: Any ,
444
453
W:: MPolyLocRing {<: Any , <: Any , <: Any , <: Any ,
445
- <: MPolyPowersOfElement }
454
+ <: MPolyPowersOfElement };
455
+ ambient_ring_map:: Map = _change_base_ring (phi, base_ring (W))[2 ]
446
456
)
447
- R = base_ring (W)
448
- P, Phi = _change_base_ring (phi, R)
449
- @assert _has_coefficient_map (Phi)
457
+ P = codomain (ambient_ring_map)
458
+ @assert _has_coefficient_map (ambient_ring_map)
450
459
U = inverted_set (W)
451
- U_red = MPolyPowersOfElement (P, Phi .(denominators (U)))
460
+ U_red = MPolyPowersOfElement (P, ambient_ring_map .(denominators (U)))
452
461
W_red, loc_map = localization (P, U_red)
453
- comp = hom (R , W_red, phi, gens (W_red); check= false )
462
+ comp = hom (base_ring (W) , W_red, phi, gens (W_red); check= false )
454
463
@assert _has_coefficient_map (comp)
455
464
res_map = hom (W, W_red, comp, check= false )
456
465
@assert _has_coefficient_map (res_map)
@@ -459,11 +468,11 @@ end
459
468
460
469
function _change_base_ring (phi:: Any ,
461
470
L:: MPolyQuoLocRing {<: Any , <: Any , <: Any , <: Any ,
462
- <: MPolyPowersOfElement }
471
+ <: MPolyPowersOfElement };
472
+ ambient_ring_map:: Map = _change_base_ring (phi, base_ring (L))[2 ]
463
473
)
464
- R = base_ring (L)
465
474
W = localized_ring (L)
466
- W_red, Phi_W = _change_base_ring (phi, W)
475
+ W_red, Phi_W = _change_base_ring (phi, W; ambient_ring_map )
467
476
I = modulus (L)
468
477
I_red = ideal (W_red, Phi_W .(gens (I)))
469
478
L_red, pr = quo (W_red, I_red)
0 commit comments