@@ -24,12 +24,18 @@ Krull dimensions are defined to take value in `WithBot (WithTop ℕ)` so that `(
24
24
also negative infinity. This is because we want Krull dimensions to be additive with respect
25
25
to product of varieties so that `-∞` being the Krull dimension of empty variety is equal to
26
26
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.
27
31
-/
28
32
33
+ section definitions
34
+
29
35
variable (α : Type *) [Preorder α]
30
36
31
37
/--
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
33
39
series of `α` order by `<`. If there is no series `a₀ < a₁ < ... < aₙ` in `α`, then its Krull
34
40
dimension is defined to be negative infinity; if the length of all series `a₀ < a₁ < ... < aₙ` is
35
41
unbounded, its Krull dimension is defined to be positive infinity.
@@ -46,3 +52,69 @@ noncomputable def height (a : α) : WithBot (WithTop ℕ) := krullDim (Set.Iic a
46
52
Coheight of an element `a` of a pre-ordered set `α` is the Krull dimension of the subset `[a, +∞)`
47
53
-/
48
54
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
0 commit comments