Skip to content

Commit

Permalink
fill in valuation_comap (#194)
Browse files Browse the repository at this point in the history
* stash

* stash

* done?

* clean up
  • Loading branch information
erdOne authored Nov 12, 2024
1 parent 29dfe42 commit 409509d
Showing 1 changed file with 74 additions and 4 deletions.
78 changes: 74 additions & 4 deletions FLT/DedekindDomain/FiniteAdeleRing/BaseChange.lean
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,82 @@ def comap (w : HeightOneSpectrum B) : HeightOneSpectrum A where

open scoped algebraMap

lemma mk_count_factors_map
(hAB : Function.Injective (algebraMap A B))
(w : HeightOneSpectrum B) (I : Ideal A) [DecidableEq (Associates (Ideal A))]
[DecidableEq (Associates (Ideal B))] [∀ p : Associates (Ideal A), Decidable (Irreducible p)]
[∀ p : Associates (Ideal B), Decidable (Irreducible p)] :
(Associates.mk w.asIdeal).count (Associates.mk (Ideal.map (algebraMap A B) I)).factors =
Ideal.ramificationIdx (algebraMap A B) (comap A w).asIdeal w.asIdeal *
(Associates.mk (comap A w).asIdeal).count (Associates.mk I).factors := by
classical
induction I using UniqueFactorizationMonoid.induction_on_prime with
| h₁ =>
rw [Associates.mk_zero, Ideal.zero_eq_bot, Ideal.map_bot, ← Ideal.zero_eq_bot,
Associates.mk_zero]
simp [Associates.count, Associates.factors_zero, w.associates_irreducible,
associates_irreducible (comap A w), Associates.bcount]
| h₂ I hI =>
obtain rfl : I = ⊤ := by simpa using hI
simp only [Submodule.zero_eq_bot, ne_eq, top_ne_bot, not_false_eq_true, Ideal.map_top]
simp only [← Ideal.one_eq_top, Associates.mk_one, Associates.factors_one]
rw [Associates.count_zero (associates_irreducible _),
Associates.count_zero (associates_irreducible _), mul_zero]
| h₃ I p hI hp IH =>
simp only [Ideal.map_mul, ← Associates.mk_mul_mk]
have hp_bot : p ≠ ⊥ := hp.ne_zero
have hp_bot' := (Ideal.map_eq_bot_iff_of_injective hAB).not.mpr hp_bot
have hI_bot := (Ideal.map_eq_bot_iff_of_injective hAB).not.mpr hI
rw [Associates.count_mul (Associates.mk_ne_zero.mpr hp_bot) (Associates.mk_ne_zero.mpr hI)
(associates_irreducible _), Associates.count_mul (Associates.mk_ne_zero.mpr hp_bot')
(Associates.mk_ne_zero.mpr hI_bot) (associates_irreducible _)]
simp only [IH, mul_add]
congr 1
by_cases hw : (w.comap A).asIdeal = p
· have : Irreducible (Associates.mk p) := Associates.irreducible_mk.mpr hp.irreducible
rw [hw, Associates.factors_self this, Associates.count_some this]
simp only [UniqueFactorizationMonoid.factors_eq_normalizedFactors, Multiset.nodup_singleton,
Multiset.mem_singleton, Multiset.count_eq_one_of_mem, mul_one]
rw [count_associates_factors_eq hp_bot' w.2 w.3,
Ideal.IsDedekindDomain.ramificationIdx_eq_normalizedFactors_count hp_bot' w.2 w.3]
· have : (Associates.mk (comap A w).asIdeal).count (Associates.mk p).factors = 0 :=
Associates.count_eq_zero_of_ne (associates_irreducible _)
(Associates.irreducible_mk.mpr hp.irreducible)
(by rwa [ne_eq, Associates.mk_eq_mk_iff_associated, associated_iff_eq])
rw [this, mul_zero, eq_comm]
by_contra H
rw [eq_comm, ← ne_eq, Associates.count_ne_zero_iff_dvd hp_bot' (irreducible w),
Ideal.dvd_iff_le, Ideal.map_le_iff_le_comap] at H
apply hw (((Ideal.isPrime_of_prime hp).isMaximal hp_bot).eq_of_le (comap A w).2.ne_top H).symm

lemma intValuation_comap (hAB : Function.Injective (algebraMap A B))
(w : HeightOneSpectrum B) (x : A) :
(comap A w).intValuation x ^
(Ideal.ramificationIdx (algebraMap A B) (comap A w).asIdeal w.asIdeal) =
w.intValuation (algebraMap A B x) := by
classical
have h_ne_zero : Ideal.ramificationIdx (algebraMap A B) (comap A w).asIdeal w.asIdeal ≠ 0 :=
Ideal.IsDedekindDomain.ramificationIdx_ne_zero
((Ideal.map_eq_bot_iff_of_injective hAB).not.mpr (comap A w).3) w.2 Ideal.map_comap_le
by_cases hx : x = 0
· simpa [hx]
simp only [intValuation, Valuation.coe_mk, MonoidWithZeroHom.coe_mk, ZeroHom.coe_mk]
show (ite _ _ _) ^ _ = ite _ _ _
by_cases hx : x = 0
· subst hx; simp [h_ne_zero]
rw [map_eq_zero_iff _ hAB, if_neg hx, if_neg hx, ← Set.image_singleton, ← Ideal.map_span,
mk_count_factors_map _ _ hAB, mul_comm]
simp

-- Need to know how the valuation `w` and its pullback are related on elements of `K`.
omit [IsIntegralClosure B A L] [FiniteDimensional K L] [Algebra.IsSeparable K L] in
lemma valuation_comap (w : HeightOneSpectrum B) (x : K) :
(comap A w).valuation x =
w.valuation (algebraMap K L x) ^
(Ideal.ramificationIdx (algebraMap A B) (comap A w).asIdeal w.asIdeal) := by
sorry
(comap A w).valuation x ^
(Ideal.ramificationIdx (algebraMap A B) (comap A w).asIdeal w.asIdeal) =
w.valuation (algebraMap K L x) := by
obtain ⟨x, y, hy, rfl⟩ := IsFractionRing.div_surjective (A := A) x
simp [valuation, ← IsScalarTower.algebraMap_apply A K L, IsScalarTower.algebraMap_apply A B L,
← intValuation_comap A B (algebraMap_injective_of_field_isFractionRing A B K L), div_pow]

-- Say w is a finite place of L lying above v a finite places
-- of K. Then there's a ring hom K_v -> L_w.
Expand Down

0 comments on commit 409509d

Please sign in to comment.