import OAI.AlgebraicGeometry.AbhyankarSathaye.Fiber
namespace OAI
/-!
# Explicit coordinates on the zero fiber
The inverse isomorphism sends `X`, `Y`, and `T` to `x + s³`, `y - s²`,
and `α * u + β * (v + u * w)`. The forward isomorphism is given by the
polynomials `freeH`, `freeU`, `freeV`, and `freeW`, with variables ordered `X, Y, T`.
-/
noncomputable section
namespace AbhyankarSathaye
open MvPolynomial Presentation
def fiberParameter : R := parameter (Alpha x s) (Beta x y s) u v w
theorem fiberEquiv_symm_X0 : fiberEquiv.symm (X 0) = dmap shiftX := by
change toOriginal (Lifting.backward hB xB yB sB (Alpha xB sB) (Beta xB yB sB)
(Polynomial.map (Plane.backward ℂ).toRingHom (flattenPlane.symm (X 0)))) = _
rw [flattenPlane_symm_X0, Polynomial.map_C]
have he : (Plane.backward ℂ).toRingHom (X 0) = xB+sB^3 := by simp [Plane.backward]
rw [he]
simp only [Lifting.backward, Polynomial.aeval_C]
change toOriginal (lcoef (xB+sB^3)) = _
simp [auxValues, shiftX]
theorem fiberEquiv_symm_X1 : fiberEquiv.symm (X 1) = dmap shiftY := by
change toOriginal (Lifting.backward hB xB yB sB (Alpha xB sB) (Beta xB yB sB)
(Polynomial.map (Plane.backward ℂ).toRingHom (flattenPlane.symm (X 1)))) = _
rw [flattenPlane_symm_X1, Polynomial.map_C]
have he : (Plane.backward ℂ).toRingHom (X 1) = yB-sB^2 := by simp [Plane.backward]
rw [he]
simp only [Lifting.backward, Polynomial.aeval_C]
change toOriginal (lcoef (yB-sB^2)) = _
simp [auxValues, shiftY]
theorem fiberEquiv_symm_X2 : fiberEquiv.symm (X 2) = dmap fiberParameter := by
change toOriginal (Lifting.backward hB xB yB sB (Alpha xB sB) (Beta xB yB sB)
(Polynomial.map (Plane.backward ℂ).toRingHom (flattenPlane.symm (X 2)))) = _
rw [flattenPlane_symm_X2, Polynomial.map_X]
simp only [Lifting.backward, Polynomial.aeval_X]
change toOriginal (parameter (lcoef (Alpha xB sB)) (lcoef (Beta xB yB sB))
(lvar 0) (lvar 1) (lvar 2)) = _
simp [fiberParameter, auxValues, liftValues]
def freeS : MvPolynomial (Fin 3) ℂ := X 0^2+X 1^3
def freeX : MvPolynomial (Fin 3) ℂ := X 0-freeS^3
def freeY : MvPolynomial (Fin 3) ℂ := X 1+freeS^2
def freeH : MvPolynomial (Fin 3) ℂ := 1+P freeX freeY freeS
def freeAlpha : MvPolynomial (Fin 3) ℂ := Alpha freeX freeS
def freeBeta : MvPolynomial (Fin 3) ℂ := Beta freeX freeY freeS
def freeU : MvPolynomial (Fin 3) ℂ := inverseU freeH freeX freeBeta (X 2)
def freeG : MvPolynomial (Fin 3) ℂ := inverseG freeX freeY freeAlpha (X 2)
def freeW : MvPolynomial (Fin 3) ℂ := inverseW freeH freeY freeS freeAlpha freeBeta freeU freeG
def freeV : MvPolynomial (Fin 3) ℂ := inverseV freeU freeG freeW
@[simp] theorem symm_freeS : fiberEquiv.symm freeS = dmap s := by
have ha := congrArg dmap ambient
simp only [map_add, map_pow, map_mul, map_one, dmap_F, add_zero, mul_one] at ha
simpa [freeS, fiberEquiv_symm_X0, fiberEquiv_symm_X1] using ha
@[simp] theorem symm_freeX : fiberEquiv.symm freeX = dmap x := by
simp [freeX, fiberEquiv_symm_X0, shiftX]
@[simp] theorem symm_freeY : fiberEquiv.symm freeY = dmap y := by
simp [freeY, fiberEquiv_symm_X1, shiftY]
@[simp] theorem symm_freeH : fiberEquiv.symm freeH = dmap h := by
have hf : dmap h-dmap p-1 = 0 := by simpa [F] using dmap_F
have hh : 1+dmap p = dmap h := by
calc
_ = dmap h-(dmap h-dmap p-1) := by ring
_ = dmap h := by rw [hf, sub_zero]
simpa [freeH, p] using hh
@[simp] theorem symm_freeAlpha : fiberEquiv.symm freeAlpha = dmap (Alpha x s) := by
simp [freeAlpha]
@[simp] theorem symm_freeBeta : fiberEquiv.symm freeBeta = dmap (Beta x y s) := by
simp [freeBeta]
theorem inverse_formulas_in_quotient : fiberEquiv.symm freeU = dmap u ∧
fiberEquiv.symm freeV = dmap v ∧ fiberEquiv.symm freeW = dmap w := by
have hc : x^2+y^3-s*h = 0 := by rw [cusp]; ring
have hh : h-1-P x y s = F := by unfold F p; ring
have hb : dmap (Alpha x s)*dmap h+dmap (Beta x y s)*dmap y = 1 := by
have he := congrArg dmap (bezout_certificate h x y s)
rw [hc, hh] at he
simpa [p, dmap_F, ← sub_eq_zero] using he
have hx : (dmap u)^3+dmap h*dmap v = dmap x := by simp [x]
have hy : -(dmap u)^2+dmap h*dmap w = dmap y := by simp [y]
have hs : S (dmap h) (dmap u) (dmap v) (dmap w) = dmap s := by simp [s]
have hr := original_reconstruction (dmap h) (dmap x) (dmap y) (dmap s)
(dmap (Alpha x s)) (dmap (Beta x y s)) (dmap u) (dmap v) (dmap w) hb hx hy hs
simpa [freeU, freeV, freeW, freeG, fiberEquiv_symm_X2, fiberParameter] using hr
theorem explicit_inverse_formulas :
fiberEquiv (dmap h) = freeH ∧ fiberEquiv (dmap u) = freeU ∧
fiberEquiv (dmap v) = freeV ∧ fiberEquiv (dmap w) = freeW := by
obtain ⟨hu, hv, hw⟩ := inverse_formulas_in_quotient
refine ⟨?_, ?_, ?_, ?_⟩
· exact (fiberEquiv.apply_symm_apply freeH) ▸ congrArg fiberEquiv symm_freeH.symm
· exact (fiberEquiv.apply_symm_apply freeU) ▸ congrArg fiberEquiv hu.symm
· exact (fiberEquiv.apply_symm_apply freeV) ▸ congrArg fiberEquiv hv.symm
· exact (fiberEquiv.apply_symm_apply freeW) ▸ congrArg fiberEquiv hw.symm
end AbhyankarSathaye
end
end OAI
SHA-256 172b6d1609d4a0c7b3ccd56011ca4a5135e789e25801b6b77038f7ff83699876