Skip to content

Commit 9882f30

Browse files
committed
feat(Order/SuccPred): succ a ≤ b ↔ a < b when b is not maximal
1 parent d3716e6 commit 9882f30

3 files changed

Lines changed: 28 additions & 11 deletions

File tree

Mathlib/Algebra/Order/SuccPred.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ theorem add_one_le_of_lt (h : x < y) : x + 1 ≤ y := by
5353
theorem add_one_le_iff_of_not_isMax (hx : ¬ IsMax x) : x + 1 ≤ y ↔ x < y := by
5454
rw [← succ_eq_add_one, succ_le_iff_of_not_isMax hx]
5555

56+
theorem add_one_le_iff_of_not_isMax' (hy : ¬ IsMax y) : x + 1 ≤ y ↔ x < y := by
57+
rw [← succ_eq_add_one, succ_le_iff_of_not_isMax' hy]
58+
5659
@[simp]
5760
theorem add_one_le_iff [NoMaxOrder α] : x + 1 ≤ y ↔ x < y :=
5861
add_one_le_iff_of_not_isMax (not_isMax x)
@@ -231,6 +234,9 @@ theorem le_of_lt_add_one (h : x < y + 1) : x ≤ y := by
231234
theorem lt_add_one_iff_of_not_isMax (hy : ¬ IsMax y) : x < y + 1 ↔ x ≤ y := by
232235
rw [← succ_eq_add_one, lt_succ_iff_of_not_isMax hy]
233236

237+
theorem lt_add_one_iff_of_not_isMax' (hx : ¬ IsMax x) : x < y + 1 ↔ x ≤ y := by
238+
rw [← succ_eq_add_one, lt_succ_iff_of_not_isMax' hx]
239+
234240
@[simp]
235241
theorem lt_add_one_iff [NoMaxOrder α] : x < y + 1 ↔ x ≤ y :=
236242
lt_add_one_iff_of_not_isMax (not_isMax y)

Mathlib/Data/ENat/Basic.lean

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,11 @@ lemma lt_one_iff_eq_zero : n < 1 ↔ n = 0 :=
299299
lemma le_one_iff_eq_zero_or_eq_one : n ≤ 1 ↔ n = 0 ∨ n = 1 :=
300300
Order.le_one_iff
301301

302-
theorem lt_add_one_iff (hm : n ≠ ⊤) : m < n + 1 ↔ m ≤ n :=
303-
Order.lt_add_one_iff_of_not_isMax (not_isMax_iff_ne_top.mpr hm)
302+
theorem lt_add_one_iff (hn : n ≠ ⊤) : m < n + 1 ↔ m ≤ n :=
303+
Order.lt_add_one_iff_of_not_isMax (not_isMax_iff_ne_top.mpr hn)
304+
305+
theorem lt_add_one_iff' (hm : m ≠ ⊤) : m < n + 1 ↔ m ≤ n :=
306+
Order.lt_add_one_iff_of_not_isMax' (not_isMax_iff_ne_top.mpr hm)
304307

305308
@[simp]
306309
theorem lt_two_iff : n < 2 ↔ n ≤ 1 := by
@@ -314,10 +317,6 @@ theorem add_le_add_iff_right {m n k : ENat} (h : k ≠ ⊤) :
314317
n + k ≤ m + k ↔ n ≤ m :=
315318
WithTop.add_le_add_iff_right h
316319

317-
theorem lt_add_one_iff' {m n : ENat} (hm : m ≠ ⊤) :
318-
m < n + 1 ↔ m ≤ n := by
319-
rw [← add_one_le_iff hm, add_le_add_iff_right one_ne_top]
320-
321320
theorem lt_coe_add_one_iff {m : ℕ∞} {n : ℕ} : m < n + 1 ↔ m ≤ n :=
322321
lt_add_one_iff (coe_ne_top n)
323322

Mathlib/Order/SuccPred/Basic.lean

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ theorem lt_succ_of_le_of_not_isMax (hab : b ≤ a) (ha : ¬IsMax a) : b < succ a
186186
theorem succ_le_iff_of_not_isMax (ha : ¬IsMax a) : succ a ≤ b ↔ a < b :=
187187
⟨(lt_succ_of_not_isMax ha).trans_le, succ_le_of_lt⟩
188188

189+
@[to_dual le_pred_iff_of_not_isMin']
190+
theorem succ_le_iff_of_not_isMax' (hb : ¬IsMax b) : succ a ≤ b ↔ a < b := by
191+
by_cases ha : IsMax a
192+
· grind [le_succ, IsMax.mono]
193+
· exact succ_le_iff_of_not_isMax ha
194+
189195
@[to_dual]
190196
lemma succ_lt_succ_of_not_isMax (h : a < b) (hb : ¬ IsMax b) : succ a < succ b :=
191197
lt_succ_of_le_of_not_isMax (succ_le_of_lt h) hb
@@ -417,13 +423,19 @@ variable [LinearOrder α] [SuccOrder α] {a b : α}
417423
@[to_dual] lemma succ_min (a b : α) : succ (min a b) = min (succ a) (succ b) := succ_mono.map_min
418424

419425
@[to_dual le_of_pred_lt]
420-
theorem le_of_lt_succ {a b : α} : a < succ b → a ≤ b := fun h ↦ by
421-
by_contra! nh
422-
exact (h.trans_le (succ_le_of_lt nh)).false
426+
theorem le_of_lt_succ {a b : α} : a < succ b → a ≤ b := by
427+
contrapose!
428+
exact succ_le_of_lt
423429

424430
@[to_dual pred_lt_iff_of_not_isMin]
425-
theorem lt_succ_iff_of_not_isMax (ha : ¬IsMax a) : b < succ a ↔ b ≤ a :=
426-
⟨le_of_lt_succ, fun h => h.trans_lt <| lt_succ_of_not_isMax ha⟩
431+
theorem lt_succ_iff_of_not_isMax (ha : ¬IsMax a) : b < succ a ↔ b ≤ a := by
432+
contrapose!
433+
exact succ_le_iff_of_not_isMax ha
434+
435+
@[to_dual pred_lt_iff_of_not_isMin']
436+
theorem lt_succ_iff_of_not_isMax' (hb : ¬IsMax b) : b < succ a ↔ b ≤ a := by
437+
contrapose!
438+
exact succ_le_iff_of_not_isMax' hb
427439

428440
@[to_dual (reorder := ha hb)]
429441
theorem succ_lt_succ_iff_of_not_isMax (ha : ¬IsMax a) (hb : ¬IsMax b) :

0 commit comments

Comments
 (0)