1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: HurwitzZeta.differentiable_hurwitzZetaEven_sub_hurwitzZetaEven
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

tactic: intro z
state_before: a b : UnitAddCircle
⊢ Differentiable ℂ fun s => hurwitzZetaEven a s - hurwitzZetaEven b s
state_after: a b : UnitAddCircle
z : ℂ
⊢ DifferentiableAt ℂ (fun s => hurwitzZetaEven a s - hurwitzZetaEven b s) z

tactic: rcases ne_or_eq z 1 with hz | rfl
state_before: a b : UnitAddCircle
z : ℂ
⊢ DifferentiableAt ℂ (fun s => hurwitzZetaEven a s - hurwitzZetaEven b s) z
state_after: case inl
a b : UnitAddCircle
z : ℂ
hz : z ≠ 1
⊢ DifferentiableAt ℂ (fun s => hurwitzZetaEven a s - hurwitzZetaEven b s) z

case inr
a b : UnitAddCircle
⊢ DifferentiableAt ℂ (fun s => hurwitzZetaEven a s - hurwitzZetaEven b s) 1

tactic: exact (differentiableAt_hurwitzZetaEven a hz).sub (differentiableAt_hurwitzZetaEven b hz)
state_before: case inl
a b : UnitAddCircle
z : ℂ
hz : z ≠ 1
⊢ DifferentiableAt ℂ (fun s => hurwitzZetaEven a s - hurwitzZetaEven b s) z
state_after: no goals

tactic: convert (differentiableAt_hurwitzZetaEven_sub_one_div a).sub
  (differentiableAt_hurwitzZetaEven_sub_one_div b) using 2 with s
state_before: case inr
a b : UnitAddCircle
⊢ DifferentiableAt ℂ (fun s => hurwitzZetaEven a s - hurwitzZetaEven b s) 1
state_after: case h.e'_9.h
a b : UnitAddCircle
s : ℂ
⊢ hurwitzZetaEven a s - hurwitzZetaEven b s =
    hurwitzZetaEven a s - 1 / (s - 1) / s.Gammaℝ - (hurwitzZetaEven b s - 1 / (s - 1) / s.Gammaℝ)

tactic: abel
state_before: case h.e'_9.h
a b : UnitAddCircle
s : ℂ
⊢ hurwitzZetaEven a s - hurwitzZetaEven b s =
    hurwitzZetaEven a s - 1 / (s - 1) / s.Gammaℝ - (hurwitzZetaEven b s - 1 / (s - 1) / s.Gammaℝ)
state_after: no goals
Theorem: WittVector.coeff_p_one
File: Mathlib/RingTheory/WittVector/Identities.lean

tactic: rw [coeff_p, if_pos rfl]
state_before: p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CharP R p
⊢ (↑p).coeff 1 = 1
state_after: no goals
Theorem: Set.monotoneOn_iff_monotone
File: Mathlib/Data/Set/Basic.lean

tactic: simp [Monotone, MonotoneOn]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁ s₂ t t₁ t₂ u : Set α
inst✝¹ : Preorder α
inst✝ : Preorder β
f : α → β
⊢ MonotoneOn f s ↔ Monotone fun a => f ↑a
state_after: no goals
Theorem: MeasureTheory.OuterMeasure.comap_iSup
File: Mathlib/MeasureTheory/OuterMeasure/Operations.lean

tactic: simp only [comap_apply, iSup_apply]
state_before: α : Type u_1
β✝ : Type u_2
m✝ : OuterMeasure α
β : Type u_3
ι : Sort u_4
f : α → β
m : ι → OuterMeasure β
s : Set α
⊢ ((comap f) (⨆ i, m i)) s = (⨆ i, (comap f) (m i)) s
state_after: no goals
Theorem: MeasureTheory.Measure.count_apply_finset'
File: Mathlib/MeasureTheory/Measure/Count.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s✝ : Set α
s : Finset α
s_mble : MeasurableSet ↑s
⊢ ∑ i ∈ s, 1 = ↑s.card
state_after: no goals
Theorem: ENNReal.continuous_truncateToReal
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: apply continuousOn_toReal.comp_continuous (continuous_min.comp (Continuous.Prod.mk t))
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
⊢ Continuous t.truncateToReal
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
⊢ ∀ (x : ℝ≥0∞), ((fun p => min p.1 p.2) ∘ fun y => (t, y)) x ∈ {a | a ≠ ⊤}

tactic: simp [t_ne_top]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t : ℝ≥0∞
t_ne_top : t ≠ ⊤
⊢ ∀ (x : ℝ≥0∞), ((fun p => min p.1 p.2) ∘ fun y => (t, y)) x ∈ {a | a ≠ ⊤}
state_after: no goals
Theorem: Nat.floorRoot_pow_self
File: Mathlib/Data/Nat/Factorization/Root.lean

tactic: simp [floorRoot_def, pos_iff_ne_zero.2, hn]
state_before: a✝ b n : ℕ
hn : n ≠ 0
a : ℕ
⊢ n.floorRoot (a ^ n) = a
state_after: a✝ b n : ℕ
hn : n ≠ 0
a : ℕ
⊢ (if a = 0 then 0 else a.factorization.prod fun x x_1 => x ^ x_1) = a

tactic: split_ifs <;> simp [*]
state_before: a✝ b n : ℕ
hn : n ≠ 0
a : ℕ
⊢ (if a = 0 then 0 else a.factorization.prod fun x x_1 => x ^ x_1) = a
state_after: no goals
Theorem: Int.card_fintype_Icc_of_le
File: Mathlib/Data/Int/Interval.lean

tactic: rw [card_fintype_Icc, toNat_sub_of_le h]
state_before: a b : ℤ
h : a ≤ b + 1
⊢ ↑(Fintype.card ↑(Set.Icc a b)) = b + 1 - a
state_after: no goals
Theorem: Nat.Partrec.Code.fixed_point
File: Mathlib/Computability/PartrecCode.lean

tactic: simp [eg]
state_before: f : Code → Code
hf : Computable f
g : ℕ → ℕ → Part ℕ :=
  fun x y => do
    let b ← (ofNat Code x).eval x
    (ofNat Code b).eval y
this : Partrec₂ g
cg : Code
eg : cg.eval = fun n => (↑(decode n)).bind fun a => Part.map encode ((fun p => g p.1 p.2) a)
⊢ ∀ (a n : ℕ), cg.eval (Nat.pair a n) = Part.map encode (g a n)
state_after: no goals

tactic: simp [eF]
state_before: f : Code → Code
hf : Computable f
g : ℕ → ℕ → Part ℕ :=
  fun x y => do
    let b ← (ofNat Code x).eval x
    (ofNat Code b).eval y
this✝ : Partrec₂ g
cg : Code
eg : cg.eval = fun n => (↑(decode n)).bind fun a => Part.map encode ((fun p => g p.1 p.2) a)
eg' : ∀ (a n : ℕ), cg.eval (Nat.pair a n) = Part.map encode (g a n)
F : ℕ → Code := fun x => f (cg.curry x)
this : Computable F
cF : Code
eF : cF.eval = fun n => (↑(decode n)).bind fun a => Part.map encode (↑F a)
⊢ cF.eval (encode cF) = Part.some (encode (F (encode cF)))
state_after: no goals

tactic: simp [g, eg', eF', Part.map_id']
state_before: f : Code → Code
hf : Computable f
g : ℕ → ℕ → Part ℕ :=
  fun x y => do
    let b ← (ofNat Code x).eval x
    (ofNat Code b).eval y
this✝ : Partrec₂ g
cg : Code
eg : cg.eval = fun n => (↑(decode n)).bind fun a => Part.map encode ((fun p => g p.1 p.2) a)
eg' : ∀ (a n : ℕ), cg.eval (Nat.pair a n) = Part.map encode (g a n)
F : ℕ → Code := fun x => f (cg.curry x)
this : Computable F
cF : Code
eF : cF.eval = fun n => (↑(decode n)).bind fun a => Part.map encode (↑F a)
eF' : cF.eval (encode cF) = Part.some (encode (F (encode cF)))
n : ℕ
⊢ (f (cg.curry (encode cF))).eval n = (cg.curry (encode cF)).eval n
state_after: no goals
Theorem: one_le_of_le_mul_right
File: Mathlib/Algebra/Order/Monoid/Unbundled/Basic.lean

tactic: simpa only [mul_one]
state_before: α : Type u_1
β : Type u_2
inst✝² : MulOneClass α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h : a ≤ a * b
⊢ ?m.20987 * 1 ≤ ?m.20987 * b
state_after: no goals
Theorem: eVariationOn.eq_of_edist_zero_on
File: Mathlib/Analysis/BoundedVariation.lean

tactic: dsimp only [eVariationOn]
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
⊢ eVariationOn f s = eVariationOn f' s
state_after: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
⊢ ⨆ p, ∑ i ∈ Finset.range p.1, edist (f (↑p.2 (i + 1))) (f (↑p.2 i)) =
    ⨆ p, ∑ i ∈ Finset.range p.1, edist (f' (↑p.2 (i + 1))) (f' (↑p.2 i))

tactic: congr 1 with p : 1
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
⊢ ⨆ p, ∑ i ∈ Finset.range p.1, edist (f (↑p.2 (i + 1))) (f (↑p.2 i)) =
    ⨆ p, ∑ i ∈ Finset.range p.1, edist (f' (↑p.2 (i + 1))) (f' (↑p.2 i))
state_after: case e_s.h
α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
p : ℕ × { u // Monotone u ∧ ∀ (i : ℕ), u i ∈ s }
⊢ ∑ i ∈ Finset.range p.1, edist (f (↑p.2 (i + 1))) (f (↑p.2 i)) =
    ∑ i ∈ Finset.range p.1, edist (f' (↑p.2 (i + 1))) (f' (↑p.2 i))

tactic: congr 1 with i : 1
state_before: case e_s.h
α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
p : ℕ × { u // Monotone u ∧ ∀ (i : ℕ), u i ∈ s }
⊢ ∑ i ∈ Finset.range p.1, edist (f (↑p.2 (i + 1))) (f (↑p.2 i)) =
    ∑ i ∈ Finset.range p.1, edist (f' (↑p.2 (i + 1))) (f' (↑p.2 i))
state_after: case e_s.h.e_f.h
α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
p : ℕ × { u // Monotone u ∧ ∀ (i : ℕ), u i ∈ s }
i : ℕ
⊢ edist (f (↑p.2 (i + 1))) (f (↑p.2 i)) = edist (f' (↑p.2 (i + 1))) (f' (↑p.2 i))

tactic: rw [edist_congr_right (h <| p.snd.prop.2 (i + 1)), edist_congr_left (h <| p.snd.prop.2 i)]
state_before: case e_s.h.e_f.h
α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f f' : α → E
s : Set α
h : ∀ ⦃x : α⦄, x ∈ s → edist (f x) (f' x) = 0
p : ℕ × { u // Monotone u ∧ ∀ (i : ℕ), u i ∈ s }
i : ℕ
⊢ edist (f (↑p.2 (i + 1))) (f (↑p.2 i)) = edist (f' (↑p.2 (i + 1))) (f' (↑p.2 i))
state_after: no goals
Theorem: AffineSubspace.map_direction
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: rw [direction_eq_vectorSpan, direction_eq_vectorSpan, coe_map,
  AffineMap.vectorSpan_image_eq_submodule_map]
state_before: k : Type u_1
V₁ : Type u_2
P₁ : Type u_3
V₂ : Type u_4
P₂ : Type u_5
V₃ : Type u_6
P₃ : Type u_7
inst✝⁹ : Ring k
inst✝⁸ : AddCommGroup V₁
inst✝⁷ : Module k V₁
inst✝⁶ : AffineSpace V₁ P₁
inst✝⁵ : AddCommGroup V₂
inst✝⁴ : Module k V₂
inst✝³ : AffineSpace V₂ P₂
inst✝² : AddCommGroup V₃
inst✝¹ : Module k V₃
inst✝ : AffineSpace V₃ P₃
f : P₁ →ᵃ[k] P₂
s : AffineSubspace k P₁
⊢ (map f s).direction = Submodule.map f.linear s.direction
state_after: no goals
Theorem: CategoryTheory.Limits.HasZeroObject.zeroIsoIsTerminal_hom
File: Mathlib/CategoryTheory/Limits/Shapes/ZeroMorphisms.lean

tactic: ext
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
X : C
t : IsTerminal X
⊢ (zeroIsoIsTerminal t).hom = 0
state_after: no goals
Theorem: Equiv.hasProd_iff
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : TopologicalSpace α
f g : β → α
a b : α
s : Finset β
e : γ ≃ β
⊢ ∀ x ∉ Set.range ⇑e, f x = 1
state_after: no goals
Theorem: Multiset.ndinsert_le
File: Mathlib/Data/Multiset/FinsetOps.lean

tactic: simp [h, l]
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
x✝ : s ≤ t ∧ a ∈ t
l : s ≤ t
m : a ∈ t
h : a ∈ s
⊢ ndinsert a s ≤ t
state_after: no goals

tactic: rw [ndinsert_of_not_mem h, ← cons_erase m, cons_le_cons_iff, ← le_cons_of_not_mem h,
    cons_erase m]
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
x✝ : s ≤ t ∧ a ∈ t
l : s ≤ t
m : a ∈ t
h : a ∉ s
⊢ ndinsert a s ≤ t
state_after: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
x✝ : s ≤ t ∧ a ∈ t
l : s ≤ t
m : a ∈ t
h : a ∉ s
⊢ s ≤ t

tactic: exact l
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
x✝ : s ≤ t ∧ a ∈ t
l : s ≤ t
m : a ∈ t
h : a ∉ s
⊢ s ≤ t
state_after: no goals
Theorem: right_mem_openSegment_iff
File: Mathlib/Analysis/Convex/Segment.lean

tactic: rw [openSegment_symm, left_mem_openSegment_iff, eq_comm]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : LinearOrderedRing 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
x y : E
inst✝¹ : DenselyOrdered 𝕜
inst✝ : NoZeroSMulDivisors 𝕜 E
⊢ y ∈ openSegment 𝕜 x y ↔ x = y
state_after: no goals
Theorem: Real.Angle.neg_ne_self_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [← not_or, ← neg_eq_self_iff.not]
state_before: θ : Angle
⊢ -θ ≠ θ ↔ θ ≠ 0 ∧ θ ≠ ↑π
state_after: no goals
Theorem: continuum_le_cardinal_of_module
File: Mathlib/Topology/Algebra/Module/Cardinality.lean

tactic: have A : lift.{v} (𝔠 : Cardinal.{u}) ≤ lift.{v} (#𝕜) := by
  simpa using continuum_le_cardinal_of_nontriviallyNormedField 𝕜
state_before: 𝕜 : Type u
E : Type v
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : CompleteSpace 𝕜
inst✝² : AddCommGroup E
inst✝¹ : Module 𝕜 E
inst✝ : Nontrivial E
⊢ 𝔠 ≤ #E
state_after: 𝕜 : Type u
E : Type v
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : CompleteSpace 𝕜
inst✝² : AddCommGroup E
inst✝¹ : Module 𝕜 E
inst✝ : Nontrivial E
A : lift.{v, u} 𝔠 ≤ lift.{v, u} #𝕜
⊢ 𝔠 ≤ #E

tactic: simpa using A.trans (Cardinal.mk_le_of_module 𝕜 E)
state_before: 𝕜 : Type u
E : Type v
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : CompleteSpace 𝕜
inst✝² : AddCommGroup E
inst✝¹ : Module 𝕜 E
inst✝ : Nontrivial E
A : lift.{v, u} 𝔠 ≤ lift.{v, u} #𝕜
⊢ 𝔠 ≤ #E
state_after: no goals

tactic: simpa using continuum_le_cardinal_of_nontriviallyNormedField 𝕜
state_before: 𝕜 : Type u
E : Type v
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : CompleteSpace 𝕜
inst✝² : AddCommGroup E
inst✝¹ : Module 𝕜 E
inst✝ : Nontrivial E
⊢ lift.{v, u} 𝔠 ≤ lift.{v, u} #𝕜
state_after: no goals
Theorem: IsOpen.mem_nhdsSet
File: Mathlib/Topology/NhdsSet.lean

tactic: rw [← subset_interior_iff_mem_nhdsSet, hU.interior_eq]
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f : Filter X
s t s₁ s₂ t₁ t₂ : Set X
x : X
hU : IsOpen s
⊢ s ∈ 𝓝ˢ t ↔ t ⊆ s
state_after: no goals
Theorem: MeasureTheory.div_ae_eq_one
File: Mathlib/MeasureTheory/Measure/Restrict.lean

tactic: refine ⟨fun h ↦ h.mono fun x hx ↦ ?_, fun h ↦ h.mono fun x hx ↦ ?_⟩
state_before: R : Type u_1
α : Type u_2
β✝ : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β✝
inst✝¹ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
β : Type u_7
inst✝ : Group β
f g : α → β
⊢ f / g =ᶠ[ae μ] 1 ↔ f =ᶠ[ae μ] g
state_after: case refine_1
R : Type u_1
α : Type u_2
β✝ : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β✝
inst✝¹ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
β : Type u_7
inst✝ : Group β
f g : α → β
h : f / g =ᶠ[ae μ] 1
x : α
hx : (f / g) x = 1 x
⊢ f x = g x

case refine_2
R : Type u_1
α : Type u_2
β✝ : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β✝
inst✝¹ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
β : Type u_7
inst✝ : Group β
f g : α → β
h : f =ᶠ[ae μ] g
x : α
hx : f x = g x
⊢ (f / g) x = 1 x

tactic: rwa [Pi.div_apply, Pi.one_apply, div_eq_one] at hx
state_before: case refine_1
R : Type u_1
α : Type u_2
β✝ : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β✝
inst✝¹ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
β : Type u_7
inst✝ : Group β
f g : α → β
h : f / g =ᶠ[ae μ] 1
x : α
hx : (f / g) x = 1 x
⊢ f x = g x
state_after: no goals

tactic: rwa [Pi.div_apply, Pi.one_apply, div_eq_one]
state_before: case refine_2
R : Type u_1
α : Type u_2
β✝ : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β✝
inst✝¹ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
β : Type u_7
inst✝ : Group β
f g : α → β
h : f =ᶠ[ae μ] g
x : α
hx : f x = g x
⊢ (f / g) x = 1 x
state_after: no goals
Theorem: Polynomial.rootMultiplicity_C
File: Mathlib/Algebra/Polynomial/Div.lean

tactic: cases subsingleton_or_nontrivial R
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
⊢ rootMultiplicity a (C r) = 0
state_after: case inl
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Subsingleton R
⊢ rootMultiplicity a (C r) = 0

case inr
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
⊢ rootMultiplicity a (C r) = 0

tactic: rw [Subsingleton.elim (C r) 0, rootMultiplicity_zero]
state_before: case inl
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Subsingleton R
⊢ rootMultiplicity a (C r) = 0
state_after: no goals

tactic: rw [rootMultiplicity_eq_multiplicity]
state_before: case inr
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
⊢ rootMultiplicity a (C r) = 0
state_after: case inr
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
⊢ (if h0 : C r = 0 then 0 else (multiplicity (X - C a) (C r)).get ⋯) = 0

tactic: split_ifs with hr
state_before: case inr
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
⊢ (if h0 : C r = 0 then 0 else (multiplicity (X - C a) (C r)).get ⋯) = 0
state_after: case pos
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : C r = 0
⊢ 0 = 0

case neg
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : ¬C r = 0
⊢ (multiplicity (X - C a) (C r)).get ⋯ = 0

tactic: have h : natDegree (C r) < natDegree (X - C a) := by simp
state_before: case neg
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : ¬C r = 0
⊢ (multiplicity (X - C a) (C r)).get ⋯ = 0
state_after: case neg
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : ¬C r = 0
h : (C r).natDegree < (X - C a).natDegree
⊢ (multiplicity (X - C a) (C r)).get ⋯ = 0

tactic: simp_rw [multiplicity.multiplicity_eq_zero.mpr ((monic_X_sub_C a).not_dvd_of_natDegree_lt hr h),
  PartENat.get_zero]
state_before: case neg
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : ¬C r = 0
h : (C r).natDegree < (X - C a).natDegree
⊢ (multiplicity (X - C a) (C r)).get ⋯ = 0
state_after: no goals

tactic: rfl
state_before: case pos
R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : C r = 0
⊢ 0 = 0
state_after: no goals

tactic: simp
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a✝ b : R
n : ℕ
inst✝ : Ring R
p q : R[X]
r a : R
h✝ : Nontrivial R
hr : ¬C r = 0
⊢ (C r).natDegree < (X - C a).natDegree
state_after: no goals
Theorem: MulAction.period_dvd_exponent
File: Mathlib/GroupTheory/GroupAction/Period.lean

tactic: rw [← pow_smul_eq_iff_period_dvd, Monoid.pow_exponent_eq_one, one_smul]
state_before: α : Type v
G : Type u
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u
inst✝¹ : Monoid M
inst✝ : MulAction M α
m : M
a : α
⊢ period m a ∣ Monoid.exponent M
state_after: no goals
Theorem: HasStrictDerivAt.scomp_of_eq
File: Mathlib/Analysis/Calculus/Deriv/Comp.lean

tactic: rw [hy] at hg
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hg : HasStrictDerivAt g₁ g₁' y
hh : HasStrictDerivAt h h' x
hy : y = h x
⊢ HasStrictDerivAt (g₁ ∘ h) (h' • g₁') x
state_after: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hg : HasStrictDerivAt g₁ g₁' (h x)
hh : HasStrictDerivAt h h' x
hy : y = h x
⊢ HasStrictDerivAt (g₁ ∘ h) (h' • g₁') x

tactic: exact hg.scomp x hh
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hg : HasStrictDerivAt g₁ g₁' (h x)
hh : HasStrictDerivAt h h' x
hy : y = h x
⊢ HasStrictDerivAt (g₁ ∘ h) (h' • g₁') x
state_after: no goals
Theorem: TypeVec.lastFun_of_subtype
File: Mathlib/Data/TypeVec.lean

tactic: ext i : 2
state_before: n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
⊢ lastFun (ofSubtype p) = _root_.id
state_after: case h
n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
i : (Subtype_ p).last
⊢ lastFun (ofSubtype p) i = _root_.id i

tactic: induction i
state_before: case h
n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
i : (Subtype_ p).last
⊢ lastFun (ofSubtype p) i = _root_.id i
state_after: case h.mk
n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
val✝ : α Fin2.fz
property✝ : p Fin2.fz val✝
⊢ lastFun (ofSubtype p) ⟨val✝, property✝⟩ = _root_.id ⟨val✝, property✝⟩

tactic: simp [dropFun, *]
state_before: case h.mk
n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
val✝ : α Fin2.fz
property✝ : p Fin2.fz val✝
⊢ lastFun (ofSubtype p) ⟨val✝, property✝⟩ = _root_.id ⟨val✝, property✝⟩
state_after: case h.mk
n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
val✝ : α Fin2.fz
property✝ : p Fin2.fz val✝
⊢ lastFun (ofSubtype p) ⟨val✝, property✝⟩ = ⟨val✝, property✝⟩

tactic: rfl
state_before: case h.mk
n : ℕ
α : TypeVec.{u_1} (n + 1)
p : α ⟹ repeat (n + 1) Prop
val✝ : α Fin2.fz
property✝ : p Fin2.fz val✝
⊢ lastFun (ofSubtype p) ⟨val✝, property✝⟩ = ⟨val✝, property✝⟩
state_after: no goals
Theorem: Finset.Colex.max_mem_aux
File: Mathlib/Combinatorics/Colex.lean

tactic: simpa
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s✝ t✝ u : Finset α
a b : α
r : ℕ
s t : Colex α
hst : s ≠ t
⊢ (s.ofColex ∆ t.ofColex).Nonempty
state_after: no goals
Theorem: Filter.mem_comap'
File: Mathlib/Order/Filter/Basic.lean

tactic: rwa [hx]
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l✝ : Filter α
f : α → β
l : Filter β
p : α → Prop
s : Set α
x✝ : s ∈ comap f l
t : Set β
ht : t ∈ l
hts : f ⁻¹' t ⊆ s
y : β
hy : y ∈ t
x : α
hx : f x = y
⊢ f x ∈ t
state_after: no goals
Theorem: Nat.modEq_iff_dvd
File: Mathlib/Data/Nat/ModEq.lean

tactic: rw [ModEq, eq_comm, ← Int.natCast_inj, Int.natCast_mod, Int.natCast_mod,
  Int.emod_eq_emod_iff_emod_sub_eq_zero, Int.dvd_iff_emod_eq_zero]
state_before: m n a b c d : ℕ
⊢ a ≡ b [MOD n] ↔ ↑n ∣ ↑b - ↑a
state_after: no goals
Theorem: PartialEquiv.refl_prod_refl
File: Mathlib/Logic/Equiv/PartialEquiv.lean

tactic: ext ⟨x, y⟩ <;> simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
e : PartialEquiv α β
e' : PartialEquiv β γ
⊢ (PartialEquiv.refl α).prod (PartialEquiv.refl β) = PartialEquiv.refl (α × β)
state_after: no goals
Theorem: WeierstrassCurve.Affine.Point.map_map
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

tactic: cases P <;> rfl
state_before: R✝ : Type u
inst✝²³ : CommRing R✝
W✝ : Affine R✝
R : Type r
inst✝²² : CommRing R
W : Affine R
S : Type s
inst✝²¹ : CommRing S
inst✝²⁰ : Algebra R S
A : Type u
inst✝¹⁹ : CommRing A
inst✝¹⁸ : Algebra R A
inst✝¹⁷ : Algebra S A
inst✝¹⁶ : IsScalarTower R S A
B : Type v
inst✝¹⁵ : CommRing B
inst✝¹⁴ : Algebra R B
inst✝¹³ : Algebra S B
inst✝¹² : IsScalarTower R S B
f✝ : A →ₐ[S] B
F : Type u
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R F
inst✝⁹ : Algebra S F
inst✝⁸ : IsScalarTower R S F
K : Type v
inst✝⁷ : Field K
inst✝⁶ : Algebra R K
inst✝⁵ : Algebra S K
inst✝⁴ : IsScalarTower R S K
f : F →ₐ[S] K
L : Type w
inst✝³ : Field L
inst✝² : Algebra R L
inst✝¹ : Algebra S L
inst✝ : IsScalarTower R S L
g : K →ₐ[S] L
P : W⟮F⟯
⊢ (map W g) ((map W f) P) = (map W (g.comp f)) P
state_after: no goals
Theorem: WithTop.coe_add_eq_top_iff
File: Mathlib/Algebra/Order/Monoid/WithTop.lean

tactic: simp
state_before: α : Type u
β : Type v
inst✝ : Add α
a b c d : WithTop α
x y✝ : α
y : WithTop α
⊢ ↑x + y = ⊤ ↔ y = ⊤
state_after: no goals