import Mathlib import Definitions.Def_AlgebraicGeometry_RelativeGroupLaw import Definitions.Def_AlgebraicGeometry_SquareZeroDeformation import Definitions.Def_AlgebraicGeometry_SquareZeroRelTangent import Definitions.Def_AlgebraicGeometry_SmallExtensionPairTangent import Definitions.Def_AlgebraicGeometry_TangentCoordsOfPair import Definitions.Def_AlgebraicGeometry_SmallExtensionTangentCoords import Definitions.Def_AlgebraicGeometry_TangentCoordsOfPairAt set_option autoImplicit false set_option linter.unusedSectionVars false noncomputable section universe u open CategoryTheory CategoryTheory.Limits AlgebraicGeometry TensorProduct IsLocalRing NeronModelInfra GoodReductionJacobian namespace AlgebraicGeometry.SmallExtension variable {T' : Type u} [CommRing T'] [IsLocalRing T'] (I : Ideal T') (V : Type u) [AddCommGroup V] [Module (ResidueField T') V] [Module (ResidueField T')ᵐᵒᵖ V] [IsCentralScalar (ResidueField T') V] [Module T' V] [IsScalarTower T' (ResidueField T') V] (ι : V →ₗ[T'] T') (C : Type u) [CommRing C] [Algebra T' C] def IsTangentCoordsOfPairAtVia {Y : Scheme.{u}} (u v : Spec (CommRingCat.of C) ⟶ Y) {Ak : Scheme.{u}} (xk : Ak ⟶ Spec (CommRingCat.of (ResidueField T'))) (Lk : RelativeGroupLaw (ResidueField T') xk) (W : Ak.Opens) (aW : (W : Scheme.{u}) ⟶ Y) (Ue : Ak.Opens) (c : Γ(Ak, Ue) → (Module.Dual (ResidueField T') V →ₗ[ResidueField T'] (ResidueField T' ⊗[T'] C))) : Prop := ∃ (w₀ : Spec (CommRingCat.of (thickening T' V C)) ⟶ (W : Scheme.{u})) (hw₀ : (w₀ ≫ W.ι) ≫ xk = RelTangentPoints.base V (thickeningSnd T' V C)) (w₁ : Spec (CommRingCat.of (thickening T' V C)) ⟶ (Ue : Scheme.{u})), IsTangentOfPair I V ι C u v (w₀ ≫ aW) ∧ w₁ ≫ Ue.ι = (RelTangentPoints.translate xk Lk V (reductionBase T' C) (thickeningFst T' V C) (thickeningSnd T' V C) (thickening_isPullback V C) (w₀ ≫ W.ι) hw₀).1 ∧ c = tangentCoords T' V C (chartRingHom V C Ue w₁) end AlgebraicGeometry.SmallExtension end