ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: cauchySeq_finset_iff_nat_tprod_vanishing
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✝¹ : UniformSpace G
inst✝ : UniformGroup G
f : ℕ → G
⊢ (CauchySeq fun s => ∏ n ∈ s, f n) ↔ ∀ e ∈ 𝓝 1, ∃ N, ∀ t ⊆ {n | N ≤ n}, ∏' (n : ↑t), f ↑n ∈ e
state_after: case refine_1
M : Type u_1
inst✝⁴ : CommMonoid M
inst✝³ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝² : CommGroup G
g g' : G
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
f : ℕ → G
vanish : ∀ e ∈ 𝓝 1, ∃ s, ∀ (t : Set ℕ), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e
e : Set G
he : e ∈ 𝓝 1
⊢ ∃ N, ∀ t ⊆ {n | N ≤ n}, ∏' (n : ↑t), f ↑n ∈ e

case refine_2
M : Type u_1
inst✝⁴ : CommMonoid M
inst✝³ : TopologicalSpace M
m m' : M
G : Type u_2
inst✝² : CommGroup G
g g' : G
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
f : ℕ → G
vanish : ∀ e ∈ 𝓝 1, ∃ N, ∀ t ⊆ {n | N ≤ n}, ∏' (n : ↑t), f ↑n ∈ e
e : Set G
he : e ∈ 𝓝 1
⊢ ∃ s, ∀ (t : Set ℕ), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e
tactic: refine cauchySeq_finset_iff_tprod_vanishing.trans ⟨fun vanish e he ↦ ?_, fun vanish e he ↦ ?_⟩
Theorem: Int.isUnit_iff_natAbs_eq
File: Mathlib/Algebra/Group/Int.lean

Proof steps:
state_before: u v : ℤ
⊢ IsUnit u ↔ u.natAbs = 1
state_after: no goals
tactic: simp [natAbs_eq_iff, isUnit_iff]
Theorem: MeasureTheory.lmarginal_insert
File: Mathlib/MeasureTheory/Integral/Marginal.lean

Proof steps:
state_before: δ : Type u_1
δ' : Type u_2
π : δ → Type u_3
inst✝² : (x : δ) → MeasurableSpace (π x)
μ : (i : δ) → Measure (π i)
inst✝¹ : ∀ (i : δ), SigmaFinite (μ i)
inst✝ : DecidableEq δ
s t : Finset δ
f✝ g : ((i : δ) → π i) → ℝ≥0∞
x✝ y : (i : δ) → π i
i✝ : δ
f : ((i : δ) → π i) → ℝ≥0∞
hf : Measurable f
i : δ
hi : i ∉ s
x : (i : δ) → π i
⊢ (∫⋯∫⁻_insert i s, f ∂μ) x = ∫⁻ (xᵢ : π i), (∫⋯∫⁻_s, f ∂μ) (update x i xᵢ) ∂μ i
state_after: no goals
tactic: rw [Finset.insert_eq, lmarginal_union μ f hf (Finset.disjoint_singleton_left.mpr hi),
    lmarginal_singleton]
Theorem: Set.image_op_neg
File: Mathlib/Data/Set/Pointwise/Basic.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : InvolutiveInv α
s t : Set α
a : α
⊢ op '' s⁻¹ = (op '' s)⁻¹
state_after: no goals
tactic: simp_rw [← image_inv, Function.Semiconj.set_image op_inv s]
Theorem: Orientation.areaForm_comp_rightAngleRotation
File: Mathlib/Analysis/InnerProductSpace/TwoDim.lean

Proof steps:
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
⊢ (o.areaForm (o.rightAngleRotation x)) (o.rightAngleRotation y) = (o.areaForm x) y
state_after: no goals
tactic: simp
Theorem: Ordinal.mem_closure_iff_bsup
File: Mathlib/SetTheory/Ordinal/Topology.lean

Proof steps:
state_before: s : Set Ordinal.{u}
a : Ordinal.{u}
⊢ (∃ o, o ≠ 0 ∧ ∃ f, (∀ (x : Ordinal.{u}) (hx : x < o), f x hx ∈ s) ∧ o.bsup f = a) ↔
    ∃ o, ∃ (_ : o ≠ 0), ∃ f, (∀ (i : Ordinal.{u}) (hi : i < o), f i hi ∈ s) ∧ o.bsup f = a
state_after: no goals
tactic: simp only [exists_prop]
Theorem: exists_int_gt
File: Mathlib/Algebra/Order/Archimedean.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
inst✝¹ : StrictOrderedRing α
inst✝ : Archimedean α
x : α
n : ℕ
h : x < ↑n
⊢ x < ↑↑n
state_after: no goals
tactic: rwa [Int.cast_natCast]
Theorem: PresheafOfModules.DifferentialsConstruction.relativeDifferentials'_map_d
File: Mathlib/Algebra/Category/ModuleCat/Differentials/Presheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
S : Cᵒᵖ ⥤ CommRingCat
F : C ⥤ D
S' R : Dᵒᵖ ⥤ CommRingCat
M N : PresheafOfModules (R ⋙ forget₂ CommRingCat RingCat)
φ : S ⟶ F.op ⋙ R
φ' : S' ⟶ R
X Y : Dᵒᵖ
f : X ⟶ Y
x : ↑(R.obj X)
⊢ ((relativeDifferentials' φ').map f) (CommRingCat.KaehlerDifferential.d x) =
    CommRingCat.KaehlerDifferential.d ((R.map f) x)
state_after: no goals
tactic: rw [relativeDifferentials'_map_apply, CommRingCat.KaehlerDifferential.map_d]
Theorem: Option.elim_none_some
File: Mathlib/Data/Option/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
f : Option α → β
o : Option α
⊢ o.elim (f none) (f ∘ some) = f o
state_after: no goals
tactic: cases o <;> rfl
Theorem: Finset.disjSups_inter_subset_left
File: Mathlib/Data/Finset/Sups.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : DecidableEq α
inst✝³ : DecidableEq β
inst✝² : SemilatticeSup α
inst✝¹ : OrderBot α
inst✝ : DecidableRel Disjoint
s s₁ s₂ t t₁ t₂ u : Finset α
a b c : α
⊢ (s₁ ∩ s₂) ○ t ⊆ s₁ ○ t ∩ s₂ ○ t
state_after: no goals
tactic: simpa only [disjSups, inter_product, filter_inter_distrib] using image_inter_subset _ _ _
Theorem: small_of_injective_of_exists
File: Mathlib/Logic/Small/Basic.lean

Proof steps:
state_before: α : Type v
β : Type w
γ : Type v'
inst✝ : Small.{u, v} α
f : α → γ
g : β → γ
hg : Function.Injective g
h : ∀ (b : β), ∃ a, f a = g b
⊢ Small.{u, w} β
state_after: case pos
α : Type v
β : Type w
γ : Type v'
inst✝ : Small.{u, v} α
f : α → γ
g : β → γ
hg : Function.Injective g
h : ∀ (b : β), ∃ a, f a = g b
hβ : Nonempty β
⊢ Small.{u, w} β

case neg
α : Type v
β : Type w
γ : Type v'
inst✝ : Small.{u, v} α
f : α → γ
g : β → γ
hg : Function.Injective g
h : ∀ (b : β), ∃ a, f a = g b
hβ : ¬Nonempty β
⊢ Small.{u, w} β
tactic: by_cases hβ : Nonempty β
Theorem: Subsemiring.map_comap_eq_self
File: Mathlib/Algebra/Ring/Subsemiring/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
inst✝² : NonAssocSemiring R
M : Submonoid R
inst✝¹ : NonAssocSemiring S
inst✝ : NonAssocSemiring T
f : R →+* S
t : Subsemiring S
h : t ≤ f.rangeS
⊢ map f (comap f t) = t
state_after: no goals
tactic: simpa only [inf_of_le_left h] using map_comap_eq f t
Theorem: StrictConvex.smul_mem_of_zero_mem
File: Mathlib/Analysis/Convex/Strict.lean

Proof steps:
state_before: 𝕜 : Type u_1
𝕝 : Type u_2
E : Type u_3
F : Type u_4
β : Type u_5
inst✝⁶ : OrderedRing 𝕜
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalSpace F
inst✝³ : AddCommGroup E
inst✝² : AddCommGroup F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s t✝ : Set E
x y : E
hs : StrictConvex 𝕜 s
zero_mem : 0 ∈ s
hx : x ∈ s
hx₀ : x ≠ 0
t : 𝕜
ht₀ : 0 < t
ht₁ : t < 1
⊢ t • x ∈ interior s
state_after: no goals
tactic: simpa using hs.add_smul_mem zero_mem (by simpa using hx) hx₀ ht₀ ht₁
Theorem: TendstoUniformly.tendstoLocallyUniformly
File: Mathlib/Topology/UniformSpace/UniformConvergence.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x✝ : α
p : Filter ι
p' : Filter α
g : ι → α
inst✝ : TopologicalSpace α
h : TendstoUniformly F f p
u : Set (β × β)
hu : u ∈ 𝓤 β
x : α
⊢ ∀ᶠ (n : ι) in p, ∀ y ∈ univ, (f y, F n y) ∈ u
state_after: no goals
tactic: simpa using h u hu
Theorem: Liouville.liouvilleWith
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

Proof steps:
state_before: x : ℝ
hx : Liouville x
p : ℝ
⊢ LiouvilleWith p x
state_after: x : ℝ
hx : Liouville x
p : ℝ
⊢ LiouvilleWith (↑⌈p⌉₊) x
tactic: suffices LiouvilleWith ⌈p⌉₊ x from this.mono (Nat.le_ceil p)
state_before: x : ℝ
hx : Liouville x
p : ℝ
⊢ LiouvilleWith (↑⌈p⌉₊) x
state_after: x : ℝ
hx : Liouville x
p : ℝ
⊢ ∀ (x_1 : ℕ),
    (1 < x_1 ∧ ∃ a, x ≠ ↑a / ↑x_1 ∧ |x - ↑a / ↑x_1| < 1 / ↑x_1 ^ ⌈p⌉₊) →
      ∃ m, x ≠ ↑m / ↑x_1 ∧ |x - ↑m / ↑x_1| < 1 / ↑x_1 ^ ↑⌈p⌉₊
tactic: refine ⟨1, ((eventually_gt_atTop 1).and_frequently (hx.frequently_exists_num ⌈p⌉₊)).mono ?_⟩
state_before: x : ℝ
hx : Liouville x
p : ℝ
⊢ ∀ (x_1 : ℕ),
    (1 < x_1 ∧ ∃ a, x ≠ ↑a / ↑x_1 ∧ |x - ↑a / ↑x_1| < 1 / ↑x_1 ^ ⌈p⌉₊) →
      ∃ m, x ≠ ↑m / ↑x_1 ∧ |x - ↑m / ↑x_1| < 1 / ↑x_1 ^ ↑⌈p⌉₊
state_after: case intro.intro.intro
x : ℝ
hx : Liouville x
p : ℝ
b : ℕ
_hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < 1 / ↑b ^ ⌈p⌉₊
⊢ ∃ m, x ≠ ↑m / ↑b ∧ |x - ↑m / ↑b| < 1 / ↑b ^ ↑⌈p⌉₊
tactic: rintro b ⟨_hb, a, hne, hlt⟩
state_before: case intro.intro.intro
x : ℝ
hx : Liouville x
p : ℝ
b : ℕ
_hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < 1 / ↑b ^ ⌈p⌉₊
⊢ ∃ m, x ≠ ↑m / ↑b ∧ |x - ↑m / ↑b| < 1 / ↑b ^ ↑⌈p⌉₊
state_after: case intro.intro.intro
x : ℝ
hx : Liouville x
p : ℝ
b : ℕ
_hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < 1 / ↑b ^ ⌈p⌉₊
⊢ |x - ↑a / ↑b| < 1 / ↑b ^ ↑⌈p⌉₊
tactic: refine ⟨a, hne, ?_⟩
state_before: case intro.intro.intro
x : ℝ
hx : Liouville x
p : ℝ
b : ℕ
_hb : 1 < b
a : ℤ
hne : x ≠ ↑a / ↑b
hlt : |x - ↑a / ↑b| < 1 / ↑b ^ ⌈p⌉₊
⊢ |x - ↑a / ↑b| < 1 / ↑b ^ ↑⌈p⌉₊
state_after: no goals
tactic: rwa [rpow_natCast]
Theorem: Valued.hasBasis_nhds_zero
File: Mathlib/Topology/Algebra/Valued/ValuationTopology.lean

Proof steps:
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
_i : Valued R Γ₀
⊢ (𝓝 0).HasBasis (fun x => True) fun γ => {x | v x < ↑γ}
state_after: no goals
tactic: simp [Filter.hasBasis_iff, is_topological_valuation]
Theorem: List.eraseP_append_left
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: α : Type u_1
p : α → Bool
a : α
pa : p a = true
x : α
xs l₂ : List α
h : a ∈ x :: xs
⊢ eraseP p (x :: xs ++ l₂) = eraseP p (x :: xs) ++ l₂
state_after: case neg
α : Type u_1
p : α → Bool
a : α
pa : p a = true
x : α
xs l₂ : List α
h : a ∈ x :: xs
h' : ¬p x = true
⊢ eraseP p (xs ++ l₂) = eraseP p xs ++ l₂
tactic: by_cases h' : p x <;> simp [h']
state_before: case neg
α : Type u_1
p : α → Bool
a : α
pa : p a = true
x : α
xs l₂ : List α
h : a ∈ x :: xs
h' : ¬p x = true
⊢ eraseP p (xs ++ l₂) = eraseP p xs ++ l₂
state_after: α : Type u_1
p : α → Bool
a : α
pa : p a = true
x : α
xs l₂ : List α
h : a ∈ x :: xs
h' : ¬p x = true
⊢ a = x → p x = true
tactic: rw [eraseP_append_left pa l₂ ((mem_cons.1 h).resolve_left (mt _ h'))]
state_before: α : Type u_1
p : α → Bool
a : α
pa : p a = true
x : α
xs l₂ : List α
h : a ∈ x :: xs
h' : ¬p x = true
⊢ a = x → p x = true
state_after: no goals
tactic: intro | rfl => exact pa
Theorem: ENNReal.tsum_le_tsum_comp_of_surjective
File: Mathlib/Topology/Instances/ENNReal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
f✝ g✝ : α → ℝ≥0∞
f : α → β
hf : Surjective f
g : β → ℝ≥0∞
⊢ ∑' (y : β), g y = ∑' (y : β), g (f (surjInv hf y))
state_after: no goals
tactic: simp only [surjInv_eq hf]
Theorem: Nat.Coprime.cast
File: Mathlib/RingTheory/Coprime/Lemmas.lean

Proof steps:
state_before: R✝ : Type u
I : Type v
inst✝¹ : CommSemiring R✝
x y z : R✝
s : I → R✝
t : Finset I
R : Type u_1
inst✝ : CommRing R
a b : ℕ
h : a.Coprime b
⊢ IsCoprime ↑a ↑b
state_after: R✝ : Type u
I : Type v
inst✝¹ : CommSemiring R✝
x y z : R✝
s : I → R✝
t : Finset I
R : Type u_1
inst✝ : CommRing R
a b : ℕ
h : IsCoprime ↑a ↑b
⊢ IsCoprime ↑a ↑b
tactic: rw [← isCoprime_iff_coprime] at h
state_before: R✝ : Type u
I : Type v
inst✝¹ : CommSemiring R✝
x y z : R✝
s : I → R✝
t : Finset I
R : Type u_1
inst✝ : CommRing R
a b : ℕ
h : IsCoprime ↑a ↑b
⊢ IsCoprime ↑a ↑b
state_after: R✝ : Type u
I : Type v
inst✝¹ : CommSemiring R✝
x y z : R✝
s : I → R✝
t : Finset I
R : Type u_1
inst✝ : CommRing R
a b : ℕ
h : IsCoprime ↑a ↑b
⊢ IsCoprime ↑↑a ↑↑b
tactic: rw [← Int.cast_natCast a, ← Int.cast_natCast b]
state_before: R✝ : Type u
I : Type v
inst✝¹ : CommSemiring R✝
x y z : R✝
s : I → R✝
t : Finset I
R : Type u_1
inst✝ : CommRing R
a b : ℕ
h : IsCoprime ↑a ↑b
⊢ IsCoprime ↑↑a ↑↑b
state_after: no goals
tactic: exact IsCoprime.intCast h
Theorem: gc_nhds
File: Mathlib/Topology/Order.lean

Proof steps:
state_before: α : Type u
β : Type v
a : α
f : Filter α
t : TopologicalSpace α
⊢ nhdsAdjoint a f ≤ t ↔ f ≤ (fun t => 𝓝 a) t
state_after: α : Type u
β : Type v
a : α
f : Filter α
t : TopologicalSpace α
⊢ nhdsAdjoint a f ≤ t ↔ ∀ (s : Set α), a ∈ s → IsOpen s → s ∈ f
tactic: rw [le_nhds_iff]
state_before: α : Type u
β : Type v
a : α
f : Filter α
t : TopologicalSpace α
⊢ nhdsAdjoint a f ≤ t ↔ ∀ (s : Set α), a ∈ s → IsOpen s → s ∈ f
state_after: no goals
tactic: exact ⟨fun H s hs has => H _ has hs, fun H s has hs => H _ hs has⟩
Theorem: MvPolynomial.X_dvd_X
File: Mathlib/Algebra/MvPolynomial/Division.lean

Proof steps:
state_before: σ : Type u_1
R : Type u_2
inst✝¹ : CommSemiring R
inst✝ : Nontrivial R
i j : σ
⊢ X i ∣ X j ↔ i = j
state_after: σ : Type u_1
R : Type u_2
inst✝¹ : CommSemiring R
inst✝ : Nontrivial R
i j : σ
⊢ Finsupp.single i 1 ≤ Finsupp.single j 1 ↔ i = j
tactic: refine monomial_one_dvd_monomial_one.trans ?_
state_before: σ : Type u_1
R : Type u_2
inst✝¹ : CommSemiring R
inst✝ : Nontrivial R
i j : σ
⊢ Finsupp.single i 1 ≤ Finsupp.single j 1 ↔ i = j
state_after: no goals
tactic: simp_rw [Finsupp.single_le_iff, Nat.one_le_iff_ne_zero, Finsupp.single_apply_ne_zero,
    ne_eq, not_false_eq_true, and_true]
Theorem: AkraBazziRecurrence.continuous_sumCoeffsExp
File: Mathlib/Computability/AkraBazzi/AkraBazzi.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : Nonempty α
T : ℕ → ℝ
g : ℝ → ℝ
a b : α → ℝ
r : α → ℕ → ℕ
R : AkraBazziRecurrence T g a b r
⊢ Continuous fun p => ∑ i : α, a i * b i ^ p
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : Nonempty α
T : ℕ → ℝ
g : ℝ → ℝ
a b : α → ℝ
r : α → ℕ → ℕ
R : AkraBazziRecurrence T g a b r
i : α
x✝ : i ∈ univ
⊢ Continuous (HPow.hPow (b i))
tactic: refine continuous_finset_sum Finset.univ fun i _ => Continuous.mul (by continuity) ?_
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : Nonempty α
T : ℕ → ℝ
g : ℝ → ℝ
a b : α → ℝ
r : α → ℕ → ℕ
R : AkraBazziRecurrence T g a b r
i : α
x✝ : i ∈ univ
⊢ Continuous (HPow.hPow (b i))
state_after: no goals
tactic: exact Continuous.rpow continuous_const continuous_id (fun x => Or.inl (ne_of_gt (R.b_pos i)))
Theorem: AddMonoidHom.isOfFinAddOrder
File: Mathlib/GroupTheory/OrderOfElement.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝¹ : Monoid G
a b x✝ y : G
n m : ℕ
inst✝ : Monoid H
f : G →* H
x : G
h : IsOfFinOrder x
⊢ ∃ n, 0 < n ∧ f x ^ n = 1
state_after: case intro.intro
G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝¹ : Monoid G
a b x✝ y : G
n✝ m : ℕ
inst✝ : Monoid H
f : G →* H
x : G
h : IsOfFinOrder x
n : ℕ
npos : 0 < n
hn : x ^ n = 1
⊢ ∃ n, 0 < n ∧ f x ^ n = 1
tactic: obtain ⟨n, npos, hn⟩ := h.exists_pow_eq_one
state_before: case intro.intro
G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝¹ : Monoid G
a b x✝ y : G
n✝ m : ℕ
inst✝ : Monoid H
f : G →* H
x : G
h : IsOfFinOrder x
n : ℕ
npos : 0 < n
hn : x ^ n = 1
⊢ ∃ n, 0 < n ∧ f x ^ n = 1
state_after: no goals
tactic: exact ⟨n, npos, by rw [← f.map_pow, hn, f.map_one]⟩
Theorem: CategoryTheory.Prod.braiding_functor_obj
File: Mathlib/CategoryTheory/Products/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
X : C × D
⊢ (𝟭 (C × D)).obj X = (swap C D ⋙ swap D C).obj X
state_after: no goals
tactic: simp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
X : D × C
⊢ (swap D C ⋙ swap C D).obj X = (𝟭 (D × C)).obj X
state_after: no goals
tactic: simp
Theorem: geom_sum_mul_add
File: Mathlib/Algebra/GeomSum.lean

Proof steps:
state_before: α : Type u
inst✝ : Semiring α
x : α
n : ℕ
⊢ (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
state_after: α : Type u
inst✝ : Semiring α
x : α
n : ℕ
this : (∑ i ∈ range n, (x + 1) ^ i * 1 ^ (n - 1 - i)) * x + 1 ^ n = (x + 1) ^ n
⊢ (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
tactic: have := (Commute.one_right x).geom_sum₂_mul_add n
state_before: α : Type u
inst✝ : Semiring α
x : α
n : ℕ
this : (∑ i ∈ range n, (x + 1) ^ i * 1 ^ (n - 1 - i)) * x + 1 ^ n = (x + 1) ^ n
⊢ (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
state_after: α : Type u
inst✝ : Semiring α
x : α
n : ℕ
this : (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
⊢ (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
tactic: rw [one_pow, geom_sum₂_with_one] at this
state_before: α : Type u
inst✝ : Semiring α
x : α
n : ℕ
this : (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
⊢ (∑ i ∈ range n, (x + 1) ^ i) * x + 1 = (x + 1) ^ n
state_after: no goals
tactic: exact this
Theorem: Equiv.Perm.subtypeCongr.apply
File: Mathlib/Logic/Equiv/Basic.lean

Proof steps:
state_before: ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
a : ε
⊢ (ep.subtypeCongr en) a = if h : p a then ↑(ep ⟨a, h⟩) else ↑(en ⟨a, h⟩)
state_after: no goals
tactic: by_cases h : p a <;> simp [Perm.subtypeCongr, h]
Theorem: UniformOnFun.hasBasis_nhds_one_of_basis
File: Mathlib/Topology/Algebra/UniformConvergence.lean

Proof steps:
state_before: α : Type u_1
G : Type u_2
ι : Type u_3
inst✝² : Group G
𝔖✝ : Set (Set α)
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
𝔖 : Set (Set α)
h𝔖₁ : 𝔖.Nonempty
h𝔖₂ : DirectedOn (fun x x_1 => x ⊆ x_1) 𝔖
p : ι → Prop
b : ι → Set G
h : (𝓝 1).HasBasis p b
⊢ (𝓝 1).HasBasis (fun Si => Si.1 ∈ 𝔖 ∧ p Si.2) fun Si => {f | ∀ x ∈ Si.1, (toFun 𝔖) f x ∈ b Si.2}
state_after: α : Type u_1
G : Type u_2
ι : Type u_3
inst✝² : Group G
𝔖✝ : Set (Set α)
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
𝔖 : Set (Set α)
h𝔖₁ : 𝔖.Nonempty
h𝔖₂ : DirectedOn (fun x x_1 => x ⊆ x_1) 𝔖
p : ι → Prop
b : ι → Set G
h : (𝓝 1).HasBasis p b
this : (𝓤 G).HasBasis p fun i => {x | x.1 / x.2 ∈ b i}
⊢ (𝓝 1).HasBasis (fun Si => Si.1 ∈ 𝔖 ∧ p Si.2) fun Si => {f | ∀ x ∈ Si.1, (toFun 𝔖) f x ∈ b Si.2}
tactic: have := h.uniformity_of_nhds_one_swapped
state_before: α : Type u_1
G : Type u_2
ι : Type u_3
inst✝² : Group G
𝔖✝ : Set (Set α)
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
𝔖 : Set (Set α)
h𝔖₁ : 𝔖.Nonempty
h𝔖₂ : DirectedOn (fun x x_1 => x ⊆ x_1) 𝔖
p : ι → Prop
b : ι → Set G
h : (𝓝 1).HasBasis p b
this : (𝓤 G).HasBasis p fun i => {x | x.1 / x.2 ∈ b i}
⊢ (𝓝 1).HasBasis (fun Si => Si.1 ∈ 𝔖 ∧ p Si.2) fun Si => {f | ∀ x ∈ Si.1, (toFun 𝔖) f x ∈ b Si.2}
state_after: case h.e'_5.h.h.e'_2.h.a
α : Type u_1
G : Type u_2
ι : Type u_3
inst✝² : Group G
𝔖✝ : Set (Set α)
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
𝔖 : Set (Set α)
h𝔖₁ : 𝔖.Nonempty
h𝔖₂ : DirectedOn (fun x x_1 => x ⊆ x_1) 𝔖
p : ι → Prop
b : ι → Set G
h : (𝓝 1).HasBasis p b
this : (𝓤 G).HasBasis p fun i => {x | x.1 / x.2 ∈ b i}
x✝¹ : Set α × ι
x✝ : α →ᵤ[𝔖] G
⊢ (∀ x ∈ x✝¹.1, (toFun 𝔖) x✝ x ∈ b x✝¹.2) ↔ (x✝, 1) ∈ UniformOnFun.gen 𝔖 x✝¹.1 {x | x.1 / x.2 ∈ b x✝¹.2}
tactic: convert UniformOnFun.hasBasis_nhds_of_basis α _ 𝔖 (1 : α →ᵤ[𝔖] G) h𝔖₁ h𝔖₂ this
state_before: case h.e'_5.h.h.e'_2.h.a
α : Type u_1
G : Type u_2
ι : Type u_3
inst✝² : Group G
𝔖✝ : Set (Set α)
inst✝¹ : UniformSpace G
inst✝ : UniformGroup G
𝔖 : Set (Set α)
h𝔖₁ : 𝔖.Nonempty
h𝔖₂ : DirectedOn (fun x x_1 => x ⊆ x_1) 𝔖
p : ι → Prop
b : ι → Set G
h : (𝓝 1).HasBasis p b
this : (𝓤 G).HasBasis p fun i => {x | x.1 / x.2 ∈ b i}
x✝¹ : Set α × ι
x✝ : α →ᵤ[𝔖] G
⊢ (∀ x ∈ x✝¹.1, (toFun 𝔖) x✝ x ∈ b x✝¹.2) ↔ (x✝, 1) ∈ UniformOnFun.gen 𝔖 x✝¹.1 {x | x.1 / x.2 ∈ b x✝¹.2}
state_after: no goals
tactic: simp [UniformOnFun.gen]
Theorem: Stream'.WSeq.dropn_cons
File: Mathlib/Data/Seq/WSeq.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
a : α
s : WSeq α
n : ℕ
⊢ (cons a s).drop (n + 1) = s.drop n
state_after: no goals
tactic: induction n with
  | zero => simp [drop]
  | succ n n_ih =>
    -- porting note (#10745): was `simp [*, drop]`.
    simp [drop, ← n_ih]
Theorem: MeasureTheory.prob_compl_eq_one_iff₀
File: Mathlib/MeasureTheory/Measure/Typeclasses.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
ι : Type u_4
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
μ ν ν₁ ν₂ : Measure α
s t : Set α
inst✝ : IsProbabilityMeasure μ
p : α → Prop
f : β → α
hs : NullMeasurableSet s μ
⊢ μ sᶜ = 1 ↔ μ s = 0
state_after: no goals
tactic: rw [← prob_compl_eq_zero_iff₀ hs.compl, compl_compl]
Theorem: Finset.image₂_empty_right
File: Mathlib/Data/Finset/NAry.lean

Proof steps:
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
⊢ ↑(image₂ f s ∅) = ↑∅
state_after: no goals
tactic: simp
Theorem: UniqueFactorizationMonoid.normalizedFactors_prod
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

Proof steps:
state_before: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (normalizedFactors a).prod ~ᵤ a
state_after: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (Multiset.map (⇑normalize) (Classical.choose ⋯)).prod ~ᵤ a
tactic: rw [normalizedFactors, factors, dif_neg ane0]
state_before: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (Multiset.map (⇑normalize) (Classical.choose ⋯)).prod ~ᵤ a
state_after: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (Multiset.map (⇑normalize) (Classical.choose ⋯)).prod ~ᵤ (Classical.choose ⋯).prod
tactic: refine Associated.trans ?_ (Classical.choose_spec (exists_prime_factors a ane0)).2
state_before: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (Multiset.map (⇑normalize) (Classical.choose ⋯)).prod ~ᵤ (Classical.choose ⋯).prod
state_after: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (Multiset.map (Associates.mk ∘ ⇑normalize) (Classical.choose ⋯)).prod =
    (Multiset.map Associates.mk (Classical.choose ⋯)).prod
tactic: rw [← Associates.mk_eq_mk_iff_associated, ← Associates.prod_mk, ← Associates.prod_mk,
    Multiset.map_map]
state_before: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ (Multiset.map (Associates.mk ∘ ⇑normalize) (Classical.choose ⋯)).prod =
    (Multiset.map Associates.mk (Classical.choose ⋯)).prod
state_after: case e_a.e_f
α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ Associates.mk ∘ ⇑normalize = Associates.mk
tactic: congr 2
state_before: case e_a.e_f
α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
⊢ Associates.mk ∘ ⇑normalize = Associates.mk
state_after: case e_a.e_f.h
α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
x✝ : α
⊢ (Associates.mk ∘ ⇑normalize) x✝ = Associates.mk x✝
tactic: ext
state_before: case e_a.e_f.h
α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a ≠ 0
x✝ : α
⊢ (Associates.mk ∘ ⇑normalize) x✝ = Associates.mk x✝
state_after: no goals
tactic: rw [Function.comp_apply, Associates.mk_normalize]
Theorem: NNReal.geom_mean_le_arith_mean_weighted
File: Mathlib/Analysis/MeanInequalities.lean

Proof steps:
state_before: ι : Type u
s : Finset ι
w z : ι → ℝ≥0
hw' : ∑ i ∈ s, w i = 1
⊢ ∑ i ∈ s, ↑(w i) = 1
state_after: no goals
tactic: assumption_mod_cast
Theorem: Int.clog_one_right
File: Mathlib/Data/Int/Log.lean

Proof steps:
state_before: R : Type u_1
inst✝¹ : LinearOrderedSemifield R
inst✝ : FloorSemiring R
b : ℕ
⊢ clog b 1 = 0
state_after: no goals
tactic: rw [clog_of_one_le_right _ le_rfl, Nat.ceil_one, Nat.clog_one_right, Int.ofNat_zero]