ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Equiv.mul_swap_mul_self
File: Mathlib/GroupTheory/Perm/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝ : DecidableEq α
i j : α
σ : Perm α
⊢ σ * swap i j * swap i j = σ
state_after: no goals
tactic: rw [mul_assoc, swap_mul_self, mul_one]
Theorem: CategoryTheory.ShiftMkCore.add_zero_inv_app
File: Mathlib/CategoryTheory/Shift/Basic.lean

Proof steps:
state_before: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
n : A
X : C
⊢ (𝟭 C).obj ((h.F n).obj X) = (h.F (n + 0)).obj X
state_after: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
n : A
X : C
⊢ (h.F n).obj X = (h.F (n + 0)).obj X
tactic: dsimp
state_before: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
n : A
X : C
⊢ (h.F n).obj X = (h.F (n + 0)).obj X
state_after: no goals
tactic: rw [add_zero]
state_before: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
n : A
X : C
⊢ (h.add n 0).inv.app X = h.zero.hom.app ((h.F n).obj X) ≫ eqToHom ⋯
state_after: no goals
tactic: rw [← cancel_epi ((h.add n 0).hom.app X), Iso.hom_inv_id_app, h.add_zero_hom_app,
    Category.assoc, Iso.inv_hom_id_app_assoc, eqToHom_trans, eqToHom_refl]
Theorem: CategoryTheory.Limits.kernelSubobject_factors_iff
File: Mathlib/CategoryTheory/Subobject/Limits.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
X Y Z : C
inst✝¹ : HasZeroMorphisms C
f : X ⟶ Y
inst✝ : HasKernel f
W : C
h : W ⟶ X
w : (kernelSubobject f).Factors h
⊢ h ≫ f = 0
state_after: no goals
tactic: rw [← Subobject.factorThru_arrow _ _ w, Category.assoc, kernelSubobject_arrow_comp,
      comp_zero]
Theorem: Padic.norm_le_pow_iff_norm_lt_pow_add_one
File: Mathlib/NumberTheory/Padics/PadicNumbers.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
⊢ ‖x‖ ≤ ↑p ^ n ↔ ‖x‖ < ↑p ^ (n + 1)
state_after: p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
⊢ ‖x‖ ≤ ↑p ^ n ↔ ‖x‖ < ↑p ^ (n + 1)
tactic: have aux : ∀ n : ℤ, 0 < ((p : ℝ) ^ n) := by
    apply Nat.zpow_pos_of_pos
    exact hp.1.pos
state_before: p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
⊢ ‖x‖ ≤ ↑p ^ n ↔ ‖x‖ < ↑p ^ (n + 1)
state_after: case pos
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : x = 0
⊢ ‖x‖ ≤ ↑p ^ n ↔ ‖x‖ < ↑p ^ (n + 1)

case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
⊢ ‖x‖ ≤ ↑p ^ n ↔ ‖x‖ < ↑p ^ (n + 1)
tactic: by_cases hx0 : x = 0
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
⊢ ‖x‖ ≤ ↑p ^ n ↔ ‖x‖ < ↑p ^ (n + 1)
state_after: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
⊢ ↑p ^ (-x.valuation) ≤ ↑p ^ n ↔ ↑p ^ (-x.valuation) < ↑p ^ (n + 1)
tactic: rw [norm_eq_pow_val hx0]
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
⊢ ↑p ^ (-x.valuation) ≤ ↑p ^ n ↔ ↑p ^ (-x.valuation) < ↑p ^ (n + 1)
state_after: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
h1p : 1 < ↑p
⊢ ↑p ^ (-x.valuation) ≤ ↑p ^ n ↔ ↑p ^ (-x.valuation) < ↑p ^ (n + 1)
tactic: have h1p : 1 < (p : ℝ) := mod_cast hp.1.one_lt
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
h1p : 1 < ↑p
⊢ ↑p ^ (-x.valuation) ≤ ↑p ^ n ↔ ↑p ^ (-x.valuation) < ↑p ^ (n + 1)
state_after: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
h1p : 1 < ↑p
H : StrictMono fun x => ↑p ^ x
⊢ ↑p ^ (-x.valuation) ≤ ↑p ^ n ↔ ↑p ^ (-x.valuation) < ↑p ^ (n + 1)
tactic: have H := zpow_strictMono h1p
state_before: case neg
p : ℕ
hp : Fact (Nat.Prime p)
x : ℚ_[p]
n : ℤ
aux : ∀ (n : ℤ), 0 < ↑p ^ n
hx0 : ¬x = 0
h1p : 1 < ↑p
H : StrictMono fun x => ↑p ^ x
⊢ ↑p ^ (-x.valuation) ≤ ↑p ^ n ↔ ↑p ^ (-x.valuation) < ↑p ^ (n + 1)
state_after: no goals
tactic: rw [H.le_iff_le, H.lt_iff_lt, Int.lt_add_one_iff]
Theorem: Ideal.mem_map_C_iff
File: Mathlib/RingTheory/Polynomial/Basic.lean

Proof steps:
state_before: R : Type u
S : Type u_1
inst✝¹ : CommSemiring R
inst✝ : Semiring S
I : Ideal R
f : R[X]
⊢ f ∈ map C I ↔ ∀ (n : ℕ), f.coeff n ∈ I
state_after: case mp
R : Type u
S : Type u_1
inst✝¹ : CommSemiring R
inst✝ : Semiring S
I : Ideal R
f : R[X]
⊢ f ∈ map C I → ∀ (n : ℕ), f.coeff n ∈ I

case mpr
R : Type u
S : Type u_1
inst✝¹ : CommSemiring R
inst✝ : Semiring S
I : Ideal R
f : R[X]
⊢ (∀ (n : ℕ), f.coeff n ∈ I) → f ∈ map C I
tactic: constructor
Theorem: Filter.Eventually.union_nhdsSet
File: Mathlib/Topology/NhdsSet.lean

Proof steps:
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
p : X → Prop
⊢ (∀ᶠ (x : X) in 𝓝ˢ (s ∪ t), p x) ↔ (∀ᶠ (x : X) in 𝓝ˢ s, p x) ∧ ∀ᶠ (x : X) in 𝓝ˢ t, p x
state_after: no goals
tactic: rw [nhdsSet_union, eventually_sup]
Theorem: Surreal.Multiplication.P1_of_eq
File: Mathlib/SetTheory/Surreal/Multiplication.lean

Proof steps:
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
he : x₁ ≈ x₃
h₁ : P2 x₁ x₃ y₁
h₃ : P2 x₁ x₃ y₃
h3 : P3 x₁ x₂ y₂ y₃
⊢ P1 x₁ x₂ x₃ y₁ y₂ y₃
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
he : x₁ ≈ x₃
h₁ : P2 x₁ x₃ y₁
h₃ : P2 x₁ x₃ y₃
h3 : P3 x₁ x₂ y₂ y₃
⊢ ⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ + ⟦x₁ * y₃⟧ < ⟦x₁ * y₁⟧ + ⟦x₂ * y₃⟧ + ⟦x₁ * y₂⟧
tactic: rw [P1, ← h₁ he, ← h₃ he, sub_lt_sub_iff]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
he : x₁ ≈ x₃
h₁ : P2 x₁ x₃ y₁
h₃ : P2 x₁ x₃ y₃
h3 : P3 x₁ x₂ y₂ y₃
⊢ ⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ + ⟦x₁ * y₃⟧ < ⟦x₁ * y₁⟧ + ⟦x₂ * y₃⟧ + ⟦x₁ * y₂⟧
state_after: no goals
tactic: convert add_lt_add_left h3 ⟦x₁ * y₁⟧ using 1 <;> abel
Theorem: div_mabs_eq_inv_leOnePart_sq
File: Mathlib/Algebra/Order/Group/PosPart.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ a / mabs a = (a⁻ᵐ ^ 2)⁻¹
state_after: no goals
tactic: rw [← mabs_div_eq_leOnePart_sq, inv_div]
Theorem: Real.tendsto_of_bddAbove_monotone
File: Mathlib/Topology/Instances/NNReal.lean

Proof steps:
state_before: f : ℕ → ℝ
h_bdd : BddAbove (range f)
h_mon : Monotone f
⊢ ∃ r, Tendsto f atTop (𝓝 r)
state_after: case intro
f : ℕ → ℝ
h_bdd : BddAbove (range f)
h_mon : Monotone f
B : ℝ
hB : IsLUB (range f) B
⊢ ∃ r, Tendsto f atTop (𝓝 r)
tactic: obtain ⟨B, hB⟩ := Real.exists_isLUB  (Set.range_nonempty f) h_bdd
state_before: case intro
f : ℕ → ℝ
h_bdd : BddAbove (range f)
h_mon : Monotone f
B : ℝ
hB : IsLUB (range f) B
⊢ ∃ r, Tendsto f atTop (𝓝 r)
state_after: no goals
tactic: exact ⟨B, tendsto_atTop_isLUB h_mon hB⟩
Theorem: accPt_iff_nhds
File: Mathlib/Topology/Basic.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x✝ : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
x : X
C : Set X
⊢ AccPt x (𝓟 C) ↔ ∀ U ∈ 𝓝 x, ∃ y ∈ U ∩ C, y ≠ x
state_after: no goals
tactic: simp [acc_principal_iff_cluster, clusterPt_principal_iff, Set.Nonempty, exists_prop, and_assoc,
    @and_comm (¬_ = x)]
Theorem: _private.Mathlib.RingTheory.AdicCompletion.AsTensorProduct.0.AdicCompletion.firstRow_exact
File: Mathlib/RingTheory/AdicCompletion/AsTensorProduct.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
R : Type u
inst✝⁵ : CommRing R
I : Ideal R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : IsNoetherianRing R
ι : Type
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
hf : Function.Surjective ⇑f
k : ℕ
x✝ : autoParam (k + 2 ≤ 4) _auto✝
⊢ ((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).Exact
state_after: 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
R : Type u
inst✝⁵ : CommRing R
I : Ideal R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : IsNoetherianRing R
ι : Type
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
hf : Function.Surjective ⇑f
k : ℕ
x✝ : autoParam (k + 2 ≤ 4) _auto✝
⊢ ∀ (x₂ : ↑((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).X₂),
    ((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).g x₂ = 0 → ∃ x₁, ((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).f x₁ = x₂
tactic: rw [ShortComplex.moduleCat_exact_iff]
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
R : Type u
inst✝⁵ : CommRing R
I : Ideal R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : IsNoetherianRing R
ι : Type
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : (ι → R) →ₗ[R] M
hf : Function.Surjective ⇑f
k : ℕ
x✝ : autoParam (k + 2 ≤ 4) _auto✝
⊢ ∀ (x₂ : ↑((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).X₂),
    ((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).g x₂ = 0 → ∃ x₁, ((AdicCompletion.firstRow I M f).sc ⋯ k ⋯).f x₁ = x₂
state_after: no goals
tactic: match k with
    | 0 => intro x hx; exact (tens_exact I M f hf x).mp hx
    | 1 => intro x _; exact (tens_surj I M f hf) x
    | 2 => intro _ _; exact ⟨0, rfl⟩
Theorem: SetTheory.PGame.nim_equiv_iff_eq
File: Mathlib/SetTheory/Game/Nim.lean

Proof steps:
state_before: o₁ o₂ : Ordinal.{u_1}
⊢ nim o₁ ≈ nim o₂ ↔ o₁ = o₂
state_after: no goals
tactic: rw [Impartial.equiv_iff_add_equiv_zero, nim_add_equiv_zero_iff]
Theorem: Ideal.relNorm_top
File: Mathlib/RingTheory/Ideal/Norm.lean

Proof steps:
state_before: R : Type u_1
inst✝⁸ : CommRing R
S : Type u_2
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : IsDomain R
inst✝⁴ : IsDomain S
inst✝³ : IsDedekindDomain R
inst✝² : IsDedekindDomain S
inst✝¹ : Module.Finite R S
inst✝ : Module.Free R S
⊢ (relNorm R) ⊤ = ⊤
state_after: no goals
tactic: simpa only [one_eq_top] using map_one (relNorm R : Ideal S →*₀ _)
Theorem: Set.piecewise_le_piecewise
File: Mathlib/Data/Set/Function.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ✝ : α → Sort u_6
s✝ : Set α
f g : (i : α) → δ✝ i
inst✝² : (j : α) → Decidable (j ∈ s✝)
δ : α → Type u_7
inst✝¹ : (i : α) → Preorder (δ i)
s : Set α
inst✝ : (j : α) → Decidable (j ∈ s)
f₁ f₂ g₁ g₂ : (i : α) → δ i
h₁ : ∀ i ∈ s, f₁ i ≤ g₁ i
h₂ : ∀ i ∉ s, f₂ i ≤ g₂ i
⊢ s.piecewise f₁ f₂ ≤ s.piecewise g₁ g₂
state_after: no goals
tactic: apply piecewise_le <;> intros <;> simp [*]
Theorem: hasFDerivWithinAt_euclidean
File: Mathlib/Analysis/InnerProductSpace/Calculus.lean

Proof steps:
state_before: 𝕜 : Type u_1
ι : Type u_2
H : Type u_3
inst✝³ : _root_.RCLike 𝕜
inst✝² : NormedAddCommGroup H
inst✝¹ : NormedSpace 𝕜 H
inst✝ : Fintype ι
f : H → EuclideanSpace 𝕜 ι
f' : H →L[𝕜] EuclideanSpace 𝕜 ι
t : Set H
y : H
⊢ HasFDerivWithinAt f f' t y ↔ ∀ (i : ι), HasFDerivWithinAt (fun x => f x i) ((EuclideanSpace.proj i).comp f') t y
state_after: 𝕜 : Type u_1
ι : Type u_2
H : Type u_3
inst✝³ : _root_.RCLike 𝕜
inst✝² : NormedAddCommGroup H
inst✝¹ : NormedSpace 𝕜 H
inst✝ : Fintype ι
f : H → EuclideanSpace 𝕜 ι
f' : H →L[𝕜] EuclideanSpace 𝕜 ι
t : Set H
y : H
⊢ (∀ (i : ι),
      HasFDerivWithinAt (fun x => (⇑(EuclideanSpace.equiv ι 𝕜) ∘ f) x i)
        ((proj i).comp ((↑(EuclideanSpace.equiv ι 𝕜)).comp f')) t y) ↔
    ∀ (i : ι), HasFDerivWithinAt (fun x => f x i) ((EuclideanSpace.proj i).comp f') t y
tactic: rw [← (EuclideanSpace.equiv ι 𝕜).comp_hasFDerivWithinAt_iff, hasFDerivWithinAt_pi']
state_before: 𝕜 : Type u_1
ι : Type u_2
H : Type u_3
inst✝³ : _root_.RCLike 𝕜
inst✝² : NormedAddCommGroup H
inst✝¹ : NormedSpace 𝕜 H
inst✝ : Fintype ι
f : H → EuclideanSpace 𝕜 ι
f' : H →L[𝕜] EuclideanSpace 𝕜 ι
t : Set H
y : H
⊢ (∀ (i : ι),
      HasFDerivWithinAt (fun x => (⇑(EuclideanSpace.equiv ι 𝕜) ∘ f) x i)
        ((proj i).comp ((↑(EuclideanSpace.equiv ι 𝕜)).comp f')) t y) ↔
    ∀ (i : ι), HasFDerivWithinAt (fun x => f x i) ((EuclideanSpace.proj i).comp f') t y
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Bicategory.LeftLift.whiskering_map
File: Mathlib/CategoryTheory/Bicategory/Extension.lean

Proof steps:
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : b ⟶ a
g : c ⟶ a
s t : LeftLift f g
x : B
h : x ⟶ c
X✝ Y✝ : LeftLift f g
η : X✝ ⟶ Y✝
⊢ ((fun t => t.whisker h) X✝).unit ≫ (h ◁ η.right) ▷ f = ((fun t => t.whisker h) Y✝).unit
state_after: B : Type u
inst✝ : Bicategory B
a b c : B
f : b ⟶ a
g : c ⟶ a
s t : LeftLift f g
x : B
h : x ⟶ c
X✝ Y✝ : LeftLift f g
η : X✝ ⟶ Y✝
⊢ (h ◁ X✝.unit ≫ (α_ h X✝.lift f).inv) ≫ (h ◁ η.right) ▷ f = h ◁ Y✝.unit ≫ (α_ h Y✝.lift f).inv
tactic: dsimp only [whisker_lift, whisker_unit]
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : b ⟶ a
g : c ⟶ a
s t : LeftLift f g
x : B
h : x ⟶ c
X✝ Y✝ : LeftLift f g
η : X✝ ⟶ Y✝
⊢ (h ◁ X✝.unit ≫ (α_ h X✝.lift f).inv) ≫ (h ◁ η.right) ▷ f = h ◁ Y✝.unit ≫ (α_ h Y✝.lift f).inv
state_after: B : Type u
inst✝ : Bicategory B
a b c : B
f : b ⟶ a
g : c ⟶ a
s t : LeftLift f g
x : B
h : x ⟶ c
X✝ Y✝ : LeftLift f g
η : X✝ ⟶ Y✝
⊢ (h ◁ X✝.unit ≫ (α_ h X✝.lift f).inv) ≫ (h ◁ η.right) ▷ f = h ◁ (X✝.unit ≫ η.right ▷ f) ≫ (α_ h Y✝.lift f).inv
tactic: rw [← LeftLift.w η]
state_before: B : Type u
inst✝ : Bicategory B
a b c : B
f : b ⟶ a
g : c ⟶ a
s t : LeftLift f g
x : B
h : x ⟶ c
X✝ Y✝ : LeftLift f g
η : X✝ ⟶ Y✝
⊢ (h ◁ X✝.unit ≫ (α_ h X✝.lift f).inv) ≫ (h ◁ η.right) ▷ f = h ◁ (X✝.unit ≫ η.right ▷ f) ≫ (α_ h Y✝.lift f).inv
state_after: no goals
tactic: simp [- LeftLift.w]
Theorem: compl_lt_self
File: Mathlib/Order/BooleanAlgebra.lean

Proof steps:
state_before: α : Type u
β : Type u_1
w x y z : α
inst✝¹ : BooleanAlgebra α
inst✝ : Nontrivial α
⊢ xᶜ < x ↔ x = ⊤
state_after: no goals
tactic: simpa using lt_compl_self (a := xᶜ)
Theorem: HasSum.of_nat_of_neg_add_one
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✝ : ContinuousMul M
f : ℤ → M
hf₁ : HasProd (fun n => f ↑n) m
hf₂ : HasProd (fun n => f (-(↑n + 1))) m'
⊢ HasProd f (m * 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✝ : ContinuousMul M
f : ℤ → M
hf₁ : HasProd (fun n => f ↑n) m
hf₂ : HasProd (fun n => f (-(↑n + 1))) m'
hi₂ : Injective Int.negSucc
⊢ HasProd f (m * m')
tactic: have hi₂ : Injective Int.negSucc := @Int.negSucc.inj
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✝ : ContinuousMul M
f : ℤ → M
hf₁ : HasProd (fun n => f ↑n) m
hf₂ : HasProd (fun n => f (-(↑n + 1))) m'
hi₂ : Injective Int.negSucc
this : IsCompl (Set.range Nat.cast) (Set.range Int.negSucc)
⊢ HasProd f (m * m')
state_after: no goals
tactic: exact (Nat.cast_injective.hasProd_range_iff.mpr hf₁).mul_isCompl
    this (hi₂.hasProd_range_iff.mpr hf₂)
Theorem: bind₁_xInTermsOfW_wittPolynomial
File: Mathlib/RingTheory/WittVector/WittPolynomial.lean

Proof steps:
state_before: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ (bind₁ (xInTermsOfW p R)) (W_ R k) = X k
state_after: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ ∑ x ∈ range (k + 1), (bind₁ (xInTermsOfW p R)) (C (↑p ^ x) * X x ^ p ^ (k - x)) = X k
tactic: rw [wittPolynomial_eq_sum_C_mul_X_pow, map_sum]
state_before: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ ∑ x ∈ range (k + 1), (bind₁ (xInTermsOfW p R)) (C (↑p ^ x) * X x ^ p ^ (k - x)) = X k
state_after: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ ∑ x ∈ range (k + 1), C ↑p ^ x * (bind₁ (xInTermsOfW p R)) (X x) ^ p ^ (k - x) = X k
tactic: simp only [Nat.cast_pow, map_pow, C_pow, map_mul, algHom_C, algebraMap_eq]
state_before: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ ∑ x ∈ range (k + 1), C ↑p ^ x * (bind₁ (xInTermsOfW p R)) (X x) ^ p ^ (k - x) = X k
state_after: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ X k - ∑ i ∈ range k, C (↑p ^ i) * xInTermsOfW p R i ^ p ^ (k - i) +
      ∑ x ∈ range k, C ↑p ^ x * (bind₁ (xInTermsOfW p R)) (X x) ^ p ^ (k - x) =
    X k
tactic: rw [sum_range_succ_comm, tsub_self, pow_zero, pow_one, bind₁_X_right, mul_comm, ← C_pow,
    xInTermsOfW_aux]
state_before: p : ℕ
R : Type u_1
inst✝² : CommRing R
inst✝¹ : DecidableEq R
inst✝ : Invertible ↑p
k : ℕ
⊢ X k - ∑ i ∈ range k, C (↑p ^ i) * xInTermsOfW p R i ^ p ^ (k - i) +
      ∑ x ∈ range k, C ↑p ^ x * (bind₁ (xInTermsOfW p R)) (X x) ^ p ^ (k - x) =
    X k
state_after: no goals
tactic: simp only [Nat.cast_pow, C_pow, bind₁_X_right, sub_add_cancel]
Theorem: thickenedIndicator_one_of_mem_closure
File: Mathlib/Topology/MetricSpace/ThickenedIndicator.lean

Proof steps:
state_before: α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
δ_pos : 0 < δ
E : Set α
x : α
x_mem : x ∈ closure E
⊢ (thickenedIndicator δ_pos E) x = 1
state_after: no goals
tactic: rw [thickenedIndicator_apply, thickenedIndicatorAux_one_of_mem_closure δ E x_mem, one_toNNReal]
Theorem: map_inv_le_iff
File: Mathlib/Order/Hom/Basic.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
inst✝³ : LE α
inst✝² : LE β
inst✝¹ : EquivLike F α β
inst✝ : OrderIsoClass F α β
f : F
a : α
b : β
⊢ EquivLike.inv f b ≤ a ↔ b ≤ f a
state_after: case h.e'_2.h.e'_3
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
inst✝³ : LE α
inst✝² : LE β
inst✝¹ : EquivLike F α β
inst✝ : OrderIsoClass F α β
f : F
a : α
b : β
⊢ b = f (EquivLike.inv f b)
tactic: convert (map_le_map_iff f (a := EquivLike.inv f b) (b := a)).symm
state_before: case h.e'_2.h.e'_3
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
inst✝³ : LE α
inst✝² : LE β
inst✝¹ : EquivLike F α β
inst✝ : OrderIsoClass F α β
f : F
a : α
b : β
⊢ b = f (EquivLike.inv f b)
state_after: no goals
tactic: exact (EquivLike.right_inv f _).symm
Theorem: SimplexCategory.δ_comp_σ_succ
File: Mathlib/AlgebraicTopology/SimplexCategory.lean

Proof steps:
state_before: n : ℕ
i : Fin (n + 1)
⊢ δ i.succ ≫ σ i = 𝟙 [n]
state_after: case a.h.h.h
n : ℕ
i : Fin (n + 1)
j : Fin ([n].len + 1)
⊢ ↑((Hom.toOrderHom (δ i.succ ≫ σ i)) j) = ↑((Hom.toOrderHom (𝟙 [n])) j)
tactic: ext j
state_before: case a.h.h.h
n : ℕ
i : Fin (n + 1)
j : Fin ([n].len + 1)
⊢ ↑((Hom.toOrderHom (δ i.succ ≫ σ i)) j) = ↑((Hom.toOrderHom (𝟙 [n])) j)
state_after: case a.h.h.h.mk
n : ℕ
j : Fin ([n].len + 1)
i : ℕ
isLt✝ : i < n + 1
⊢ ↑((Hom.toOrderHom (δ ⟨i, isLt✝⟩.succ ≫ σ ⟨i, isLt✝⟩)) j) = ↑((Hom.toOrderHom (𝟙 [n])) j)
tactic: rcases i with ⟨i, _⟩
state_before: case a.h.h.h.mk
n : ℕ
j : Fin ([n].len + 1)
i : ℕ
isLt✝ : i < n + 1
⊢ ↑((Hom.toOrderHom (δ ⟨i, isLt✝⟩.succ ≫ σ ⟨i, isLt✝⟩)) j) = ↑((Hom.toOrderHom (𝟙 [n])) j)
state_after: case a.h.h.h.mk.mk
n i : ℕ
isLt✝¹ : i < n + 1
j : ℕ
isLt✝ : j < [n].len + 1
⊢ ↑((Hom.toOrderHom (δ ⟨i, isLt✝¹⟩.succ ≫ σ ⟨i, isLt✝¹⟩)) ⟨j, isLt✝⟩) = ↑((Hom.toOrderHom (𝟙 [n])) ⟨j, isLt✝⟩)
tactic: rcases j with ⟨j, _⟩
state_before: case a.h.h.h.mk.mk
n i : ℕ
isLt✝¹ : i < n + 1
j : ℕ
isLt✝ : j < [n].len + 1
⊢ ↑((Hom.toOrderHom (δ ⟨i, isLt✝¹⟩.succ ≫ σ ⟨i, isLt✝¹⟩)) ⟨j, isLt✝⟩) = ↑((Hom.toOrderHom (𝟙 [n])) ⟨j, isLt✝⟩)
state_after: case a.h.h.h.mk.mk
n i : ℕ
isLt✝¹ : i < n + 1
j : ℕ
isLt✝ : j < [n].len + 1
⊢ ↑(if h : ⟨i, ⋯⟩ < if ⟨j, ⋯⟩ < ⟨i + 1, ⋯⟩ then ⟨j, ⋯⟩ else ⟨j + 1, ⋯⟩ then
        (if ⟨j, ⋯⟩ < ⟨i + 1, ⋯⟩ then ⟨j, ⋯⟩ else ⟨j + 1, ⋯⟩).pred ⋯
      else (if ⟨j, ⋯⟩ < ⟨i + 1, ⋯⟩ then ⟨j, ⋯⟩ else ⟨j + 1, ⋯⟩).castPred ⋯) =
    j
tactic: dsimp [δ, σ, Fin.succAbove, Fin.predAbove]
state_before: case a.h.h.h.mk.mk
n i : ℕ
isLt✝¹ : i < n + 1
j : ℕ
isLt✝ : j < [n].len + 1
⊢ ↑(if h : ⟨i, ⋯⟩ < if ⟨j, ⋯⟩ < ⟨i + 1, ⋯⟩ then ⟨j, ⋯⟩ else ⟨j + 1, ⋯⟩ then
        (if ⟨j, ⋯⟩ < ⟨i + 1, ⋯⟩ then ⟨j, ⋯⟩ else ⟨j + 1, ⋯⟩).pred ⋯
      else (if ⟨j, ⋯⟩ < ⟨i + 1, ⋯⟩ then ⟨j, ⋯⟩ else ⟨j + 1, ⋯⟩).castPred ⋯) =
    j
state_after: no goals
tactic: split_ifs <;> simp <;> simp at * <;> omega
Theorem: LinearMap.mem_submoduleImage
File: Mathlib/Algebra/Module/Submodule/Range.lean

Proof steps:
state_before: R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
K : Type u_4
K₂ : Type u_5
M : Type u_6
M₂ : Type u_7
M₃ : Type u_8
V : Type u_9
V₂ : Type u_10
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_11
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : ↥O →ₗ[R] M'
N : Submodule R M
x : M'
⊢ x ∈ ϕ.submoduleImage N ↔ ∃ y, ∃ (yO : y ∈ O), y ∈ N ∧ ϕ ⟨y, yO⟩ = x
state_after: case refine_1
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
K : Type u_4
K₂ : Type u_5
M : Type u_6
M₂ : Type u_7
M₃ : Type u_8
V : Type u_9
V₂ : Type u_10
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_11
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : ↥O →ₗ[R] M'
N : Submodule R M
x : M'
⊢ (∃ y, O.subtype y ∈ N ∧ ϕ y = x) → ∃ y, ∃ (yO : y ∈ O), y ∈ N ∧ ϕ ⟨y, yO⟩ = x

case refine_2
R : Type u_1
R₂ : Type u_2
R₃ : Type u_3
K : Type u_4
K₂ : Type u_5
M : Type u_6
M₂ : Type u_7
M₃ : Type u_8
V : Type u_9
V₂ : Type u_10
inst✝¹¹ : Semiring R
inst✝¹⁰ : Semiring R₂
inst✝⁹ : Semiring R₃
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : Module R M
inst✝⁴ : Module R₂ M₂
inst✝³ : Module R₃ M₃
τ₁₂ : R →+* R₂
τ₂₃ : R₂ →+* R₃
τ₁₃ : R →+* R₃
inst✝² : RingHomCompTriple τ₁₂ τ₂₃ τ₁₃
M' : Type u_11
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
O : Submodule R M
ϕ : ↥O →ₗ[R] M'
N : Submodule R M
x : M'
⊢ (∃ y, ∃ (yO : y ∈ O), y ∈ N ∧ ϕ ⟨y, yO⟩ = x) → ∃ y, O.subtype y ∈ N ∧ ϕ y = x
tactic: refine Submodule.mem_map.trans ⟨?_, ?_⟩ <;> simp_rw [Submodule.mem_comap]
Theorem: Subgroup.top_prod
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : Group G''
A : Type u_4
inst✝² : AddGroup A
H✝ K : Subgroup G
k : Set G
N : Type u_5
inst✝¹ : Group N
P : Type u_6
inst✝ : Group P
H : Subgroup N
x : G × N
⊢ x ∈ ⊤.prod H ↔ x ∈ comap (MonoidHom.snd G N) H
state_after: no goals
tactic: simp [mem_prod, MonoidHom.coe_snd]