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

Commit 86b9ee4

Browse files
committed
feat(algebra|data): misc lemmas in low-level files (#16948)
* From the sphere eversion project
1 parent 3793e32 commit 86b9ee4

File tree

9 files changed

+58
-2
lines changed

9 files changed

+58
-2
lines changed

src/algebra/big_operators/basic.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,23 @@ begin
461461
{intros b hb, use j b hb, use hj b hb, exact (right_inv b hb).symm,},
462462
end
463463

464+
/-- Reindexing a product over a finset along an equivalence.
465+
See `equiv.prod_comp` for the version where `s` and `s'` are `univ`. -/
466+
@[to_additive /-" Reindexing a sum over a finset along an equivalence.
467+
See `equiv.sum_comp` for the version where `s` and `s'` are `univ`. "-/]
468+
lemma equiv.prod_comp_finset {ι'} [decidable_eq ι] (e : ι ≃ ι') (f : ι' → β) {s' : finset ι'}
469+
{s : finset ι}
470+
(h : s = s'.image e.symm) :
471+
∏ i' in s', f i' = ∏ i in s, f (e i) :=
472+
begin
473+
rw [h],
474+
refine finset.prod_bij' (λ i' hi', e.symm i') (λ a ha, finset.mem_image_of_mem _ ha)
475+
(λ a ha, by simp_rw [e.apply_symm_apply]) (λ i hi, e i) (λ a ha, _)
476+
(λ a ha, e.apply_symm_apply a) (λ a ha, e.symm_apply_apply a),
477+
rcases finset.mem_image.mp ha with ⟨i', hi', rfl⟩,
478+
rwa [e.apply_symm_apply]
479+
end
480+
464481
@[to_additive] lemma prod_finset_product
465482
(r : finset (γ × α)) (s : finset γ) (t : γ → finset α)
466483
(h : ∀ p : γ × α, p ∈ r ↔ p.1 ∈ s ∧ p.2 ∈ t p.1) {f : γ × α → β} :

src/algebra/big_operators/finprod.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,10 @@ end
734734
lemma finprod_comp {g : β → M} (e : α → β) (he₀ : function.bijective e) :
735735
∏ᶠ i, g (e i) = ∏ᶠ j, g j := finprod_eq_of_bijective e he₀ (λ x, rfl)
736736

737+
@[to_additive]
738+
lemma finprod_comp_equiv (e : α ≃ β) {f : β → M} : ∏ᶠ i, f (e i) = ∏ᶠ i', f i' :=
739+
finprod_comp e e.bijective
740+
737741
@[to_additive] lemma finprod_set_coe_eq_finprod_mem (s : set α) : ∏ᶠ j : s, f j = ∏ᶠ i ∈ s, f i :=
738742
begin
739743
rw [← finprod_mem_range, subtype.range_coe],

src/algebra/group/prod.lean

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ lemma swap_mul [has_mul M] [has_mul N] (p q : M × N) : (p * q).swap = p.swap *
4747
@[to_additive]
4848
lemma mul_def [has_mul M] [has_mul N] (p q : M × N) : p * q = (p.1 * q.1, p.2 * q.2) := rfl
4949

50+
@[to_additive]
51+
lemma one_mk_mul_one_mk [monoid M] [has_mul N] (b₁ b₂ : N) :
52+
((1 : M), b₁) * (1, b₂) = (1, b₁ * b₂) :=
53+
by rw [mk_mul_mk, mul_one]
54+
55+
@[to_additive]
56+
lemma mk_one_mul_mk_one [has_mul M] [monoid N] (a₁ a₂ : M) :
57+
(a₁, (1 : N)) * (a₂, 1) = (a₁ * a₂, 1) :=
58+
by rw [mk_mul_mk, mul_one]
59+
5060
@[to_additive]
5161
instance [has_one M] [has_one N] : has_one (M × N) := ⟨(1, 1)⟩
5262

src/algebra/module/basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ lemma finset.sum_smul {f : ι → R} {s : finset ι} {x : M} :
168168
(∑ i in s, f i) • x = (∑ i in s, (f i) • x) :=
169169
((smul_add_hom R M).flip x).map_sum f s
170170

171+
@[simp] lemma smul_add_one_sub_smul {R : Type*} [ring R] [module R M]
172+
{r : R} {m : M} : r • m + (1 - r) • m = m :=
173+
by rw [← add_smul, add_sub_cancel'_right, one_smul]
174+
171175
end add_comm_monoid
172176

173177
variables (R)

src/algebra/order/group/basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,9 @@ max_eq_right $ h.trans (neg_nonneg.2 h)
10381038
lemma abs_of_neg (h : a < 0) : |a| = -a :=
10391039
abs_of_nonpos h.le
10401040

1041+
lemma abs_le_abs_of_nonneg (ha : 0 ≤ a) (hab : a ≤ b) : |a| ≤ |b| :=
1042+
by rwa [abs_of_nonneg ha, abs_of_nonneg (ha.trans hab)]
1043+
10411044
@[simp] lemma abs_zero : |0| = (0:α) :=
10421045
abs_of_nonneg le_rfl
10431046

@@ -1087,6 +1090,9 @@ decidable.not_iff_not.1 $ ne_comm.trans $ (abs_nonneg a).lt_iff_ne.symm.trans ab
10871090

10881091
variable [covariant_class α α (swap (+)) (≤)]
10891092

1093+
lemma abs_le_abs_of_nonpos (ha : a ≤ 0) (hab : b ≤ a) : |a| ≤ |b| :=
1094+
by { rw [abs_of_nonpos ha, abs_of_nonpos (hab.trans ha)], exact neg_le_neg_iff.mpr hab }
1095+
10901096
lemma abs_lt : |a| < b ↔ - b < a ∧ a < b :=
10911097
max_lt_iff.trans $ and.comm.trans $ by rw [neg_lt]
10921098

src/data/real/nnreal.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,8 @@ rfl
837837
@[simp] lemma nnabs_of_nonneg {x : ℝ} (h : 0 ≤ x) : nnabs x = to_nnreal x :=
838838
by { ext, simp [coe_to_nnreal x h, abs_of_nonneg h] }
839839

840+
lemma nnabs_coe (x : ℝ≥0) : nnabs x = x := by simp
841+
840842
lemma coe_to_nnreal_le (x : ℝ) : (to_nnreal x : ℝ) ≤ |x| :=
841843
max_le (le_abs_self _) (abs_nonneg _)
842844

src/data/set/finite.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,10 @@ theorem finite.of_finite_image {s : set α} {f : α → β} (h : (f '' s).finite
564564
by { casesI h, exact ⟨fintype.of_injective (λ a, (⟨f a.1, mem_image_of_mem f a.2⟩ : f '' s))
565565
(λ a b eq, subtype.eq $ hi a.2 b.2 $ subtype.ext_iff_val.1 eq)⟩ }
566566

567+
lemma finite_of_finite_preimage {f : α → β} {s : set β} (h : (f ⁻¹' s).finite)
568+
(hs : s ⊆ range f) : s.finite :=
569+
by { rw [← image_preimage_eq_of_subset hs], exact finite.image f h }
570+
567571
theorem finite.of_preimage {f : α → β} {s : set β} (h : (f ⁻¹' s).finite) (hf : surjective f) :
568572
s.finite :=
569573
hf.image_preimage s ▸ h.image _

src/data/set/function.lean

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,9 @@ theorem inj_on.comp (hg : inj_on g t) (hf: inj_on f s) (h : maps_to f s t) :
476476
inj_on (g ∘ f) s :=
477477
λ x hx y hy heq, hf hx hy $ hg (h hx) (h hy) heq
478478

479+
lemma _root_.function.injective.inj_on_range (h : injective (g ∘ f)) : inj_on g (range f) :=
480+
by { rintros _ ⟨x, rfl⟩ _ ⟨y, rfl⟩ H, exact congr_arg f (h H) }
481+
479482
lemma inj_on_iff_injective : inj_on f s ↔ injective (s.restrict f) :=
480483
⟨λ H a b h, subtype.eq $ H a.2 b.2 h,
481484
λ H a as b bs h, congr_arg subtype.val $ @H ⟨a, as⟩ ⟨b, bs⟩ h⟩
@@ -831,10 +834,9 @@ theorem inv_fun_on_neg (h : ¬ ∃a∈s, f a = b) : inv_fun_on f s b = classical
831834
by rw [bex_def] at h; rw [inv_fun_on, dif_neg h]
832835

833836
end function
834-
835-
namespace set
836837
open function
837838

839+
namespace set
838840
variables {s s₁ s₂ : set α} {t : set β} {f : α → β}
839841

840842
theorem inj_on.left_inv_on_inv_fun_on [nonempty α] (h : inj_on f s) :

src/group_theory/group_action/prod.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ variables [has_smul M α] [has_smul M β] [has_smul N α] [has_smul N β] (a : M
4141
@[to_additive] theorem smul_def (a : M) (x : α × β) : a • x = (a • x.1, a • x.2) := rfl
4242
@[simp, to_additive] theorem smul_swap : (a • x).swap = a • x.swap := rfl
4343

44+
lemma smul_zero_mk {α : Type*} [monoid M] [add_monoid α] [distrib_mul_action M α] (a : M) (c : β) :
45+
a • ((0 : α), c) = (0, a • c) :=
46+
by rw [prod.smul_mk, smul_zero]
47+
48+
lemma smul_mk_zero {β : Type*} [monoid M] [add_monoid β] [distrib_mul_action M β] (a : M) (b : α) :
49+
a • (b, (0 : β)) = (a • b, 0) :=
50+
by rw [prod.smul_mk, smul_zero]
4451

4552
variables [has_pow α E] [has_pow β E]
4653
@[to_additive has_smul] instance has_pow : has_pow (α × β) E :=

0 commit comments

Comments
 (0)