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

Commit 113ab32

Browse files
committed
feat(ring_theory/power_series/basic): API about inv (#11617)
Also rename protected lemmas `mul_inv` to `mul_inv_cancel` `inv_mul` to `inv_mul_cancel`
1 parent 36dd6a6 commit 113ab32

File tree

2 files changed

+77
-12
lines changed

2 files changed

+77
-12
lines changed

src/number_theory/bernoulli.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,8 @@ begin
241241
cases n, { simp },
242242
simp only [bernoulli_power_series, coeff_mul, coeff_X, sum_antidiagonal_succ', one_div, coeff_mk,
243243
coeff_one, coeff_exp, linear_map.map_sub, factorial, if_pos, cast_succ, cast_one, cast_mul,
244-
sub_zero, ring_hom.map_one, add_eq_zero_iff, if_false, inv_one, zero_add, one_ne_zero, mul_zero,
245-
and_false, sub_self, ← ring_hom.map_mul, ← ring_hom.map_sum],
244+
sub_zero, ring_hom.map_one, add_eq_zero_iff, if_false, _root_.inv_one, zero_add, one_ne_zero,
245+
mul_zero, and_false, sub_self, ← ring_hom.map_mul, ← ring_hom.map_sum],
246246
suffices : ∑ x in antidiagonal n, bernoulli x.1 / x.1! * ((x.2 + 1) * x.2!)⁻¹
247247
= if n.succ = 1 then 1 else 0, { split_ifs; simp [h, this] },
248248
cases n, { simp },

src/ring_theory/power_series/basic.lean

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,10 @@ lemma coeff_smul (f : mv_power_series σ R) (n) (a : R) :
391391
coeff _ n (a • f) = a * coeff _ n f :=
392392
rfl
393393

394+
lemma smul_eq_C_mul (f : mv_power_series σ R) (a : R) :
395+
a • f = C σ R a * f :=
396+
by { ext, simp }
397+
394398
lemma X_inj [nontrivial R] {s t : σ} : (X s : mv_power_series σ R) = X t ↔ s = t :=
395399
begin
396400
intro h, replace h := congr_arg (coeff R (single s 1)) h, rw [coeff_X, if_pos rfl, coeff_X] at h,
@@ -703,7 +707,10 @@ lemma inv_eq_zero {φ : mv_power_series σ k} :
703707
φ⁻¹ = 0 ↔ constant_coeff σ k φ = 0 :=
704708
⟨λ h, by simpa using congr_arg (constant_coeff σ k) h,
705709
λ h, ext $ λ n, by { rw coeff_inv, split_ifs;
706-
simp only [h, mv_power_series.coeff_zero, zero_mul, inv_zero, neg_zero] }⟩
710+
simp only [h, mv_power_series.coeff_zero, zero_mul, inv_zero, neg_zero] }⟩
711+
712+
@[simp] lemma zero_inv : (0 : mv_power_series σ k)⁻¹ = 0 :=
713+
by rw [inv_eq_zero, constant_coeff_zero]
707714

708715
@[simp, priority 1100]
709716
lemma inv_of_unit_eq (φ : mv_power_series σ k) (h : constant_coeff σ k φ ≠ 0) :
@@ -717,19 +724,19 @@ begin
717724
congr' 1, rw [units.ext_iff], exact h.symm,
718725
end
719726

720-
@[simp] protected lemma mul_inv (φ : mv_power_series σ k) (h : constant_coeff σ k φ ≠ 0) :
727+
@[simp] protected lemma mul_inv_cancel (φ : mv_power_series σ k) (h : constant_coeff σ k φ ≠ 0) :
721728
φ * φ⁻¹ = 1 :=
722729
by rw [← inv_of_unit_eq φ h, mul_inv_of_unit φ (units.mk0 _ h) rfl]
723730

724-
@[simp] protected lemma inv_mul (φ : mv_power_series σ k) (h : constant_coeff σ k φ ≠ 0) :
731+
@[simp] protected lemma inv_mul_cancel (φ : mv_power_series σ k) (h : constant_coeff σ k φ ≠ 0) :
725732
φ⁻¹ * φ = 1 :=
726-
by rw [mul_comm, φ.mul_inv h]
733+
by rw [mul_comm, φ.mul_inv_cancel h]
727734

728735
protected lemma eq_mul_inv_iff_mul_eq {φ₁ φ₂ φ₃ : mv_power_series σ k}
729736
(h : constant_coeff σ k φ₃ ≠ 0) :
730737
φ₁ = φ₂ * φ₃⁻¹ ↔ φ₁ * φ₃ = φ₂ :=
731-
⟨λ k, by simp [k, mul_assoc, mv_power_series.inv_mul _ h],
732-
λ k, by simp [← k, mul_assoc, mv_power_series.mul_inv _ h]⟩
738+
⟨λ k, by simp [k, mul_assoc, mv_power_series.inv_mul_cancel _ h],
739+
λ k, by simp [← k, mul_assoc, mv_power_series.mul_inv_cancel _ h]⟩
733740

734741
protected lemma eq_inv_iff_mul_eq_one {φ ψ : mv_power_series σ k} (h : constant_coeff σ k ψ ≠ 0) :
735742
φ = ψ⁻¹ ↔ φ * ψ = 1 :=
@@ -739,6 +746,39 @@ protected lemma inv_eq_iff_mul_eq_one {φ ψ : mv_power_series σ k} (h : consta
739746
ψ⁻¹ = φ ↔ φ * ψ = 1 :=
740747
by rw [eq_comm, mv_power_series.eq_inv_iff_mul_eq_one h]
741748

749+
@[simp] protected lemma mul_inv_rev (φ ψ : mv_power_series σ k) :
750+
(φ * ψ)⁻¹ = ψ⁻¹ * φ⁻¹ :=
751+
begin
752+
by_cases h : constant_coeff σ k (φ * ψ) = 0,
753+
{ rw inv_eq_zero.mpr h,
754+
simp only [map_mul, mul_eq_zero] at h,
755+
-- we don't have `no_zero_divisors (mw_power_series σ k)` yet,
756+
cases h;
757+
simp [inv_eq_zero.mpr h] },
758+
{ rw [mv_power_series.inv_eq_iff_mul_eq_one h],
759+
simp only [not_or_distrib, map_mul, mul_eq_zero] at h,
760+
rw [←mul_assoc, mul_assoc _⁻¹, mv_power_series.inv_mul_cancel _ h.left, mul_one,
761+
mv_power_series.inv_mul_cancel _ h.right] }
762+
end
763+
764+
@[simp] lemma one_inv : (1 : mv_power_series σ k)⁻¹ = 1 :=
765+
by { rw [mv_power_series.inv_eq_iff_mul_eq_one, mul_one], simp }
766+
767+
@[simp] lemma C_inv (r : k) : (C σ k r)⁻¹ = C σ k r⁻¹ :=
768+
begin
769+
rcases eq_or_ne r 0 with rfl|hr,
770+
{ simp },
771+
rw [mv_power_series.inv_eq_iff_mul_eq_one, ←map_mul, inv_mul_cancel hr, map_one],
772+
simpa using hr
773+
end
774+
775+
@[simp] lemma X_inv (s : σ) : (X s : mv_power_series σ k)⁻¹ = 0 :=
776+
by rw [inv_eq_zero, constant_coeff_X]
777+
778+
@[simp] lemma smul_inv (r : k) (φ : mv_power_series σ k) :
779+
(r • φ)⁻¹ = r⁻¹ • φ⁻¹ :=
780+
by simp [smul_eq_C_mul, mul_comm]
781+
742782
end field
743783

744784
end mv_power_series
@@ -1050,6 +1090,10 @@ mv_power_series.coeff_C_mul _ φ a
10501090
(n : ℕ) (φ : power_series S) (a : R) : coeff S n (a • φ) = a • coeff S n φ :=
10511091
rfl
10521092

1093+
lemma smul_eq_C_mul (f : power_series R) (a : R) :
1094+
a • f = C R a * f :=
1095+
by { ext, simp }
1096+
10531097
@[simp] lemma coeff_succ_mul_X (n : ℕ) (φ : power_series R) :
10541098
coeff R (n+1) (φ * X) = coeff R n φ :=
10551099
begin
@@ -1504,6 +1548,8 @@ lemma inv_eq_zero {φ : power_series k} :
15041548
φ⁻¹ = 0 ↔ constant_coeff k φ = 0 :=
15051549
mv_power_series.inv_eq_zero
15061550

1551+
@[simp] lemma zero_inv : (0 : power_series k)⁻¹ = 0 := mv_power_series.zero_inv
1552+
15071553
@[simp, priority 1100] lemma inv_of_unit_eq (φ : power_series k) (h : constant_coeff k φ ≠ 0) :
15081554
inv_of_unit φ (units.mk0 _ h) = φ⁻¹ :=
15091555
mv_power_series.inv_of_unit_eq _ _
@@ -1512,13 +1558,13 @@ mv_power_series.inv_of_unit_eq _ _
15121558
inv_of_unit φ u = φ⁻¹ :=
15131559
mv_power_series.inv_of_unit_eq' φ _ h
15141560

1515-
@[simp] protected lemma mul_inv (φ : power_series k) (h : constant_coeff k φ ≠ 0) :
1561+
@[simp] protected lemma mul_inv_cancel (φ : power_series k) (h : constant_coeff k φ ≠ 0) :
15161562
φ * φ⁻¹ = 1 :=
1517-
mv_power_series.mul_inv φ h
1563+
mv_power_series.mul_inv_cancel φ h
15181564

1519-
@[simp] protected lemma inv_mul (φ : power_series k) (h : constant_coeff k φ ≠ 0) :
1565+
@[simp] protected lemma inv_mul_cancel (φ : power_series k) (h : constant_coeff k φ ≠ 0) :
15201566
φ⁻¹ * φ = 1 :=
1521-
mv_power_series.inv_mul φ h
1567+
mv_power_series.inv_mul_cancel φ h
15221568

15231569
lemma eq_mul_inv_iff_mul_eq {φ₁ φ₂ φ₃ : power_series k} (h : constant_coeff k φ₃ ≠ 0) :
15241570
φ₁ = φ₂ * φ₃⁻¹ ↔ φ₁ * φ₃ = φ₂ :=
@@ -1532,6 +1578,23 @@ lemma inv_eq_iff_mul_eq_one {φ ψ : power_series k} (h : constant_coeff k ψ
15321578
ψ⁻¹ = φ ↔ φ * ψ = 1 :=
15331579
mv_power_series.inv_eq_iff_mul_eq_one h
15341580

1581+
@[simp] protected lemma mul_inv_rev (φ ψ : power_series k) :
1582+
(φ * ψ)⁻¹ = ψ⁻¹ * φ⁻¹ :=
1583+
mv_power_series.mul_inv_rev _ _
1584+
1585+
@[simp] lemma one_inv : (1 : power_series k)⁻¹ = 1 :=
1586+
mv_power_series.one_inv
1587+
1588+
@[simp] lemma C_inv (r : k) : (C k r)⁻¹ = C k r⁻¹ :=
1589+
mv_power_series.C_inv _
1590+
1591+
@[simp] lemma X_inv : (X : power_series k)⁻¹ = 0 :=
1592+
mv_power_series.X_inv _
1593+
1594+
@[simp] lemma smul_inv (r : k) (φ : power_series k) :
1595+
(r • φ)⁻¹ = r⁻¹ • φ⁻¹ :=
1596+
mv_power_series.smul_inv _ _
1597+
15351598
end field
15361599

15371600
end power_series
@@ -1836,6 +1899,8 @@ by rw [bit1, bit1, coe_add, coe_one, coe_bit0]
18361899
((X : polynomial R) : power_series R) = power_series.X :=
18371900
coe_monomial _ _
18381901

1902+
@[simp] lemma constant_coeff_coe : power_series.constant_coeff R φ = φ.coeff 0 := rfl
1903+
18391904
variables (R)
18401905

18411906
lemma coe_injective : function.injective (coe : polynomial R → power_series R) :=

0 commit comments

Comments
 (0)