@@ -33,3 +33,83 @@ theorem range_add_eq_image_Ici : range (fun x ↦ f (x + k)) = f '' Ici k :=
3333 fun ⟨y, hy, hfy⟩ ↦ ⟨y - k, by simpa [tsub_add_cancel_of_le hy] using hfy⟩⟩
3434
3535end Set
36+
37+ section LinearOrder
38+ variable {α : Type *} [LinearOrder α] {P : α → Prop } {a b c : α}
39+
40+ section Add
41+ variable [Add α] [CanonicallyOrderedAdd α]
42+
43+ theorem lt_add_iff_lt_left_or_exists_lt [AddLeftReflectLT α] [IsLeftCancelAdd α] :
44+ a < b + c ↔ a < b ∨ ∃ d < c, a = b + d := by
45+ obtain h | h := lt_or_ge a b
46+ · have : a < b + c := h.trans_le (le_self_add ..)
47+ tauto
48+ · obtain ⟨a, rfl⟩ := exists_add_of_le h
49+ simp
50+
51+ theorem forall_lt_add_iff_lt_left [AddLeftReflectLT α] [IsLeftCancelAdd α] :
52+ (∀ a < b + c, P a) ↔ (∀ a < b, P a) ∧ (∀ d < c, P (b + d)) := by
53+ simp_rw [lt_add_iff_lt_left_or_exists_lt]
54+ aesop
55+
56+ theorem exists_lt_add_iff_lt_left [AddLeftReflectLT α] [IsLeftCancelAdd α] :
57+ (∃ a < b + c, P a) ↔ (∃ a < b, P a) ∨ (∃ d < c, P (b + d)) := by
58+ simp_rw [lt_add_iff_lt_left_or_exists_lt]
59+ aesop
60+
61+ theorem le_add_iff_lt_left_or_exists_le [AddLeftMono α] [IsLeftCancelAdd α] :
62+ a ≤ b + c ↔ a < b ∨ ∃ d ≤ c, a = b + d := by
63+ obtain h | h := lt_or_ge a b
64+ · have : a ≤ b + c := h.le.trans (le_self_add ..)
65+ tauto
66+ · obtain ⟨a, rfl⟩ := exists_add_of_le h
67+ simp
68+
69+ theorem forall_le_add_iff_le_left [AddLeftMono α] [IsLeftCancelAdd α] :
70+ (∀ a ≤ b + c, P a) ↔ (∀ a < b, P a) ∧ (∀ d ≤ c, P (b + d)) := by
71+ simp_rw [le_add_iff_lt_left_or_exists_le]
72+ aesop
73+
74+ theorem exists_le_add_iff_le_left [AddLeftMono α] [IsLeftCancelAdd α] :
75+ (∃ a ≤ b + c, P a) ↔ (∃ a < b, P a) ∨ (∃ d ≤ c, P (b + d)) := by
76+ simp_rw [le_add_iff_lt_left_or_exists_le]
77+ aesop
78+
79+ end Add
80+
81+ section AddCommMagma
82+ variable [AddCommMagma α] [CanonicallyOrderedAdd α]
83+
84+ theorem lt_add_iff_lt_right_or_exists_lt [AddLeftReflectLT α] [IsLeftCancelAdd α] :
85+ a < b + c ↔ a < c ∨ ∃ d < b, a = d + c := by
86+ rw [add_comm, lt_add_iff_lt_left_or_exists_lt]
87+ simp_rw [add_comm]
88+
89+ theorem forall_lt_add_iff_lt_right [AddLeftReflectLT α] [IsLeftCancelAdd α] :
90+ (∀ a < b + c, P a) ↔ (∀ a < c, P a) ∧ (∀ d < b, P (d + c)) := by
91+ simp_rw [lt_add_iff_lt_right_or_exists_lt]
92+ aesop
93+
94+ theorem exists_lt_add_iff_lt_right [AddLeftReflectLT α] [IsLeftCancelAdd α] :
95+ (∃ a < b + c, P a) ↔ (∃ a < c, P a) ∨ (∃ d < b, P (d + c)) := by
96+ simp_rw [lt_add_iff_lt_right_or_exists_lt]
97+ aesop
98+
99+ theorem le_add_iff_lt_right_or_exists_le [AddLeftMono α] [IsLeftCancelAdd α] :
100+ a ≤ b + c ↔ a < c ∨ ∃ d ≤ b, a = d + c := by
101+ rw [add_comm, le_add_iff_lt_left_or_exists_le]
102+ simp_rw [add_comm]
103+
104+ theorem forall_le_add_iff_le_right [AddLeftMono α] [IsLeftCancelAdd α] :
105+ (∀ a ≤ b + c, P a) ↔ (∀ a < c, P a) ∧ (∀ d ≤ b, P (d + c)) := by
106+ simp_rw [le_add_iff_lt_right_or_exists_le]
107+ aesop
108+
109+ theorem exists_le_add_iff_le_right [AddLeftMono α] [IsLeftCancelAdd α] :
110+ (∃ a ≤ b + c, P a) ↔ (∃ a < c, P a) ∨ (∃ d ≤ b, P (d + c)) := by
111+ simp_rw [le_add_iff_lt_right_or_exists_le]
112+ aesop
113+
114+ end AddCommMagma
115+ end LinearOrder
0 commit comments