Files / lean / OAI / AlgebraicGeometry / AbhyankarSathaye / FiberFormulas.lean

5.1 kB · changed
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