1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Polynomial.reflect_C_mul_X_pow
File: Mathlib/Algebra/Polynomial/Reverse.lean

tactic: ext
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
⊢ reflect N (C c * X ^ n) = C c * X ^ (revAt N) n
state_after: case a
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
⊢ (reflect N (C c * X ^ n)).coeff n✝ = (C c * X ^ (revAt N) n).coeff n✝

tactic: rw [reflect_C_mul, coeff_C_mul, coeff_C_mul, coeff_X_pow, coeff_reflect]
state_before: case a
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
⊢ (reflect N (C c * X ^ n)).coeff n✝ = (C c * X ^ (revAt N) n).coeff n✝
state_after: case a
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
⊢ c * (X ^ n).coeff ((revAt N) n✝) = c * if n✝ = (revAt N) n then 1 else 0

tactic: split_ifs with h
state_before: case a
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
⊢ c * (X ^ n).coeff ((revAt N) n✝) = c * if n✝ = (revAt N) n then 1 else 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : n✝ = (revAt N) n
⊢ c * (X ^ n).coeff ((revAt N) n✝) = c * 1

case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
⊢ c * (X ^ n).coeff ((revAt N) n✝) = c * 0

tactic: rw [h, revAt_invol, coeff_X_pow_self]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : n✝ = (revAt N) n
⊢ c * (X ^ n).coeff ((revAt N) n✝) = c * 1
state_after: no goals

tactic: rw [not_mem_support_iff.mp]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
⊢ c * (X ^ n).coeff ((revAt N) n✝) = c * 0
state_after: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
⊢ (revAt N) n✝ ∉ (X ^ n).support

tactic: intro a
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
⊢ (revAt N) n✝ ∉ (X ^ n).support
state_after: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
a : (revAt N) n✝ ∈ (X ^ n).support
⊢ False

tactic: rw [← one_mul (X ^ n), ← C_1] at a
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
a : (revAt N) n✝ ∈ (X ^ n).support
⊢ False
state_after: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
a : (revAt N) n✝ ∈ (C 1 * X ^ n).support
⊢ False

tactic: apply h
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
a : (revAt N) n✝ ∈ (C 1 * X ^ n).support
⊢ False
state_after: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
a : (revAt N) n✝ ∈ (C 1 * X ^ n).support
⊢ n✝ = (revAt N) n

tactic: rw [← mem_support_C_mul_X_pow a, revAt_invol]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
N n : ℕ
c : R
n✝ : ℕ
h : ¬n✝ = (revAt N) n
a : (revAt N) n✝ ∈ (C 1 * X ^ n).support
⊢ n✝ = (revAt N) n
state_after: no goals
Theorem: Real.Angle.pi_ne_zero
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [← toReal_injective.ne_iff, toReal_pi, toReal_zero]
state_before: ⊢ ↑π ≠ 0
state_after: ⊢ π ≠ 0

tactic: exact Real.pi_ne_zero
state_before: ⊢ π ≠ 0
state_after: no goals
Theorem: padicNorm.nat_lt_one_iff
File: Mathlib/NumberTheory/Padics/PadicNorm.lean

tactic: rw [← Int.natCast_dvd_natCast, ← int_lt_one_iff, Int.cast_natCast]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
m : ℕ
⊢ padicNorm p ↑m < 1 ↔ p ∣ m
state_after: no goals
Theorem: Nat.primeFactors_pow
File: Mathlib/Data/Nat/PrimeFin.lean

tactic: cases k
state_before: a b k m n✝ p n : ℕ
hk : k ≠ 0
⊢ (n ^ k).primeFactors = n.primeFactors
state_after: case zero
a b m n✝ p n : ℕ
hk : 0 ≠ 0
⊢ (n ^ 0).primeFactors = n.primeFactors

case succ
a b m n✝¹ p n n✝ : ℕ
hk : n✝ + 1 ≠ 0
⊢ (n ^ (n✝ + 1)).primeFactors = n.primeFactors

tactic: rw [primeFactors_pow_succ]
state_before: case succ
a b m n✝¹ p n n✝ : ℕ
hk : n✝ + 1 ≠ 0
⊢ (n ^ (n✝ + 1)).primeFactors = n.primeFactors
state_after: no goals

tactic: simp at hk
state_before: case zero
a b m n✝ p n : ℕ
hk : 0 ≠ 0
⊢ (n ^ 0).primeFactors = n.primeFactors
state_after: no goals
Theorem: Set.exists_range_iff
File: Mathlib/Data/Set/Image.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s t : Set α
p : α → Prop
⊢ (∃ a ∈ range f, p a) ↔ ∃ i, p (f i)
state_after: no goals
Theorem: FreeGroup.Red.Step.length
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

tactic: rw [List.length_append, List.length_append]
state_before: α : Type u
L L₁ L₂ L₃ L₄ L1 L2 : List (α × Bool)
x : α
b : Bool
⊢ (L1 ++ L2).length + 2 = (L1 ++ (x, b) :: (x, !b) :: L2).length
state_after: α : Type u
L L₁ L₂ L₃ L₄ L1 L2 : List (α × Bool)
x : α
b : Bool
⊢ L1.length + L2.length + 2 = L1.length + ((x, b) :: (x, !b) :: L2).length

tactic: rfl
state_before: α : Type u
L L₁ L₂ L₃ L₄ L1 L2 : List (α × Bool)
x : α
b : Bool
⊢ L1.length + L2.length + 2 = L1.length + ((x, b) :: (x, !b) :: L2).length
state_after: no goals
Theorem: Real.rpow_sub_int
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: simpa using rpow_add_int hx y (-n)
state_before: x✝ y✝ z : ℝ
n✝ : ℕ
x : ℝ
hx : x ≠ 0
y : ℝ
n : ℕ
⊢ x ^ (y - ↑n) = x ^ y / x ^ n
state_after: no goals
Theorem: LSeries.abscissaOfAbsConv_logMul
File: Mathlib/NumberTheory/LSeries/Deriv.lean

tactic: apply le_antisymm <;> refine abscissaOfAbsConv_le_of_forall_lt_LSeriesSummable' fun s hs ↦ ?_
state_before: f : ℕ → ℂ
⊢ abscissaOfAbsConv (logMul f) = abscissaOfAbsConv f
state_after: case a
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv f < ↑s
⊢ LSeriesSummable (logMul f) ↑s

case a
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
⊢ LSeriesSummable f ↑s

tactic: exact LSeriesSummable_logMul_of_lt_re <| by simp [hs]
state_before: case a
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv f < ↑s
⊢ LSeriesSummable (logMul f) ↑s
state_after: no goals

tactic: simp [hs]
state_before: f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv f < ↑s
⊢ abscissaOfAbsConv f < ↑(↑s).re
state_after: no goals

tactic: filter_upwards [Filter.eventually_ge_atTop <| max 1 (Nat.ceil (Real.exp 1))] with n hn
state_before: case a
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
⊢ ∀ᶠ (i : ℕ) in Filter.atTop, ‖term f (↑s) i‖ ≤ (fun x => ‖term (logMul f) (↑s) x‖) i
state_after: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ ‖term f (↑s) n‖ ≤ ‖term (logMul f) (↑s) n‖

tactic: simp only [term_of_ne_zero (show n ≠ 0 by omega), logMul, norm_mul, mul_div_assoc,
  ← natCast_log, norm_real]
state_before: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ ‖term f (↑s) n‖ ≤ ‖term (logMul f) (↑s) n‖
state_after: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ ‖f n / ↑n ^ ↑s‖ ≤ ‖Real.log ↑n‖ * ‖f n / ↑n ^ ↑s‖

tactic: refine le_mul_of_one_le_left (norm_nonneg _) (.trans ?_ <| Real.le_norm_self _)
state_before: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ ‖f n / ↑n ^ ↑s‖ ≤ ‖Real.log ↑n‖ * ‖f n / ↑n ^ ↑s‖
state_after: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ 1 ≤ Real.log ↑n

tactic: rw [← Real.log_exp 1]
state_before: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ 1 ≤ Real.log ↑n
state_after: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ Real.log (Real.exp 1) ≤ Real.log ↑n

tactic: exact Real.log_le_log (Real.exp_pos 1) <| Nat.ceil_le.mp <| (le_max_right _ _).trans hn
state_before: case h
f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ Real.log (Real.exp 1) ≤ Real.log ↑n
state_after: no goals

tactic: simp only [ofReal_re, hs]
state_before: f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
⊢ abscissaOfAbsConv (logMul f) < ↑(↑s).re
state_after: no goals

tactic: omega
state_before: f : ℕ → ℂ
s : ℝ
hs : abscissaOfAbsConv (logMul f) < ↑s
n : ℕ
hn : max 1 ⌈Real.exp 1⌉₊ ≤ n
⊢ n ≠ 0
state_after: no goals
Theorem: MonoidWithZeroHom.ext_rat_on_pnat
File: Mathlib/Data/Rat/Cast/Defs.lean

tactic: simpa
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝³ : FunLike F α β
M₀ : Type u_5
inst✝² : MonoidWithZero M₀
inst✝¹ : FunLike F ℚ M₀
inst✝ : MonoidWithZeroHomClass F ℚ M₀
f g : F
same_on_neg_one : f (-1) = g (-1)
same_on_pnat : ∀ (n : ℕ), 0 < n → f ↑n = g ↑n
⊢ ((↑f).comp ↑(Int.castRingHom ℚ)) (-1) = ((↑g).comp ↑(Int.castRingHom ℚ)) (-1)
state_after: no goals

tactic: simpa
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝³ : FunLike F α β
M₀ : Type u_5
inst✝² : MonoidWithZero M₀
inst✝¹ : FunLike F ℚ M₀
inst✝ : MonoidWithZeroHomClass F ℚ M₀
f g : F
same_on_neg_one : f (-1) = g (-1)
same_on_pnat : ∀ (n : ℕ), 0 < n → f ↑n = g ↑n
⊢ ∀ (n : ℕ), 0 < n → ((↑f).comp ↑(Int.castRingHom ℚ)) ↑n = ((↑g).comp ↑(Int.castRingHom ℚ)) ↑n
state_after: no goals
Theorem: Ordinal.dvd_antisymm
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: subst a
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
h₁ : a ∣ b
h₂ : b ∣ a
a0 : a = 0
⊢ a = b
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
b : Ordinal.{u_4}
h₁ : 0 ∣ b
h₂ : b ∣ 0
⊢ 0 = b

tactic: exact (eq_zero_of_zero_dvd h₁).symm
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
b : Ordinal.{u_4}
h₁ : 0 ∣ b
h₂ : b ∣ 0
⊢ 0 = b
state_after: no goals

tactic: subst b
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
h₁ : a ∣ b
h₂ : b ∣ a
a0 : ¬a = 0
b0 : b = 0
⊢ a = b
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a : Ordinal.{u_4}
a0 : ¬a = 0
h₁ : a ∣ 0
h₂ : 0 ∣ a
⊢ a = 0

tactic: exact eq_zero_of_zero_dvd h₂
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a : Ordinal.{u_4}
a0 : ¬a = 0
h₁ : a ∣ 0
h₂ : 0 ∣ a
⊢ a = 0
state_after: no goals
Theorem: norm_lineDeriv_le_of_lipschitzOn
File: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean

tactic: refine norm_lineDeriv_le_of_lip' 𝕜 C.coe_nonneg ?_
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f✝ f₀ f₁ : E → F
f' : F
s✝ t : Set E
x v : E
L : E →L[𝕜] F
f : E → F
x₀ : E
s : Set E
hs : s ∈ 𝓝 x₀
C : ℝ≥0
hlip : LipschitzOnWith C f s
⊢ ‖lineDeriv 𝕜 f x₀ v‖ ≤ ↑C * ‖v‖
state_after: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f✝ f₀ f₁ : E → F
f' : F
s✝ t : Set E
x v : E
L : E →L[𝕜] F
f : E → F
x₀ : E
s : Set E
hs : s ∈ 𝓝 x₀
C : ℝ≥0
hlip : LipschitzOnWith C f s
⊢ ∀ᶠ (x : E) in 𝓝 x₀, ‖f x - f x₀‖ ≤ ↑C * ‖x - x₀‖

tactic: filter_upwards [hs] with x hx using hlip.norm_sub_le hx (mem_of_mem_nhds hs)
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f✝ f₀ f₁ : E → F
f' : F
s✝ t : Set E
x v : E
L : E →L[𝕜] F
f : E → F
x₀ : E
s : Set E
hs : s ∈ 𝓝 x₀
C : ℝ≥0
hlip : LipschitzOnWith C f s
⊢ ∀ᶠ (x : E) in 𝓝 x₀, ‖f x - f x₀‖ ≤ ↑C * ‖x - x₀‖
state_after: no goals
Theorem: NumberField.hermiteTheorem.natDegree_le_rankOfDiscrBdd
File: Mathlib/NumberTheory/NumberField/Discriminant.lean

tactic: rw [Field.primitive_element_iff_minpoly_natDegree_eq,
  minpoly.isIntegrallyClosed_eq_field_fractions' ℚ a.isIntegral_coe,
  (minpoly.monic a.isIntegral_coe).natDegree_map] at h
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
A : Type u_2
inst✝¹ : Field A
inst✝ : CharZero A
N : ℕ
hK : |discr K| ≤ ↑N
a : 𝓞 K
h : ℚ⟮↑a⟯ = ⊤
⊢ (minpoly ℤ ↑a).natDegree ≤ rankOfDiscrBdd N
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
A : Type u_2
inst✝¹ : Field A
inst✝ : CharZero A
N : ℕ
hK : |discr K| ≤ ↑N
a : 𝓞 K
h : (minpoly ℤ ((algebraMap (𝓞 K) K) a)).natDegree = finrank ℚ K
⊢ (minpoly ℤ ↑a).natDegree ≤ rankOfDiscrBdd N

tactic: exact h.symm ▸ rank_le_rankOfDiscrBdd hK
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
A : Type u_2
inst✝¹ : Field A
inst✝ : CharZero A
N : ℕ
hK : |discr K| ≤ ↑N
a : 𝓞 K
h : (minpoly ℤ ((algebraMap (𝓞 K) K) a)).natDegree = finrank ℚ K
⊢ (minpoly ℤ ↑a).natDegree ≤ rankOfDiscrBdd N
state_after: no goals
Theorem: eq_cosets_of_normal
File: Mathlib/GroupTheory/Coset.lean

tactic: simp [mem_leftCoset_iff, mem_rightCoset_iff]
state_before: α : Type u_1
inst✝ : Group α
s : Subgroup α
N : s.Normal
g a : α
⊢ a ∈ g • ↑s ↔ a ∈ op g • ↑s
state_after: α : Type u_1
inst✝ : Group α
s : Subgroup α
N : s.Normal
g a : α
⊢ g⁻¹ * a ∈ s ↔ a * g⁻¹ ∈ s

tactic: rw [N.mem_comm_iff]
state_before: α : Type u_1
inst✝ : Group α
s : Subgroup α
N : s.Normal
g a : α
⊢ g⁻¹ * a ∈ s ↔ a * g⁻¹ ∈ s
state_after: no goals
Theorem: Subgroup.MemRightTransversals.toFun_mul_inv_mem
File: Mathlib/GroupTheory/Complement.lean

tactic: rw [mul_inv_rev, inv_inv]
state_before: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hS : S ∈ rightTransversals ↑H
g : G
⊢ (g * (↑(toFun hS g))⁻¹)⁻¹ = ↑(toFun hS g) * g⁻¹
state_after: no goals
Theorem: LSeries.abscissaOfAbsConv_le_one_of_isBigO_one
File: Mathlib/NumberTheory/LSeries/Convergence.lean

tactic: convert abscissaOfAbsConv_le_of_isBigO_rpow (x := 0) ?_
state_before: f : ℕ → ℂ
h : f =O[atTop] 1
⊢ abscissaOfAbsConv f ≤ 1
state_after: case h.e'_4
f : ℕ → ℂ
h : f =O[atTop] 1
⊢ 1 = ↑0 + 1

case convert_2
f : ℕ → ℂ
h : f =O[atTop] 1
⊢ f =O[atTop] fun n => ↑n ^ 0

tactic: simp only [EReal.coe_zero, zero_add]
state_before: case h.e'_4
f : ℕ → ℂ
h : f =O[atTop] 1
⊢ 1 = ↑0 + 1
state_after: no goals

tactic: simpa only [Real.rpow_zero] using h
state_before: case convert_2
f : ℕ → ℂ
h : f =O[atTop] 1
⊢ f =O[atTop] fun n => ↑n ^ 0
state_after: no goals
Theorem: isLittleO_exp_neg_mul_sq_cocompact
File: Mathlib/Analysis/SpecialFunctions/Gaussian/PoissonSummation.lean

tactic: convert cexp_neg_quadratic_isLittleO_abs_rpow_cocompact (?_ : (-a).re < 0) 0 s using 1
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : 0 < a.re
s : ℝ
⊢ (fun x => cexp (-a * ↑x ^ 2)) =o[cocompact ℝ] fun x => |x| ^ s
state_after: case h.e'_7
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : 0 < a.re
s : ℝ
⊢ (fun x => cexp (-a * ↑x ^ 2)) = fun x => cexp (-a * ↑x ^ 2 + 0 * ↑x)

E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : 0 < a.re
s : ℝ
⊢ (-a).re < 0

tactic: simp_rw [zero_mul, add_zero]
state_before: case h.e'_7
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : 0 < a.re
s : ℝ
⊢ (fun x => cexp (-a * ↑x ^ 2)) = fun x => cexp (-a * ↑x ^ 2 + 0 * ↑x)
state_after: no goals

tactic: rwa [neg_re, neg_lt_zero]
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℂ
ha : 0 < a.re
s : ℝ
⊢ (-a).re < 0
state_after: no goals
Theorem: ZFSet.IsTransitive.powerset
File: Mathlib/SetTheory/ZFC/Ordinal.lean

tactic: rw [mem_powerset] at hy ⊢
state_before: x y✝ z✝ : ZFSet
h : x.IsTransitive
y : ZFSet
hy : y ∈ x.powerset
z : ZFSet
hz : z ∈ y
⊢ z ∈ x.powerset
state_after: x y✝ z✝ : ZFSet
h : x.IsTransitive
y : ZFSet
hy : y ⊆ x
z : ZFSet
hz : z ∈ y
⊢ z ⊆ x

tactic: exact h.subset_of_mem (hy hz)
state_before: x y✝ z✝ : ZFSet
h : x.IsTransitive
y : ZFSet
hy : y ⊆ x
z : ZFSet
hz : z ∈ y
⊢ z ⊆ x
state_after: no goals
Theorem: Submodule.le_div_iff_mul_le
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: rw [le_div_iff, mul_le]
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m n : A
I J K : Submodule R A
⊢ I ≤ J / K ↔ I * K ≤ J
state_after: no goals
Theorem: Complex.exp_sub
File: Mathlib/Data/Complex/Exponential.lean

tactic: simp [sub_eq_add_neg, exp_add, exp_neg, div_eq_mul_inv]
state_before: x y : ℂ
⊢ cexp (x - y) = cexp x / cexp y
state_after: no goals
Theorem: NormedAddGroupHom.opNorm_le_of_lipschitz
File: Mathlib/Analysis/Normed/Group/Hom.lean

tactic: simpa only [dist_zero_right, map_zero] using hf.dist_le_mul x 0
state_before: V : Type u_1
V₁ : Type u_2
V₂ : Type u_3
V₃ : Type u_4
inst✝³ : SeminormedAddCommGroup V
inst✝² : SeminormedAddCommGroup V₁
inst✝¹ : SeminormedAddCommGroup V₂
inst✝ : SeminormedAddCommGroup V₃
f✝ g f : NormedAddGroupHom V₁ V₂
K : ℝ≥0
hf : LipschitzWith K ⇑f
x : V₁
⊢ ‖f x‖ ≤ ↑K * ‖x‖
state_after: no goals
Theorem: AddLECancellable.tsub_eq_of_eq_add
File: Mathlib/Algebra/Order/Sub/Defs.lean

tactic: rw [h]
state_before: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : a = c + b
⊢ c ≤ a - b
state_after: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : a = c + b
⊢ c ≤ c + b - b

tactic: exact hb.le_add_tsub
state_before: α : Type u_1
β : Type u_2
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : a = c + b
⊢ c ≤ c + b - b
state_after: no goals
Theorem: Complex.sin_eq_zero_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Complex.lean

tactic: rw [← Complex.cos_sub_pi_div_two, cos_eq_zero_iff]
state_before: θ : ℂ
⊢ sin θ = 0 ↔ ∃ k, θ = ↑k * ↑π
state_after: θ : ℂ
⊢ (∃ k, θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2) ↔ ∃ k, θ = ↑k * ↑π

tactic: constructor
state_before: θ : ℂ
⊢ (∃ k, θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2) ↔ ∃ k, θ = ↑k * ↑π
state_after: case mp
θ : ℂ
⊢ (∃ k, θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2) → ∃ k, θ = ↑k * ↑π

case mpr
θ : ℂ
⊢ (∃ k, θ = ↑k * ↑π) → ∃ k, θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2

tactic: rintro ⟨k, hk⟩
state_before: case mp
θ : ℂ
⊢ (∃ k, θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2) → ∃ k, θ = ↑k * ↑π
state_after: case mp.intro
θ : ℂ
k : ℤ
hk : θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
⊢ ∃ k, θ = ↑k * ↑π

tactic: use k + 1
state_before: case mp.intro
θ : ℂ
k : ℤ
hk : θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
⊢ ∃ k, θ = ↑k * ↑π
state_after: case h
θ : ℂ
k : ℤ
hk : θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
⊢ θ = ↑(k + 1) * ↑π

tactic: field_simp [eq_add_of_sub_eq hk]
state_before: case h
θ : ℂ
k : ℤ
hk : θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
⊢ θ = ↑(k + 1) * ↑π
state_after: case h
θ : ℂ
k : ℤ
hk : θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
⊢ (2 * ↑k + 1) * ↑π + ↑π = (↑k + 1) * ↑π * 2

tactic: ring
state_before: case h
θ : ℂ
k : ℤ
hk : θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
⊢ (2 * ↑k + 1) * ↑π + ↑π = (↑k + 1) * ↑π * 2
state_after: no goals

tactic: rintro ⟨k, rfl⟩
state_before: case mpr
θ : ℂ
⊢ (∃ k, θ = ↑k * ↑π) → ∃ k, θ - ↑π / 2 = (2 * ↑k + 1) * ↑π / 2
state_after: case mpr.intro
k : ℤ
⊢ ∃ k_1, ↑k * ↑π - ↑π / 2 = (2 * ↑k_1 + 1) * ↑π / 2

tactic: use k - 1
state_before: case mpr.intro
k : ℤ
⊢ ∃ k_1, ↑k * ↑π - ↑π / 2 = (2 * ↑k_1 + 1) * ↑π / 2
state_after: case h
k : ℤ
⊢ ↑k * ↑π - ↑π / 2 = (2 * ↑(k - 1) + 1) * ↑π / 2

tactic: field_simp
state_before: case h
k : ℤ
⊢ ↑k * ↑π - ↑π / 2 = (2 * ↑(k - 1) + 1) * ↑π / 2
state_after: case h
k : ℤ
⊢ ↑k * ↑π * 2 - ↑π = (2 * (↑k - 1) + 1) * ↑π

tactic: ring
state_before: case h
k : ℤ
⊢ ↑k * ↑π * 2 - ↑π = (2 * (↑k - 1) + 1) * ↑π
state_after: no goals
Theorem: Stream'.Seq.ofStream_cons
File: Mathlib/Data/Seq/Seq.lean

tactic: apply Subtype.eq
state_before: α : Type u
β : Type v
γ : Type w
a : α
s : Stream' α
⊢ ↑(a :: s) = cons a ↑s
state_after: case a
α : Type u
β : Type v
γ : Type w
a : α
s : Stream' α
⊢ ↑↑(a :: s) = ↑(cons a ↑s)

tactic: simp only [ofStream, cons]
state_before: case a
α : Type u
β : Type v
γ : Type w
a : α
s : Stream' α
⊢ ↑↑(a :: s) = ↑(cons a ↑s)
state_after: case a
α : Type u
β : Type v
γ : Type w
a : α
s : Stream' α
⊢ Stream'.map some (a :: s) = some a :: Stream'.map some s

tactic: rw [Stream'.map_cons]
state_before: case a
α : Type u
β : Type v
γ : Type w
a : α
s : Stream' α
⊢ Stream'.map some (a :: s) = some a :: Stream'.map some s
state_after: no goals
Theorem: SemiNormedGrp.iso_isometry_of_normNoninc
File: Mathlib/Analysis/Normed/Group/SemiNormedGrp.lean

tactic: apply AddMonoidHomClass.isometry_of_norm
state_before: V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
⊢ Isometry ⇑i.hom
state_after: case a
V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
⊢ ∀ (x : ↑V), ‖i.hom x‖ = ‖x‖

tactic: intro v
state_before: case a
V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
⊢ ∀ (x : ↑V), ‖i.hom x‖ = ‖x‖
state_after: case a
V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
v : ↑V
⊢ ‖i.hom v‖ = ‖v‖

tactic: apply le_antisymm (h1 v)
state_before: case a
V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
v : ↑V
⊢ ‖i.hom v‖ = ‖v‖
state_after: case a
V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
v : ↑V
⊢ ‖v‖ ≤ ‖i.hom v‖

tactic: calc
  ‖v‖ = ‖i.inv (i.hom v)‖ := by erw [Iso.hom_inv_id_apply]
  _ ≤ ‖i.hom v‖ := h2 _
state_before: case a
V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
v : ↑V
⊢ ‖v‖ ≤ ‖i.hom v‖
state_after: no goals

tactic: erw [Iso.hom_inv_id_apply]
state_before: V W : SemiNormedGrp
i : V ≅ W
h1 : NormedAddGroupHom.NormNoninc i.hom
h2 : NormedAddGroupHom.NormNoninc i.inv
v : ↑V
⊢ ‖v‖ = ‖i.inv (i.hom v)‖
state_after: no goals
Theorem: Matrix.blockDiagonal_smul
File: Mathlib/Data/Matrix/Block.lean

tactic: ext
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R✝ : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝³ : DecidableEq o
R : Type u_14
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
x : R
M : o → Matrix m n α
⊢ blockDiagonal (x • M) = x • blockDiagonal M
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R✝ : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝³ : DecidableEq o
R : Type u_14
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
x : R
M : o → Matrix m n α
i✝ : m × o
j✝ : n × o
⊢ blockDiagonal (x • M) i✝ j✝ = (x • blockDiagonal M) i✝ j✝

tactic: simp only [blockDiagonal_apply, Pi.smul_apply, smul_apply]
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R✝ : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝³ : DecidableEq o
R : Type u_14
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
x : R
M : o → Matrix m n α
i✝ : m × o
j✝ : n × o
⊢ blockDiagonal (x • M) i✝ j✝ = (x • blockDiagonal M) i✝ j✝
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R✝ : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝³ : DecidableEq o
R : Type u_14
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
x : R
M : o → Matrix m n α
i✝ : m × o
j✝ : n × o
⊢ (if i✝.2 = j✝.2 then x • M i✝.2 i✝.1 j✝.1 else 0) = x • if i✝.2 = j✝.2 then M i✝.2 i✝.1 j✝.1 else 0

tactic: split_ifs <;> simp
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R✝ : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝³ : DecidableEq o
R : Type u_14
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
x : R
M : o → Matrix m n α
i✝ : m × o
j✝ : n × o
⊢ (if i✝.2 = j✝.2 then x • M i✝.2 i✝.1 j✝.1 else 0) = x • if i✝.2 = j✝.2 then M i✝.2 i✝.1 j✝.1 else 0
state_after: no goals