Skip to content

Commit

Permalink
bump to nightly-2023-03-15-18
Browse files Browse the repository at this point in the history
  • Loading branch information
leanprover-community-bot committed Mar 15, 2023
1 parent fd1dc17 commit da6bb02
Show file tree
Hide file tree
Showing 18 changed files with 1,510 additions and 186 deletions.
8 changes: 7 additions & 1 deletion Mathbin/Algebra/Group/Basic.lean
Expand Up @@ -424,6 +424,12 @@ theorem inv_inj {a b : G} : a⁻¹ = b⁻¹ ↔ a = b :=
#align inv_inj inv_inj
#align neg_inj neg_inj

/- warning: inv_eq_iff_eq_inv -> inv_eq_iff_eq_inv is a dubious translation:
lean 3 declaration is
forall {G : Type.{u1}} [_inst_1 : InvolutiveInv.{u1} G] {a : G} {b : G}, Iff (Eq.{succ u1} G (Inv.inv.{u1} G (InvolutiveInv.toHasInv.{u1} G _inst_1) a) b) (Eq.{succ u1} G a (Inv.inv.{u1} G (InvolutiveInv.toHasInv.{u1} G _inst_1) b))
but is expected to have type
forall {G : Type.{u1}} [_inst_1 : InvolutiveInv.{u1} G] {a : G} {b : G}, Iff (Eq.{succ u1} G (Inv.inv.{u1} G (InvolutiveInv.toInv.{u1} G _inst_1) a) b) (Eq.{succ u1} G a (Inv.inv.{u1} G (InvolutiveInv.toInv.{u1} G _inst_1) b))
Case conversion may be inaccurate. Consider using '#align inv_eq_iff_eq_inv inv_eq_iff_eq_invβ‚“'. -/
@[to_additive]
theorem inv_eq_iff_eq_inv : a⁻¹ = b ↔ a = b⁻¹ :=
⟨fun h => h β–Έ (inv_inv a).symm, fun h => h.symm β–Έ inv_inv b⟩
Expand Down Expand Up @@ -1112,7 +1118,7 @@ theorem div_eq_inv_self : a / b = b⁻¹ ↔ a = 1 := by rw [div_eq_mul_inv, mul
lean 3 declaration is
forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (a : G), Function.Surjective.{succ u1, succ u1} G G (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a)
but is expected to have type
forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (a : G), Function.Surjective.{succ u1, succ u1} G G ((fun (x._@.Mathlib.Algebra.Group.Basic._hyg.3540 : G) (x._@.Mathlib.Algebra.Group.Basic._hyg.3542 : G) => HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) x._@.Mathlib.Algebra.Group.Basic._hyg.3540 x._@.Mathlib.Algebra.Group.Basic._hyg.3542) a)
forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] (a : G), Function.Surjective.{succ u1, succ u1} G G ((fun (x._@.Mathlib.Algebra.Group.Basic._hyg.3497 : G) (x._@.Mathlib.Algebra.Group.Basic._hyg.3499 : G) => HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) x._@.Mathlib.Algebra.Group.Basic._hyg.3497 x._@.Mathlib.Algebra.Group.Basic._hyg.3499) a)
Case conversion may be inaccurate. Consider using '#align mul_left_surjective mul_left_surjectiveβ‚“'. -/
@[to_additive]
theorem mul_left_surjective (a : G) : Function.Surjective ((Β· * Β·) a) := fun x =>
Expand Down
48 changes: 24 additions & 24 deletions Mathbin/Algebra/Order/Group/Abs.lean

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Mathbin/Algebra/Periodic.lean
Expand Up @@ -900,7 +900,7 @@ theorem Antiperiodic.sub_const [AddCommGroup Ξ±] [Neg Ξ²] (h : Antiperiodic f c)
lean 3 declaration is
forall {Ξ± : Type.{u1}} {Ξ² : Type.{u2}} {Ξ³ : Type.{u3}} {f : Ξ± -> Ξ²} {c : Ξ±} [_inst_1 : Add.{u1} Ξ±] [_inst_2 : Monoid.{u3} Ξ³] [_inst_3 : AddGroup.{u2} Ξ²] [_inst_4 : DistribMulAction.{u3, u2} Ξ³ Ξ² _inst_2 (SubNegMonoid.toAddMonoid.{u2} Ξ² (AddGroup.toSubNegMonoid.{u2} Ξ² _inst_3))], (Function.Antiperiodic.{u1, u2} Ξ± Ξ² _inst_1 (SubNegMonoid.toHasNeg.{u2} Ξ² (AddGroup.toSubNegMonoid.{u2} Ξ² _inst_3)) f c) -> (forall (a : Ξ³), Function.Antiperiodic.{u1, u2} Ξ± Ξ² _inst_1 (SubNegMonoid.toHasNeg.{u2} Ξ² (AddGroup.toSubNegMonoid.{u2} Ξ² _inst_3)) (SMul.smul.{u3, max u1 u2} Ξ³ (Ξ± -> Ξ²) (Function.hasSMul.{u1, u3, u2} Ξ± Ξ³ Ξ² (SMulZeroClass.toHasSmul.{u3, u2} Ξ³ Ξ² (AddZeroClass.toHasZero.{u2} Ξ² (AddMonoid.toAddZeroClass.{u2} Ξ² (SubNegMonoid.toAddMonoid.{u2} Ξ² (AddGroup.toSubNegMonoid.{u2} Ξ² _inst_3)))) (DistribSMul.toSmulZeroClass.{u3, u2} Ξ³ Ξ² (AddMonoid.toAddZeroClass.{u2} Ξ² (SubNegMonoid.toAddMonoid.{u2} Ξ² (AddGroup.toSubNegMonoid.{u2} Ξ² _inst_3))) (DistribMulAction.toDistribSMul.{u3, u2} Ξ³ Ξ² _inst_2 (SubNegMonoid.toAddMonoid.{u2} Ξ² (AddGroup.toSubNegMonoid.{u2} Ξ² _inst_3)) _inst_4)))) a f) c)
but is expected to have type
forall {Ξ± : Type.{u3}} {Ξ² : Type.{u1}} {Ξ³ : Type.{u2}} {f : Ξ± -> Ξ²} {c : Ξ±} [_inst_1 : Add.{u3} Ξ±] [_inst_2 : Monoid.{u2} Ξ³] [_inst_3 : AddGroup.{u1} Ξ²] [_inst_4 : DistribMulAction.{u2, u1} Ξ³ Ξ² _inst_2 (SubNegMonoid.toAddMonoid.{u1} Ξ² (AddGroup.toSubNegMonoid.{u1} Ξ² _inst_3))], (Function.Antiperiodic.{u3, u1} Ξ± Ξ² _inst_1 (NegZeroClass.toNeg.{u1} Ξ² (SubNegZeroMonoid.toNegZeroClass.{u1} Ξ² (SubtractionMonoid.toSubNegZeroMonoid.{u1} Ξ² (AddGroup.toSubtractionMonoid.{u1} Ξ² _inst_3)))) f c) -> (forall (a : Ξ³), Function.Antiperiodic.{u3, u1} Ξ± Ξ² _inst_1 (NegZeroClass.toNeg.{u1} Ξ² (SubNegZeroMonoid.toNegZeroClass.{u1} Ξ² (SubtractionMonoid.toSubNegZeroMonoid.{u1} Ξ² (AddGroup.toSubtractionMonoid.{u1} Ξ² _inst_3)))) (HSMul.hSMul.{u2, max u3 u1, max u3 u1} Ξ³ (Ξ± -> Ξ²) (Ξ± -> Ξ²) (instHSMul.{u2, max u3 u1} Ξ³ (Ξ± -> Ξ²) (Pi.instSMul.{u3, u1, u2} Ξ± Ξ³ (fun (a._@.Mathlib.Algebra.Periodic._hyg.4890 : Ξ±) => Ξ²) (fun (i : Ξ±) => SMulZeroClass.toSMul.{u2, u1} Ξ³ Ξ² (NegZeroClass.toZero.{u1} Ξ² (SubNegZeroMonoid.toNegZeroClass.{u1} Ξ² (SubtractionMonoid.toSubNegZeroMonoid.{u1} Ξ² (AddGroup.toSubtractionMonoid.{u1} Ξ² _inst_3)))) (DistribSMul.toSMulZeroClass.{u2, u1} Ξ³ Ξ² (AddMonoid.toAddZeroClass.{u1} Ξ² (SubNegMonoid.toAddMonoid.{u1} Ξ² (AddGroup.toSubNegMonoid.{u1} Ξ² _inst_3))) (DistribMulAction.toDistribSMul.{u2, u1} Ξ³ Ξ² _inst_2 (SubNegMonoid.toAddMonoid.{u1} Ξ² (AddGroup.toSubNegMonoid.{u1} Ξ² _inst_3)) _inst_4))))) a f) c)
forall {Ξ± : Type.{u3}} {Ξ² : Type.{u1}} {Ξ³ : Type.{u2}} {f : Ξ± -> Ξ²} {c : Ξ±} [_inst_1 : Add.{u3} Ξ±] [_inst_2 : Monoid.{u2} Ξ³] [_inst_3 : AddGroup.{u1} Ξ²] [_inst_4 : DistribMulAction.{u2, u1} Ξ³ Ξ² _inst_2 (SubNegMonoid.toAddMonoid.{u1} Ξ² (AddGroup.toSubNegMonoid.{u1} Ξ² _inst_3))], (Function.Antiperiodic.{u3, u1} Ξ± Ξ² _inst_1 (NegZeroClass.toNeg.{u1} Ξ² (SubNegZeroMonoid.toNegZeroClass.{u1} Ξ² (SubtractionMonoid.toSubNegZeroMonoid.{u1} Ξ² (AddGroup.toSubtractionMonoid.{u1} Ξ² _inst_3)))) f c) -> (forall (a : Ξ³), Function.Antiperiodic.{u3, u1} Ξ± Ξ² _inst_1 (NegZeroClass.toNeg.{u1} Ξ² (SubNegZeroMonoid.toNegZeroClass.{u1} Ξ² (SubtractionMonoid.toSubNegZeroMonoid.{u1} Ξ² (AddGroup.toSubtractionMonoid.{u1} Ξ² _inst_3)))) (HSMul.hSMul.{u2, max u3 u1, max u3 u1} Ξ³ (Ξ± -> Ξ²) (Ξ± -> Ξ²) (instHSMul.{u2, max u3 u1} Ξ³ (Ξ± -> Ξ²) (Pi.instSMul.{u3, u1, u2} Ξ± Ξ³ (fun (a._@.Mathlib.Algebra.Periodic._hyg.4884 : Ξ±) => Ξ²) (fun (i : Ξ±) => SMulZeroClass.toSMul.{u2, u1} Ξ³ Ξ² (NegZeroClass.toZero.{u1} Ξ² (SubNegZeroMonoid.toNegZeroClass.{u1} Ξ² (SubtractionMonoid.toSubNegZeroMonoid.{u1} Ξ² (AddGroup.toSubtractionMonoid.{u1} Ξ² _inst_3)))) (DistribSMul.toSMulZeroClass.{u2, u1} Ξ³ Ξ² (AddMonoid.toAddZeroClass.{u1} Ξ² (SubNegMonoid.toAddMonoid.{u1} Ξ² (AddGroup.toSubNegMonoid.{u1} Ξ² _inst_3))) (DistribMulAction.toDistribSMul.{u2, u1} Ξ³ Ξ² _inst_2 (SubNegMonoid.toAddMonoid.{u1} Ξ² (AddGroup.toSubNegMonoid.{u1} Ξ² _inst_3)) _inst_4))))) a f) c)
Case conversion may be inaccurate. Consider using '#align function.antiperiodic.smul Function.Antiperiodic.smulβ‚“'. -/
protected theorem Antiperiodic.smul [Add Ξ±] [Monoid Ξ³] [AddGroup Ξ²] [DistribMulAction Ξ³ Ξ²]
(h : Antiperiodic f c) (a : Ξ³) : Antiperiodic (a β€’ f) c := by simp_all
Expand Down
2 changes: 1 addition & 1 deletion Mathbin/Analysis/Complex/RootsOfUnity.lean
Expand Up @@ -140,7 +140,7 @@ theorem IsPrimitiveRoot.arg {n : β„•} {ΞΆ : β„‚} (h : IsPrimitiveRoot ΞΆ n) (hn
by
rw [Complex.isPrimitiveRoot_iff _ _ hn] at h
obtain ⟨i, h, hin, rfl⟩ := h
rw [mul_comm, ← mul_assoc, Complex.exp_mul_i]
rw [mul_comm, ← mul_assoc, Complex.exp_mul_I]
refine' ⟨if i * 2 ≀ n then i else i - n, _, _, _⟩
on_goal 2 =>
replace hin := nat.is_coprime_iff_coprime.mpr hin
Expand Down
2 changes: 1 addition & 1 deletion Mathbin/Analysis/SpecialFunctions/Complex/Arg.lean
Expand Up @@ -86,7 +86,7 @@ theorem abs_eq_one_iff (z : β„‚) : abs z = 1 ↔ βˆƒ ΞΈ : ℝ, exp (ΞΈ * I) = z
_ = z := abs_mul_exp_arg_mul_I z

· rintro ⟨θ, rfl⟩
exact Complex.abs_exp_of_real_mul_i ΞΈ
exact Complex.abs_exp_ofReal_mul_I ΞΈ
#align complex.abs_eq_one_iff Complex.abs_eq_one_iff

@[simp]
Expand Down
2 changes: 1 addition & 1 deletion Mathbin/Analysis/SpecialFunctions/Complex/Circle.lean
Expand Up @@ -126,7 +126,7 @@ theorem Real.Angle.expMapCircle_coe (x : ℝ) : Real.Angle.expMapCircle x = expM
theorem Real.Angle.coe_expMapCircle (ΞΈ : Real.Angle) : (ΞΈ.expMapCircle : β„‚) = ΞΈ.cos + ΞΈ.sin * I :=
by
induction ΞΈ using Real.Angle.induction_on
simp [Complex.exp_mul_i]
simp [Complex.exp_mul_I]
#align real.angle.coe_exp_map_circle Real.Angle.coe_expMapCircle

@[simp]
Expand Down
2 changes: 1 addition & 1 deletion Mathbin/Analysis/SpecialFunctions/Gamma.lean
Expand Up @@ -1792,7 +1792,7 @@ theorem gammaSeq_tendsto_gamma (s : ℝ) : Tendsto (gammaSeq s) atTop (𝓝 <| g
/-- Euler's reflection formula for the real Gamma function. -/
theorem gamma_mul_gamma_one_sub (s : ℝ) : gamma s * gamma (1 - s) = Ο€ / sin (Ο€ * s) :=
by
simp_rw [← Complex.ofReal_inj, Complex.ofReal_div, Complex.of_real_sin, Complex.ofReal_mul, ←
simp_rw [← Complex.ofReal_inj, Complex.ofReal_div, Complex.ofReal_sin, Complex.ofReal_mul, ←
Complex.gamma_of_real, Complex.ofReal_sub, Complex.ofReal_one]
exact Complex.gamma_mul_gamma_one_sub s
#align real.Gamma_mul_Gamma_one_sub Real.gamma_mul_gamma_one_sub
Expand Down
8 changes: 4 additions & 4 deletions Mathbin/Analysis/SpecialFunctions/PolarCoord.lean
Expand Up @@ -67,8 +67,8 @@ def polarCoord : LocalHomeomorph (ℝ Γ— ℝ) (ℝ Γ— ℝ)
congr 1
ring
· convert Complex.arg_mul_cos_add_sin_mul_i hr ⟨hθ.1, hθ.2.le⟩
simp only [Complex.equivRealProd_symm_apply, Complex.ofReal_mul, Complex.of_real_cos,
Complex.of_real_sin]
simp only [Complex.equivRealProd_symm_apply, Complex.ofReal_mul, Complex.ofReal_cos,
Complex.ofReal_sin]
ring
left_inv' := by
rintro ⟨x, y⟩ hxy
Expand All @@ -77,9 +77,9 @@ def polarCoord : LocalHomeomorph (ℝ Γ— ℝ) (ℝ Γ— ℝ)
Complex.ofReal_re, Complex.mul_re, Complex.I_re, MulZeroClass.mul_zero, Complex.ofReal_im,
Complex.I_im, sub_self, add_zero, Complex.add_im, Complex.mul_im, mul_one, zero_add]
have Z := Complex.abs_mul_cos_add_sin_mul_i (x + y * Complex.I)
simp only [← Complex.of_real_cos, ← Complex.of_real_sin, mul_add, ← Complex.ofReal_mul, ←
simp only [← Complex.ofReal_cos, ← Complex.ofReal_sin, mul_add, ← Complex.ofReal_mul, ←
mul_assoc] at Z
simpa [A, -Complex.of_real_cos, -Complex.of_real_sin] using Complex.ext_iff.1 Z
simpa [A, -Complex.ofReal_cos, -Complex.ofReal_sin] using Complex.ext_iff.1 Z
open_target := isOpen_Ioi.Prod isOpen_Ioo
open_source :=
(isOpen_lt continuous_const continuous_fst).union
Expand Down
6 changes: 3 additions & 3 deletions Mathbin/Analysis/SpecialFunctions/Pow.lean
Expand Up @@ -362,7 +362,7 @@ theorem rpow_def_of_nonneg {x : ℝ} (hx : 0 ≀ x) (y : ℝ) :
x ^ y = if x = 0 then if y = 0 then 1 else 0 else exp (log x * y) := by
simp only [rpow_def, Complex.cpow_def] <;> split_ifs <;>
simp_all [(Complex.of_real_log hx).symm, -Complex.ofReal_mul, -IsROrC.of_real_mul,
(Complex.ofReal_mul _ _).symm, Complex.exp_of_real_re]
(Complex.ofReal_mul _ _).symm, Complex.exp_ofReal_re]
#align real.rpow_def_of_nonneg Real.rpow_def_of_nonneg

theorem rpow_def_of_pos {x : ℝ} (hx : 0 < x) (y : ℝ) : x ^ y = exp (log x * y) := by
Expand Down Expand Up @@ -392,8 +392,8 @@ theorem rpow_def_of_neg {x : ℝ} (hx : x < 0) (y : ℝ) : x ^ y = exp (log x *
simp only [Complex.log, abs_of_neg hx, Complex.arg_of_real_of_neg hx, Complex.abs_ofReal,
Complex.ofReal_mul]
ring
Β· rw [this, Complex.exp_add_mul_i, ← Complex.of_real_exp, ← Complex.of_real_cos, ←
Complex.of_real_sin, mul_add, ← Complex.ofReal_mul, ← mul_assoc, ← Complex.ofReal_mul,
Β· rw [this, Complex.exp_add_mul_I, ← Complex.ofReal_exp, ← Complex.ofReal_cos, ←
Complex.ofReal_sin, mul_add, ← Complex.ofReal_mul, ← mul_assoc, ← Complex.ofReal_mul,
Complex.add_re, Complex.ofReal_re, Complex.mul_re, Complex.I_re, Complex.ofReal_im,
Real.log_neg_eq_log]
ring
Expand Down
6 changes: 3 additions & 3 deletions Mathbin/Analysis/SpecialFunctions/Trigonometric/Arctan.lean
Expand Up @@ -32,7 +32,7 @@ theorem tan_add {x y : ℝ}
(βˆƒ k : β„€, x = (2 * k + 1) * Ο€ / 2) ∧ βˆƒ l : β„€, y = (2 * l + 1) * Ο€ / 2) :
tan (x + y) = (tan x + tan y) / (1 - tan x * tan y) := by
simpa only [← Complex.ofReal_inj, Complex.ofReal_sub, Complex.ofReal_add, Complex.ofReal_div,
Complex.ofReal_mul, Complex.of_real_tan] using
Complex.ofReal_mul, Complex.ofReal_tan] using
@Complex.tan_add (x : β„‚) (y : β„‚) (by convert h <;> norm_cast)
#align real.tan_add Real.tan_add

Expand All @@ -44,12 +44,12 @@ theorem tan_add' {x y : ℝ}

theorem tan_two_mul {x : ℝ} : tan (2 * x) = 2 * tan x / (1 - tan x ^ 2) := by
simpa only [← Complex.ofReal_inj, Complex.ofReal_sub, Complex.ofReal_div, Complex.ofReal_pow,
Complex.ofReal_mul, Complex.of_real_tan, Complex.ofReal_bit0, Complex.ofReal_one] using
Complex.ofReal_mul, Complex.ofReal_tan, Complex.ofReal_bit0, Complex.ofReal_one] using
Complex.tan_two_mul
#align real.tan_two_mul Real.tan_two_mul

theorem tan_ne_zero_iff {ΞΈ : ℝ} : tan ΞΈ β‰  0 ↔ βˆ€ k : β„€, ΞΈ β‰  k * Ο€ / 2 := by
rw [← Complex.ofReal_ne_zero, Complex.of_real_tan, Complex.tan_ne_zero_iff] <;> norm_cast
rw [← Complex.ofReal_ne_zero, Complex.ofReal_tan, Complex.tan_ne_zero_iff] <;> norm_cast
#align real.tan_ne_zero_iff Real.tan_ne_zero_iff

theorem tan_eq_zero_iff {ΞΈ : ℝ} : tan ΞΈ = 0 ↔ βˆƒ k : β„€, ΞΈ = k * Ο€ / 2 := by
Expand Down
Expand Up @@ -38,7 +38,7 @@ theorem tendsto_abs_tan_of_cos_eq_zero {x : ℝ} (hx : cos x = 0) :
Tendsto (fun x => abs (tan x)) (𝓝[β‰ ] x) atTop :=
by
have hx : Complex.cos x = 0 := by exact_mod_cast hx
simp only [← Complex.abs_ofReal, Complex.of_real_tan]
simp only [← Complex.abs_ofReal, Complex.ofReal_tan]
refine' (Complex.tendsto_abs_tan_of_cos_eq_zero hx).comp _
refine' tendsto.inf complex.continuous_of_real.continuous_at _
exact tendsto_principal_principal.2 fun y => mt Complex.ofReal_inj.1
Expand Down
Expand Up @@ -114,8 +114,8 @@ theorem integral_sin_mul_sin_mul_cos_pow_eq (hn : 2 ≀ n) (hz : z β‰  0) :
have c := HasDerivAt.comp (x : β„‚) (hasDerivAt_pow (n - 1) _) (Complex.hasDerivAt_cos x)
convert ((Complex.hasDerivAt_sin x).mul c).comp_of_real using 1
Β· ext1 y
simp only [Complex.of_real_sin, Complex.of_real_cos]
Β· simp only [Complex.of_real_cos, Complex.of_real_sin]
simp only [Complex.ofReal_sin, Complex.ofReal_cos]
Β· simp only [Complex.ofReal_cos, Complex.ofReal_sin]
rw [mul_neg, mul_neg, ← sub_eq_add_neg, Function.comp_apply]
congr 1
Β· rw [← pow_succ, Nat.sub_add_cancel (by linarith : 1 ≀ n)]
Expand Down Expand Up @@ -148,7 +148,7 @@ theorem integral_sin_mul_sin_mul_cos_pow_eq (hn : 2 ≀ n) (hz : z β‰  0) :
refine' integral_congr fun x hx => _
dsimp only
-- get rid of real trig functions and divions by 2 * z:
rw [Complex.of_real_cos, Complex.of_real_sin, Complex.sin_sq, ← mul_div_right_comm, ←
rw [Complex.ofReal_cos, Complex.ofReal_sin, Complex.sin_sq, ← mul_div_right_comm, ←
mul_div_right_comm, ← sub_div, mul_div, ← neg_div]
congr 1
have : Complex.cos ↑x ^ n = Complex.cos ↑x ^ (n - 2) * Complex.cos ↑x ^ 2 := by
Expand Down Expand Up @@ -383,7 +383,7 @@ theorem Real.tendsto_euler_sin_prod (x : ℝ) :
rw [Complex.ofReal_prod]
refine' Finset.prod_congr (by rfl) fun n hn => _
norm_cast
Β· rw [← Complex.ofReal_mul, ← Complex.of_real_sin, Complex.ofReal_re]
Β· rw [← Complex.ofReal_mul, ← Complex.ofReal_sin, Complex.ofReal_re]
#align real.tendsto_euler_sin_prod Real.tendsto_euler_sin_prod

end EulerSine
Expand Down

0 comments on commit da6bb02

Please sign in to comment.