ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: nsmul_add
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommMonoid M
x y z a b : M
⊢ (a * b) ^ 0 = a ^ 0 * b ^ 0
state_after: no goals
tactic: rw [pow_zero, pow_zero, pow_zero, one_mul]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : CommMonoid M
x y z a b : M
n : ℕ
⊢ (a * b) ^ (n + 1) = a ^ (n + 1) * b ^ (n + 1)
state_after: no goals
tactic: rw [pow_succ', pow_succ', pow_succ', mul_pow, mul_mul_mul_comm]
Theorem: Complex.log_mul_ofReal
File: Mathlib/Analysis/SpecialFunctions/Complex/Log.lean

Proof steps:
state_before: r : ℝ
hr : 0 < r
x : ℂ
hx : x ≠ 0
⊢ log (x * ↑r) = ↑(Real.log r) + log x
state_after: no goals
tactic: rw [mul_comm, log_ofReal_mul hr hx]
Theorem: Mon_.EquivLaxMonoidalFunctorPUnit.unitIso_hom_app_toNatTrans_app
File: Mathlib/CategoryTheory/Monoidal/Mon_.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
inst✝ : MonoidalCategory C
F : LaxMonoidalFunctor (Discrete PUnit.{u + 1}) C
x✝ : Discrete PUnit.{u + 1}
⊢ x✝ = (trivial (Discrete PUnit.{u + 1})).X
state_after: no goals
tactic: ext
Theorem: List.length_cyclicPermutations_of_ne_nil
File: Mathlib/Data/List/Rotate.lean

Proof steps:
state_before: α : Type u
l✝ l' l : List α
h : l ≠ []
⊢ l.cyclicPermutations.length = l.length
state_after: no goals
tactic: simp [cyclicPermutations_of_ne_nil _ h]
Theorem: AffineSubspace.perpBisector_self
File: Mathlib/Geometry/Euclidean/PerpBisector.lean

Proof steps:
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c c₁ c₂ p₁ p₂ p x✝ : P
⊢ x✝ ∈ ↑⊤ → x✝ ∈ ↑(perpBisector p p)
state_after: no goals
tactic: simp [mem_perpBisector_iff_inner_eq_inner]
Theorem: ProbabilityTheory.condCount_univ
File: Mathlib/Probability/CondCount.lean

Proof steps:
state_before: Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ (condCount Set.univ) s = Measure.count s / ↑(Fintype.card Ω)
state_after: Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ Measure.count s / Measure.count Set.univ = Measure.count s / ↑(Fintype.card Ω)
tactic: rw [condCount, cond_apply _ MeasurableSet.univ, ← ENNReal.div_eq_inv_mul, Set.univ_inter]
state_before: Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ Measure.count s / Measure.count Set.univ = Measure.count s / ↑(Fintype.card Ω)
state_after: case e_a
Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ Measure.count Set.univ = ↑(Fintype.card Ω)
tactic: congr
state_before: case e_a
Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ Measure.count Set.univ = ↑(Fintype.card Ω)
state_after: case e_a
Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ ∑ x : Ω, 1 = ↑(Fintype.card Ω)

case e_a
Ω : Type u_1
inst✝¹ : MeasurableSpace Ω
inst✝ : Fintype Ω
s : Set Ω
⊢ MeasurableSet ↑Finset.univ
tactic: rw [← Finset.coe_univ, Measure.count_apply, Finset.univ.tsum_subtype' fun _ => (1 : ENNReal)]
Theorem: continuous_const_smul_iff
File: Mathlib/Topology/Algebra/ConstMulAction.lean

Proof steps:
state_before: M : Type u_1
α : Type u_2
β : Type u_3
G : Type u_4
inst✝⁴ : TopologicalSpace α
inst✝³ : Group G
inst✝² : MulAction G α
inst✝¹ : ContinuousConstSMul G α
inst✝ : TopologicalSpace β
f : β → α
b : β
s : Set β
c : G
⊢ (Continuous fun x => c • f x) ↔ Continuous f
state_after: no goals
tactic: simp only [continuous_iff_continuousAt, continuousAt_const_smul_iff]
Theorem: toIcoMod_add_right'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIcoMod hp (a + p) b = toIcoMod hp a b + p
state_after: no goals
tactic: simpa only [one_zsmul] using toIcoMod_add_zsmul' hp a b 1
Theorem: List.subperm_iff
File: Mathlib/Data/List/Perm.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
l l₁ l₂ : List α
a : α
⊢ l₁ <+~ l₂ ↔ ∃ l, l ~ l₂ ∧ l₁ <+ l
state_after: α : Type u_1
β : Type u_2
l l₁ l₂ : List α
a : α
⊢ l₁ <+~ l₂ → ∃ l, l ~ l₂ ∧ l₁ <+ l
tactic: refine ⟨?_, fun ⟨l, h₁, h₂⟩ ↦ h₂.subperm.trans h₁.subperm⟩
state_before: α : Type u_1
β : Type u_2
l l₁ l₂ : List α
a : α
⊢ l₁ <+~ l₂ → ∃ l, l ~ l₂ ∧ l₁ <+ l
state_after: case intro.intro
α : Type u_1
β : Type u_2
l✝ l₁ l₂ : List α
a : α
l : List α
h₁ : l ~ l₁
h₂ : l <+ l₂
⊢ ∃ l, l ~ l₂ ∧ l₁ <+ l
tactic: rintro ⟨l, h₁, h₂⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
l✝ l₁ l₂ : List α
a : α
l : List α
h₁ : l ~ l₁
h₂ : l <+ l₂
⊢ ∃ l, l ~ l₂ ∧ l₁ <+ l
state_after: case intro.intro.intro
α : Type u_1
β : Type u_2
l✝ l₁ l₂ : List α
a : α
l : List α
h₁ : l ~ l₁
h₂✝ : l <+ l₂
l' : List α
h₂ : l₂ ~ l ++ l'
⊢ ∃ l, l ~ l₂ ∧ l₁ <+ l
tactic: obtain ⟨l', h₂⟩ := h₂.exists_perm_append
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
l✝ l₁ l₂ : List α
a : α
l : List α
h₁ : l ~ l₁
h₂✝ : l <+ l₂
l' : List α
h₂ : l₂ ~ l ++ l'
⊢ ∃ l, l ~ l₂ ∧ l₁ <+ l
state_after: no goals
tactic: exact ⟨l₁ ++ l', (h₂.trans (h₁.append_right _)).symm, (prefix_append _ _).sublist⟩
Theorem: AdicCompletion.map_comp
File: Mathlib/RingTheory/AdicCompletion/Functoriality.lean

Proof steps:
state_before: R : Type u_1
inst✝⁸ : CommRing R
I : Ideal R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
N : Type u_3
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
P : Type u_4
inst✝³ : AddCommGroup P
inst✝² : Module R P
T : Type u_5
inst✝¹ : AddCommGroup T
inst✝ : Module (AdicCompletion I R) T
f : M →ₗ[R] N
g : N →ₗ[R] P
⊢ map I g ∘ₗ map I f = map I (g ∘ₗ f)
state_after: case h.h
R : Type u_1
inst✝⁸ : CommRing R
I : Ideal R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
N : Type u_3
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
P : Type u_4
inst✝³ : AddCommGroup P
inst✝² : Module R P
T : Type u_5
inst✝¹ : AddCommGroup T
inst✝ : Module (AdicCompletion I R) T
f : M →ₗ[R] N
g : N →ₗ[R] P
a✝ : AdicCauchySequence I M
n✝ : ℕ
⊢ ↑((map I g ∘ₗ map I f) ((mk I M) a✝)) n✝ = ↑((map I (g ∘ₗ f)) ((mk I M) a✝)) n✝
tactic: ext
state_before: case h.h
R : Type u_1
inst✝⁸ : CommRing R
I : Ideal R
M : Type u_2
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
N : Type u_3
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
P : Type u_4
inst✝³ : AddCommGroup P
inst✝² : Module R P
T : Type u_5
inst✝¹ : AddCommGroup T
inst✝ : Module (AdicCompletion I R) T
f : M →ₗ[R] N
g : N →ₗ[R] P
a✝ : AdicCauchySequence I M
n✝ : ℕ
⊢ ↑((map I g ∘ₗ map I f) ((mk I M) a✝)) n✝ = ↑((map I (g ∘ₗ f)) ((mk I M) a✝)) n✝
state_after: no goals
tactic: simp
Theorem: AddCon.addConGen_of_addCon
File: Mathlib/GroupTheory/Congruence/Basic.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c✝ c : Con M
⊢ conGen ⇑c ≤ c
state_after: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c✝ c : Con M
⊢ sInf {s | ∀ (x y : M), c x y → s x y} ≤ c
tactic: rw [conGen_eq]
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c✝ c : Con M
⊢ sInf {s | ∀ (x y : M), c x y → s x y} ≤ c
state_after: no goals
tactic: exact sInf_le fun _ _ => id
Theorem: PartENat.get_le_get
File: Mathlib/Data/Nat/PartENat.lean

Proof steps:
state_before: x y : PartENat
hx : x.Dom
hy : y.Dom
⊢ x.get hx ≤ y.get hy ↔ x ≤ y
state_after: no goals
tactic: conv =>
    lhs
    rw [← coe_le_coe, natCast_get, natCast_get]
Theorem: CauchyFilter.extend_pureCauchy
File: Mathlib/Topology/UniformSpace/Completion.lean

Proof steps:
state_before: α : Type u
inst✝³ : UniformSpace α
β : Type v
γ : Type w
inst✝² : UniformSpace β
inst✝¹ : UniformSpace γ
inst✝ : T0Space β
f : α → β
hf : UniformContinuous f
a : α
⊢ extend f (pureCauchy a) = f a
state_after: α : Type u
inst✝³ : UniformSpace α
β : Type v
γ : Type w
inst✝² : UniformSpace β
inst✝¹ : UniformSpace γ
inst✝ : T0Space β
f : α → β
hf : UniformContinuous f
a : α
⊢ ⋯.extend f (pureCauchy a) = f a
tactic: rw [extend, if_pos hf]
state_before: α : Type u
inst✝³ : UniformSpace α
β : Type v
γ : Type w
inst✝² : UniformSpace β
inst✝¹ : UniformSpace γ
inst✝ : T0Space β
f : α → β
hf : UniformContinuous f
a : α
⊢ ⋯.extend f (pureCauchy a) = f a
state_after: no goals
tactic: exact uniformly_extend_of_ind uniformInducing_pureCauchy denseRange_pureCauchy hf _
Theorem: ApplicativeTransformation.preserves_map
File: Mathlib/Control/Traversable/Basic.lean

Proof steps:
state_before: F : Type u → Type v
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
G : Type u → Type w
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
η : ApplicativeTransformation F G
α β : Type u
x : α → β
y : F α
⊢ (fun {α} => η.app α) (x <$> y) = x <$> (fun {α} => η.app α) y
state_after: no goals
tactic: rw [← pure_seq, η.preserves_seq, preserves_pure, pure_seq]
Theorem: Complex.hasStrictDerivAt_tan
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/ComplexDeriv.lean

Proof steps:
state_before: x : ℂ
h : cos x ≠ 0
⊢ HasStrictDerivAt tan (1 / cos x ^ 2) x
state_after: case h.e'_7
x : ℂ
h : cos x ≠ 0
⊢ 1 / cos x ^ 2 = (cos x * cos x - sin x * -sin x) / cos x ^ 2
tactic: convert (hasStrictDerivAt_sin x).div (hasStrictDerivAt_cos x) h using 1
state_before: case h.e'_7
x : ℂ
h : cos x ≠ 0
⊢ 1 / cos x ^ 2 = (cos x * cos x - sin x * -sin x) / cos x ^ 2
state_after: case h.e'_7
x : ℂ
h : ¬cos x = 0
⊢ (sin x ^ 2 + cos x ^ 2) / cos x ^ 2 = (cos x * cos x - sin x * -sin x) / cos x ^ 2
tactic: rw_mod_cast [← sin_sq_add_cos_sq x]
state_before: case h.e'_7
x : ℂ
h : ¬cos x = 0
⊢ (sin x ^ 2 + cos x ^ 2) / cos x ^ 2 = (cos x * cos x - sin x * -sin x) / cos x ^ 2
state_after: no goals
tactic: ring
Theorem: Submodule.closure_subset_topologicalClosure_span
File: Mathlib/Topology/Algebra/Module/Basic.lean

Proof steps:
state_before: R R' : Type u
M M' : Type v
inst✝¹⁰ : Semiring R
inst✝⁹ : Ring R'
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : TopologicalSpace M'
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M
inst✝³ : ContinuousConstSMul R M
inst✝² : Module R' M'
inst✝¹ : ContinuousConstSMul R' M'
inst✝ : ContinuousAdd M
s : Set M
⊢ closure s ⊆ ↑(span R s).topologicalClosure
state_after: R R' : Type u
M M' : Type v
inst✝¹⁰ : Semiring R
inst✝⁹ : Ring R'
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : TopologicalSpace M'
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M
inst✝³ : ContinuousConstSMul R M
inst✝² : Module R' M'
inst✝¹ : ContinuousConstSMul R' M'
inst✝ : ContinuousAdd M
s : Set M
⊢ closure s ⊆ closure ↑(span R s)
tactic: rw [Submodule.topologicalClosure_coe]
state_before: R R' : Type u
M M' : Type v
inst✝¹⁰ : Semiring R
inst✝⁹ : Ring R'
inst✝⁸ : TopologicalSpace M
inst✝⁷ : AddCommMonoid M
inst✝⁶ : TopologicalSpace M'
inst✝⁵ : AddCommGroup M'
inst✝⁴ : Module R M
inst✝³ : ContinuousConstSMul R M
inst✝² : Module R' M'
inst✝¹ : ContinuousConstSMul R' M'
inst✝ : ContinuousAdd M
s : Set M
⊢ closure s ⊆ closure ↑(span R s)
state_after: no goals
tactic: exact closure_mono subset_span
Theorem: Matrix.zero_dotProduct
File: Mathlib/Data/Matrix/Basic.lean

Proof steps:
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝² : Fintype m
inst✝¹ : Fintype n
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
x y : n → α
⊢ 0 ⬝ᵥ v = 0
state_after: no goals
tactic: simp [dotProduct]
Theorem: card_algHom_le_finrank
File: Mathlib/LinearAlgebra/FreeModule/Finite/Matrix.lean

Proof steps:
state_before: R : Type u
S : Type u'
M✝ : Type v
N : Type w
K : Type u_1
M : Type u_2
L : Type v
inst✝⁷ : CommRing K
inst✝⁶ : Ring M
inst✝⁵ : Algebra K M
inst✝⁴ : Module.Free K M
inst✝³ : Module.Finite K M
inst✝² : CommRing L
inst✝¹ : IsDomain L
inst✝ : Algebra K L
⊢ Nat.card (M →ₐ[K] L) ≤ finrank K M
state_after: case h.e'_4
R : Type u
S : Type u'
M✝ : Type v
N : Type w
K : Type u_1
M : Type u_2
L : Type v
inst✝⁷ : CommRing K
inst✝⁶ : Ring M
inst✝⁵ : Algebra K M
inst✝⁴ : Module.Free K M
inst✝³ : Module.Finite K M
inst✝² : CommRing L
inst✝¹ : IsDomain L
inst✝ : Algebra K L
⊢ finrank K M = toNat (lift.{v, u_2} (Module.rank K M))

R : Type u
S : Type u'
M✝ : Type v
N : Type w
K : Type u_1
M : Type u_2
L : Type v
inst✝⁷ : CommRing K
inst✝⁶ : Ring M
inst✝⁵ : Algebra K M
inst✝⁴ : Module.Free K M
inst✝³ : Module.Finite K M
inst✝² : CommRing L
inst✝¹ : IsDomain L
inst✝ : Algebra K L
⊢ lift.{v, u_2} (Module.rank K M) < ℵ₀
tactic: convert toNat_le_toNat (cardinal_mk_algHom_le_rank K M L) ?_
Theorem: AlgebraicGeometry.LocallyRingedSpace.residueFieldMap_id
File: Mathlib/Geometry/RingedSpace/LocallyRingedSpace/ResidueField.lean

Proof steps:
state_before: X✝ : LocallyRingedSpace
U : Opens ↑X✝.toTopCat
X Y : LocallyRingedSpace
f : X ⟶ Y
x : ↑X.toTopCat
⊢ residueFieldMap (𝟙 X) x = 𝟙 (X.residueField x)
state_after: X✝ : LocallyRingedSpace
U : Opens ↑X✝.toTopCat
X Y : LocallyRingedSpace
f : X ⟶ Y
x : ↑X.toTopCat
⊢ LocalRing.ResidueField.map (𝟙 (X.presheaf.stalk x)) = 𝟙 (X.residueField x)
tactic: simp only [id_val', SheafedSpace.id_base, TopCat.coe_id, id_eq, residueFieldMap, stalkMap_id]
state_before: X✝ : LocallyRingedSpace
U : Opens ↑X✝.toTopCat
X Y : LocallyRingedSpace
f : X ⟶ Y
x : ↑X.toTopCat
⊢ LocalRing.ResidueField.map (𝟙 (X.presheaf.stalk x)) = 𝟙 (X.residueField x)
state_after: no goals
tactic: apply LocalRing.ResidueField.map_id
Theorem: WeierstrassCurve.Affine.nonsingular_zero_of_Δ_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
h : W.Equation 0 0
hΔ : Δ W ≠ 0
⊢ W.Nonsingular 0 0
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
hΔ : Δ W ≠ 0
h : W.a₆ = 0
⊢ W.a₆ = 0 ∧ (W.a₃ ≠ 0 ∨ W.a₄ ≠ 0)
tactic: simp only [equation_zero, nonsingular_zero] at *
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
hΔ : Δ W ≠ 0
h : W.a₆ = 0
⊢ W.a₆ = 0 ∧ (W.a₃ ≠ 0 ∨ W.a₄ ≠ 0)
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
h : W.a₆ = 0
hΔ : W.a₆ = 0 → W.a₃ = 0 ∧ W.a₄ = 0
⊢ Δ W = 0
tactic: contrapose! hΔ
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
h : W.a₆ = 0
hΔ : W.a₆ = 0 → W.a₃ = 0 ∧ W.a₄ = 0
⊢ Δ W = 0
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
h : W.a₆ = 0
hΔ : W.a₆ = 0 → W.a₃ = 0 ∧ W.a₄ = 0
⊢ -(W.a₁ ^ 2 + 4 * W.a₂) ^ 2 * (W.a₁ ^ 2 * 0 + 4 * W.a₂ * 0 - W.a₁ * 0 * 0 + W.a₂ * 0 ^ 2 - 0 ^ 2) -
          8 * (2 * 0 + W.a₁ * 0) ^ 3 -
        27 * (0 ^ 2 + 4 * 0) ^ 2 +
      9 * (W.a₁ ^ 2 + 4 * W.a₂) * (2 * 0 + W.a₁ * 0) * (0 ^ 2 + 4 * 0) =
    0
tactic: simp only [b₂, b₄, b₆, b₈, Δ, h, hΔ]
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
h : W.a₆ = 0
hΔ : W.a₆ = 0 → W.a₃ = 0 ∧ W.a₄ = 0
⊢ -(W.a₁ ^ 2 + 4 * W.a₂) ^ 2 * (W.a₁ ^ 2 * 0 + 4 * W.a₂ * 0 - W.a₁ * 0 * 0 + W.a₂ * 0 ^ 2 - 0 ^ 2) -
          8 * (2 * 0 + W.a₁ * 0) ^ 3 -
        27 * (0 ^ 2 + 4 * 0) ^ 2 +
      9 * (W.a₁ ^ 2 + 4 * W.a₂) * (2 * 0 + W.a₁ * 0) * (0 ^ 2 + 4 * 0) =
    0
state_after: no goals
tactic: ring1
Theorem: Multipliable.hasProd_iff_tendsto_nat
File: Mathlib/Topology/Algebra/InfiniteSum/NatInt.lean

Proof steps:
state_before: M : Type u_1
inst✝³ : CommMonoid M
inst✝² : TopologicalSpace M
m m' : M
G : Type u_2
inst✝¹ : CommGroup G
g g' : G
inst✝ : T2Space M
f : ℕ → M
hf : Multipliable f
⊢ HasProd f m ↔ Tendsto (fun n => ∏ i ∈ range n, f i) atTop (𝓝 m)
state_after: M : Type u_1
inst✝³ : CommMonoid M
inst✝² : TopologicalSpace M
m m' : M
G : Type u_2
inst✝¹ : CommGroup G
g g' : G
inst✝ : T2Space M
f : ℕ → M
hf : Multipliable f
h : Tendsto (fun n => ∏ i ∈ range n, f i) atTop (𝓝 m)
⊢ HasProd f m
tactic: refine ⟨fun h ↦ h.tendsto_prod_nat, fun h ↦ ?_⟩
state_before: M : Type u_1
inst✝³ : CommMonoid M
inst✝² : TopologicalSpace M
m m' : M
G : Type u_2
inst✝¹ : CommGroup G
g g' : G
inst✝ : T2Space M
f : ℕ → M
hf : Multipliable f
h : Tendsto (fun n => ∏ i ∈ range n, f i) atTop (𝓝 m)
⊢ HasProd f m
state_after: M : Type u_1
inst✝³ : CommMonoid M
inst✝² : TopologicalSpace M
m m' : M
G : Type u_2
inst✝¹ : CommGroup G
g g' : G
inst✝ : T2Space M
f : ℕ → M
hf : Multipliable f
h : Tendsto (fun n => ∏ i ∈ range n, f i) atTop (𝓝 m)
⊢ HasProd f (∏' (b : ℕ), f b)
tactic: rw [tendsto_nhds_unique h hf.hasProd.tendsto_prod_nat]
state_before: M : Type u_1
inst✝³ : CommMonoid M
inst✝² : TopologicalSpace M
m m' : M
G : Type u_2
inst✝¹ : CommGroup G
g g' : G
inst✝ : T2Space M
f : ℕ → M
hf : Multipliable f
h : Tendsto (fun n => ∏ i ∈ range n, f i) atTop (𝓝 m)
⊢ HasProd f (∏' (b : ℕ), f b)
state_after: no goals
tactic: exact hf.hasProd
Theorem: MeasurableSet.const_smul
File: Mathlib/MeasureTheory/Group/Pointwise.lean

Proof steps:
state_before: G : Type u_1
α : Type u_2
inst✝⁴ : Group G
inst✝³ : MulAction G α
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSMul G α
s : Set α
hs : MeasurableSet s
a : G
⊢ MeasurableSet (a • s)
state_after: G : Type u_1
α : Type u_2
inst✝⁴ : Group G
inst✝³ : MulAction G α
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSMul G α
s : Set α
hs : MeasurableSet s
a : G
⊢ MeasurableSet ((fun x => a⁻¹ • x) ⁻¹' s)
tactic: rw [← preimage_smul_inv]
state_before: G : Type u_1
α : Type u_2
inst✝⁴ : Group G
inst✝³ : MulAction G α
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSMul G α
s : Set α
hs : MeasurableSet s
a : G
⊢ MeasurableSet ((fun x => a⁻¹ • x) ⁻¹' s)
state_after: no goals
tactic: exact measurable_const_smul _ hs
Theorem: AddAction.vadd_mem_fixedBy_iff_mem_fixedBy
File: Mathlib/GroupTheory/GroupAction/FixedPoints.lean

Proof steps:
state_before: α : Type u_1
G : Type u_2
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u_3
inst✝¹ : Monoid M
inst✝ : MulAction M α
a : α
g : G
⊢ g • a ∈ fixedBy α g ↔ a ∈ fixedBy α g
state_after: α : Type u_1
G : Type u_2
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u_3
inst✝¹ : Monoid M
inst✝ : MulAction M α
a : α
g : G
⊢ g • a = a ↔ a ∈ fixedBy α g
tactic: rw [mem_fixedBy, smul_left_cancel_iff]
state_before: α : Type u_1
G : Type u_2
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u_3
inst✝¹ : Monoid M
inst✝ : MulAction M α
a : α
g : G
⊢ g • a = a ↔ a ∈ fixedBy α g
state_after: no goals
tactic: rfl
Theorem: Ordinal.zero_nadd
File: Mathlib/SetTheory/Ordinal/NaturalOps.lean

Proof steps:
state_before: a b c : Ordinal.{u}
⊢ 0 ♯ a = a
state_after: no goals
tactic: rw [nadd_comm, nadd_zero]
Theorem: Nat.choose_mul
File: Mathlib/Data/Nat/Choose/Basic.lean

Proof steps:
state_before: n k s : ℕ
hkn : k ≤ n
hsk : s ≤ k
⊢ 0 < (n - k)! * (k - s)! * s !
state_after: no goals
tactic: apply_rules [factorial_pos, Nat.mul_pos]
state_before: n k s : ℕ
hkn : k ≤ n
hsk : s ≤ k
h : 0 < (n - k)! * (k - s)! * s !
⊢ n.choose k * k.choose s * ((n - k)! * (k - s)! * s !) = n.choose k * (k.choose s * s ! * (k - s)!) * (n - k)!
state_after: no goals
tactic: rw [Nat.mul_assoc, Nat.mul_assoc, Nat.mul_assoc, Nat.mul_assoc _ s !, Nat.mul_assoc,
        Nat.mul_comm (n - k)!, Nat.mul_comm s !]
state_before: n k s : ℕ
hkn : k ≤ n
hsk : s ≤ k
h : 0 < (n - k)! * (k - s)! * s !
⊢ n.choose k * (k.choose s * s ! * (k - s)!) * (n - k)! = n !
state_after: no goals
tactic: rw [choose_mul_factorial_mul_factorial hsk, choose_mul_factorial_mul_factorial hkn]
state_before: n k s : ℕ
hkn : k ≤ n
hsk : s ≤ k
h : 0 < (n - k)! * (k - s)! * s !
⊢ n ! = n.choose s * s ! * ((n - s).choose (k - s) * (k - s)! * (n - s - (k - s))!)
state_after: no goals
tactic: rw [choose_mul_factorial_mul_factorial (Nat.sub_le_sub_right hkn _),
        choose_mul_factorial_mul_factorial (hsk.trans hkn)]
state_before: n k s : ℕ
hkn : k ≤ n
hsk : s ≤ k
h : 0 < (n - k)! * (k - s)! * s !
⊢ n.choose s * s ! * ((n - s).choose (k - s) * (k - s)! * (n - s - (k - s))!) =
    n.choose s * (n - s).choose (k - s) * ((n - k)! * (k - s)! * s !)
state_after: no goals
tactic: rw [Nat.sub_sub_sub_cancel_right hsk, Nat.mul_assoc, Nat.mul_left_comm s !, Nat.mul_assoc,
        Nat.mul_comm (k - s)!, Nat.mul_comm s !, Nat.mul_right_comm, ← Nat.mul_assoc]
Theorem: CategoryTheory.Localization.LeftBousfield.W_of_isIso
File: Mathlib/CategoryTheory/Localization/Bousfield.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Category.{?u.3036, u_2} D
P : C → Prop
X Y : C
f : X ⟶ Y
inst✝ : IsIso f
Z : C
x✝ : P Z
⊢ Function.Bijective fun g => f ≫ g
state_after: case left
C : Type u_1
D : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Category.{?u.3036, u_2} D
P : C → Prop
X Y : C
f : X ⟶ Y
inst✝ : IsIso f
Z : C
x✝ : P Z
⊢ Function.Injective fun g => f ≫ g

case right
C : Type u_1
D : Type u_2
inst✝² : Category.{u_3, u_1} C
inst✝¹ : Category.{?u.3036, u_2} D
P : C → Prop
X Y : C
f : X ⟶ Y
inst✝ : IsIso f
Z : C
x✝ : P Z
⊢ Function.Surjective fun g => f ≫ g
tactic: constructor
Theorem: sub_lt_iff_lt_add
File: Mathlib/Algebra/Order/Group/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LT α
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c d : α
⊢ a / c < b ↔ a < b * c
state_after: no goals
tactic: rw [← mul_lt_mul_iff_right c, div_eq_mul_inv, inv_mul_cancel_right]
Theorem: Nat.coprime_mul_left_add_right
File: Mathlib/Data/Nat/GCD/Basic.lean

Proof steps:
state_before: m n k : ℕ
⊢ m.Coprime (m * k + n) ↔ m.Coprime n
state_after: no goals
tactic: rw [Coprime, Coprime, gcd_mul_left_add_right]
Theorem: NonUnitalRingHom.srange_top_iff_surjective
File: Mathlib/RingTheory/NonUnitalSubsemiring/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
inst✝⁷ : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝⁶ : NonUnitalNonAssocSemiring S
inst✝⁵ : NonUnitalNonAssocSemiring T
F : Type u_1
inst✝⁴ : NonUnitalNonAssocSemiring T
inst✝³ : FunLike F R S
inst✝² : NonUnitalRingHomClass F R S
S' : Type u_2
inst✝¹ : SetLike S' S
inst✝ : NonUnitalSubsemiringClass S' S
s : NonUnitalSubsemiring R
f : F
⊢ ↑(srange f) = ↑⊤ ↔ Set.range ⇑f = Set.univ
state_after: no goals
tactic: rw [coe_srange, coe_top]
Theorem: OnePoint.ultrafilter_le_nhds_infty
File: Mathlib/Topology/Compactification/OnePoint.lean

Proof steps:
state_before: X : Type u_1
inst✝ : TopologicalSpace X
s : Set (OnePoint X)
t : Set X
f : Ultrafilter (OnePoint X)
⊢ ↑f ≤ 𝓝 ∞ ↔ ∀ (s : Set X), IsClosed s → IsCompact s → some '' s ∉ f
state_after: no goals
tactic: simp only [le_nhds_infty, ← compl_image_coe, Ultrafilter.mem_coe,
    Ultrafilter.compl_mem_iff_not_mem]
Theorem: HereditarilyLindelof_LindelofSets
File: Mathlib/Topology/Compactness/Lindelof.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s✝ t : Set X
inst✝ : HereditarilyLindelofSpace X
s : Set X
⊢ IsLindelof s
state_after: case a
X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s✝ t : Set X
inst✝ : HereditarilyLindelofSpace X
s : Set X
⊢ s ⊆ univ
tactic: apply HereditarilyLindelofSpace.isHereditarilyLindelof_univ
state_before: case a
X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s✝ t : Set X
inst✝ : HereditarilyLindelofSpace X
s : Set X
⊢ s ⊆ univ
state_after: no goals
tactic: exact subset_univ s
Theorem: Ideal.isUnit_of_sub_one_mem_jacobson_bot
File: Mathlib/RingTheory/JacobsonIdeal.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
r : R
h : r - 1 ∈ ⊥.jacobson
⊢ IsUnit r
state_after: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
r : R
h : r - 1 ∈ ⊥.jacobson
s : R
hs : s * r - 1 ∈ ⊥
⊢ IsUnit r
tactic: cases' exists_mul_sub_mem_of_sub_one_mem_jacobson r h with s hs
state_before: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
r : R
h : r - 1 ∈ ⊥.jacobson
s : R
hs : s * r - 1 ∈ ⊥
⊢ IsUnit r
state_after: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
r : R
h : r - 1 ∈ ⊥.jacobson
s : R
hs : r * s = 1
⊢ IsUnit r
tactic: rw [mem_bot, sub_eq_zero, mul_comm] at hs
state_before: case intro
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
r : R
h : r - 1 ∈ ⊥.jacobson
s : R
hs : r * s = 1
⊢ IsUnit r
state_after: no goals
tactic: exact isUnit_of_mul_eq_one _ _ hs