Lean sources / SurfaceBlowup / Measure / Atlas.lean

Ideal-chart atlases and atlas independence of the state measure

315 lines · 7 public declarations · raw file · declaration index

1/-2Copyright (c) 2026 Asvin G, Claude (Anthropic), GPT-6-Astra (OpenAI). All rights reserved.3Released under Apache 2.0 license as described in the file LICENSE.4Authors: Asvin G, Claude (Anthropic), GPT-6-Astra (OpenAI)5-/6import SurfaceBlowup.Blowup.PointTransport7import SurfaceBlowup.Measure.Normalizer8import SurfaceBlowup.Measure.StateVolumes9 10/-!11# Ideal-chart atlases and atlas independence of the state measure12 13A division chart parametrizes the residue-ideal cell of a generator `f` by the coordinate ideals14`(f + π Σ zᵢ bᵢ)`. We show that this parametrization is a bijection onto the cell, that the15transition map between two charts of the same cell is a congruence-preserving bijection and hence16preserves Haar measure, and conclude that the pushforward chart measures, and so the state measure17of an ideal atlas, do not depend on the choice of charts. We also record how strict transforms and18coordinate ideals decompose over finite products.19 20## Main results21 22* `pi_strict_transform_map_eval`, `product_chart_projection`: principal ideals, strict transforms23  and coordinate ideals over a finite product are computed componentwise.24* `coordinate_ideal_cell_bijection`: a division chart is a bijection onto its residue-ideal cell.25* `ideal_chart_transition_haar`: chart transitions preserve Haar measure on `O^n`.26* `ideal_chart_pushforward_independent`, `state_measure_atlas_independent`: the chart measures,27  hence the state measure, do not depend on the choice of charts.28 29Provenance: `Thm_SurfaceBlowupV2_*`: `pi_strict_transform_map_eval`, `product_chart_projection`,30`coordinate_ideal_{surjective, cell_bijection}`, `coordinate_transition_{ideal_identity, inverse,31congruence_iff, measure_preserving}`, `ideal_chart_transition_haar`,32`division_chart_preimage_image_measurable`, `ideal_chart_pushforward_independent`,33`state_measure_atlas_independent`.34-/35 36open scoped BigOperators ENNReal37 38namespace SurfaceBlowup39 40/-- Over a finite product `Π C_j`, principal ideals and strict transforms are computed41  componentwise. -/42theorem pi_strict_transform_map_eval (O : Type) [CommRing O] (R : Type) [CommRing R] [Algebra O R]43    (ι : Type) [Finite ι] (C : ι → Type) [∀ j, CommRing (C j)] [∀ j, Algebra O (C j)]44    (alpha : ∀ j, R →ₐ[O] C j) (e g : ∀ j, C j) (d : ℕ) (J : Ideal R) :45    (∀ x : ∀ j, C j, x ∈ Ideal.span {g} ↔ ∀ j, x j ∈ Ideal.span {g j}) ∧46      (∀ j, (Ideal.span {g}).map (Pi.evalRingHom C j) = Ideal.span {g j}) ∧47      (∀ x : ∀ j, C j, x ∈ strictTransformIdeal (AlgHom.pi alpha) e d J ↔ ∀ j,48      x j ∈ strictTransformIdeal (alpha j) (e j) d J) ∧ ∀ j,49      (strictTransformIdeal (AlgHom.pi alpha) e d J).map (Pi.evalRingHom C j) =50      strictTransformIdeal (alpha j) (e j) d J := by51  have := Fintype.ofFinite ι52  classical53  have hmap : ∀ j, (J.map (AlgHom.pi alpha).toRingHom).map (Pi.evalRingHom C j)54      = J.map (alpha j).toRingHom := fun j ↦ by rw [Ideal.map_map]; rfl55  have hpi := (pi_ideal_mem_iff_map_eval ι C (J.map (AlgHom.pi alpha).toRingHom)).156  have key : ∀ x : ∀ j, C j, x ∈ strictTransformIdeal (AlgHom.pi alpha) e d J ↔57      ∀ j, x j ∈ strictTransformIdeal (alpha j) (e j) d J := by58    intro x59    simp only [strictTransformIdeal, Submodule.mem_colon_singleton, Algebra.smul_def]60    rw [hpi]61    exact forall_congr' fun j ↦ by rw [hmap j]; simp62  refine ⟨fun x ↦ by rw [← Ideal.pi_span, Ideal.mem_pi], fun j ↦ by rw [principal_ideal_image]; rfl,63    key, fun j ↦ le_antisymm (Ideal.map_le_iff_le_comap.2 fun x hx ↦ (key x).1 hx j) fun y hy ↦ ?_⟩64  have : (Pi.single j y : ∀ j, C j) ∈ strictTransformIdeal (AlgHom.pi alpha) e d J :=65    (key _).2 fun k ↦ by66      by_cases h : k = j67      · subst h; simpa using hy68      · simp [Pi.single_eq_of_ne h]69  simpa using Ideal.mem_map_of_mem (Pi.evalRingHom C j) this70 71/-- A coordinate ideal of a product chart projects to the coordinate ideals of the component charts,72  membership is componentwise, and the chart is injective when all component charts are. -/73theorem product_chart_projection (O : Type) [CommRing O] (ι : Type) [Finite ι] (Oj : ι → Type)74    [∀ j, CommRing (Oj j)] [∀ j, Algebra O (Oj j)] (R : ι → Type) [∀ j, CommRing (R j)]75    [∀ j, Algebra O (R j)] [∀ j, Algebra (Oj j) (R j)] [∀ j, IsScalarTower O (Oj j) (R j)]76    (nn : ι → ℕ) (n : ℕ) (ρ : (Fin n → O) ≃ₗ[O] (∀ j, Fin (nn j) → Oj j))77    (bc' : ∀ j, Fin (nn j) → R j) (bc : Fin n → ∀ j, R j)78    (hcompat : ∀ (w : Fin n → O) (j : ι), coordinateLift bc w j = coordinateLift (bc' j) (ρ w j))79    (g : ∀ j, R j) (pi : O) (pij : ∀ j, Oj j) (hpi : ∀ j, algebraMap O (Oj j) pi = pij j) :80    (∀ (w : Fin n → O) (j : ι), (coordinateIdeal pi g bc w).map (Pi.evalRingHom R j) =81      coordinateIdeal (pij j) (g j) (bc' j) (ρ w j)) ∧82      (∀ (w : Fin n → O) (x : ∀ j, R j), x ∈ coordinateIdeal pi g bc w ↔ ∀ j,83      x j ∈ coordinateIdeal (pij j) (g j) (bc' j) (ρ w j)) ∧84      ((∀ j, Function.Injective (coordinateIdeal (pij j) (g j) (bc' j))) →85      Function.Injective (coordinateIdeal pi g bc)) := by86  have key : ∀ (w : Fin n → O) (j : ι),87      (g + coordinateLift bc (pi • w)) j = g j + coordinateLift (bc' j) (pij j • ρ w j) := by88    intro w j89    simp only [coordinateLift_smul_eq_mul, ← Algebra.smul_def]90    rw [← hpi, algebraMap_smul, Pi.add_apply, Pi.smul_apply, hcompat]91  have proj : ∀ (w : Fin n → O) (j : ι), (coordinateIdeal pi g bc w).map (Pi.evalRingHom R j) =92      coordinateIdeal (pij j) (g j) (bc' j) (ρ w j) := fun w j ↦93    (principal_ideal_image _ _ _ _).trans (congrArg (fun y ↦ Ideal.span {y}) (key w j))94  refine ⟨proj, fun w x ↦ ?_, fun hinj w w' h ↦ ρ.injective <| funext fun j ↦95    hinj j <| by rw [← proj, ← proj, h]⟩96  refine ((pi_strict_transform_map_eval O O ι R (fun j ↦ Algebra.ofId O (R j)) 097    (g + coordinateLift bc (pi • w)) 0 ⊥).1 x).trans (forall_congr' fun j ↦ ?_)98  rw [key]99  rfl100 101/-- Every ideal in the residue-ideal cell of `f` is a coordinate ideal of the division chart. -/102private theorem coordinate_ideal_surjective (O R : Type) [CommRing O] [CommRing R] [Algebra O R]103    (n : ℕ)104    (pi : O) (b : Fin n → R) (E : R ≃ₗ[O] ((Fin n → O) × R))105    [IsAdicComplete (Ideal.span {pi}) ((Fin n → O) × R)] [IsDomain R] [IsLocalRing R]106    (hpm : algebraMap O R pi ∈ IsLocalRing.maximalIdeal R) (f : R)107    (hE : ∀ s, E.symm s = divisionMap f b s)108    (hf : Function.Injective109      (fun x : R ⧸ Ideal.span {algebraMap O R pi} => x *110      Ideal.Quotient.mk (Ideal.span {algebraMap O R pi}) f))111    (J : Ideal R) (hJ : J ∈ residueIdealCell (algebraMap O R pi) f) :112    ∃ z : Fin n → O, coordinateIdeal pi f b z = J := by113  obtain ⟨h, rfl⟩ := residue_ideal_has_fixed_generator_lift R114    (algebraMap O R pi) f hpm hf J hJ115  refine ⟨(generatorNormalForm pi b E h).1, ?_⟩116  have key := normalizer_generator_equation O R n pi b E f hE h117  obtain ⟨u, hu⟩ := normalizing_factor_is_unit O R pi hpm118    (generatorNormalForm pi b E h).2119  unfold coordinateIdeal normalizedIdeal normalizedGenerator120  simp only [coordinateLift_smul_eq_mul, ← Algebra.smul_def]121  rw [← key, ← hu, principal_ideal_unit_invariance]122 123/-- The coordinate-ideal map of a division chart is a bijection onto the residue-ideal cell of124`f`. -/125theorem coordinate_ideal_cell_bijection (O R : Type) [CommRing O] [CommRing R] [Algebra O R] (n : ℕ)Proposition 3.2126    (pi : O) (b : Fin n → R) (E : R ≃ₗ[O] ((Fin n → O) × R))127    [IsAdicComplete (Ideal.span {pi}) ((Fin n → O) × R)] [IsDomain R] [IsLocalRing R]128    (hp0 : algebraMap O R pi ≠ 0) (hpm : algebraMap O R pi ∈ IsLocalRing.maximalIdeal R) (f : R)129    (hE : ∀ s, E.symm s = divisionMap f b s)130    (hf : Function.Injective131      (fun x : R ⧸ Ideal.span {algebraMap O R pi} => x *132      Ideal.Quotient.mk (Ideal.span {algebraMap O R pi}) f))133    :134    Function.Injective (coordinateIdeal pi f b) ∧ Set.range (coordinateIdeal pi f b) =135      residueIdealCell (algebraMap O R pi) f := by136  refine ⟨coordinate_ideal_injective O R n pi b E hp0 hpm f hE hf, Set.ext fun J ↦137    ⟨?_, coordinate_ideal_surjective O R n pi b E hpm f hE hf J⟩⟩138  rintro ⟨z, rfl⟩139  exact coordinate_ideal_in_residue_cell O R n pi b f z140 141/-- The transition map between two division charts of the same cell intertwines their142  coordinate-ideal maps. -/143private theorem coordinate_transition_ideal_identity (O R : Type) [CommRing O] [CommRing R]144    [Algebra O R]145    (n : ℕ) (pi : O) (b : Fin n → R)146    [IsAdicComplete (Ideal.span {pi}) ((Fin n → O) × R)] [IsLocalRing R]147    (hpm : algebraMap O R pi ∈ IsLocalRing.maximalIdeal R) (f g : R) (c : Fin n → R)148    (F : R ≃ₗ[O] ((Fin n → O) × R)) (hF : ∀ s, F.symm s = divisionMap g c s) (h0 : R)149    (hfg : f = g + pi • h0) (z : Fin n → O) :150    coordinateIdeal pi g c (idealTransition pi b c F h0 z) = coordinateIdeal pi f b z := by151  have key := normalizer_generator_equation O R n pi c F g hF152    (h0 + coordinateLift b z)153  have hu := normalizing_factor_is_unit O R pi hpm154    (generatorNormalForm pi c F (h0 + coordinateLift b z)).2155  have hinv := principal_ideal_unit_invariance R156    (g + pi • coordinateLift c (generatorNormalForm pi c F (h0 + coordinateLift b z)).1) hu.unit157  simp only [coordinateIdeal, normalizedIdeal, normalizedGenerator, idealTransition,158    coordinateLift_smul_eq_mul, ← Algebra.smul_def]159  rw [← hinv, IsUnit.unit_spec, key, hfg, smul_add, add_assoc]160 161/-! ### Transition maps between two division charts of one cell -/162 163section Transition164 165variable (O R : Type) [CommRing O] [CommRing R] [Algebra O R] (n : ℕ) (pi : O) (b : Fin n → R)166  (E : R ≃ₗ[O] ((Fin n → O) × R)) [IsAdicComplete (Ideal.span {pi}) ((Fin n → O) × R)]167  [IsDomain R] [IsLocalRing R] (hp0 : algebraMap O R pi ≠ 0)168  (hpm : algebraMap O R pi ∈ IsLocalRing.maximalIdeal R) (f : R)169  (hE : ∀ s, E.symm s = divisionMap f b s)170  (hf : Function.Injective (fun x : R ⧸ Ideal.span {algebraMap O R pi} =>171    x * Ideal.Quotient.mk (Ideal.span {algebraMap O R pi}) f))172  (g : R) (c : Fin n → R) (F : R ≃ₗ[O] ((Fin n → O) × R)) (hF : ∀ s, F.symm s = divisionMap g c s)173  (hg : Function.Injective (fun x : R ⧸ Ideal.span {algebraMap O R pi} =>174    x * Ideal.Quotient.mk (Ideal.span {algebraMap O R pi}) g))175  (h0 : R) (hfg : f = g + pi • h0)176 177include hp0 hpm hE hf hF hg hfg178 179/-- The coordinate transition map between two charts of the same cell is inverted by the reverse180  transition. -/181private theorem coordinate_transition_inverse :182    Function.LeftInverse (idealTransition pi c b E (-h0)) (idealTransition pi b c F h0) ∧183      Function.RightInverse (idealTransition pi c b E (-h0)) (idealTransition pi b c F h0) := by184  have hgf : g = f + pi • (-h0) := by rw [hfg, smul_neg]; abel185  have hfg' := coordinate_transition_ideal_identity O R n pi b hpm f g c F hF h0 hfg186  have hgf' := coordinate_transition_ideal_identity O R n pi c hpm g f b E hE (-h0) hgf187  exact ⟨fun z ↦ coordinate_ideal_injective O R n pi b E hp0 hpm f hE hf (by rw [hgf', hfg']),188    fun z ↦ coordinate_ideal_injective O R n pi c F hp0 hpm g hF hg (by rw [hfg', hgf'])⟩189 190/-- The coordinate transition map preserves and reflects congruence modulo `(π)^j`. -/191private theorem coordinate_transition_congruence_iff (j : ℕ) (z w : Fin n → O) :192    adicCongr (Ideal.span {pi}) j (idealTransition pi b c F h0 z) (idealTransition pi b c F h0 w) ↔193      adicCongr (Ideal.span {pi}) j z w := by194  refine ⟨fun h ↦ ?_, coordinate_transition_congruence O R n pi b c F h0 j z w⟩195  have hinv := (coordinate_transition_inverse O R n pi b E hp0 hpm f hE hf g c F hF hg h0 hfg).1196  simpa only [hinv z, hinv w] using coordinate_transition_congruence O R n pi c b E (-h0) j _ _ h197 198/-- The coordinate transition map preserves any probability measure that gives all `π`-adic balls of199  a given radius equal mass. -/200private theorem coordinate_transition_measure_preserving [MeasurableSpace (Fin n → O)]201    (hgen : ‹MeasurableSpace (Fin n → O)› = adicCylinderSpace (Ideal.span {pi}) (Fin n → O))202    (mu : MeasureTheory.Measure (Fin n → O)) [MeasureTheory.IsProbabilityMeasure mu]203    (hball : ∀ j (x y : Fin n → O), mu {z | adicCongr (Ideal.span {pi}) j z x} =204      mu {z | adicCongr (Ideal.span {pi}) j z y}) :205    MeasureTheory.MeasurePreserving (idealTransition pi b c F h0) mu mu :=206  congruence_bijection_measure_preserving O (Fin n → O) (Ideal.span {pi}) hgen _207    (coordinate_transition_inverse O R n pi b E hp0 hpm f hE hf g c F hF hg h0 hfg).2.surjective208    (coordinate_transition_congruence_iff O R n pi b E hp0 hpm f hE hf g c F hF hg h0 hfg) mu hball209 210variable [IsDomain O] [IsDiscreteValuationRing O]211  [IsAdicComplete (IsLocalRing.maximalIdeal O) O] [Finite (IsLocalRing.ResidueField O)]212  [TopologicalSpace O] [IsTopologicalRing O] [CompactSpace O] [T2Space O]213  [SecondCountableTopology O] [MeasurableSpace O] [BorelSpace O]214 215/-- The coordinate transition map preserves the Haar probability measure on `O^n`. -/216theorem ideal_chart_transition_haar (htop : IsAdic (IsLocalRing.maximalIdeal O))Proposition 3.2217    (hpi : Irreducible pi) :218    MeasureTheory.MeasurePreserving (idealTransition pi b c F h0) (coefficientMeasure O n)219      (coefficientMeasure O n) := by220  have := coefficient_measure_probability O htop n221  have hm : IsLocalRing.maximalIdeal O = Ideal.span {pi} :=222    (IsDiscreteValuationRing.irreducible_iff_uniformizer pi).mp hpi223  exact coordinate_transition_measure_preserving O R n pi b E hp0 hpm f hE hf g c F hF hg h0 hfg224    (finite_coordinate_borel_cylinders O (Ideal.span {pi}) (hm ▸ htop) n) _ fun j x y ↦ by225      rw [coefficient_uniformizer_cylinder_mass O htop n pi hpi j x,226        coefficient_uniformizer_cylinder_mass O htop n pi hpi j y]227 228/-- Two division charts of the same residue-ideal cell push Haar measure forward to the same measure229  on ideals. -/230theorem ideal_chart_pushforward_independent (htop : IsAdic (IsLocalRing.maximalIdeal O))Proposition 3.2231    (hpi : Irreducible pi) [MeasurableSpace (Ideal R)] (hc : Measurable (coordinateIdeal pi g c)) :232    (coefficientMeasure O n).map (coordinateIdeal pi f b) =233      (coefficientMeasure O n).map (coordinateIdeal pi g c) := by234  have hT := ideal_chart_transition_haar O R n pi b E hp0 hpm f hE hf g c F hF hg h0 hfg htop hpi235  have hfun : coordinateIdeal pi f b = coordinateIdeal pi g c ∘ idealTransition pi b c F h0 :=236    funext fun z ↦ (coordinate_transition_ideal_identity O R n pi b hpm f g c F hF h0 hfg z).symm237  rw [hfun, ← MeasureTheory.Measure.map_map hc hT.measurable, hT.map_eq]238 239end Transition240 241/-- For two division charts, the preimage under one of the image under the other of a measurable set242  is measurable. -/243theorem division_chart_preimage_image_measurable (O : Type) [CommRing O] [IsDomain O]244    [IsDiscreteValuationRing O] [IsAdicComplete (IsLocalRing.maximalIdeal O) O]245    [Finite (IsLocalRing.ResidueField O)] [TopologicalSpace O] [IsTopologicalRing O]246    [CompactSpace O] [T2Space O] [SecondCountableTopology O] [MeasurableSpace O] [BorelSpace O]247    (htop : IsAdic (IsLocalRing.maximalIdeal O)) (R : Type) [CommRing R] [Algebra O R] [IsDomain R]248    [IsLocalRing R] (pi : O) (hpi : Irreducible pi) (hp0 : algebraMap O R pi ≠ 0)249    (hpm : algebraMap O R pi ∈ IsLocalRing.maximalIdeal R) (n n' : ℕ)250    [IsAdicComplete (Ideal.span {pi}) ((Fin n → O) × R)] (f g : R) (b : Fin n → R) (c : Fin n' → R)251    (hb : IsDivisionChart O R pi f b) (hc : IsDivisionChart O R pi g c) (S : Set (Fin n' → O))252    (hS : MeasurableSet S) :253    MeasurableSet (coordinateIdeal pi f b ⁻¹' (coordinateIdeal pi g c '' S)) := by254  obtain ⟨E, hE⟩ := hb.1255  by_cases hres : Ideal.span {Ideal.Quotient.mk (Ideal.span {algebraMap O R pi}) f} =256      Ideal.span {Ideal.Quotient.mk (Ideal.span {algebraMap O R pi}) g}257  · obtain rfl := division_chart_rank_eq_of_residue_ideal_eq O R pi hpi n n' f g b c hb hc hres258    obtain ⟨g', c', F, h₀, hF, hfg, hg', hΨ⟩ :=259      division_chart_same_cell_recenter O R pi hpm n f g b c hb hc hres260    have himg : coordinateIdeal pi g c '' S = coordinateIdeal pi g' c' '' S :=261      Set.image_congr fun z _ ↦ hΨ z262    have hT := (ideal_chart_transition_haar O R n pi b E hp0 hpm f hE hb.2 g' c' F hF hg' h₀263      hfg htop hpi).measurable264    have hfun : coordinateIdeal pi f b = coordinateIdeal pi g' c' ∘ idealTransition pi b c' F h₀ :=265      funext fun z ↦266        (coordinate_transition_ideal_identity O R n pi b hpm f g' c' F hF h₀ hfg z).symm267    rw [himg, hfun, Set.preimage_comp,268      (coordinate_ideal_injective O R n pi c' F hp0 hpm g' hF hg').preimage_image]269    exact hT hS270  · convert MeasurableSet.empty271    rw [Set.eq_empty_iff_forall_notMem]272    rintro z ⟨s, _, hs⟩273    have h2 := coordinate_ideal_in_residue_cell O R n' pi c g s274    rw [hs] at h2275    exact hres ((coordinate_ideal_in_residue_cell O R n pi b f z).2.symm.trans h2.2)276 277/-- The state measure does not depend on the ideal atlas used to define it. -/278theorem state_measure_atlas_independent (O R : Type) [CommRing O] [IsDomain O]Proposition 3.2279    [IsDiscreteValuationRing O] [IsAdicComplete (IsLocalRing.maximalIdeal O) O]280    [Finite (IsLocalRing.ResidueField O)] [TopologicalSpace O] [IsTopologicalRing O]281    [CompactSpace O] [T2Space O] [SecondCountableTopology O] [MeasurableSpace O] [BorelSpace O]282    (htop : IsAdic (IsLocalRing.maximalIdeal O)) [CommRing R] [Algebra O R]283    [MeasurableSpace (Ideal R)] (pi : O) (hpi : Irreducible pi) (n : ℕ) (X : Set (Ideal R))284    (A B : IdealAtlas O R pi n X)285    (hB : ∀ j, Measurable (coordinateIdeal pi (B.chart j).f (B.chart j).b)) (e : A.ι ≃ B.ι)286    (hcell : ∀ i, residueIdealCell (algebraMap O R pi) (A.chart i).f =287      residueIdealCell (algebraMap O R pi) (B.chart (e i)).f)288    [IsAdicComplete (Ideal.span {pi}) ((Fin n → O) × R)] [IsDomain R] [IsLocalRing R]289    (hp0 : algebraMap O R pi ≠ 0) (hpm : algebraMap O R pi ∈ IsLocalRing.maximalIdeal R) :290    stateMeasure O R pi n (Nat.card (IsLocalRing.ResidueField O)) A =291      stateMeasure O R pi n (Nat.card (IsLocalRing.ResidueField O)) B := by292  have key : ∀ i, chartMeasure O R pi n (A.chart i) = chartMeasure O R pi n (B.chart (e i)) := by293    intro i294    set f := (A.chart i).f295    set g := (B.chart (e i)).f296    have hmem : Ideal.span {f} ∈ residueIdealCell (algebraMap O R pi) f :=297      ⟨⟨f, rfl⟩, by rw [Ideal.map_span, Set.image_singleton]⟩298    rw [hcell i] at hmem299    have hres := hmem.2300    rw [Ideal.map_span, Set.image_singleton] at hres301    obtain ⟨g', c', F, h₀, hF, hfg, hg', hΨ⟩ :=302      division_data_same_cell_recenter O R pi hpm n f g (B.chart (e i)).b (A.chart i).regular303        (B.chart (e i)).E (B.chart (e i)).division hres304    have hfun : coordinateIdeal pi g (B.chart (e i)).b = coordinateIdeal pi g' c' := funext hΨ305    have hc : Measurable (coordinateIdeal pi g' c') := hfun ▸ hB (e i)306    unfold chartMeasure307    rw [show (B.chart (e i)).f = g from rfl, hfun]308    exact ideal_chart_pushforward_independent O R n pi (A.chart i).b (A.chart i).E hp0 hpm f309      (A.chart i).division (A.chart i).regular g' c' F hF hg' h₀ hfg htop hpi hc310  unfold stateMeasure311  congr 1312  rw [← e.sum_comp]313  exact Finset.sum_congr rfl fun i _ ↦ key i314 315end SurfaceBlowup