1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Ideal.multiset_prod_le_inf
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: refine s.induction_on ?_ ?_
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ s.prod ≤ s.inf
state_after: case refine_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod 0 ≤ Multiset.inf 0

case refine_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ ∀ (a : Ideal R) (s : Multiset (Ideal R)), s.prod ≤ s.inf → (a ::ₘ s).prod ≤ (a ::ₘ s).inf

tactic: intro a s ih
state_before: case refine_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ ∀ (a : Ideal R) (s : Multiset (Ideal R)), s.prod ≤ s.inf → (a ::ₘ s).prod ≤ (a ::ₘ s).inf
state_after: case refine_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s✝ : Multiset (Ideal R)
a : Ideal R
s : Multiset (Ideal R)
ih : s.prod ≤ s.inf
⊢ (a ::ₘ s).prod ≤ (a ::ₘ s).inf

tactic: rw [Multiset.prod_cons, Multiset.inf_cons]
state_before: case refine_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s✝ : Multiset (Ideal R)
a : Ideal R
s : Multiset (Ideal R)
ih : s.prod ≤ s.inf
⊢ (a ::ₘ s).prod ≤ (a ::ₘ s).inf
state_after: case refine_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s✝ : Multiset (Ideal R)
a : Ideal R
s : Multiset (Ideal R)
ih : s.prod ≤ s.inf
⊢ a * s.prod ≤ a ⊓ s.inf

tactic: exact le_trans mul_le_inf (inf_le_inf le_rfl ih)
state_before: case refine_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s✝ : Multiset (Ideal R)
a : Ideal R
s : Multiset (Ideal R)
ih : s.prod ≤ s.inf
⊢ a * s.prod ≤ a ⊓ s.inf
state_after: no goals

tactic: rw [Multiset.inf_zero]
state_before: case refine_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod 0 ≤ Multiset.inf 0
state_after: case refine_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod 0 ≤ ⊤

tactic: exact le_top
state_before: case refine_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod 0 ≤ ⊤
state_after: no goals
Theorem: Polynomial.ker_evalRingHom
File: Mathlib/Algebra/Polynomial/Div.lean

tactic: ext y
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : CommRing R
p q : R[X]
x : R
⊢ RingHom.ker (evalRingHom x) = Ideal.span {X - C x}
state_after: case h
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : CommRing R
p q : R[X]
x : R
y : R[X]
⊢ y ∈ RingHom.ker (evalRingHom x) ↔ y ∈ Ideal.span {X - C x}

tactic: simp [Ideal.mem_span_singleton, dvd_iff_isRoot, RingHom.mem_ker]
state_before: case h
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : CommRing R
p q : R[X]
x : R
y : R[X]
⊢ y ∈ RingHom.ker (evalRingHom x) ↔ y ∈ Ideal.span {X - C x}
state_after: no goals
Theorem: isLUB_of_mem_closure
File: Mathlib/Topology/Order/IsLUB.lean

tactic: rw [mem_closure_iff_clusterPt, ClusterPt, inf_comm] at hsf
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : LinearOrder α
inst✝² : LinearOrder β
inst✝¹ : OrderTopology α
inst✝ : OrderTopology β
s : Set α
a : α
hsa : a ∈ upperBounds s
hsf : a ∈ closure s
⊢ IsLUB s a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : LinearOrder α
inst✝² : LinearOrder β
inst✝¹ : OrderTopology α
inst✝ : OrderTopology β
s : Set α
a : α
hsa : a ∈ upperBounds s
hsf : (𝓟 s ⊓ 𝓝 a).NeBot
⊢ IsLUB s a

tactic: exact isLUB_of_mem_nhds hsa (mem_principal_self s)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : LinearOrder α
inst✝² : LinearOrder β
inst✝¹ : OrderTopology α
inst✝ : OrderTopology β
s : Set α
a : α
hsa : a ∈ upperBounds s
hsf : (𝓟 s ⊓ 𝓝 a).NeBot
⊢ IsLUB s a
state_after: no goals
Theorem: PerfectField.separable_iff_squarefree
File: Mathlib/FieldTheory/Perfect.lean

tactic: rintro p (h : Irreducible p) ⟨q, rfl⟩ (dvd : p ∣ derivative (p * q))
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
g : K[X]
sqf : Squarefree g
⊢ ∀ (z : K[X]), Irreducible z → z ∣ g → ¬z ∣ derivative g
state_after: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ derivative (p * q)
⊢ False

tactic: replace dvd : p ∣ q := by
  rw [derivative_mul, dvd_add_left (dvd_mul_right p _)] at dvd
  exact (separable_of_irreducible h).dvd_of_dvd_mul_left dvd
state_before: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ derivative (p * q)
⊢ False
state_after: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ q
⊢ False

tactic: exact (h.1 : ¬ IsUnit p) (sqf _ <| mul_dvd_mul_left _ dvd)
state_before: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ q
⊢ False
state_after: no goals

tactic: rw [derivative_mul, dvd_add_left (dvd_mul_right p _)] at dvd
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ derivative (p * q)
⊢ p ∣ q
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ derivative p * q
⊢ p ∣ q

tactic: exact (separable_of_irreducible h).dvd_of_dvd_mul_left dvd
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : PerfectField K
p : K[X]
h : Irreducible p
q : K[X]
sqf : Squarefree (p * q)
dvd : p ∣ derivative p * q
⊢ p ∣ q
state_after: no goals
Theorem: RCLike.exists_norm_eq_mul_self
File: Mathlib/Analysis/RCLike/Basic.lean

tactic: obtain rfl | hx := eq_or_ne x 0
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z x : K
⊢ ∃ c, ‖c‖ = 1 ∧ ↑‖x‖ = c * x
state_after: case inl
K : Type u_1
E : Type u_2
inst✝ : RCLike K
z : K
⊢ ∃ c, ‖c‖ = 1 ∧ ↑‖0‖ = c * 0

case inr
K : Type u_1
E : Type u_2
inst✝ : RCLike K
z x : K
hx : x ≠ 0
⊢ ∃ c, ‖c‖ = 1 ∧ ↑‖x‖ = c * x

tactic: exact ⟨1, by simp⟩
state_before: case inl
K : Type u_1
E : Type u_2
inst✝ : RCLike K
z : K
⊢ ∃ c, ‖c‖ = 1 ∧ ↑‖0‖ = c * 0
state_after: no goals

tactic: simp
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z : K
⊢ ‖1‖ = 1 ∧ ↑‖0‖ = 1 * 0
state_after: no goals

tactic: exact ⟨‖x‖ / x, by simp [norm_ne_zero_iff.2, hx]⟩
state_before: case inr
K : Type u_1
E : Type u_2
inst✝ : RCLike K
z x : K
hx : x ≠ 0
⊢ ∃ c, ‖c‖ = 1 ∧ ↑‖x‖ = c * x
state_after: no goals

tactic: simp [norm_ne_zero_iff.2, hx]
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z x : K
hx : x ≠ 0
⊢ ‖↑‖x‖ / x‖ = 1 ∧ ↑‖x‖ = ↑‖x‖ / x * x
state_after: no goals
Theorem: Set.ncard_singleton_inter
File: Mathlib/Data/Set/Card.lean

tactic: rw [← Nat.cast_le (α := ℕ∞), (toFinite _).cast_ncard_eq, Nat.cast_one]
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
a : α
s : Set α
⊢ ({a} ∩ s).ncard ≤ 1
state_after: α : Type u_1
β : Type u_2
s✝ t : Set α
a : α
s : Set α
⊢ ({a} ∩ s).encard ≤ 1

tactic: apply encard_singleton_inter
state_before: α : Type u_1
β : Type u_2
s✝ t : Set α
a : α
s : Set α
⊢ ({a} ∩ s).encard ≤ 1
state_after: no goals
Theorem: LinearMap.map_comp_rTensor
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

tactic: simp only [lTensor, rTensor, ← map_comp, id_comp, comp_id]
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g✝ : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] P
g : N →ₗ[R] Q
f' : S →ₗ[R] M
⊢ map f g ∘ₗ rTensor N f' = map (f ∘ₗ f') g
state_after: no goals
Theorem: MvPolynomial.rTensorAlgHom_apply_eq
File: Mathlib/RingTheory/TensorProduct/MvPolynomial.lean

tactic: rw [← AlgHom.toLinearMap_apply, rTensorAlgHom_toLinearMap]
state_before: R : Type u
M : Type v
N : Type w
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
σ : Type u_1
inst✝⁴ : DecidableEq σ
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
inst✝¹ : CommSemiring N
inst✝ : Algebra R N
p : MvPolynomial σ S ⊗[R] N
⊢ rTensorAlgHom p = rTensor p
state_after: R : Type u
M : Type v
N : Type w
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
σ : Type u_1
inst✝⁴ : DecidableEq σ
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
inst✝¹ : CommSemiring N
inst✝ : Algebra R N
p : MvPolynomial σ S ⊗[R] N
⊢ ↑rTensor p = rTensor p

tactic: rfl
state_before: R : Type u
M : Type v
N : Type w
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
σ : Type u_1
inst✝⁴ : DecidableEq σ
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
inst✝¹ : CommSemiring N
inst✝ : Algebra R N
p : MvPolynomial σ S ⊗[R] N
⊢ ↑rTensor p = rTensor p
state_after: no goals
Theorem: Real.cos_nonpos_of_pi_div_two_le_of_le
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: linarith
state_before: x : ℝ
hx₁ : π / 2 ≤ x
hx₂ : x ≤ π + π / 2
⊢ -(π / 2) ≤ π - x
state_after: no goals

tactic: linarith
state_before: x : ℝ
hx₁ : π / 2 ≤ x
hx₂ : x ≤ π + π / 2
⊢ π - x ≤ π / 2
state_after: no goals
Theorem: Polynomial.Gal.restrictDvd_surjective
File: Mathlib/FieldTheory/PolynomialGaloisGroup.lean

tactic: classical
  haveI := Fact.mk <|
    splits_of_splits_of_dvd (algebraMap F q.SplittingField) hq (SplittingField.splits q) hpq
  simp only [restrictDvd_def, dif_neg hq]
  exact restrict_surjective _ _
state_before: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
hpq : p ∣ q
hq : q ≠ 0
⊢ Function.Surjective ⇑(restrictDvd hpq)
state_after: no goals

tactic: haveI := Fact.mk <|
  splits_of_splits_of_dvd (algebraMap F q.SplittingField) hq (SplittingField.splits q) hpq
state_before: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
hpq : p ∣ q
hq : q ≠ 0
⊢ Function.Surjective ⇑(restrictDvd hpq)
state_after: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
hpq : p ∣ q
hq : q ≠ 0
this : Fact (Splits (algebraMap F q.SplittingField) p)
⊢ Function.Surjective ⇑(restrictDvd hpq)

tactic: simp only [restrictDvd_def, dif_neg hq]
state_before: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
hpq : p ∣ q
hq : q ≠ 0
this : Fact (Splits (algebraMap F q.SplittingField) p)
⊢ Function.Surjective ⇑(restrictDvd hpq)
state_after: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
hpq : p ∣ q
hq : q ≠ 0
this : Fact (Splits (algebraMap F q.SplittingField) p)
⊢ Function.Surjective ⇑(restrict p q.SplittingField)

tactic: exact restrict_surjective _ _
state_before: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
hpq : p ∣ q
hq : q ≠ 0
this : Fact (Splits (algebraMap F q.SplittingField) p)
⊢ Function.Surjective ⇑(restrict p q.SplittingField)
state_after: no goals
Theorem: Metric.forall_of_forall_mem_closedBall
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

tactic: obtain ⟨R, hR, h⟩ : ∃ R ≥ dist y x, ∀ z : α, z ∈ closedBall x R → p z :=
  frequently_iff.1 H (Ici_mem_atTop (dist y x))
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x✝ y✝ z : α
δ ε ε₁ ε₂ : ℝ
s : Set α
p : α → Prop
x : α
H : ∃ᶠ (R : ℝ) in atTop, ∀ y ∈ closedBall x R, p y
y : α
⊢ p y
state_after: case intro.intro
α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x✝ y✝ z : α
δ ε ε₁ ε₂ : ℝ
s : Set α
p : α → Prop
x : α
H : ∃ᶠ (R : ℝ) in atTop, ∀ y ∈ closedBall x R, p y
y : α
R : ℝ
hR : R ≥ dist y x
h : ∀ z ∈ closedBall x R, p z
⊢ p y

tactic: exact h _ hR
state_before: case intro.intro
α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x✝ y✝ z : α
δ ε ε₁ ε₂ : ℝ
s : Set α
p : α → Prop
x : α
H : ∃ᶠ (R : ℝ) in atTop, ∀ y ∈ closedBall x R, p y
y : α
R : ℝ
hR : R ≥ dist y x
h : ∀ z ∈ closedBall x R, p z
⊢ p y
state_after: no goals
Theorem: Set.eq_of_subset_of_ncard_le
File: Mathlib/Data/Set/Card.lean

tactic: rwa [← Nat.cast_le (α := ℕ∞), ht.cast_ncard_eq, (ht.subset h).cast_ncard_eq] at h'
state_before: α : Type u_1
β : Type u_2
s t : Set α
f : α → β
h : s ⊆ t
h' : t.ncard ≤ s.ncard
ht : autoParam t.Finite _auto✝
⊢ t.encard ≤ s.encard
state_after: no goals
Theorem: Setoid.comap_eq
File: Mathlib/Data/Setoid/Basic.lean

tactic: rw [Quotient.eq]
state_before: α : Type u_1
β : Type u_2
r✝ : Setoid α
f✝ f : α → β
r : Setoid β
x y : α
⊢ Setoid.r x y ↔ ⟦f x⟧ = ⟦f y⟧
state_after: α : Type u_1
β : Type u_2
r✝ : Setoid α
f✝ f : α → β
r : Setoid β
x y : α
⊢ Setoid.r x y ↔ f x ≈ f y

tactic: rfl
state_before: α : Type u_1
β : Type u_2
r✝ : Setoid α
f✝ f : α → β
r : Setoid β
x y : α
⊢ Setoid.r x y ↔ f x ≈ f y
state_after: no goals
Theorem: MeromorphicAt.smul
File: Mathlib/Analysis/Analytic/Meromorphic.lean

tactic: rcases hf with ⟨m, hf⟩
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
hf : MeromorphicAt f x
hg : MeromorphicAt g x
⊢ MeromorphicAt (f • g) x
state_after: case intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
hg : MeromorphicAt g x
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
⊢ MeromorphicAt (f • g) x

tactic: rcases hg with ⟨n, hg⟩
state_before: case intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
hg : MeromorphicAt g x
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
⊢ MeromorphicAt (f • g) x
state_after: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ MeromorphicAt (f • g) x

tactic: refine ⟨m + n, ?_⟩
state_before: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ MeromorphicAt (f • g) x
state_after: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ (m + n) • (f • g) z) x

tactic: convert hf.smul hg using 2 with z
state_before: case intro.intro
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ (m + n) • (f • g) z) x
state_after: case h.e'_9.h
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
z : 𝕜
⊢ (z - x) ^ (m + n) • (f • g) z = ((z - x) ^ m • f z) • (z - x) ^ n • g z

tactic: rw [smul_eq_mul, ← mul_smul, mul_assoc, mul_comm (f z), ← mul_assoc, pow_add,
  ← smul_eq_mul (a' := f z), smul_assoc, Pi.smul_apply']
state_before: case h.e'_9.h
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → 𝕜
g : 𝕜 → E
x : 𝕜
m : ℕ
hf : AnalyticAt 𝕜 (fun z => (z - x) ^ m • f z) x
n : ℕ
hg : AnalyticAt 𝕜 (fun z => (z - x) ^ n • g z) x
z : 𝕜
⊢ (z - x) ^ (m + n) • (f • g) z = ((z - x) ^ m • f z) • (z - x) ^ n • g z
state_after: no goals
Theorem: HurwitzZeta.sinKernel_neg
File: Mathlib/NumberTheory/LSeries/HurwitzZetaOdd.lean

tactic: induction' a using QuotientAddGroup.induction_on' with a'
state_before: a : UnitAddCircle
x : ℝ
⊢ sinKernel (-a) x = -sinKernel a x
state_after: case H
x a' : ℝ
⊢ sinKernel (-↑a') x = -sinKernel (↑a') x

tactic: rw [← ofReal_inj, ← QuotientAddGroup.mk_neg, ofReal_neg, sinKernel_def, sinKernel_def, ofReal_neg,
  jacobiTheta₂'_neg_left, neg_div]
state_before: case H
x a' : ℝ
⊢ sinKernel (-↑a') x = -sinKernel (↑a') x
state_after: no goals
Theorem: RelSeries.last_smash
File: Mathlib/Order/RelSeries.lean

tactic: delta smash last
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
⊢ (p.smash q h).last = q.last
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
⊢ { length := p.length + q.length,
          toFun := fun i => if H : ↑i < p.length then p.toFun ⟨↑i, ⋯⟩ else q.toFun ⟨↑i - p.length, ⋯⟩, step := ⋯ }.toFun
      (Fin.last
        { length := p.length + q.length,
            toFun := fun i => if H : ↑i < p.length then p.toFun ⟨↑i, ⋯⟩ else q.toFun ⟨↑i - p.length, ⋯⟩,
            step := ⋯ }.length) =
    q.toFun (Fin.last q.length)

tactic: aesop
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
⊢ { length := p.length + q.length,
          toFun := fun i => if H : ↑i < p.length then p.toFun ⟨↑i, ⋯⟩ else q.toFun ⟨↑i - p.length, ⋯⟩, step := ⋯ }.toFun
      (Fin.last
        { length := p.length + q.length,
            toFun := fun i => if H : ↑i < p.length then p.toFun ⟨↑i, ⋯⟩ else q.toFun ⟨↑i - p.length, ⋯⟩,
            step := ⋯ }.length) =
    q.toFun (Fin.last q.length)
state_after: no goals
Theorem: Order.succ_eq_succ_iff_of_not_isMax
File: Mathlib/Order/SuccPred/Basic.lean

tactic: rw [eq_iff_le_not_lt, eq_iff_le_not_lt, succ_le_succ_iff_of_not_isMax ha hb,
  succ_lt_succ_iff_of_not_isMax ha hb]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : PartialOrder α
inst✝ : SuccOrder α
a b : α
ha : ¬IsMax a
hb : ¬IsMax b
⊢ succ a = succ b ↔ a = b
state_after: no goals
Theorem: List.pmap_append
File: Mathlib/Data/List/Basic.lean

tactic: induction' l₁ with _ _ ih
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁✝ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₁ l₂ : List ι
h : ∀ (a : ι), a ∈ l₁ ++ l₂ → p a
⊢ pmap f (l₁ ++ l₂) h = pmap f l₁ ⋯ ++ pmap f l₂ ⋯
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₂ : List ι
h : ∀ (a : ι), a ∈ [] ++ l₂ → p a
⊢ pmap f ([] ++ l₂) h = pmap f [] ⋯ ++ pmap f l₂ ⋯

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₂ : List ι
head✝ : ι
tail✝ : List ι
ih : ∀ (h : ∀ (a : ι), a ∈ tail✝ ++ l₂ → p a), pmap f (tail✝ ++ l₂) h = pmap f tail✝ ⋯ ++ pmap f l₂ ⋯
h : ∀ (a : ι), a ∈ head✝ :: tail✝ ++ l₂ → p a
⊢ pmap f (head✝ :: tail✝ ++ l₂) h = pmap f (head✝ :: tail✝) ⋯ ++ pmap f l₂ ⋯

tactic: rfl
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₂ : List ι
h : ∀ (a : ι), a ∈ [] ++ l₂ → p a
⊢ pmap f ([] ++ l₂) h = pmap f [] ⋯ ++ pmap f l₂ ⋯
state_after: no goals

tactic: dsimp only [pmap, cons_append]
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₂ : List ι
head✝ : ι
tail✝ : List ι
ih : ∀ (h : ∀ (a : ι), a ∈ tail✝ ++ l₂ → p a), pmap f (tail✝ ++ l₂) h = pmap f tail✝ ⋯ ++ pmap f l₂ ⋯
h : ∀ (a : ι), a ∈ head✝ :: tail✝ ++ l₂ → p a
⊢ pmap f (head✝ :: tail✝ ++ l₂) h = pmap f (head✝ :: tail✝) ⋯ ++ pmap f l₂ ⋯
state_after: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₂ : List ι
head✝ : ι
tail✝ : List ι
ih : ∀ (h : ∀ (a : ι), a ∈ tail✝ ++ l₂ → p a), pmap f (tail✝ ++ l₂) h = pmap f tail✝ ⋯ ++ pmap f l₂ ⋯
h : ∀ (a : ι), a ∈ head✝ :: tail✝ ++ l₂ → p a
⊢ f head✝ ⋯ :: pmap f (tail✝ ++ l₂) ⋯ = f head✝ ⋯ :: (pmap f tail✝ ⋯ ++ pmap f l₂ ⋯)

tactic: rw [ih]
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂✝ : List α
p : ι → Prop
f : (a : ι) → p a → α
l₂ : List ι
head✝ : ι
tail✝ : List ι
ih : ∀ (h : ∀ (a : ι), a ∈ tail✝ ++ l₂ → p a), pmap f (tail✝ ++ l₂) h = pmap f tail✝ ⋯ ++ pmap f l₂ ⋯
h : ∀ (a : ι), a ∈ head✝ :: tail✝ ++ l₂ → p a
⊢ f head✝ ⋯ :: pmap f (tail✝ ++ l₂) ⋯ = f head✝ ⋯ :: (pmap f tail✝ ⋯ ++ pmap f l₂ ⋯)
state_after: no goals
Theorem: Orientation.oangle_smul_smul_self_of_nonneg
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

tactic: rcases hr₁.lt_or_eq with (h | h)
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r₁ r₂ : ℝ
hr₁ : 0 ≤ r₁
hr₂ : 0 ≤ r₂
⊢ o.oangle (r₁ • x) (r₂ • x) = 0
state_after: case inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r₁ r₂ : ℝ
hr₁ : 0 ≤ r₁
hr₂ : 0 ≤ r₂
h : 0 < r₁
⊢ o.oangle (r₁ • x) (r₂ • x) = 0

case inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r₁ r₂ : ℝ
hr₁ : 0 ≤ r₁
hr₂ : 0 ≤ r₂
h : 0 = r₁
⊢ o.oangle (r₁ • x) (r₂ • x) = 0

tactic: simp [h, hr₂]
state_before: case inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r₁ r₂ : ℝ
hr₁ : 0 ≤ r₁
hr₂ : 0 ≤ r₂
h : 0 < r₁
⊢ o.oangle (r₁ • x) (r₂ • x) = 0
state_after: no goals

tactic: simp [h.symm]
state_before: case inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r₁ r₂ : ℝ
hr₁ : 0 ≤ r₁
hr₂ : 0 ≤ r₂
h : 0 = r₁
⊢ o.oangle (r₁ • x) (r₂ • x) = 0
state_after: no goals