analysis.analytic.inverse
⟷
Mathlib.Analysis.Analytic.Inverse
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -243,7 +243,7 @@ theorem comp_rightInv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
· simp [h]
· have : c.length = 1 := by refine' (eq_iff_le_not_lt.2 ⟨_, h⟩).symm;
exact c.length_pos_of_pos hn
- rw [← Composition.eq_single_iff_length hn] at this
+ rw [← Composition.eq_single_iff_length hn] at this
simp [this]
have B :
Disjoint ({c | 1 < Composition.length c} : Set (Composition n)).toFinset
@@ -271,7 +271,7 @@ theorem comp_rightInv_aux2 (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
refine' sum_congr rfl fun c hc => p.congr rfl fun j hj1 hj2 => _
have : ∀ k, c.blocks_fun k < n + 2 :=
by
- simp only [Set.mem_toFinset, Set.mem_setOf_eq] at hc
+ simp only [Set.mem_toFinset, Set.mem_setOf_eq] at hc
simp [← Composition.ne_single_iff N, Composition.eq_single_iff_length, ne_of_gt hc]
simp [apply_composition, this]
#align formal_multilinear_series.comp_right_inv_aux2 FormalMultilinearSeries.comp_rightInv_aux2
@@ -447,12 +447,12 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
sum_le_sum_of_subset_of_nonneg _ fun x hx1 hx2 =>
prod_nonneg fun j hj => mul_nonneg hr (mul_nonneg (pow_nonneg ha _) (hp _))
rintro ⟨k, c⟩ hd
- simp only [Set.mem_toFinset, mem_Ico, mem_sigma, Set.mem_setOf_eq] at hd
+ simp only [Set.mem_toFinset, mem_Ico, mem_sigma, Set.mem_setOf_eq] at hd
simp only [mem_comp_partial_sum_target_iff]
refine' ⟨hd.2, c.length_le.trans_lt hd.1.2, fun j => _⟩
have : c ≠ Composition.single k (zero_lt_two.trans_le hd.1.1) := by
simp [Composition.eq_single_iff_length, ne_of_gt hd.2]
- rw [Composition.ne_single_iff] at this
+ rw [Composition.ne_single_iff] at this
exact (this j).trans_le (nat.lt_succ_iff.mp hd.1.2)
_ = ∑ e in compPartialSumSource 2 (n + 1) n, ∏ j : Fin e.1, r * (a ^ e.2 j * p (e.2 j)) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -610,7 +610,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
_ = I * a + 2 * I * C * (r * S n) ^ 2 := by ring
_ ≤ I * a + 2 * I * C * (r * ((I + 1) * a)) ^ 2 := by
apply_rules [add_le_add, le_refl, mul_le_mul_of_nonneg_left, mul_nonneg, norm_nonneg,
- Cpos.le, zero_le_two, pow_le_pow_of_le_left, rpos.le]
+ Cpos.le, zero_le_two, pow_le_pow_left, rpos.le]
_ = (I + 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a) * a := by ring
_ ≤ (I + 1) * a := by apply_rules [mul_le_mul_of_nonneg_right, apos.le, add_le_add, le_refl]
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathbin.Analysis.Analytic.Composition
-import Mathbin.Tactic.Congrm
+import Analysis.Analytic.Composition
+import Tactic.Congrm
#align_import analysis.analytic.inverse from "leanprover-community/mathlib"@"2fe465deb81bcd7ccafa065bb686888a82f15372"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module analysis.analytic.inverse
-! leanprover-community/mathlib commit 2fe465deb81bcd7ccafa065bb686888a82f15372
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Analytic.Composition
import Mathbin.Tactic.Congrm
+#align_import analysis.analytic.inverse from "leanprover-community/mathlib"@"2fe465deb81bcd7ccafa065bb686888a82f15372"
+
/-!
# Inverse of analytic functions
mathlib commit https://github.com/leanprover-community/mathlib/commit/2fe465deb81bcd7ccafa065bb686888a82f15372
@@ -48,6 +48,7 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddC
/-! ### The left inverse of a formal multilinear series -/
+#print FormalMultilinearSeries.leftInv /-
/-- The left inverse of a formal multilinear series, where the `n`-th term is defined inductively
in terms of the previous ones to make sure that `(left_inv p i) ∘ p = id`. For this, the linear term
`p₁` in `p` should be invertible. In the definition, `i` is a linear isomorphism that should
@@ -71,17 +72,23 @@ noncomputable def leftInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
(left_inv (c : Composition (n + 2)).length).compAlongComposition
(p.compContinuousLinearMap i.symm) c
#align formal_multilinear_series.left_inv FormalMultilinearSeries.leftInv
+-/
+#print FormalMultilinearSeries.leftInv_coeff_zero /-
@[simp]
theorem leftInv_coeff_zero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
p.left_inv i 0 = 0 := by rw [left_inv]
#align formal_multilinear_series.left_inv_coeff_zero FormalMultilinearSeries.leftInv_coeff_zero
+-/
+#print FormalMultilinearSeries.leftInv_coeff_one /-
@[simp]
theorem leftInv_coeff_one (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
p.left_inv i 1 = (continuousMultilinearCurryFin1 𝕜 F E).symm i.symm := by rw [left_inv]
#align formal_multilinear_series.left_inv_coeff_one FormalMultilinearSeries.leftInv_coeff_one
+-/
+#print FormalMultilinearSeries.leftInv_removeZero /-
/-- The left inverse does not depend on the zeroth coefficient of a formal multilinear
series. -/
theorem leftInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
@@ -100,7 +107,9 @@ theorem leftInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
dsimp
simp [IH _ hc]
#align formal_multilinear_series.left_inv_remove_zero FormalMultilinearSeries.leftInv_removeZero
+-/
+#print FormalMultilinearSeries.leftInv_comp /-
/-- The left inverse to a formal multilinear series is indeed a left inverse, provided its linear
term is invertible. -/
theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
@@ -130,7 +139,7 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
have C :
((p.left_inv i (Composition.ones (n + 2)).length)
fun j : Fin (Composition.ones n.succ.succ).length =>
- p 1 fun k => v ((Fin.castLE (Composition.length_le _)) j)) =
+ p 1 fun k => v ((Fin.castLEEmb (Composition.length_le _)) j)) =
p.left_inv i (n + 2) fun j : Fin (n + 2) => p 1 fun k => v j :=
by
apply FormalMultilinearSeries.congr _ (Composition.ones_length _) fun j hj1 hj2 => _
@@ -159,10 +168,12 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
simp [FormalMultilinearSeries.comp, show n + 2 ≠ 1 by decide, A, Finset.sum_union B,
apply_composition_ones, C, D, -Set.toFinset_setOf]
#align formal_multilinear_series.left_inv_comp FormalMultilinearSeries.leftInv_comp
+-/
/-! ### The right inverse of a formal multilinear series -/
+#print FormalMultilinearSeries.rightInv /-
/-- The right inverse of a formal multilinear series, where the `n`-th term is defined inductively
in terms of the previous ones to make sure that `p ∘ (right_inv p i) = id`. For this, the linear
term `p₁` in `p` should be invertible. In the definition, `i` is a linear isomorphism that should
@@ -184,17 +195,23 @@ noncomputable def rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
let q : FormalMultilinearSeries 𝕜 F E := fun k => if h : k < n + 2 then right_inv k else 0
-(i.symm : F →L[𝕜] E).compContinuousMultilinearMap ((p.comp q) (n + 2))
#align formal_multilinear_series.right_inv FormalMultilinearSeries.rightInv
+-/
+#print FormalMultilinearSeries.rightInv_coeff_zero /-
@[simp]
theorem rightInv_coeff_zero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
p.right_inv i 0 = 0 := by rw [right_inv]
#align formal_multilinear_series.right_inv_coeff_zero FormalMultilinearSeries.rightInv_coeff_zero
+-/
+#print FormalMultilinearSeries.rightInv_coeff_one /-
@[simp]
theorem rightInv_coeff_one (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
p.right_inv i 1 = (continuousMultilinearCurryFin1 𝕜 F E).symm i.symm := by rw [right_inv]
#align formal_multilinear_series.right_inv_coeff_one FormalMultilinearSeries.rightInv_coeff_one
+-/
+#print FormalMultilinearSeries.rightInv_removeZero /-
/-- The right inverse does not depend on the zeroth coefficient of a formal multilinear
series. -/
theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
@@ -210,8 +227,10 @@ theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
congr 2 with k
by_cases hk : k < n + 2 <;> simp [hk, IH]
#align formal_multilinear_series.right_inv_remove_zero FormalMultilinearSeries.rightInv_removeZero
+-/
-theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries 𝕜 E F)
+#print FormalMultilinearSeries.comp_rightInv_aux1 /-
+theorem comp_rightInv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries 𝕜 E F)
(q : FormalMultilinearSeries 𝕜 F E) (v : Fin n → F) :
p.comp q n v =
∑ c : Composition n in {c : Composition n | 1 < c.length}.toFinset,
@@ -240,8 +259,10 @@ theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
apply p.congr (Composition.single_length hn) fun j hj1 hj2 => _
simp [apply_composition_single]
simp [FormalMultilinearSeries.comp, A, Finset.sum_union B, C, -Set.toFinset_setOf]
-#align formal_multilinear_series.comp_right_inv_aux1 FormalMultilinearSeries.comp_right_inv_aux1
+#align formal_multilinear_series.comp_right_inv_aux1 FormalMultilinearSeries.comp_rightInv_aux1
+-/
+#print FormalMultilinearSeries.comp_rightInv_aux2 /-
theorem comp_rightInv_aux2 (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) (n : ℕ)
(v : Fin (n + 2) → F) :
∑ c : Composition (n + 2) in {c : Composition (n + 2) | 1 < c.length}.toFinset,
@@ -257,7 +278,9 @@ theorem comp_rightInv_aux2 (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
simp [← Composition.ne_single_iff N, Composition.eq_single_iff_length, ne_of_gt hc]
simp [apply_composition, this]
#align formal_multilinear_series.comp_right_inv_aux2 FormalMultilinearSeries.comp_rightInv_aux2
+-/
+#print FormalMultilinearSeries.comp_rightInv /-
/-- The right inverse to a formal multilinear series is indeed a right inverse, provided its linear
term is invertible and its constant term vanishes. -/
theorem comp_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
@@ -276,7 +299,9 @@ theorem comp_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F
simp [comp_right_inv_aux1 N, h, right_inv, lt_irrefl n, show n + 2 ≠ 1 by decide, ←
sub_eq_add_neg, sub_eq_zero, comp_right_inv_aux2, -Set.toFinset_setOf]
#align formal_multilinear_series.comp_right_inv FormalMultilinearSeries.comp_rightInv
+-/
+#print FormalMultilinearSeries.rightInv_coeff /-
theorem rightInv_coeff (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) (n : ℕ) (hn : 2 ≤ n) :
p.right_inv i n =
-(i.symm : F →L[𝕜] E).compContinuousMultilinearMap
@@ -292,6 +317,7 @@ theorem rightInv_coeff (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜]
have : ((p 1) fun i : Fin 1 => 0) = 0 := ContinuousMultilinearMap.map_zero _
simp [comp_right_inv_aux1 N, lt_irrefl n, this, comp_right_inv_aux2, -Set.toFinset_setOf]
#align formal_multilinear_series.right_inv_coeff FormalMultilinearSeries.rightInv_coeff
+-/
/-! ### Coincidence of the left and the right inverse -/
@@ -306,6 +332,7 @@ private theorem left_inv_eq_right_inv_aux (p : FormalMultilinearSeries 𝕜 E F)
_ = (id 𝕜 E).comp (rightInv p i) := by rw [left_inv_comp p i h]
_ = rightInv p i := by simp
+#print FormalMultilinearSeries.leftInv_eq_rightInv /-
/-- The left inverse and the right inverse of a formal multilinear series coincide. This is not at
all obvious from their definition, but it follows from uniqueness of inverses (which comes from the
fact that composition is associative on formal multilinear series). -/
@@ -316,6 +343,7 @@ theorem leftInv_eq_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
_ = rightInv p.removeZero i := by apply left_inv_eq_right_inv_aux <;> simp [h]
_ = rightInv p i := by rw [right_inv_remove_zero]
#align formal_multilinear_series.left_inv_eq_right_inv FormalMultilinearSeries.leftInv_eq_rightInv
+-/
/-!
### Convergence of the inverse of a power series
@@ -387,6 +415,7 @@ remains bounded.
-/
+#print FormalMultilinearSeries.radius_right_inv_pos_of_radius_pos_aux1 /-
/-- First technical lemma to control the growth of coefficients of the inverse. Bound the explicit
expression for `∑_{k<n+1} aᵏ Qₖ` in terms of a sum of powers of the same sum one step before,
in a general abstract setup. -/
@@ -453,7 +482,9 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
dsimp
simp [prod_const, ← mul_sum, mul_pow]
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos_aux1 FormalMultilinearSeries.radius_right_inv_pos_of_radius_pos_aux1
+-/
+#print FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos_aux2 /-
/-- Second technical lemma to control the growth of coefficients of the inverse. Bound the explicit
expression for `∑_{k<n+1} aᵏ Qₖ` in terms of a sum of powers of the same sum one step before,
in the specific setup we are interesting in, by reducing to the general bound in
@@ -519,7 +550,9 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
radius_right_inv_pos_of_radius_pos_aux1 n (fun k => ‖p.right_inv i k‖)
(fun k => norm_nonneg _) hr ha
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos_aux2 FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos_aux2
+-/
+#print FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos /-
/-- If a a formal multilinear series has a positive radius of convergence, then its right inverse
also has a positive radius of convergence. -/
theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
@@ -601,6 +634,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
single_le_sum this (by simp [one_le_n]))
_ ≤ (I + 1) * a := IRec (n + 1) (by decide)
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos
+-/
end FormalMultilinearSeries
mathlib commit https://github.com/leanprover-community/mathlib/commit/2fe465deb81bcd7ccafa065bb686888a82f15372
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module analysis.analytic.inverse
-! leanprover-community/mathlib commit 284fdd2962e67d2932fa3a79ce19fcf92d38e228
+! leanprover-community/mathlib commit 2fe465deb81bcd7ccafa065bb686888a82f15372
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.Tactic.Congrm
# Inverse of analytic functions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We construct the left and right inverse of a formal multilinear series with invertible linear term,
we prove that they coincide and study their properties (notably convergence).
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -103,7 +103,7 @@ term is invertible. -/
theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
(h : p 1 = (continuousMultilinearCurryFin1 𝕜 E F).symm i) : (leftInv p i).comp p = id 𝕜 E :=
by
- ext (n v)
+ ext n v
cases n
·
simp only [left_inv, ContinuousMultilinearMap.zero_apply, id_apply_ne_one, Ne.def,
@@ -260,7 +260,7 @@ term is invertible and its constant term vanishes. -/
theorem comp_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
(h : p 1 = (continuousMultilinearCurryFin1 𝕜 E F).symm i) (h0 : p 0 = 0) :
p.comp (rightInv p i) = id 𝕜 F := by
- ext (n v)
+ ext n v
cases n
·
simp only [h0, ContinuousMultilinearMap.zero_apply, id_apply_ne_one, Ne.def, not_false_iff,
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -211,8 +211,8 @@ theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries 𝕜 E F)
(q : FormalMultilinearSeries 𝕜 F E) (v : Fin n → F) :
p.comp q n v =
- (∑ c : Composition n in {c : Composition n | 1 < c.length}.toFinset,
- p c.length (q.applyComposition c v)) +
+ ∑ c : Composition n in {c : Composition n | 1 < c.length}.toFinset,
+ p c.length (q.applyComposition c v) +
p 1 fun i => q n v :=
by
have A :
@@ -241,8 +241,8 @@ theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
theorem comp_rightInv_aux2 (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) (n : ℕ)
(v : Fin (n + 2) → F) :
- (∑ c : Composition (n + 2) in {c : Composition (n + 2) | 1 < c.length}.toFinset,
- p c.length (applyComposition (fun k : ℕ => ite (k < n + 2) (p.right_inv i k) 0) c v)) =
+ ∑ c : Composition (n + 2) in {c : Composition (n + 2) | 1 < c.length}.toFinset,
+ p c.length (applyComposition (fun k : ℕ => ite (k < n + 2) (p.right_inv i k) 0) c v) =
∑ c : Composition (n + 2) in {c : Composition (n + 2) | 1 < c.length}.toFinset,
p c.length ((p.right_inv i).applyComposition c v) :=
by
@@ -389,16 +389,16 @@ expression for `∑_{k<n+1} aᵏ Qₖ` in terms of a sum of powers of the same s
in a general abstract setup. -/
theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp : ∀ k, 0 ≤ p k) {r a : ℝ}
(hr : 0 ≤ r) (ha : 0 ≤ a) :
- (∑ k in Ico 2 (n + 1),
+ ∑ k in Ico 2 (n + 1),
a ^ k *
∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
- r ^ c.length * ∏ j, p (c.blocksFun j)) ≤
+ r ^ c.length * ∏ j, p (c.blocksFun j) ≤
∑ j in Ico 2 (n + 1), r ^ j * (∑ k in Ico 1 n, a ^ k * p k) ^ j :=
calc
- (∑ k in Ico 2 (n + 1),
+ ∑ k in Ico 2 (n + 1),
a ^ k *
∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
- r ^ c.length * ∏ j, p (c.blocksFun j)) =
+ r ^ c.length * ∏ j, p (c.blocksFun j) =
∑ k in Ico 2 (n + 1),
∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
∏ j, r * (a ^ c.blocksFun j * p (c.blocksFun j)) :=
@@ -458,13 +458,13 @@ in the specific setup we are interesting in, by reducing to the general bound in
theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
(p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) {r a C : ℝ} (hr : 0 ≤ r) (ha : 0 ≤ a)
(hC : 0 ≤ C) (hp : ∀ n, ‖p n‖ ≤ C * r ^ n) :
- (∑ k in Ico 1 (n + 1), a ^ k * ‖p.right_inv i k‖) ≤
+ ∑ k in Ico 1 (n + 1), a ^ k * ‖p.right_inv i k‖ ≤
‖(i.symm : F →L[𝕜] E)‖ * a +
‖(i.symm : F →L[𝕜] E)‖ * C *
∑ k in Ico 2 (n + 1), (r * ∑ j in Ico 1 n, a ^ j * ‖p.right_inv i j‖) ^ k :=
let I := ‖(i.symm : F →L[𝕜] E)‖
calc
- (∑ k in Ico 1 (n + 1), a ^ k * ‖p.right_inv i k‖) =
+ ∑ k in Ico 1 (n + 1), a ^ k * ‖p.right_inv i k‖ =
a * I + ∑ k in Ico 2 (n + 1), a ^ k * ‖p.right_inv i k‖ :=
by
simp only [LinearIsometryEquiv.norm_map, pow_one, right_inv_coeff_one, Nat.Ico_succ_singleton,
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -302,7 +302,6 @@ private theorem left_inv_eq_right_inv_aux (p : FormalMultilinearSeries 𝕜 E F)
_ = ((leftInv p i).comp p).comp (rightInv p i) := by rw [comp_assoc]
_ = (id 𝕜 E).comp (rightInv p i) := by rw [left_inv_comp p i h]
_ = rightInv p i := by simp
-
/-- The left inverse and the right inverse of a formal multilinear series coincide. This is not at
all obvious from their definition, but it follows from uniqueness of inverses (which comes from the
@@ -313,7 +312,6 @@ theorem leftInv_eq_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
leftInv p i = leftInv p.removeZero i := by rw [left_inv_remove_zero]
_ = rightInv p.removeZero i := by apply left_inv_eq_right_inv_aux <;> simp [h]
_ = rightInv p i := by rw [right_inv_remove_zero]
-
#align formal_multilinear_series.left_inv_eq_right_inv FormalMultilinearSeries.leftInv_eq_rightInv
/-!
@@ -451,7 +449,6 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
simp only [MultilinearMap.mkPiAlgebra_apply]
dsimp
simp [prod_const, ← mul_sum, mul_pow]
-
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos_aux1 FormalMultilinearSeries.radius_right_inv_pos_of_radius_pos_aux1
/-- Second technical lemma to control the growth of coefficients of the inverse. Bound the explicit
@@ -518,7 +515,6 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
apply
radius_right_inv_pos_of_radius_pos_aux1 n (fun k => ‖p.right_inv i k‖)
(fun k => norm_nonneg _) hr ha
-
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos_aux2 FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos_aux2
/-- If a a formal multilinear series has a positive radius of convergence, then its right inverse
@@ -566,7 +562,6 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
calc
r * S n ≤ r * ((I + 1) * a) := mul_le_mul_of_nonneg_left hn rpos.le
_ ≤ 1 / 2 := by rwa [← mul_assoc]
-
calc
S (n + 1) ≤ I * a + I * C * ∑ k in Ico 2 (n + 1), (r * S n) ^ k :=
radius_right_inv_pos_of_radius_pos_aux2 In p i rpos.le apos.le Cpos.le ple
@@ -585,7 +580,6 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
Cpos.le, zero_le_two, pow_le_pow_of_le_left, rpos.le]
_ = (I + 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a) * a := by ring
_ ≤ (I + 1) * a := by apply_rules [mul_le_mul_of_nonneg_right, apos.le, add_le_add, le_refl]
-
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
let a' : NNReal := ⟨a, apos.le⟩
suffices H : (a' : ENNReal) ≤ (p.right_inv i).radius
@@ -603,7 +597,6 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
mul_nonneg (pow_nonneg apos.le _) (norm_nonneg _)
single_le_sum this (by simp [one_le_n]))
_ ≤ (I + 1) * a := IRec (n + 1) (by decide)
-
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos
end FormalMultilinearSeries
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -114,14 +114,14 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
ContinuousLinearEquiv.symm_apply_apply, continuousMultilinearCurryFin1_symm_apply]
have A :
(Finset.univ : Finset (Composition (n + 2))) =
- { c | Composition.length c < n + 2 }.toFinset ∪ {Composition.ones (n + 2)} :=
+ {c | Composition.length c < n + 2}.toFinset ∪ {Composition.ones (n + 2)} :=
by
refine' subset.antisymm (fun c hc => _) (subset_univ _)
by_cases h : c.length < n + 2
· simp [h]
· simp [Composition.eq_ones_iff_le_length.2 (not_lt.1 h)]
have B :
- Disjoint ({ c | Composition.length c < n + 2 } : Set (Composition (n + 2))).toFinset
+ Disjoint ({c | Composition.length c < n + 2} : Set (Composition (n + 2))).toFinset
{Composition.ones (n + 2)} :=
by simp
have C :
@@ -134,12 +134,13 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
exact FormalMultilinearSeries.congr _ rfl fun k hk1 hk2 => by congr
have D :
(p.left_inv i (n + 2) fun j : Fin (n + 2) => p 1 fun k => v j) =
- -∑ c : Composition (n + 2) in { c : Composition (n + 2) | c.length < n + 2 }.toFinset,
+ -∑ c : Composition (n + 2) in {c : Composition (n + 2) | c.length < n + 2}.toFinset,
(p.left_inv i c.length) (p.apply_composition c v) :=
by
simp only [left_inv, ContinuousMultilinearMap.neg_apply, neg_inj,
ContinuousMultilinearMap.sum_apply]
- convert(sum_to_finset_eq_subtype (fun c : Composition (n + 2) => c.length < n + 2)
+ convert
+ (sum_to_finset_eq_subtype (fun c : Composition (n + 2) => c.length < n + 2)
fun c : Composition (n + 2) =>
(ContinuousMultilinearMap.compAlongComposition (p.comp_continuous_linear_map ↑i.symm)
c (p.left_inv i c.length))
@@ -210,13 +211,13 @@ theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries 𝕜 E F)
(q : FormalMultilinearSeries 𝕜 F E) (v : Fin n → F) :
p.comp q n v =
- (∑ c : Composition n in { c : Composition n | 1 < c.length }.toFinset,
+ (∑ c : Composition n in {c : Composition n | 1 < c.length}.toFinset,
p c.length (q.applyComposition c v)) +
p 1 fun i => q n v :=
by
have A :
(Finset.univ : Finset (Composition n)) =
- { c | 1 < Composition.length c }.toFinset ∪ {Composition.single n hn} :=
+ {c | 1 < Composition.length c}.toFinset ∪ {Composition.single n hn} :=
by
refine' subset.antisymm (fun c hc => _) (subset_univ _)
by_cases h : 1 < c.length
@@ -226,7 +227,7 @@ theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
rw [← Composition.eq_single_iff_length hn] at this
simp [this]
have B :
- Disjoint ({ c | 1 < Composition.length c } : Set (Composition n)).toFinset
+ Disjoint ({c | 1 < Composition.length c} : Set (Composition n)).toFinset
{Composition.single n hn} :=
by simp
have C :
@@ -240,9 +241,9 @@ theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
theorem comp_rightInv_aux2 (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) (n : ℕ)
(v : Fin (n + 2) → F) :
- (∑ c : Composition (n + 2) in { c : Composition (n + 2) | 1 < c.length }.toFinset,
+ (∑ c : Composition (n + 2) in {c : Composition (n + 2) | 1 < c.length}.toFinset,
p c.length (applyComposition (fun k : ℕ => ite (k < n + 2) (p.right_inv i k) 0) c v)) =
- ∑ c : Composition (n + 2) in { c : Composition (n + 2) | 1 < c.length }.toFinset,
+ ∑ c : Composition (n + 2) in {c : Composition (n + 2) | 1 < c.length}.toFinset,
p c.length ((p.right_inv i).applyComposition c v) :=
by
have N : 0 < n + 2 := by decide
@@ -276,7 +277,7 @@ theorem comp_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F
theorem rightInv_coeff (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) (n : ℕ) (hn : 2 ≤ n) :
p.right_inv i n =
-(i.symm : F →L[𝕜] E).compContinuousMultilinearMap
- (∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition n)),
+ (∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition n)),
p.compAlongComposition (p.right_inv i) c) :=
by
cases n; · exact False.elim (zero_lt_two.not_le hn)
@@ -392,16 +393,16 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
(hr : 0 ≤ r) (ha : 0 ≤ a) :
(∑ k in Ico 2 (n + 1),
a ^ k *
- ∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition k)),
+ ∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
r ^ c.length * ∏ j, p (c.blocksFun j)) ≤
∑ j in Ico 2 (n + 1), r ^ j * (∑ k in Ico 1 n, a ^ k * p k) ^ j :=
calc
(∑ k in Ico 2 (n + 1),
a ^ k *
- ∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition k)),
+ ∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
r ^ c.length * ∏ j, p (c.blocksFun j)) =
∑ k in Ico 2 (n + 1),
- ∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition k)),
+ ∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
∏ j, r * (a ^ c.blocksFun j * p (c.blocksFun j)) :=
by
simp_rw [mul_sum]
@@ -476,7 +477,7 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
∑ k in Ico 2 (n + 1),
a ^ k *
‖(i.symm : F →L[𝕜] E).compContinuousMultilinearMap
- (∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition k)),
+ (∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
p.compAlongComposition (p.right_inv i) c)‖ :=
by
congr 1
@@ -487,7 +488,7 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
∑ k in Ico 2 (n + 1),
a ^ k *
(I *
- ∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition k)),
+ ∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
C * r ^ c.length * ∏ j, ‖p.right_inv i (c.blocksFun j)‖) :=
by
apply_rules [add_le_add, le_refl, sum_le_sum fun j hj => _, mul_le_mul_of_nonneg_left,
@@ -504,7 +505,7 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
I * C *
∑ k in Ico 2 (n + 1),
a ^ k *
- ∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition k)),
+ ∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
r ^ c.length * ∏ j, ‖p.right_inv i (c.blocksFun j)‖ :=
by
simp_rw [mul_assoc C, ← mul_sum, ← mul_assoc, mul_comm _ ‖↑i.symm‖, mul_assoc, ← mul_sum, ←
@@ -545,7 +546,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
have B : ∀ᶠ a in 𝓝 0, r * (I + 1) * a < 1 / 2 := by apply (tendsto_order.1 this).2;
simp [zero_lt_one]
have C : ∀ᶠ a in 𝓝[>] (0 : ℝ), (0 : ℝ) < a := by
- filter_upwards [self_mem_nhdsWithin]with _ ha using ha
+ filter_upwards [self_mem_nhdsWithin] with _ ha using ha
rcases(C.and ((A.and B).filter_mono inf_le_left)).exists with ⟨a, ha⟩
exact ⟨a, ha.1, ha.2.1.le, ha.2.2.le⟩
-- check by induction that the partial sums are suitably bounded, using the choice of `a` and the
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -223,7 +223,7 @@ theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
· simp [h]
· have : c.length = 1 := by refine' (eq_iff_le_not_lt.2 ⟨_, h⟩).symm;
exact c.length_pos_of_pos hn
- rw [← Composition.eq_single_iff_length hn] at this
+ rw [← Composition.eq_single_iff_length hn] at this
simp [this]
have B :
Disjoint ({ c | 1 < Composition.length c } : Set (Composition n)).toFinset
@@ -249,7 +249,7 @@ theorem comp_rightInv_aux2 (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
refine' sum_congr rfl fun c hc => p.congr rfl fun j hj1 hj2 => _
have : ∀ k, c.blocks_fun k < n + 2 :=
by
- simp only [Set.mem_toFinset, Set.mem_setOf_eq] at hc
+ simp only [Set.mem_toFinset, Set.mem_setOf_eq] at hc
simp [← Composition.ne_single_iff N, Composition.eq_single_iff_length, ne_of_gt hc]
simp [apply_composition, this]
#align formal_multilinear_series.comp_right_inv_aux2 FormalMultilinearSeries.comp_rightInv_aux2
@@ -419,12 +419,12 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
sum_le_sum_of_subset_of_nonneg _ fun x hx1 hx2 =>
prod_nonneg fun j hj => mul_nonneg hr (mul_nonneg (pow_nonneg ha _) (hp _))
rintro ⟨k, c⟩ hd
- simp only [Set.mem_toFinset, mem_Ico, mem_sigma, Set.mem_setOf_eq] at hd
+ simp only [Set.mem_toFinset, mem_Ico, mem_sigma, Set.mem_setOf_eq] at hd
simp only [mem_comp_partial_sum_target_iff]
refine' ⟨hd.2, c.length_le.trans_lt hd.1.2, fun j => _⟩
have : c ≠ Composition.single k (zero_lt_two.trans_le hd.1.1) := by
simp [Composition.eq_single_iff_length, ne_of_gt hd.2]
- rw [Composition.ne_single_iff] at this
+ rw [Composition.ne_single_iff] at this
exact (this j).trans_le (nat.lt_succ_iff.mp hd.1.2)
_ = ∑ e in compPartialSumSource 2 (n + 1) n, ∏ j : Fin e.1, r * (a ^ e.2 j * p (e.2 j)) :=
by
@@ -526,12 +526,13 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
(hp : 0 < p.radius) : 0 < (p.right_inv i).radius :=
by
obtain ⟨C, r, Cpos, rpos, ple⟩ :
- ∃ (C r : _)(hC : 0 < C)(hr : 0 < r), ∀ n : ℕ, ‖p n‖ ≤ C * r ^ n := le_mul_pow_of_radius_pos p hp
+ ∃ (C r : _) (hC : 0 < C) (hr : 0 < r), ∀ n : ℕ, ‖p n‖ ≤ C * r ^ n :=
+ le_mul_pow_of_radius_pos p hp
let I := ‖(i.symm : F →L[𝕜] E)‖
-- choose `a` small enough to make sure that `∑_{k ≤ n} aᵏ Qₖ` will be controllable by
-- induction
obtain ⟨a, apos, ha1, ha2⟩ :
- ∃ (a : _)(apos : 0 < a), 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a ≤ 1 ∧ r * (I + 1) * a ≤ 1 / 2 :=
+ ∃ (a : _) (apos : 0 < a), 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a ≤ 1 ∧ r * (I + 1) * a ≤ 1 / 2 :=
by
have :
tendsto (fun a => 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a) (𝓝 0)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -33,7 +33,7 @@ we prove that they coincide and study their properties (notably convergence).
-/
-open BigOperators Classical Topology
+open scoped BigOperators Classical Topology
open Finset Filter
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -45,12 +45,6 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddC
/-! ### The left inverse of a formal multilinear series -/
-/- warning: formal_multilinear_series.left_inv -> FormalMultilinearSeries.leftInv is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : NontriviallyNormedField.{u1} 𝕜] {E : Type.{u2}} [_inst_2 : NormedAddCommGroup.{u2} E] [_inst_3 : NormedSpace.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)] {F : Type.{u3}} [_inst_4 : NormedAddCommGroup.{u3} F] [_inst_5 : NormedSpace.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)], (FormalMultilinearSeries.{u1, u2, u3} 𝕜 E F (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.LeftInv._proof_1.{u2} E _inst_2) (FormalMultilinearSeries.LeftInv._proof_2.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.LeftInv._proof_3.{u3} F _inst_4) (FormalMultilinearSeries.LeftInv._proof_4.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5)) -> (ContinuousLinearEquiv.{u1, u1, u2, u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (FormalMultilinearSeries.LeftInv._proof_5.{u1} 𝕜 _inst_1) (FormalMultilinearSeries.LeftInv._proof_6.{u1} 𝕜 _inst_1) E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (AddCommGroup.toAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2)) F (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (AddCommGroup.toAddCommMonoid.{u3} F (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4)) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5)) -> (FormalMultilinearSeries.{u1, u3, u2} 𝕜 F E (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.LeftInv._proof_7.{u3} F _inst_4) (FormalMultilinearSeries.LeftInv._proof_8.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.LeftInv._proof_9.{u2} E _inst_2) (FormalMultilinearSeries.LeftInv._proof_10.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3))
-but is expected to have type
- PUnit.{max (max (succ (succ u1)) (succ (succ u2))) (succ (succ u3))}
-Case conversion may be inaccurate. Consider using '#align formal_multilinear_series.left_inv FormalMultilinearSeries.leftInvₓ'. -/
/-- The left inverse of a formal multilinear series, where the `n`-th term is defined inductively
in terms of the previous ones to make sure that `(left_inv p i) ∘ p = id`. For this, the linear term
`p₁` in `p` should be invertible. In the definition, `i` is a linear isomorphism that should
@@ -165,12 +159,6 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
/-! ### The right inverse of a formal multilinear series -/
-/- warning: formal_multilinear_series.right_inv -> FormalMultilinearSeries.rightInv is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_1 : NontriviallyNormedField.{u1} 𝕜] {E : Type.{u2}} [_inst_2 : NormedAddCommGroup.{u2} E] [_inst_3 : NormedSpace.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)] {F : Type.{u3}} [_inst_4 : NormedAddCommGroup.{u3} F] [_inst_5 : NormedSpace.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)], (FormalMultilinearSeries.{u1, u2, u3} 𝕜 E F (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.RightInv._proof_1.{u2} E _inst_2) (FormalMultilinearSeries.RightInv._proof_2.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.RightInv._proof_3.{u3} F _inst_4) (FormalMultilinearSeries.RightInv._proof_4.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5)) -> (ContinuousLinearEquiv.{u1, u1, u2, u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (FormalMultilinearSeries.RightInv._proof_5.{u1} 𝕜 _inst_1) (FormalMultilinearSeries.RightInv._proof_6.{u1} 𝕜 _inst_1) E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (AddCommGroup.toAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2)) F (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (AddCommGroup.toAddCommMonoid.{u3} F (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4)) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5)) -> (FormalMultilinearSeries.{u1, u3, u2} 𝕜 F E (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.RightInv._proof_7.{u3} F _inst_4) (FormalMultilinearSeries.RightInv._proof_8.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.RightInv._proof_9.{u2} E _inst_2) (FormalMultilinearSeries.RightInv._proof_10.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3))
-but is expected to have type
- PUnit.{max (max (succ (succ u1)) (succ (succ u2))) (succ (succ u3))}
-Case conversion may be inaccurate. Consider using '#align formal_multilinear_series.right_inv FormalMultilinearSeries.rightInvₓ'. -/
/-- The right inverse of a formal multilinear series, where the `n`-th term is defined inductively
in terms of the previous ones to make sure that `p ∘ (right_inv p i) = id`. For this, the linear
term `p₁` in `p` should be invertible. In the definition, `i` is a linear isomorphism that should
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -233,8 +233,7 @@ theorem comp_right_inv_aux1 {n : ℕ} (hn : 0 < n) (p : FormalMultilinearSeries
refine' subset.antisymm (fun c hc => _) (subset_univ _)
by_cases h : 1 < c.length
· simp [h]
- · have : c.length = 1 := by
- refine' (eq_iff_le_not_lt.2 ⟨_, h⟩).symm
+ · have : c.length = 1 := by refine' (eq_iff_le_not_lt.2 ⟨_, h⟩).symm;
exact c.length_pos_of_pos hn
rw [← Composition.eq_single_iff_length hn] at this
simp [this]
@@ -292,10 +291,8 @@ theorem rightInv_coeff (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜]
(∑ c in ({ c | 1 < Composition.length c }.toFinset : Finset (Composition n)),
p.compAlongComposition (p.right_inv i) c) :=
by
- cases n
- · exact False.elim (zero_lt_two.not_le hn)
- cases n
- · exact False.elim (one_lt_two.not_le hn)
+ cases n; · exact False.elim (zero_lt_two.not_le hn)
+ cases n; · exact False.elim (one_lt_two.not_le hn)
simp only [right_inv, neg_inj]
congr 1
ext v
@@ -552,15 +549,11 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
tendsto (fun a => 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a) (𝓝 0)
(𝓝 (2 * I * C * r ^ 2 * (I + 1) ^ 2 * 0)) :=
tendsto_const_nhds.mul tendsto_id
- have A : ∀ᶠ a in 𝓝 0, 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a < 1 :=
- by
- apply (tendsto_order.1 this).2
- simp [zero_lt_one]
+ have A : ∀ᶠ a in 𝓝 0, 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a < 1 := by
+ apply (tendsto_order.1 this).2; simp [zero_lt_one]
have : tendsto (fun a => r * (I + 1) * a) (𝓝 0) (𝓝 (r * (I + 1) * 0)) :=
tendsto_const_nhds.mul tendsto_id
- have B : ∀ᶠ a in 𝓝 0, r * (I + 1) * a < 1 / 2 :=
- by
- apply (tendsto_order.1 this).2
+ have B : ∀ᶠ a in 𝓝 0, r * (I + 1) * a < 1 / 2 := by apply (tendsto_order.1 this).2;
simp [zero_lt_one]
have C : ∀ᶠ a in 𝓝[>] (0 : ℝ), (0 : ℝ) < a := by
filter_upwards [self_mem_nhdsWithin]with _ ha using ha
@@ -587,10 +580,8 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
calc
S (n + 1) ≤ I * a + I * C * ∑ k in Ico 2 (n + 1), (r * S n) ^ k :=
radius_right_inv_pos_of_radius_pos_aux2 In p i rpos.le apos.le Cpos.le ple
- _ = I * a + I * C * (((r * S n) ^ 2 - (r * S n) ^ (n + 1)) / (1 - r * S n)) :=
- by
- rw [geom_sum_Ico' _ In]
- exact ne_of_lt (rSn.trans_lt (by norm_num))
+ _ = I * a + I * C * (((r * S n) ^ 2 - (r * S n) ^ (n + 1)) / (1 - r * S n)) := by
+ rw [geom_sum_Ico' _ In]; exact ne_of_lt (rSn.trans_lt (by norm_num))
_ ≤ I * a + I * C * ((r * S n) ^ 2 / (1 / 2)) :=
by
apply_rules [add_le_add, le_refl, mul_le_mul_of_nonneg_left, mul_nonneg, norm_nonneg,
@@ -608,8 +599,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
let a' : NNReal := ⟨a, apos.le⟩
suffices H : (a' : ENNReal) ≤ (p.right_inv i).radius
- · apply lt_of_lt_of_le _ H
- exact_mod_cast apos
+ · apply lt_of_lt_of_le _ H; exact_mod_cast apos
apply le_radius_of_bound _ ((I + 1) * a) fun n => _
by_cases hn : n = 0
· have : ‖p.right_inv i n‖ = ‖p.right_inv i 0‖ := by congr <;> try rw [hn]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -317,7 +317,6 @@ private theorem left_inv_eq_right_inv_aux (p : FormalMultilinearSeries 𝕜 E F)
_ = (id 𝕜 E).comp (rightInv p i) := by rw [left_inv_comp p i h]
_ = rightInv p i := by simp
-#align formal_multilinear_series.left_inv_eq_right_inv_aux formal_multilinear_series.left_inv_eq_right_inv_aux
/-- The left inverse and the right inverse of a formal multilinear series coincide. This is not at
all obvious from their definition, but it follows from uniqueness of inverses (which comes from the
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -45,6 +45,12 @@ variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddC
/-! ### The left inverse of a formal multilinear series -/
+/- warning: formal_multilinear_series.left_inv -> FormalMultilinearSeries.leftInv is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : NontriviallyNormedField.{u1} 𝕜] {E : Type.{u2}} [_inst_2 : NormedAddCommGroup.{u2} E] [_inst_3 : NormedSpace.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)] {F : Type.{u3}} [_inst_4 : NormedAddCommGroup.{u3} F] [_inst_5 : NormedSpace.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)], (FormalMultilinearSeries.{u1, u2, u3} 𝕜 E F (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.LeftInv._proof_1.{u2} E _inst_2) (FormalMultilinearSeries.LeftInv._proof_2.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.LeftInv._proof_3.{u3} F _inst_4) (FormalMultilinearSeries.LeftInv._proof_4.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5)) -> (ContinuousLinearEquiv.{u1, u1, u2, u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (FormalMultilinearSeries.LeftInv._proof_5.{u1} 𝕜 _inst_1) (FormalMultilinearSeries.LeftInv._proof_6.{u1} 𝕜 _inst_1) E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (AddCommGroup.toAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2)) F (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (AddCommGroup.toAddCommMonoid.{u3} F (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4)) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5)) -> (FormalMultilinearSeries.{u1, u3, u2} 𝕜 F E (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.LeftInv._proof_7.{u3} F _inst_4) (FormalMultilinearSeries.LeftInv._proof_8.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.LeftInv._proof_9.{u2} E _inst_2) (FormalMultilinearSeries.LeftInv._proof_10.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3))
+but is expected to have type
+ PUnit.{max (max (succ (succ u1)) (succ (succ u2))) (succ (succ u3))}
+Case conversion may be inaccurate. Consider using '#align formal_multilinear_series.left_inv FormalMultilinearSeries.leftInvₓ'. -/
/-- The left inverse of a formal multilinear series, where the `n`-th term is defined inductively
in terms of the previous ones to make sure that `(left_inv p i) ∘ p = id`. For this, the linear term
`p₁` in `p` should be invertible. In the definition, `i` is a linear isomorphism that should
@@ -159,6 +165,12 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
/-! ### The right inverse of a formal multilinear series -/
+/- warning: formal_multilinear_series.right_inv -> FormalMultilinearSeries.rightInv is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_1 : NontriviallyNormedField.{u1} 𝕜] {E : Type.{u2}} [_inst_2 : NormedAddCommGroup.{u2} E] [_inst_3 : NormedSpace.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)] {F : Type.{u3}} [_inst_4 : NormedAddCommGroup.{u3} F] [_inst_5 : NormedSpace.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)], (FormalMultilinearSeries.{u1, u2, u3} 𝕜 E F (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.RightInv._proof_1.{u2} E _inst_2) (FormalMultilinearSeries.RightInv._proof_2.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.RightInv._proof_3.{u3} F _inst_4) (FormalMultilinearSeries.RightInv._proof_4.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5)) -> (ContinuousLinearEquiv.{u1, u1, u2, u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1))))))) (FormalMultilinearSeries.RightInv._proof_5.{u1} 𝕜 _inst_1) (FormalMultilinearSeries.RightInv._proof_6.{u1} 𝕜 _inst_1) E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (AddCommGroup.toAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2)) F (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (AddCommGroup.toAddCommMonoid.{u3} F (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4)) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5)) -> (FormalMultilinearSeries.{u1, u3, u2} 𝕜 F E (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1)))) (NormedAddCommGroup.toAddCommGroup.{u3} F _inst_4) (NormedSpace.toModule.{u1, u3} 𝕜 F (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4) _inst_5) (UniformSpace.toTopologicalSpace.{u3} F (PseudoMetricSpace.toUniformSpace.{u3} F (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F _inst_4)))) (FormalMultilinearSeries.RightInv._proof_7.{u3} F _inst_4) (FormalMultilinearSeries.RightInv._proof_8.{u1, u3} 𝕜 _inst_1 F _inst_4 _inst_5) (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_2) (NormedSpace.toModule.{u1, u2} 𝕜 E (NontriviallyNormedField.toNormedField.{u1} 𝕜 _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2) _inst_3) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_2)))) (FormalMultilinearSeries.RightInv._proof_9.{u2} E _inst_2) (FormalMultilinearSeries.RightInv._proof_10.{u1, u2} 𝕜 _inst_1 E _inst_2 _inst_3))
+but is expected to have type
+ PUnit.{max (max (succ (succ u1)) (succ (succ u2))) (succ (succ u3))}
+Case conversion may be inaccurate. Consider using '#align formal_multilinear_series.right_inv FormalMultilinearSeries.rightInvₓ'. -/
/-- The right inverse of a formal multilinear series, where the `n`-th term is defined inductively
in terms of the previous ones to make sure that `p ∘ (right_inv p i) = id`. For this, the linear
term `p₁` in `p` should be invertible. In the definition, `i` is a linear isomorphism that should
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -127,7 +127,7 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
have C :
((p.left_inv i (Composition.ones (n + 2)).length)
fun j : Fin (Composition.ones n.succ.succ).length =>
- p 1 fun k => v ((Fin.castLe (Composition.length_le _)) j)) =
+ p 1 fun k => v ((Fin.castLE (Composition.length_le _)) j)) =
p.left_inv i (n + 2) fun j : Fin (n + 2) => p 1 fun k => v j :=
by
apply FormalMultilinearSeries.congr _ (Composition.ones_length _) fun j hj1 hj2 => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/284fdd2962e67d2932fa3a79ce19fcf92d38e228
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module analysis.analytic.inverse
-! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
+! leanprover-community/mathlib commit 284fdd2962e67d2932fa3a79ce19fcf92d38e228
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -191,7 +191,6 @@ theorem rightInv_coeff_one (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
p.right_inv i 1 = (continuousMultilinearCurryFin1 𝕜 F E).symm i.symm := by rw [right_inv]
#align formal_multilinear_series.right_inv_coeff_one FormalMultilinearSeries.rightInv_coeff_one
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr i.symm.to_continuous_linear_map.comp_continuous_multilinear_map (p.comp (λ k, _) _)]] -/
/-- The right inverse does not depend on the zeroth coefficient of a formal multilinear
series. -/
theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
@@ -204,8 +203,7 @@ theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
· simp only [right_inv_coeff_one]
simp only [right_inv, neg_inj]
rw [remove_zero_comp_of_pos _ _ (add_pos_of_nonneg_of_pos n.zero_le zero_lt_two)]
- trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr i.symm.to_continuous_linear_map.comp_continuous_multilinear_map (p.comp (λ k, _) _)]]"
+ congr 2 with k
by_cases hk : k < n + 2 <;> simp [hk, IH]
#align formal_multilinear_series.right_inv_remove_zero FormalMultilinearSeries.rightInv_removeZero
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module analysis.analytic.inverse
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -449,7 +449,7 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
(fun k : ℕ => (Fintype.piFinset fun i : Fin k => Ico 1 n : Finset (Fin k → ℕ))) fun n e =>
∏ j : Fin n, r * (a ^ e j * p (e j))]
apply sum_congr rfl fun j hj => _
- simp only [← @MultilinearMap.mkPiAlgebra_apply ℝ (Fin j) _ _ ℝ]
+ simp only [← @MultilinearMap.mkPiAlgebra_apply ℝ (Fin j) _ ℝ]
simp only [←
MultilinearMap.map_sum_finset (MultilinearMap.mkPiAlgebra ℝ (Fin j) ℝ) fun k (m : ℕ) =>
r * (a ^ m * p m)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -139,8 +139,7 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
by
simp only [left_inv, ContinuousMultilinearMap.neg_apply, neg_inj,
ContinuousMultilinearMap.sum_apply]
- convert
- (sum_to_finset_eq_subtype (fun c : Composition (n + 2) => c.length < n + 2)
+ convert(sum_to_finset_eq_subtype (fun c : Composition (n + 2) => c.length < n + 2)
fun c : Composition (n + 2) =>
(ContinuousMultilinearMap.compAlongComposition (p.comp_continuous_linear_map ↑i.symm)
c (p.left_inv i c.length))
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -605,7 +605,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
apply le_radius_of_bound _ ((I + 1) * a) fun n => _
by_cases hn : n = 0
· have : ‖p.right_inv i n‖ = ‖p.right_inv i 0‖ := by congr <;> try rw [hn]
- simp only [this, norm_zero, zero_mul, right_inv_coeff_zero]
+ simp only [this, norm_zero, MulZeroClass.zero_mul, right_inv_coeff_zero]
apply_rules [mul_nonneg, add_nonneg, norm_nonneg, zero_le_one, apos.le]
· have one_le_n : 1 ≤ n := bot_lt_iff_ne_bot.2 hn
calc
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -192,7 +192,7 @@ theorem rightInv_coeff_one (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
p.right_inv i 1 = (continuousMultilinearCurryFin1 𝕜 F E).symm i.symm := by rw [right_inv]
#align formal_multilinear_series.right_inv_coeff_one FormalMultilinearSeries.rightInv_coeff_one
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr i.symm.to_continuous_linear_map.comp_continuous_multilinear_map (p.comp (λ k, _) _)]] -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr i.symm.to_continuous_linear_map.comp_continuous_multilinear_map (p.comp (λ k, _) _)]] -/
/-- The right inverse does not depend on the zeroth coefficient of a formal multilinear
series. -/
theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F) :
@@ -206,7 +206,7 @@ theorem rightInv_removeZero (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
simp only [right_inv, neg_inj]
rw [remove_zero_comp_of_pos _ _ (add_pos_of_nonneg_of_pos n.zero_le zero_lt_two)]
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr i.symm.to_continuous_linear_map.comp_continuous_multilinear_map (p.comp (λ k, _) _)]]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr i.symm.to_continuous_linear_map.comp_continuous_multilinear_map (p.comp (λ k, _) _)]]"
by_cases hk : k < n + 2 <;> simp [hk, IH]
#align formal_multilinear_series.right_inv_remove_zero FormalMultilinearSeries.rightInv_removeZero
@@ -611,9 +611,9 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
calc
‖p.right_inv i n‖ * ↑a' ^ n = a ^ n * ‖p.right_inv i n‖ := mul_comm _ _
_ ≤ ∑ k in Ico 1 (n + 1), a ^ k * ‖p.right_inv i k‖ :=
- haveI : ∀ k ∈ Ico 1 (n + 1), 0 ≤ a ^ k * ‖p.right_inv i k‖ := fun k hk =>
+ (haveI : ∀ k ∈ Ico 1 (n + 1), 0 ≤ a ^ k * ‖p.right_inv i k‖ := fun k hk =>
mul_nonneg (pow_nonneg apos.le _) (norm_nonneg _)
- single_le_sum this (by simp [one_le_n])
+ single_le_sum this (by simp [one_le_n]))
_ ≤ (I + 1) * a := IRec (n + 1) (by decide)
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -599,7 +599,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
let a' : NNReal := ⟨a, apos.le⟩
- suffices H : (a' : Ennreal) ≤ (p.right_inv i).radius
+ suffices H : (a' : ENNReal) ≤ (p.right_inv i).radius
· apply lt_of_lt_of_le _ H
exact_mod_cast apos
apply le_radius_of_bound _ ((I + 1) * a) fun n => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These are changes from #11997, the latest adaptation PR for nightly-2024-04-07, which can be made directly on master.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -144,7 +144,7 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
congr
ext k
simp [h, Function.comp]
- simp [FormalMultilinearSeries.comp, show n + 2 ≠ 1 by norm_num, A, Finset.sum_union B,
+ simp [FormalMultilinearSeries.comp, show n + 2 ≠ 1 by omega, A, Finset.sum_union B,
applyComposition_ones, C, D, -Set.toFinset_setOf]
#align formal_multilinear_series.left_inv_comp FormalMultilinearSeries.leftInv_comp
@@ -258,7 +258,7 @@ theorem comp_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F
id_apply_one, ContinuousLinearEquiv.coe_apply, continuousMultilinearCurryFin1_symm_apply]
| n + 2 =>
have N : 0 < n + 2 := by norm_num
- simp [comp_rightInv_aux1 N, h, rightInv, lt_irrefl n, show n + 2 ≠ 1 by norm_num,
+ simp [comp_rightInv_aux1 N, h, rightInv, lt_irrefl n, show n + 2 ≠ 1 by omega,
← sub_eq_add_neg, sub_eq_zero, comp_rightInv_aux2, -Set.toFinset_setOf]
#align formal_multilinear_series.comp_right_inv FormalMultilinearSeries.comp_rightInv
@@ -99,7 +99,7 @@ theorem leftInv_comp (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F)
ext (n v)
match n with
| 0 =>
- simp only [leftInv_coeff_zero, ContinuousMultilinearMap.zero_apply, id_apply_ne_one, Ne.def,
+ simp only [leftInv_coeff_zero, ContinuousMultilinearMap.zero_apply, id_apply_ne_one, Ne,
not_false_iff, zero_ne_one, comp_coeff_zero']
| 1 =>
simp only [leftInv_coeff_one, comp_coeff_one, h, id_apply_one, ContinuousLinearEquiv.coe_apply,
@@ -251,7 +251,7 @@ theorem comp_rightInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[𝕜] F
ext (n v)
match n with
| 0 =>
- simp only [h0, ContinuousMultilinearMap.zero_apply, id_apply_ne_one, Ne.def, not_false_iff,
+ simp only [h0, ContinuousMultilinearMap.zero_apply, id_apply_ne_one, Ne, not_false_iff,
zero_ne_one, comp_coeff_zero']
| 1 =>
simp only [comp_coeff_one, h, rightInv_coeff_one, ContinuousLinearEquiv.apply_symm_apply,
The termination checker has been getting more capable, and many of the termination_by
or decreasing_by
clauses in Mathlib are no longer needed.
(Note that termination_by?
will show the automatically derived termination expression, so no information is being lost by removing these.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -62,7 +62,6 @@ noncomputable def leftInv (p : FormalMultilinearSeries 𝕜 E F) (i : E ≃L[
-∑ c : { c : Composition (n + 2) // c.length < n + 2 },
(leftInv p i (c : Composition (n + 2)).length).compAlongComposition
(p.compContinuousLinearMap i.symm) c
- decreasing_by exact c.2
#align formal_multilinear_series.left_inv FormalMultilinearSeries.leftInv
@[simp]
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -570,7 +570,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
_ ≤ ∑ k in Ico 1 (n + 1), a ^ k * ‖p.rightInv i k‖ :=
(haveI : ∀ k ∈ Ico 1 (n + 1), 0 ≤ a ^ k * ‖p.rightInv i k‖ := fun k _ => by positivity
single_le_sum this (by simp [one_le_n]))
- _ ≤ (I + 1) * a := IRec (n + 1) (by norm_num)
+ _ ≤ (I + 1) * a := IRec (n + 1) (by set_option tactic.skipAssignedInstances false in norm_num)
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos
end FormalMultilinearSeries
@@ -530,7 +530,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
let S n := ∑ k in Ico 1 n, a ^ k * ‖p.rightInv i k‖
have IRec : ∀ n, 1 ≤ n → S n ≤ (I + 1) * a := by
apply Nat.le_induction
- · simp only
+ · simp only [S]
rw [Ico_eq_empty_of_le (le_refl 1), sum_empty]
exact mul_nonneg (add_nonneg (norm_nonneg _) zero_le_one) apos.le
· intro n one_le_n hn
Finset.sum
(#10538)
Also define a new aesop
rule-set and an auxiliary metaprogram proveFinsetNonempty
for dealing with Finset.Nonempty
conditions.
From LeanAPAP
Co-authored-by: Alex J. Best <alex.j.best@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Alex J Best <alex.j.best@gmail.com>
@@ -535,8 +535,6 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
exact mul_nonneg (add_nonneg (norm_nonneg _) zero_le_one) apos.le
· intro n one_le_n hn
have In : 2 ≤ n + 1 := by linarith only [one_le_n]
- have Snonneg : 0 ≤ S n :=
- sum_nonneg fun x _ => mul_nonneg (pow_nonneg apos.le _) (norm_nonneg _)
have rSn : r * S n ≤ 1 / 2 :=
calc
r * S n ≤ r * ((I + 1) * a) := by gcongr
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -557,8 +557,8 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
_ ≤ (I + 1) * a := by gcongr
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
let a' : NNReal := ⟨a, apos.le⟩
- suffices H : (a' : ENNReal) ≤ (p.rightInv i).radius
- · apply lt_of_lt_of_le _ H
+ suffices H : (a' : ENNReal) ≤ (p.rightInv i).radius by
+ apply lt_of_lt_of_le _ H
-- Prior to leanprover/lean4#2734, this was `exact_mod_cast apos`.
simpa only [ENNReal.coe_pos]
apply le_radius_of_bound _ ((I + 1) * a) fun n => ?_
Following on from previous gcongr
golfing PRs #4702 and #4784.
This is a replacement for #7901: this round of golfs, first introduced there, there exposed some performance issues in gcongr
, hopefully fixed by #8731, and I am opening a new PR so that the performance can be checked against current master rather than master at the time of #7901.
@@ -393,8 +393,7 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
∏ j, r * (a ^ c.blocksFun j * p (c.blocksFun j)) := by
simp_rw [mul_sum]
- apply sum_congr rfl fun k _ => ?_
- apply sum_congr rfl fun c _ => ?_
+ congr! with k _ c
rw [prod_mul_distrib, prod_mul_distrib, prod_pow_eq_pow_sum, Composition.sum_blocksFun,
prod_const, card_fin]
ring
@@ -428,7 +427,7 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
← sum_sigma' (Ico 2 (n + 1))
(fun k : ℕ => (Fintype.piFinset fun _ : Fin k => Ico 1 n : Finset (Fin k → ℕ)))
(fun n e => ∏ j : Fin n, r * (a ^ e j * p (e j)))]
- apply sum_congr rfl fun j _ => ?_
+ congr! with j
simp only [← @MultilinearMap.mkPiAlgebra_apply ℝ (Fin j) _ ℝ]
simp only [←
MultilinearMap.map_sum_finset (MultilinearMap.mkPiAlgebra ℝ (Fin j) ℝ) fun _ (m : ℕ) =>
@@ -462,8 +461,7 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
‖(i.symm : F →L[𝕜] E).compContinuousMultilinearMap
(∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
p.compAlongComposition (p.rightInv i) c)‖ := by
- congr 1
- apply sum_congr rfl fun j hj => ?_
+ congr! 2 with j hj
rw [rightInv_coeff _ _ _ (mem_Ico.1 hj).1, norm_neg]
_ ≤
a * ‖(i.symm : F →L[𝕜] E)‖ +
@@ -472,15 +470,15 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
(I *
∑ c in ({c | 1 < Composition.length c}.toFinset : Finset (Composition k)),
C * r ^ c.length * ∏ j, ‖p.rightInv i (c.blocksFun j)‖) := by
- apply_rules [add_le_add, le_refl, sum_le_sum fun j hj => ?_, mul_le_mul_of_nonneg_left,
- pow_nonneg, ha]
+ gcongr with j
apply (ContinuousLinearMap.norm_compContinuousMultilinearMap_le _ _).trans
- apply mul_le_mul_of_nonneg_left _ (norm_nonneg _)
+ gcongr
apply (norm_sum_le _ _).trans
- apply sum_le_sum fun c _ => ?_
+ gcongr
apply (compAlongComposition_norm _ _ _).trans
- apply mul_le_mul_of_nonneg_right (hp _)
- exact prod_nonneg fun j _ => norm_nonneg _
+ gcongr
+ · exact prod_nonneg fun j _ => norm_nonneg _
+ · apply hp
_ =
I * a +
I * C *
@@ -493,7 +491,7 @@ theorem radius_rightInv_pos_of_radius_pos_aux2 {n : ℕ} (hn : 2 ≤ n + 1)
ring
_ ≤ I * a + I * C *
∑ k in Ico 2 (n + 1), (r * ∑ j in Ico 1 n, a ^ j * ‖p.rightInv i j‖) ^ k := by
- apply_rules [add_le_add, le_refl, mul_le_mul_of_nonneg_left, norm_nonneg, hC, mul_nonneg]
+ gcongr _ + _ * _ * ?_
simp_rw [mul_pow]
apply
radius_right_inv_pos_of_radius_pos_aux1 n (fun k => ‖p.rightInv i k‖)
@@ -541,7 +539,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
sum_nonneg fun x _ => mul_nonneg (pow_nonneg apos.le _) (norm_nonneg _)
have rSn : r * S n ≤ 1 / 2 :=
calc
- r * S n ≤ r * ((I + 1) * a) := mul_le_mul_of_nonneg_left hn rpos.le
+ r * S n ≤ r * ((I + 1) * a) := by gcongr
_ ≤ 1 / 2 := by rwa [← mul_assoc]
calc
S (n + 1) ≤ I * a + I * C * ∑ k in Ico 2 (n + 1), (r * S n) ^ k :=
@@ -549,17 +547,14 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
_ = I * a + I * C * (((r * S n) ^ 2 - (r * S n) ^ (n + 1)) / (1 - r * S n)) := by
rw [geom_sum_Ico' _ In]; exact ne_of_lt (rSn.trans_lt (by norm_num))
_ ≤ I * a + I * C * ((r * S n) ^ 2 / (1 / 2)) := by
- apply_rules [add_le_add, le_refl, mul_le_mul_of_nonneg_left, mul_nonneg, norm_nonneg,
- Cpos.le]
- refine' div_le_div (sq_nonneg _) _ (by norm_num) (by linarith only [rSn])
- simp only [sub_le_self_iff]
- apply pow_nonneg (mul_nonneg rpos.le Snonneg)
+ gcongr
+ · simp only [sub_le_self_iff]
+ positivity
+ · linarith only [rSn]
_ = I * a + 2 * I * C * (r * S n) ^ 2 := by ring
- _ ≤ I * a + 2 * I * C * (r * ((I + 1) * a)) ^ 2 := by
- apply_rules [add_le_add, le_refl, mul_le_mul_of_nonneg_left, mul_nonneg, norm_nonneg,
- Cpos.le, zero_le_two, pow_le_pow_of_le_left, rpos.le]
+ _ ≤ I * a + 2 * I * C * (r * ((I + 1) * a)) ^ 2 := by gcongr
_ = (I + 2 * I * C * r ^ 2 * (I + 1) ^ 2 * a) * a := by ring
- _ ≤ (I + 1) * a := by apply_rules [mul_le_mul_of_nonneg_right, apos.le, add_le_add, le_refl]
+ _ ≤ (I + 1) * a := by gcongr
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
let a' : NNReal := ⟨a, apos.le⟩
suffices H : (a' : ENNReal) ≤ (p.rightInv i).radius
@@ -570,13 +565,12 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
by_cases hn : n = 0
· have : ‖p.rightInv i n‖ = ‖p.rightInv i 0‖ := by congr <;> try rw [hn]
simp only [this, norm_zero, zero_mul, rightInv_coeff_zero]
- apply_rules [mul_nonneg, add_nonneg, norm_nonneg, zero_le_one, apos.le]
+ positivity
· have one_le_n : 1 ≤ n := bot_lt_iff_ne_bot.2 hn
calc
‖p.rightInv i n‖ * (a' : ℝ) ^ n = a ^ n * ‖p.rightInv i n‖ := mul_comm _ _
_ ≤ ∑ k in Ico 1 (n + 1), a ^ k * ‖p.rightInv i k‖ :=
- (haveI : ∀ k ∈ Ico 1 (n + 1), 0 ≤ a ^ k * ‖p.rightInv i k‖ := fun k _ =>
- mul_nonneg (pow_nonneg apos.le _) (norm_nonneg _)
+ (haveI : ∀ k ∈ Ico 1 (n + 1), 0 ≤ a ^ k * ‖p.rightInv i k‖ := fun k _ => by positivity
single_le_sum this (by simp [one_le_n]))
_ ≤ (I + 1) * a := IRec (n + 1) (by norm_num)
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos FormalMultilinearSeries.radius_rightInv_pos_of_radius_pos
This incorporates changes from
nightly-testing
are unexciting: we need to fully qualify a few names)They can all be closed when this is merged.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -563,7 +563,9 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
-- conclude that all coefficients satisfy `aⁿ Qₙ ≤ (I + 1) a`.
let a' : NNReal := ⟨a, apos.le⟩
suffices H : (a' : ENNReal) ≤ (p.rightInv i).radius
- · apply lt_of_lt_of_le _ H; exact_mod_cast apos
+ · apply lt_of_lt_of_le _ H
+ -- Prior to leanprover/lean4#2734, this was `exact_mod_cast apos`.
+ simpa only [ENNReal.coe_pos]
apply le_radius_of_bound _ ((I + 1) * a) fun n => ?_
by_cases hn : n = 0
· have : ‖p.rightInv i n‖ = ‖p.rightInv i 0‖ := by congr <;> try rw [hn]
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -525,7 +525,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
apply (tendsto_order.1 this).2; simp [zero_lt_one]
have C : ∀ᶠ a in 𝓝[>] (0 : ℝ), (0 : ℝ) < a := by
filter_upwards [self_mem_nhdsWithin] with _ ha using ha
- rcases(C.and ((A.and B).filter_mono inf_le_left)).exists with ⟨a, ha⟩
+ rcases (C.and ((A.and B).filter_mono inf_le_left)).exists with ⟨a, ha⟩
exact ⟨a, ha.1, ha.2.1.le, ha.2.2.le⟩
-- check by induction that the partial sums are suitably bounded, using the choice of `a` and the
-- inductive control from Lemma `radius_rightInv_pos_of_radius_pos_aux2`.
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -567,7 +567,7 @@ theorem radius_rightInv_pos_of_radius_pos (p : FormalMultilinearSeries 𝕜 E F)
apply le_radius_of_bound _ ((I + 1) * a) fun n => ?_
by_cases hn : n = 0
· have : ‖p.rightInv i n‖ = ‖p.rightInv i 0‖ := by congr <;> try rw [hn]
- simp only [this, norm_zero, MulZeroClass.zero_mul, rightInv_coeff_zero]
+ simp only [this, norm_zero, zero_mul, rightInv_coeff_zero]
apply_rules [mul_nonneg, add_nonneg, norm_nonneg, zero_le_one, apos.le]
· have one_le_n : 1 ≤ n := bot_lt_iff_ne_bot.2 hn
calc
@@ -434,7 +434,6 @@ theorem radius_right_inv_pos_of_radius_pos_aux1 (n : ℕ) (p : ℕ → ℝ) (hp
MultilinearMap.map_sum_finset (MultilinearMap.mkPiAlgebra ℝ (Fin j) ℝ) fun _ (m : ℕ) =>
r * (a ^ m * p m)]
simp only [MultilinearMap.mkPiAlgebra_apply]
- dsimp
simp [prod_const, ← mul_sum, mul_pow]
#align formal_multilinear_series.radius_right_inv_pos_of_radius_pos_aux1 FormalMultilinearSeries.radius_right_inv_pos_of_radius_pos_aux1
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -35,8 +35,8 @@ open Finset Filter
namespace FormalMultilinearSeries
-variable {𝕜 : Type _} [NontriviallyNormedField 𝕜] {E : Type _} [NormedAddCommGroup E]
- [NormedSpace 𝕜 E] {F : Type _} [NormedAddCommGroup F] [NormedSpace 𝕜 F]
+variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] {E : Type*} [NormedAddCommGroup E]
+ [NormedSpace 𝕜 E] {F : Type*} [NormedAddCommGroup F] [NormedSpace 𝕜 F]
/-! ### The left inverse of a formal multilinear series -/
@@ -2,14 +2,11 @@
Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module analysis.analytic.inverse
-! leanprover-community/mathlib commit 284fdd2962e67d2932fa3a79ce19fcf92d38e228
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Analytic.Composition
+#align_import analysis.analytic.inverse from "leanprover-community/mathlib"@"284fdd2962e67d2932fa3a79ce19fcf92d38e228"
+
/-!
# Inverse of analytic functions
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file