From aec1beb809930ea0e171bfc68ba037be9285a436 Mon Sep 17 00:00:00 2001 From: GTBarkley Date: Tue, 11 Jul 2023 04:41:48 +0000 Subject: [PATCH] testing api for StrictSeries --- CommAlg/grant3.lean | 98 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 CommAlg/grant3.lean diff --git a/CommAlg/grant3.lean b/CommAlg/grant3.lean new file mode 100644 index 0000000..0c44e31 --- /dev/null +++ b/CommAlg/grant3.lean @@ -0,0 +1,98 @@ +import Mathlib.Data.Nat.Lattice +import Mathlib.Data.ENat.Lattice +import Mathlib.AlgebraicGeometry.PrimeSpectrum.Basic +import Mathlib.Order.CompleteLattice +import Mathlib.Order.WithBot +import Mathlib.Order.Height +import CommAlg.StrictSeries +import Mathlib.Tactic.TFAE + + +noncomputable def chainLength (α : Type _) [LT α] : WithBot ℕ∞ := ⨆ (s : StrictSeries α), s.length + +noncomputable def height {α : Type _} [LT α] (x : α) : ℕ∞ := ⨆ s ∈ {s : StrictSeries α | s.top = x}, s.length + +noncomputable def krullDim (R : Type _) [CommRing R] : WithBot ℕ∞ := chainLength (PrimeSpectrum R) + +lemma krullDim_def (R : Type _) [CommRing R] : krullDim R = (⨆ (I : PrimeSpectrum R), height I : WithBot ℕ∞) := sorry +lemma krullDim_def' (R : Type _) [CommRing R] : krullDim R = iSup (λ I : PrimeSpectrum R => (height I : WithBot ℕ∞)) := sorry + +variable {α : Type _} [LT α] + +lemma height_eq_chainHeight (p : α) : height p = Set.chainHeight {J : α | J < p} := sorry + +lemma chainLength_eq_bot : chainLength α = ⊥ ↔ IsEmpty α := by + sorry + +lemma chainLength_eq_sup_height : chainLength α = ⨆ p : α, (height p : WithBot ℕ∞) := by + cases' isEmpty_or_nonempty α + . simp [chainLength] + . show (⨆ (s : _), ((_ : ℕ∞) : WithBot ℕ∞)) = _ + norm_cast + unfold height + rw [iSup_comm] + apply le_antisymm <;> simp [iSup_mono] + +#synth (IsWellOrder (WithBot ℕ∞) (·<·)) +#check le_iSup + +theorem lt_height_TFAE (p : α) (n : ℕ∞) : +List.TFAE [n < height p, ∃ c : StrictSeries α, c.top = p ∧ c.length > n, ∃c : StrictSeries α, c.top = p ∧ c.length = n + 1] := by + cases' n using ENat.recTopCoe with n + . tfae_have 1 ↔ 2; simp + tfae_have 1 ↔ 3; simp + tfae_finish + . norm_cast + sorry + -- tfae_have 1 → 2 + -- . sorry + -- tfae_have 2 → 3 + -- . sorry + -- tfae_have 3 → 1 + -- . sorry + -- tfae_finish + +theorem lt_height_iff {p : α} {n : ℕ∞} : +n < height p ↔ ∃ c : StrictSeries α, c.top = p ∧ c.length = n + 1 := + lt_height_TFAE p n |>.out 0 2 + +theorem le_height_iff {p : α} {n : ℕ} : +n ≤ height p ↔ ∃ c : StrictSeries α, c.top = p ∧ c.length = n := + match n with + | 0 => ⟨fun _ => ⟨StrictSeries.ofElement p, by simp⟩, by simp⟩ + | n + 1 => by + erw [(ENat.add_one_le_iff <| ENat.coe_ne_top _), lt_height_iff] + norm_cast + -- unfold height + -- constructor <;> intro h + -- . + -- -- cases' isEmpty_or_nonempty α + -- -- . exfalso; exact IsEmpty.false p + -- by_cases case : ∃ (c : StrictSeries α) (hc : c.top = p), n ≤ c.length + -- . sorry + -- -- generalize hj : (⨆ (_), (_ : ℕ∞)) = j at h + -- -- have : ∃ (c : StrictSeries α) (hc : c.top = p), n ≤ c.length := by + -- -- induction' j using ENat.recTopCoe with j + -- -- . simp at hj + -- -- sorry + -- -- . norm_cast at h + -- -- sorry + -- . push_neg at case + -- have : 0 < n := by + -- let c := StrictSeries.ofList [p] (List.cons_ne_nil _ _) (List.chain'_singleton p) + -- specialize case c (by rw []) + -- simp + -- sorry + -- sorry + -- . rcases h with ⟨c, hc⟩ + -- exact (hc.2 ▸ le_iSup₂ (f := fun (x : StrictSeries α) _ => (x.length : ℕ∞)) c) hc.1 + +theorem lt_height_iff'' {p : α} {n : ℕ∞} : +n < height p ↔ ∃ c : StrictSeries α, c.top = p ∧ c.length = n + 1 := by + cases' n using ENat.recTopCoe with n + . simp + . erw [←(ENat.add_one_le_iff <| ENat.coe_ne_top _), le_height_iff] + -- show (n + 1 : ℕ) ≤ (_ : ℕ∞) ↔ _ + -- norm_cast + -- rw [le_height_iff] + norm_cast \ No newline at end of file