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

Commit 18bf7af

Browse files
committed
refactor(algebra/order/monoid): Split field of canonically_ordered_... (#14556)
Replace ``` (le_iff_exists_add : ∀ a b : α, a ≤ b ↔ ∃ c, b = a + c) ``` by ``` (exists_add_of_le : ∀ {a b : α}, a ≤ b → ∃ c, b = a + c) (le_self_add : ∀ a b : α, a ≤ a + b) ``` This makes our life easier because * We can use existing `has_exists_add_of_le` instances to complete the `exists_add_of_le` field, and detect the missing ones. * No need to substitute `b = a + c` every time.
1 parent 2967fae commit 18bf7af

File tree

15 files changed

+107
-134
lines changed

15 files changed

+107
-134
lines changed

counterexamples/canonically_ordered_comm_semiring_two_mul.lean

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -209,37 +209,24 @@ begin
209209
exact nat.succ_pos _ }
210210
end
211211

212-
instance order_bot : order_bot L :=
213-
{ bot := 0,
214-
bot_le := bot_le,
215-
..(infer_instance : partial_order L) }
212+
instance order_bot : order_bot L := ⟨0, bot_le⟩
216213

217-
lemma le_iff_exists_add : ∀ (a b : L), a ≤ b (c : L), b = a + c :=
214+
lemma exists_add_of_le : ∀ a b : L, a ≤ b c, b = a + c :=
218215
begin
219-
rintros ⟨⟨an, a2⟩, ha⟩ ⟨⟨bn, b2⟩, hb⟩,
220-
rw subtype.mk_le_mk,
221-
refine ⟨λ h, _, λ h, _⟩,
222-
{ rcases h with ⟨rfl, rfl⟩ | h,
223-
{ exact ⟨(0 : L), (add_zero _).symm⟩ },
224-
{ refine ⟨⟨⟨bn - an, b2 + a2⟩, _⟩, _⟩,
225-
{ rw [ne.def, prod.mk.inj_iff, not_and_distrib],
226-
exact or.inl (ne_of_gt (tsub_pos_of_lt h)) },
227-
{ congr,
228-
{ exact (add_tsub_cancel_of_le h.le).symm },
229-
{ change b2 = a2 + (b2 + a2),
230-
rw [add_comm b2, ← add_assoc, add_self_zmod_2, zero_add] } } } },
231-
{ rcases h with ⟨⟨⟨c, c2⟩, hc⟩, abc⟩,
232-
injection abc with abc,
233-
rw [prod.mk_add_mk, prod.mk.inj_iff] at abc,
234-
rcases abc with ⟨rfl, rfl⟩,
235-
cases c,
236-
{ refine or.inl _,
237-
rw [ne.def, prod.mk.inj_iff, eq_self_iff_true, true_and] at hc,
238-
rcases mem_zmod_2 c2 with rfl | rfl,
239-
{ rw [add_zero, add_zero] },
240-
{ exact (hc rfl).elim } },
241-
{ refine or.inr _,
242-
exact (lt_add_iff_pos_right _).mpr c.succ_pos } }
216+
rintro a ⟨b, _⟩ (⟨rfl, rfl⟩ | h),
217+
{ exact ⟨0, (add_zero _).symm⟩ },
218+
{ exact ⟨⟨b - a.1, λ H, (tsub_pos_of_lt h).ne' (prod.mk.inj_iff.1 H).1⟩,
219+
subtype.ext $ prod.ext (add_tsub_cancel_of_le h.le).symm (add_sub_cancel'_right _ _).symm⟩ }
220+
end
221+
222+
lemma le_self_add : ∀ a b : L, a ≤ a + b :=
223+
begin
224+
rintro a ⟨⟨bn, b2⟩, hb⟩,
225+
obtain rfl | h := nat.eq_zero_or_pos bn,
226+
{ obtain rfl | rfl := mem_zmod_2 b2,
227+
{ exact or.inl (prod.ext (add_zero _).symm (add_zero _).symm) },
228+
{ exact (hb rfl).elim } },
229+
{ exact or.inr ((lt_add_iff_pos_right _).mpr h) }
243230
end
244231

245232
lemma eq_zero_or_eq_zero_of_mul_eq_zero : ∀ (a b : L), a * b = 0 → a = 0 ∨ b = 0 :=
@@ -260,7 +247,8 @@ begin
260247
end
261248

262249
instance can : canonically_ordered_comm_semiring L :=
263-
{ le_iff_exists_add := le_iff_exists_add,
250+
{ exists_add_of_le := exists_add_of_le,
251+
le_self_add := le_self_add,
264252
eq_zero_or_eq_zero_of_mul_eq_zero := eq_zero_or_eq_zero_of_mul_eq_zero,
265253
..(infer_instance : order_bot L),
266254
..(infer_instance : ordered_comm_semiring L) }

src/algebra/associated.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,8 @@ instance : cancel_comm_monoid_with_zero (associates α) :=
847847
.. (infer_instance : comm_monoid_with_zero (associates α)) }
848848

849849
instance : canonically_ordered_monoid (associates α) :=
850-
{ le_iff_exists_mul := λ a b, iff.rfl,
850+
{ exists_mul_of_le := λ a b, id,
851+
le_self_mul := λ a b, ⟨b, rfl⟩,
851852
..associates.cancel_comm_monoid_with_zero,
852853
..associates.bounded_order,
853854
..associates.ordered_comm_monoid}

src/algebra/lie/subalgebra.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ instance : add_comm_monoid (lie_subalgebra R L) :=
381381
/-- This is not an instance, as it would stop `⊥` being the simp-normal form (via `bot_eq_zero`). -/
382382
def canonically_ordered_add_monoid : canonically_ordered_add_monoid (lie_subalgebra R L) :=
383383
{ add_le_add_left := λ a b, sup_le_sup_left,
384-
le_iff_exists_add := λ a b, le_iff_exists_sup,
384+
exists_add_of_le := λ a b h, ⟨b, (sup_eq_right.2 h).symm⟩,
385+
le_self_add := λ a b, le_sup_left,
385386
..lie_subalgebra.add_comm_monoid,
386387
..lie_subalgebra.complete_lattice }
387388

src/algebra/module/submodule/pointwise.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ def canonically_ordered_add_monoid : canonically_ordered_add_monoid (submodule R
148148
bot := ⊥,
149149
add := (+),
150150
add_le_add_left := λ a b, sup_le_sup_left,
151-
le_iff_exists_add := λ a b, le_iff_exists_sup,
151+
exists_add_of_le := λ a b h, ⟨b, (sup_eq_right.2 h).symm⟩,
152+
le_self_add := λ a b, le_sup_left,
152153
..submodule.pointwise_add_comm_monoid,
153154
..submodule.complete_lattice }
154155

src/algebra/order/monoid.lean

Lines changed: 58 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ lemma lt_of_mul_lt_mul_left {α : Type u} [has_mul α] [partial_order α]
275275
∀ (a b c : with_zero α), a * b < a * c → b < c :=
276276
begin
277277
rintro (_ | a) (_ | b) (_ | c) h;
278-
try { exact false.elim (lt_irrefl none h) },
278+
try { exact false.elim (lt_irrefl _ h) },
279279
{ exact with_zero.zero_lt_coe c },
280280
{ exact false.elim (not_le_of_lt h (with_zero.zero_le _)) },
281281
{ simp_rw [some_eq_coe] at h ⊢,
@@ -340,7 +340,8 @@ end with_zero
340340
@[protect_proj, ancestor ordered_add_comm_monoid has_bot]
341341
class canonically_ordered_add_monoid (α : Type*) extends ordered_add_comm_monoid α, has_bot α :=
342342
(bot_le : ∀ x : α, ⊥ ≤ x)
343-
(le_iff_exists_add : ∀ a b : α, a ≤ b ↔ ∃ c, b = a + c)
343+
(exists_add_of_le : ∀ {a b : α}, a ≤ b → ∃ c, b = a + c)
344+
(le_self_add : ∀ a b : α, a ≤ a + b)
344345

345346
@[priority 100] -- see Note [lower instance priority]
346347
instance canonically_ordered_add_monoid.to_order_bot (α : Type u)
@@ -359,32 +360,36 @@ instance canonically_ordered_add_monoid.to_order_bot (α : Type u)
359360
@[protect_proj, ancestor ordered_comm_monoid has_bot, to_additive]
360361
class canonically_ordered_monoid (α : Type*) extends ordered_comm_monoid α, has_bot α :=
361362
(bot_le : ∀ x : α, ⊥ ≤ x)
362-
(le_iff_exists_mul : ∀ a b : α, a ≤ b ↔ ∃ c, b = a * c)
363+
(exists_mul_of_le : ∀ {a b : α}, a ≤ b → ∃ c, b = a * c)
364+
(le_self_mul : ∀ a b : α, a ≤ a * b)
363365

364366
@[priority 100, to_additive] -- see Note [lower instance priority]
365367
instance canonically_ordered_monoid.to_order_bot (α : Type u)
366368
[h : canonically_ordered_monoid α] : order_bot α :=
367369
{ ..h }
368370

371+
@[priority 100, to_additive] -- see Note [lower instance priority]
372+
instance canonically_ordered_monoid.has_exists_mul_of_le (α : Type u)
373+
[h : canonically_ordered_monoid α] : has_exists_mul_of_le α :=
374+
{ ..h }
375+
369376
section canonically_ordered_monoid
370377

371378
variables [canonically_ordered_monoid α] {a b c d : α}
372379

373-
@[to_additive]
374-
lemma le_iff_exists_mul : a ≤ b ↔ ∃c, b = a * c :=
375-
canonically_ordered_monoid.le_iff_exists_mul a b
380+
@[to_additive] lemma le_self_mul : a ≤ a * c := canonically_ordered_monoid.le_self_mul _ _
381+
@[to_additive] lemma le_mul_self : a ≤ b * a := by { rw mul_comm, exact le_self_mul }
376382

377-
@[to_additive]
378-
lemma le_iff_exists_mul' : a ≤ b ↔ ∃c, b = c * a :=
379-
by simpa only [mul_comm _ a] using le_iff_exists_mul
383+
@[to_additive] lemma self_le_mul_right (a b : α) : a ≤ a * b := le_self_mul
384+
@[to_additive] lemma self_le_mul_left (a b : α) : a ≤ b * a := le_mul_self
380385

381386
@[to_additive]
382-
lemma self_le_mul_right (a b : α) : a ≤ a * b :=
383-
le_iff_exists_mul.mpr ⟨b, rfl⟩
387+
lemma le_iff_exists_mul : a ≤ b ↔ ∃ c, b = a * c :=
388+
⟨exists_mul_of_le, by { rintro ⟨c, rfl⟩, exact le_self_mul }
384389

385390
@[to_additive]
386-
lemma self_le_mul_left (a b : α) : a ≤ b * a :=
387-
by { rw [mul_comm], exact self_le_mul_right a b }
391+
lemma le_iff_exists_mul' : a ≤ b ↔ ∃ c, b = c * a :=
392+
by simpa only [mul_comm _ a] using le_iff_exists_mul
388393

389394
@[simp, to_additive zero_le] lemma one_le (a : α) : 1 ≤ a :=
390395
le_iff_exists_mul.mpr ⟨a, (one_mul _).symm⟩
@@ -418,16 +423,10 @@ end
418423
calc a = 1 * a : by simp
419424
... ≤ b * c : mul_le_mul' (one_le _) h
420425

421-
@[to_additive] lemma le_mul_self : a ≤ b * a :=
422-
le_mul_left (le_refl a)
423-
424426
@[to_additive] lemma le_mul_right (h : a ≤ b) : a ≤ b * c :=
425427
calc a = a * 1 : by simp
426428
... ≤ b * c : mul_le_mul' h (one_le _)
427429

428-
@[to_additive] lemma le_self_mul : a ≤ a * c :=
429-
le_mul_right (le_refl a)
430-
431430
@[to_additive]
432431
lemma lt_iff_exists_mul [covariant_class α α (*) (<)] : a < b ↔ ∃ c > 1, b = a * c :=
433432
begin
@@ -439,35 +438,31 @@ begin
439438
{ rw [← (self_le_mul_right a c).lt_iff_ne], apply lt_mul_of_one_lt_right' }
440439
end
441440

441+
instance with_zero.has_exists_add_of_le {α} [has_add α] [preorder α] [has_exists_add_of_le α] :
442+
has_exists_add_of_le (with_zero α) :=
443+
⟨λ a b, begin
444+
apply with_zero.cases_on a,
445+
{ exact λ _, ⟨b, (zero_add b).symm⟩ },
446+
apply with_zero.cases_on b,
447+
{ exact λ b' h, (with_bot.not_coe_le_bot _ h).elim },
448+
rintro a' b' h,
449+
obtain ⟨c, rfl⟩ := exists_add_of_le (with_zero.coe_le_coe.1 h),
450+
exact ⟨c, rfl⟩,
451+
end
452+
442453
-- This instance looks absurd: a monoid already has a zero
443454
/-- Adding a new zero to a canonically ordered additive monoid produces another one. -/
444455
instance with_zero.canonically_ordered_add_monoid {α : Type u} [canonically_ordered_add_monoid α] :
445456
canonically_ordered_add_monoid (with_zero α) :=
446-
{ le_iff_exists_add := λ a b, begin
457+
{ le_self_add := λ a b, begin
447458
apply with_zero.cases_on a,
448-
{ exact iff_of_true bot_le ⟨b, (zero_add b).symm⟩ },
459+
{ exact bot_le },
449460
apply with_zero.cases_on b,
450-
{ intro b',
451-
refine iff_of_false (mt (le_antisymm bot_le) (by simp)) (not_exists.mpr (λ c, _)),
452-
apply with_zero.cases_on c;
453-
simp [←with_zero.coe_add] },
454-
{ simp only [le_iff_exists_add, with_zero.coe_le_coe],
455-
intros,
456-
split; rintro ⟨c, h⟩,
457-
{ exact ⟨c, congr_arg coe h⟩ },
458-
{ induction c using with_zero.cases_on,
459-
{ refine ⟨0, _⟩,
460-
simpa using h },
461-
{ refine ⟨c, _⟩,
462-
simpa [←with_zero.coe_add] using h } } }
461+
{ exact λ b', le_rfl },
462+
{ exact λ a' b', with_zero.coe_le_coe.2 le_self_add }
463463
end,
464464
.. with_zero.order_bot,
465-
.. with_zero.ordered_add_comm_monoid zero_le }
466-
467-
@[priority 100, to_additive]
468-
instance canonically_ordered_monoid.has_exists_mul_of_le (α : Type u)
469-
[canonically_ordered_monoid α] : has_exists_mul_of_le α :=
470-
{ exists_mul_of_le := λ a b hab, le_iff_exists_mul.mp hab }
465+
.. with_zero.ordered_add_comm_monoid zero_le, ..with_zero.has_exists_add_of_le }
471466

472467
end canonically_ordered_monoid
473468

@@ -817,9 +812,8 @@ instance [ordered_cancel_comm_monoid M] [ordered_cancel_comm_monoid N] :
817812

818813
@[to_additive] instance [canonically_ordered_monoid α] [canonically_ordered_monoid β] :
819814
canonically_ordered_monoid (α × β) :=
820-
{ le_iff_exists_mul := λ a b,
821-
⟨exists_mul_of_le, by { rintro ⟨c, rfl⟩, exact ⟨le_self_mul, le_self_mul⟩ }⟩,
822-
.. prod.ordered_comm_monoid, .. prod.order_bot _ _ }
815+
{ le_self_mul := λ a b, ⟨le_self_mul, le_self_mul⟩,
816+
..prod.ordered_comm_monoid, ..prod.order_bot _ _, ..prod.has_exists_mul_of_le }
823817

824818
end prod
825819

@@ -1050,23 +1044,25 @@ instance [linear_ordered_add_comm_monoid α] :
10501044
..with_top.ordered_add_comm_monoid,
10511045
..option.nontrivial }
10521046

1053-
instance [canonically_ordered_add_monoid α] : canonically_ordered_add_monoid (with_top α) :=
1054-
{ le_iff_exists_add := assume a b,
1055-
match a, b with
1047+
instance [has_le α] [has_add α] [has_exists_add_of_le α] : has_exists_add_of_le (with_top α) :=
1048+
⟨λ a b, match a, b with
10561049
| ⊤, ⊤ := by simp
1057-
| (a : α), ⊤ := by { simp only [true_iff, le_top], refine ⟨⊤, _⟩, refl }
1058-
| (a : α), (b : α) := begin
1059-
rw [with_top.coe_le_coe, le_iff_exists_add],
1060-
split,
1061-
{ rintro ⟨c, rfl⟩,
1062-
refine ⟨c, _⟩, norm_cast },
1063-
{ intro h,
1064-
exact match b, h with _, ⟨some c, rfl⟩ := ⟨_, rfl⟩ end }
1050+
| (a : α), ⊤ := λ _, ⟨⊤, rfl⟩
1051+
| (a : α), (b : α) := λ h, begin
1052+
obtain ⟨c, rfl⟩ := exists_add_of_le (with_top.coe_le_coe.1 h),
1053+
exact ⟨c, rfl⟩
10651054
end
1066-
| ⊤, (b : α) := by simp
1055+
| ⊤, (b : α) := λ h, (not_top_le_coe _ h).elim
1056+
end
1057+
1058+
instance [canonically_ordered_add_monoid α] : canonically_ordered_add_monoid (with_top α) :=
1059+
{ le_self_add := λ a b, match a, b with
1060+
| ⊤, ⊤ := le_rfl
1061+
| (a : α), ⊤ := le_top
1062+
| (a : α), (b : α) := with_top.coe_le_coe.2 le_self_add
1063+
| ⊤, (b : α) := le_rfl
10671064
end,
1068-
.. with_top.order_bot,
1069-
.. with_top.ordered_add_comm_monoid }
1065+
..with_top.order_bot, ..with_top.ordered_add_comm_monoid, ..with_top.has_exists_add_of_le }
10701066

10711067
instance [canonically_linear_ordered_add_monoid α] :
10721068
canonically_linear_ordered_add_monoid (with_top α) :=
@@ -1287,12 +1283,13 @@ instance [has_mul α] [has_le α] [has_exists_mul_of_le α] : has_exists_add_of_
12871283
⟨@exists_mul_of_le α _ _ _⟩
12881284

12891285
instance [canonically_ordered_add_monoid α] : canonically_ordered_monoid (multiplicative α) :=
1290-
{ le_iff_exists_mul := @le_iff_exists_add α _,
1291-
..multiplicative.ordered_comm_monoid, ..multiplicative.order_bot }
1286+
{ le_self_mul := @le_self_add α _,
1287+
..multiplicative.ordered_comm_monoid, ..multiplicative.order_bot,
1288+
..multiplicative.has_exists_mul_of_le }
12921289

12931290
instance [canonically_ordered_monoid α] : canonically_ordered_add_monoid (additive α) :=
1294-
{ le_iff_exists_add := @le_iff_exists_mul α _,
1295-
..additive.ordered_add_comm_monoid, ..additive.order_bot }
1291+
{ le_self_add := @le_self_mul α _,
1292+
..additive.ordered_add_comm_monoid, ..additive.order_bot, ..additive.has_exists_add_of_le }
12961293

12971294
instance [canonically_linear_ordered_add_monoid α] :
12981295
canonically_linear_ordered_monoid (multiplicative α) :=

src/algebra/order/nonneg.lean

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,9 @@ rfl
251251

252252
instance canonically_ordered_add_monoid [ordered_ring α] :
253253
canonically_ordered_add_monoid {x : α // 0 ≤ x} :=
254-
{ le_iff_exists_add := λ ⟨a, ha⟩ ⟨b, hb⟩,
255-
by simpa only [mk_add_mk, subtype.exists, subtype.mk_eq_mk] using le_iff_exists_nonneg_add a b,
254+
{ le_self_add := λ a b, le_add_of_nonneg_right b.2,
255+
exists_add_of_le := λ a b h,
256+
⟨⟨b - a, sub_nonneg_of_le h⟩, subtype.ext (add_sub_cancel'_right _ _).symm⟩,
256257
..nonneg.ordered_add_comm_monoid,
257258
..nonneg.order_bot }
258259

src/algebra/order/pi.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ instance ordered_comm_monoid {ι : Type*} {Z : ι → Type*} [∀ i, ordered_com
3838
a canonically ordered additive monoid."]
3939
instance {ι : Type*} {Z : ι → Type*} [∀ i, canonically_ordered_monoid (Z i)] :
4040
canonically_ordered_monoid (Π i, Z i) :=
41-
{ le_iff_exists_mul := λ f g, ⟨exists_mul_of_le, by { rintro ⟨h, rfl⟩, exact λ i, le_self_mul }⟩,
42-
..pi.order_bot, ..pi.ordered_comm_monoid }
41+
{ le_self_mul := λ f g i, le_self_mul,
42+
..pi.order_bot, ..pi.ordered_comm_monoid, ..pi.has_exists_mul_of_le }
4343

4444
@[to_additive]
4545
instance ordered_cancel_comm_monoid [∀ i, ordered_cancel_comm_monoid $ f i] :

src/algebra/punit_instances.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ intros; trivial <|> simp only [eq_iff_true_of_subsingleton]
9999

100100
instance : canonically_ordered_add_monoid punit :=
101101
by refine
102-
{ le_iff_exists_add := λ _ _, iff_of_true _ ⟨star, subsingleton.elim _ _⟩,
102+
{ exists_add_of_le := λ _ _ _, ⟨star, subsingleton.elim _ _⟩,
103103
.. punit.comm_ring, .. punit.complete_boolean_algebra, .. };
104104
intros; trivial
105105

src/data/dfinsupp/order.lean

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -177,15 +177,9 @@ instance : has_ordered_sub (Π₀ i, α i) :=
177177
⟨λ n m k, forall_congr $ λ i, by { rw [add_apply, tsub_apply], exact tsub_le_iff_right }⟩
178178

179179
instance : canonically_ordered_add_monoid (Π₀ i, α i) :=
180-
{ le_iff_exists_add := λ f g, begin
181-
refine ⟨λ h, ⟨g - f, _⟩, _⟩,
182-
{ ext i,
183-
rw [add_apply, tsub_apply],
184-
exact (add_tsub_cancel_of_le $ h i).symm },
185-
{ rintro ⟨g, rfl⟩ i,
186-
rw add_apply,
187-
exact self_le_add_right (f i) (g i) }
188-
end,
180+
{ exists_add_of_le := λ f g h, ⟨g - f,
181+
by { ext i, rw [add_apply, tsub_apply], exact (add_tsub_cancel_of_le $ h i).symm }⟩,
182+
le_self_add := λ f g i, by { rw add_apply, exact le_self_add },
189183
.. dfinsupp.order_bot α,
190184
.. dfinsupp.ordered_add_comm_monoid α }
191185

src/data/finsupp/order.lean

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,8 @@ instance tsub : has_sub (ι →₀ α) := ⟨zip_with (λ m n, m - n) (tsub_self
136136
instance : has_ordered_sub (ι →₀ α) := ⟨λ n m k, forall_congr $ λ x, tsub_le_iff_right⟩
137137

138138
instance : canonically_ordered_add_monoid (ι →₀ α) :=
139-
{ le_iff_exists_add := λ f g, begin
140-
refine ⟨λ h, ⟨g - f, _⟩, _⟩,
141-
{ ext x,
142-
exact (add_tsub_cancel_of_le $ h x).symm },
143-
{ rintro ⟨g, rfl⟩ x,
144-
exact self_le_add_right (f x) (g x) }
145-
end,
139+
{ exists_add_of_le := λ f g h, ⟨g - f, ext $ λ x, (add_tsub_cancel_of_le $ h x).symm⟩,
140+
le_self_add := λ f g x, le_self_add,
146141
.. finsupp.order_bot,
147142
.. finsupp.ordered_add_comm_monoid }
148143

0 commit comments

Comments
 (0)