Skip to content

Commit c95b27f

Browse files
committed
feat(Order/KrullDimension): add some basic lemmas about krull dimension of a preorder (#11147)
- krull dimension, height, coheight interacting with functions - order dual These will be specialized to ring theoretic krull dimension later
1 parent 915d870 commit c95b27f

File tree

2 files changed

+80
-1
lines changed

2 files changed

+80
-1
lines changed

Mathlib/Order/KrullDimension.lean

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,18 @@ Krull dimensions are defined to take value in `WithBot (WithTop ℕ)` so that `(
2424
also negative infinity. This is because we want Krull dimensions to be additive with respect
2525
to product of varieties so that `-∞` being the Krull dimension of empty variety is equal to
2626
sum of `-∞` and the Krull dimension of any other varieties.
27+
28+
We could generalize the notion of Krull dimension to an arbitrary binary relation; many results
29+
in this file would generalize as well. But we don't think it would be useful, so we only define
30+
Krull dimension of a preorder.
2731
-/
2832

33+
section definitions
34+
2935
variable (α : Type*) [Preorder α]
3036

3137
/--
32-
Krull dimension of a preorder `α` is the supremum of the rightmost index of all relation
38+
The **Krull dimension** of a preorder `α` is the supremum of the rightmost index of all relation
3339
series of `α` order by `<`. If there is no series `a₀ < a₁ < ... < aₙ` in `α`, then its Krull
3440
dimension is defined to be negative infinity; if the length of all series `a₀ < a₁ < ... < aₙ` is
3541
unbounded, its Krull dimension is defined to be positive infinity.
@@ -46,3 +52,69 @@ noncomputable def height (a : α) : WithBot (WithTop ℕ) := krullDim (Set.Iic a
4652
Coheight of an element `a` of a pre-ordered set `α` is the Krull dimension of the subset `[a, +∞)`
4753
-/
4854
noncomputable def coheight (a : α) : WithBot (WithTop ℕ) := krullDim (Set.Ici a)
55+
56+
end definitions
57+
58+
section krullDim
59+
60+
variable {α β : Type*}
61+
62+
variable [Preorder α] [Preorder β]
63+
64+
lemma krullDim_nonneg_of_nonempty [Nonempty α] : 0 ≤ krullDim α :=
65+
le_sSup ⟨⟨0, fun _ ↦ @Nonempty.some α inferInstance, fun f ↦ f.elim0⟩, rfl⟩
66+
67+
lemma krullDim_eq_bot_of_isEmpty [IsEmpty α] : krullDim α = ⊥ := WithBot.ciSup_empty _
68+
69+
lemma krullDim_eq_top_of_infiniteDimensionalOrder [InfiniteDimensionalOrder α] :
70+
krullDim α = ⊤ :=
71+
le_antisymm le_top <| le_iSup_iff.mpr <| fun m hm ↦ match m, hm with
72+
| ⊥, hm => False.elim <| by
73+
haveI : Inhabited α := ⟨LTSeries.withLength _ 0 0
74+
exact not_le_of_lt (WithBot.bot_lt_coe _ : ⊥ < (0 : WithBot (WithTop ℕ))) <| hm default
75+
| some ⊤, _ => le_refl _
76+
| some (some m), hm => by
77+
refine (not_lt_of_le (hm (LTSeries.withLength _ (m + 1))) ?_).elim
78+
erw [WithBot.coe_lt_coe, WithTop.coe_lt_coe]
79+
simp
80+
81+
lemma krullDim_le_of_strictMono (f : α → β) (hf : StrictMono f) : krullDim α ≤ krullDim β :=
82+
iSup_le <| fun p ↦ le_sSup ⟨p.map f hf, rfl⟩
83+
84+
lemma height_mono {a b : α} (h : a ≤ b) : height α a ≤ height α b :=
85+
krullDim_le_of_strictMono (fun x ↦ ⟨x, le_trans x.2 h⟩) <| fun _ _ ↦ id
86+
87+
lemma krullDim_eq_length_of_finiteDimensionalOrder [FiniteDimensionalOrder α] :
88+
krullDim α = (LTSeries.longestOf α).length :=
89+
le_antisymm
90+
(iSup_le <| fun _ ↦ WithBot.coe_le_coe.mpr <| WithTop.coe_le_coe.mpr <|
91+
RelSeries.length_le_length_longestOf _ _) <|
92+
le_iSup (fun (i : LTSeries _) ↦ (i.length : WithBot (WithTop ℕ))) <| LTSeries.longestOf _
93+
94+
lemma krullDim_eq_zero_of_unique [Unique α] : krullDim α = 0 := by
95+
rw [krullDim_eq_length_of_finiteDimensionalOrder (α := α), Nat.cast_eq_zero]
96+
refine (LTSeries.longestOf_len_unique (default : LTSeries α) fun q ↦ show _ ≤ 0 from ?_).symm
97+
by_contra r
98+
exact ne_of_lt (q.step ⟨0, not_le.mp r⟩) <| Subsingleton.elim _ _
99+
100+
lemma krullDim_le_of_strictComono_and_surj
101+
(f : α → β) (hf : ∀ ⦃a b⦄, f a < f b → a < b) (hf' : Function.Surjective f) :
102+
krullDim β ≤ krullDim α :=
103+
iSup_le fun p ↦ le_sSup ⟨p.comap _ hf hf', rfl⟩
104+
105+
lemma krullDim_eq_of_orderIso (f : α ≃o β) : krullDim α = krullDim β :=
106+
le_antisymm (krullDim_le_of_strictMono _ f.strictMono) <|
107+
krullDim_le_of_strictMono _ f.symm.strictMono
108+
109+
lemma krullDim_eq_iSup_height : krullDim α = ⨆ (a : α), height α a :=
110+
le_antisymm
111+
(iSup_le fun i ↦ le_iSup_of_le (i ⟨i.length, lt_add_one _⟩) <|
112+
le_sSup ⟨⟨_, fun m ↦ ⟨i m, i.strictMono.monotone <| show m.1 ≤ i.length by omega⟩,
113+
i.step⟩, rfl⟩) <|
114+
iSup_le fun a ↦ krullDim_le_of_strictMono Subtype.val fun _ _ h ↦ h
115+
116+
@[simp] lemma krullDim_orderDual : krullDim αᵒᵈ = krullDim α :=
117+
le_antisymm (iSup_le fun i ↦ le_sSup ⟨i.reverse, rfl⟩) <|
118+
iSup_le fun i ↦ le_sSup ⟨i.reverse, rfl⟩
119+
120+
end krullDim

Mathlib/Order/RelSeries.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,3 +654,10 @@ noncomputable def comap (p : LTSeries β) (f : α → β)
654654
end LTSeries
655655

656656
end LTSeries
657+
658+
/-- If `f : α → β` is a strictly monotonic function and `α` is an infinite dimensional type then so
659+
is `β`. -/
660+
lemma infiniteDimensionalOrder_of_strictMono [Preorder α] [Preorder β]
661+
(f : α → β) (hf : StrictMono f) [InfiniteDimensionalOrder α] :
662+
InfiniteDimensionalOrder β :=
663+
fun n ↦ ⟨(LTSeries.withLength _ n).map f hf, LTSeries.length_withLength α n⟩⟩

0 commit comments

Comments
 (0)