ShimizuYamaguchi26BranchedCoverings.rationalSectionPadicDivisor_isNormalCrossings_iff_specialFiber_conditions
Published library source ↗Same source in NYLL ↗
theorem rationalSectionPadicDivisor_isNormalCrossings_iff_specialFiber_conditions
(p : ℕ) [Fact p.Prime] (A : Finset (Projectivization ℚ (ℚ × ℚ))) :
(rationalSectionPadicDivisor p A).IsNormalCrossings ↔
(∀ y : ProjectiveLine (ZMod p),
IsClosed ({y} : Set (ProjectiveLine (ZMod p))) →
({c : Projectivization ℚ (ℚ × ℚ) | c ∈ A ∧
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport c} :
Set (Projectivization ℚ (ℚ × ℚ))).ncard ≤ 2) ∧
(∀ y : ProjectiveLine (ZMod p),
IsClosed ({y} : Set (ProjectiveLine (ZMod p))) →
∀ a ∈ A, ∀ b ∈ A, a ≠ b →
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport a →
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport b →
padicValInt p (rationalPointDelta a b) = 1)In-scope Lean context
noncomputable section
open AlgebraicGeometry
namespace ShimizuYamaguchi26BranchedCoveringsFull declaration and proof
/-- The normal-crossings assertion of Lemma 2.3, stated on the actual
p-adic divisor and the closed points of the original prime special fibre. -/
theorem rationalSectionPadicDivisor_isNormalCrossings_iff_specialFiber_conditions
(p : ℕ) [Fact p.Prime] (A : Finset (Projectivization ℚ (ℚ × ℚ))) :
(rationalSectionPadicDivisor p A).IsNormalCrossings ↔
(∀ y : ProjectiveLine (ZMod p),
IsClosed ({y} : Set (ProjectiveLine (ZMod p))) →
({c : Projectivization ℚ (ℚ × ℚ) | c ∈ A ∧
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport c} :
Set (Projectivization ℚ (ℚ × ℚ))).ncard ≤ 2) ∧
(∀ y : ProjectiveLine (ZMod p),
IsClosed ({y} : Set (ProjectiveLine (ZMod p))) →
∀ a ∈ A, ∀ b ∈ A, a ≠ b →
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport a →
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport b →
padicValInt p (rationalPointDelta a b) = 1) := by
classical
rw [rationalSectionPadicDivisor_isNormalCrossings_iff_isStrictNormalCrossings]
constructor
· intro hNC
obtain ⟨hcard, hval⟩ :=
(rationalSectionPadicDivisor_isStrictNormalCrossings_iff p A).mp hNC
constructor
· intro y _hy
rw [← Finset.coe_filter, Set.ncard_coe_finset]
let S := A.filter (fun c =>
ProjSpace.map ℤ (ZMod p) 1 y ∈ rationalSectionSupport c)
change S.card ≤ 2
by_cases hS : S.Nonempty
· obtain ⟨b, hbS⟩ := hS
obtain ⟨hb, hyb⟩ := Finset.mem_filter.mp hbS
apply (Finset.card_le_card (show S ⊆
A.filter (fun c => (p : ℤ) ∣ rationalPointDelta c b) from ?_)).trans (hcard b hb)
intro c hcS
obtain ⟨hc, hyc⟩ := Finset.mem_filter.mp hcS
exact Finset.mem_filter.mpr ⟨hc,
(specialFiber_intersection_nonempty_iff p c b).mp ⟨y, hyc, hyb⟩⟩
· rw [Finset.not_nonempty_iff_eq_empty.mp hS, Finset.card_empty]
exact Nat.zero_le 2
· intro y _hy a ha b hb hab hya hyb
exact hval a ha b hb hab
((specialFiber_intersection_nonempty_iff p a b).mp ⟨y, hya, hyb⟩)
· rintro ⟨hcard, hval⟩
apply (rationalSectionPadicDivisor_isStrictNormalCrossings_iff_integer p A).mpr
exact rationalSectionFamily_isStrictNormalCrossingsAt_of_specialFiber_conditions
p A hcard hvalSource credits and license
Copyright (c) 2026 Naganori Yamaguchi (https://github.com/n-yamaguchi-0729). All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Naganori Yamaguchi (assisted by OpenAI Codex)