Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 9becea2

Browse files
committed
feat(algebra/order/monoid_lemmas_zero_lt): add some lemmas about typeclasses (#14761)
~~Rename some instances for consistency.~~ Some git messages are from the previous PR. Maybe it's because I performed some improper operations. I didn't find out the way to remove them. Sorry for that.
1 parent 367714d commit 9becea2

File tree

1 file changed

+98
-2
lines changed

1 file changed

+98
-2
lines changed

src/algebra/order/monoid_lemmas_zero_lt.lean

Lines changed: 98 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,38 @@ instance pos_mul_strict_mono.to_pos_mul_mono_rev [pos_mul_strict_mono α] : pos_
322322
instance mul_pos_strict_mono.to_mul_pos_mono_rev [mul_pos_strict_mono α] : mul_pos_mono_rev α :=
323323
⟨λ x a b h, le_of_not_lt $ λ h', h.not_lt (mul_lt_mul_right' h' x.prop)⟩
324324

325+
lemma pos_mul_mono_rev.to_pos_mul_strict_mono [pos_mul_mono_rev α] : pos_mul_strict_mono α :=
326+
⟨λ x a b h, lt_of_not_le $ λ h', h.not_le (le_of_mul_le_mul_left' h' x.prop)⟩
327+
328+
lemma mul_pos_mono_rev.to_mul_pos_strict_mono [mul_pos_mono_rev α] : mul_pos_strict_mono α :=
329+
⟨λ x a b h, lt_of_not_le $ λ h', h.not_le (le_of_mul_le_mul_right' h' x.prop)⟩
330+
331+
lemma pos_mul_strict_mono_iff_pos_mul_mono_rev : pos_mul_strict_mono α ↔ pos_mul_mono_rev α :=
332+
⟨@zero_lt.pos_mul_strict_mono.to_pos_mul_mono_rev _ _ _ _,
333+
@pos_mul_mono_rev.to_pos_mul_strict_mono _ _ _ _⟩
334+
335+
lemma mul_pos_strict_mono_iff_mul_pos_mono_rev : mul_pos_strict_mono α ↔ mul_pos_mono_rev α :=
336+
⟨@zero_lt.mul_pos_strict_mono.to_mul_pos_mono_rev _ _ _ _,
337+
@mul_pos_mono_rev.to_mul_pos_strict_mono _ _ _ _⟩
338+
339+
lemma pos_mul_reflect_lt.to_pos_mul_mono [pos_mul_reflect_lt α] : pos_mul_mono α :=
340+
⟨λ x a b h, le_of_not_lt $ λ h', h.not_lt (lt_of_mul_lt_mul_left' h' x.prop)⟩
341+
342+
lemma mul_pos_reflect_lt.to_mul_pos_mono [mul_pos_reflect_lt α] : mul_pos_mono α :=
343+
⟨λ x a b h, le_of_not_lt $ λ h', h.not_lt (lt_of_mul_lt_mul_right' h' x.prop)⟩
344+
345+
lemma pos_mul_mono.to_pos_mul_reflect_lt [pos_mul_mono α] : pos_mul_reflect_lt α :=
346+
⟨λ x a b h, lt_of_not_le $ λ h', h.not_le (mul_le_mul_left' h' x.prop)⟩
347+
348+
lemma mul_pos_mono.to_mul_pos_reflect_lt [mul_pos_mono α] : mul_pos_reflect_lt α :=
349+
⟨λ x a b h, lt_of_not_le $ λ h', h.not_le (mul_le_mul_right' h' x.prop)⟩
350+
351+
lemma pos_mul_mono_iff_pos_mul_reflect_lt : pos_mul_mono α ↔ pos_mul_reflect_lt α :=
352+
⟨@pos_mul_mono.to_pos_mul_reflect_lt _ _ _ _, @pos_mul_reflect_lt.to_pos_mul_mono _ _ _ _⟩
353+
354+
lemma mul_pos_mono_iff_mul_pos_reflect_lt : mul_pos_mono α ↔ mul_pos_reflect_lt α :=
355+
⟨@mul_pos_mono.to_mul_pos_reflect_lt _ _ _ _, @mul_pos_reflect_lt.to_mul_pos_mono _ _ _ _⟩
356+
325357
end linear_order
326358

327359
end has_mul_zero
@@ -881,7 +913,7 @@ lemma lt_of_mul_lt_of_one_le_right [mul_pos_mono α]
881913
(preorder.le_mul_of_one_le_left hle b0).trans_lt h
882914

883915
-- proven with `c0 : 0 ≤ b` as `le_of_le_mul_of_le_one_right`
884-
lemma le_of_le_mul_of_le_one_right' [mul_pos_mono α]
916+
lemma preorder.le_of_le_mul_of_le_one_right [mul_pos_mono α]
885917
(h : a ≤ b * c) (hle : b ≤ 1) (c0 : 0 < c) :
886918
a ≤ c :=
887919
h.trans (preorder.mul_le_of_le_one_left hle c0)
@@ -998,7 +1030,7 @@ b0.lt_or_eq.elim (preorder.le_of_mul_le_of_one_le_right h hle)
9981030
lemma le_of_le_mul_of_le_one_right [mul_pos_mono α]
9991031
(h : a ≤ b * c) (hle : b ≤ 1) (c0 : 0 ≤ c) :
10001032
a ≤ c :=
1001-
c0.lt_or_eq.elim (le_of_le_mul_of_le_one_right' h hle)
1033+
c0.lt_or_eq.elim (preorder.le_of_le_mul_of_le_one_right h hle)
10021034
(λ ha, by simpa only [← ha, mul_zero] using h)
10031035

10041036
end partial_order
@@ -1014,4 +1046,68 @@ end linear_order
10141046

10151047
end mul_zero_one_class
10161048

1049+
section cancel_monoid_with_zero
1050+
1051+
variables [cancel_monoid_with_zero α]
1052+
1053+
section partial_order
1054+
variables [partial_order α]
1055+
1056+
lemma pos_mul_mono.to_pos_mul_strict_mono [pos_mul_mono α] : pos_mul_strict_mono α :=
1057+
⟨λ x a b h, lt_of_le_of_ne (mul_le_mul_left' h.le x.2) (h.ne ∘ mul_left_cancel₀ x.2.ne.symm)⟩
1058+
1059+
lemma pos_mul_mono_iff_pos_mul_strict_mono : pos_mul_mono α ↔ pos_mul_strict_mono α :=
1060+
⟨@pos_mul_mono.to_pos_mul_strict_mono α _ _, @zero_lt.pos_mul_strict_mono.to_pos_mul_mono α _ _ _⟩
1061+
1062+
lemma mul_pos_mono.to_mul_pos_strict_mono [mul_pos_mono α] : mul_pos_strict_mono α :=
1063+
⟨λ x a b h, lt_of_le_of_ne (mul_le_mul_right' h.le x.2) (h.ne ∘ mul_right_cancel₀ x.2.ne.symm)⟩
1064+
1065+
lemma mul_pos_mono_iff_mul_pos_strict_mono : mul_pos_mono α ↔ mul_pos_strict_mono α :=
1066+
⟨@mul_pos_mono.to_mul_pos_strict_mono α _ _, @zero_lt.mul_pos_strict_mono.to_mul_pos_mono α _ _ _⟩
1067+
1068+
lemma pos_mul_reflect_lt.to_pos_mul_mono_rev [pos_mul_reflect_lt α] : pos_mul_mono_rev α :=
1069+
⟨λ x a b h, h.eq_or_lt.elim (le_of_eq ∘ mul_left_cancel₀ x.2.ne.symm)
1070+
(λ h', (lt_of_mul_lt_mul_left' h' x.2).le)⟩
1071+
1072+
lemma pos_mul_mono_rev_iff_pos_mul_reflect_lt : pos_mul_mono_rev α ↔ pos_mul_reflect_lt α :=
1073+
⟨@zero_lt.pos_mul_mono_rev.to_pos_mul_reflect_lt α _ _ _,
1074+
@pos_mul_reflect_lt.to_pos_mul_mono_rev α _ _⟩
1075+
1076+
lemma mul_pos_reflect_lt.to_mul_pos_mono_rev [mul_pos_reflect_lt α] : mul_pos_mono_rev α :=
1077+
⟨λ x a b h, h.eq_or_lt.elim (le_of_eq ∘ mul_right_cancel₀ x.2.ne.symm)
1078+
(λ h', (lt_of_mul_lt_mul_right' h' x.2).le)⟩
1079+
1080+
lemma mul_pos_mono_rev_iff_mul_pos_reflect_lt : mul_pos_mono_rev α ↔ mul_pos_reflect_lt α :=
1081+
⟨@zero_lt.mul_pos_mono_rev.to_mul_pos_reflect_lt α _ _ _,
1082+
@mul_pos_reflect_lt.to_mul_pos_mono_rev α _ _⟩
1083+
1084+
end partial_order
1085+
1086+
end cancel_monoid_with_zero
1087+
1088+
section comm_semigroup_has_zero
1089+
variables [comm_semigroup α] [has_zero α]
1090+
1091+
variables [has_lt α]
1092+
1093+
lemma pos_mul_strict_mono_iff_mul_pos_strict_mono :
1094+
pos_mul_strict_mono α ↔ mul_pos_strict_mono α :=
1095+
by simp ! only [mul_comm]
1096+
1097+
lemma pos_mul_reflect_lt_iff_mul_pos_reflect_lt :
1098+
pos_mul_reflect_lt α ↔ mul_pos_reflect_lt α :=
1099+
by simp ! only [mul_comm]
1100+
1101+
variables [has_le α]
1102+
1103+
lemma pos_mul_mono_iff_mul_pos_mono :
1104+
pos_mul_mono α ↔ mul_pos_mono α :=
1105+
by simp ! only [mul_comm]
1106+
1107+
lemma pos_mul_mono_rev_iff_mul_pos_mono_rev :
1108+
pos_mul_mono_rev α ↔ mul_pos_mono_rev α :=
1109+
by simp ! only [mul_comm]
1110+
1111+
end comm_semigroup_has_zero
1112+
10171113
end zero_lt

0 commit comments

Comments
 (0)