ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: MvPolynomial.coeff_eval_eq_eval_coeff
File: Mathlib/Algebra/MvPolynomial/Equiv.lean

Proof steps:
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
s' : Fin n → R
f : (MvPolynomial (Fin n) R)[X]
i : ℕ
⊢ (Polynomial.map (eval s') f).coeff i = (eval s') (f.coeff i)
state_after: no goals
tactic: simp only [Polynomial.coeff_map]
Theorem: Batteries.RBNode.Path.zoom_zoomed₂
File: .lake/packages/batteries/Batteries/Data/RBMap/Alter.lean

Proof steps:
state_before: α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e✝ : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
e : zoom cut (node c✝ l✝ v✝ r✝) path = (t', path')
⊢ Zoomed cut path'
state_after: α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
⊢ zoom cut (node c✝ l✝ v✝ r✝) path = (t', path') → Zoomed cut path'
tactic: revert e
state_before: α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
⊢ zoom cut (node c✝ l✝ v✝ r✝) path = (t', path') → Zoomed cut path'
state_after: α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
⊢ (match cut v✝ with
      | Ordering.lt => zoom cut l✝ (left c✝ path v✝ r✝)
      | Ordering.gt => zoom cut r✝ (right c✝ l✝ v✝ path)
      | Ordering.eq => (node c✝ l✝ v✝ r✝, path)) =
      (t', path') →
    Zoomed cut path'
tactic: unfold zoom
state_before: α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
⊢ (match cut v✝ with
      | Ordering.lt => zoom cut l✝ (left c✝ path v✝ r✝)
      | Ordering.gt => zoom cut r✝ (right c✝ l✝ v✝ path)
      | Ordering.eq => (node c✝ l✝ v✝ r✝, path)) =
      (t', path') →
    Zoomed cut path'
state_after: case h_1
α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
x✝ : Ordering
heq✝ : cut v✝ = Ordering.lt
⊢ zoom cut l✝ (left c✝ path v✝ r✝) = (t', path') → Zoomed cut path'

case h_2
α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
x✝ : Ordering
heq✝ : cut v✝ = Ordering.gt
⊢ zoom cut r✝ (right c✝ l✝ v✝ path) = (t', path') → Zoomed cut path'

case h_3
α✝ : Type u_1
cut : α✝ → Ordering
t : RBNode α✝
path : Path α✝
t'✝ : RBNode α✝
path'✝ : Path α✝
e : zoom cut t path = (t'✝, path'✝)
hp : Zoomed cut path
path' : Path α✝
t' : RBNode α✝
c✝ : RBColor
l✝ : RBNode α✝
v✝ : α✝
r✝ : RBNode α✝
x✝ : Ordering
heq✝ : cut v✝ = Ordering.eq
⊢ (node c✝ l✝ v✝ r✝, path) = (t', path') → Zoomed cut path'
tactic: split
Theorem: ContMDiff.comp
File: Mathlib/Geometry/Manifold/ContMDiff/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝¹⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁶ : NormedAddCommGroup E
inst✝¹⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝¹⁴ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace H M
inst✝¹¹ : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝¹⁰ : NormedAddCommGroup E'
inst✝⁹ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝⁷ : TopologicalSpace M'
inst✝⁶ : ChartedSpace H' M'
inst✝⁵ : SmoothManifoldWithCorners I' M'
E'' : Type u_8
inst✝⁴ : NormedAddCommGroup E''
inst✝³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹ : TopologicalSpace M''
inst✝ : ChartedSpace H'' M''
e : PartialHomeomorph M H
e' : PartialHomeomorph M' H'
f f₁ : M → M'
s s₁ t : Set M
x : M
m n : ℕ∞
g : M' → M''
hg : ContMDiff I' I'' n g
hf : ContMDiff I I' n f
⊢ ContMDiff I I'' n (g ∘ f)
state_after: 𝕜 : Type u_1
inst✝¹⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁶ : NormedAddCommGroup E
inst✝¹⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝¹⁴ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace H M
inst✝¹¹ : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝¹⁰ : NormedAddCommGroup E'
inst✝⁹ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝⁷ : TopologicalSpace M'
inst✝⁶ : ChartedSpace H' M'
inst✝⁵ : SmoothManifoldWithCorners I' M'
E'' : Type u_8
inst✝⁴ : NormedAddCommGroup E''
inst✝³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹ : TopologicalSpace M''
inst✝ : ChartedSpace H'' M''
e : PartialHomeomorph M H
e' : PartialHomeomorph M' H'
f f₁ : M → M'
s s₁ t : Set M
x : M
m n : ℕ∞
g : M' → M''
hg : ContMDiffOn I' I'' n g univ
hf : ContMDiffOn I I' n f univ
⊢ ContMDiffOn I I'' n (g ∘ f) univ
tactic: rw [← contMDiffOn_univ] at hf hg ⊢
state_before: 𝕜 : Type u_1
inst✝¹⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁶ : NormedAddCommGroup E
inst✝¹⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝¹⁴ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace H M
inst✝¹¹ : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝¹⁰ : NormedAddCommGroup E'
inst✝⁹ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝⁸ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝⁷ : TopologicalSpace M'
inst✝⁶ : ChartedSpace H' M'
inst✝⁵ : SmoothManifoldWithCorners I' M'
E'' : Type u_8
inst✝⁴ : NormedAddCommGroup E''
inst✝³ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝² : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝¹ : TopologicalSpace M''
inst✝ : ChartedSpace H'' M''
e : PartialHomeomorph M H
e' : PartialHomeomorph M' H'
f f₁ : M → M'
s s₁ t : Set M
x : M
m n : ℕ∞
g : M' → M''
hg : ContMDiffOn I' I'' n g univ
hf : ContMDiffOn I I' n f univ
⊢ ContMDiffOn I I'' n (g ∘ f) univ
state_after: no goals
tactic: exact hg.comp hf subset_preimage_univ
Theorem: equicontinuousWithinAt_iff_range
File: Mathlib/Topology/UniformSpace/Equicontinuity.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
F : ι → X → α
S : Set X
x₀ : X
⊢ EquicontinuousWithinAt F S x₀ ↔ EquicontinuousWithinAt Subtype.val S x₀
state_after: no goals
tactic: simp only [EquicontinuousWithinAt, forall_subtype_range_iff]
Theorem: Polynomial.coeff_update_ne
File: Mathlib/Algebra/Polynomial/Basic.lean

Proof steps:
state_before: R : Type u
a✝ b : R
m n✝ : ℕ
inst✝ : Semiring R
p✝ q p : R[X]
n : ℕ
a : R
i : ℕ
h : i ≠ n
⊢ (p.update n a).coeff i = p.coeff i
state_after: no goals
tactic: rw [p.coeff_update_apply, if_neg h]
Theorem: Surreal.Multiplication.P2_neg_left
File: Mathlib/SetTheory/Surreal/Multiplication.lean

Proof steps:
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ P2 x₁ x₂ y ↔ P2 (-x₂) (-x₁) y
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ x₁ ≈ x₂ → ⟦x₁ * y⟧ = ⟦x₂ * y⟧ ↔ -x₂ ≈ -x₁ → ⟦-x₂ * y⟧ = ⟦-x₁ * y⟧
tactic: rw [P2, P2]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ x₁ ≈ x₂ → ⟦x₁ * y⟧ = ⟦x₂ * y⟧ ↔ -x₂ ≈ -x₁ → ⟦-x₂ * y⟧ = ⟦-x₁ * y⟧
state_after: case mp
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ (x₁ ≈ x₂ → ⟦x₁ * y⟧ = ⟦x₂ * y⟧) → -x₂ ≈ -x₁ → ⟦-x₂ * y⟧ = ⟦-x₁ * y⟧

case mpr
x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ (-x₂ ≈ -x₁ → ⟦-x₂ * y⟧ = ⟦-x₁ * y⟧) → x₁ ≈ x₂ → ⟦x₁ * y⟧ = ⟦x₂ * y⟧
tactic: constructor
Theorem: omegaLimit_union
File: Mathlib/Dynamics/OmegaLimit.lean

Proof steps:
state_before: τ : Type u_1
α : Type u_2
β : Type u_3
ι : Type u_4
inst✝ : TopologicalSpace β
f : Filter τ
ϕ : τ → α → β
s s₁ s₂ : Set α
⊢ ω f ϕ (s₁ ∪ s₂) = ω f ϕ s₁ ∪ ω f ϕ s₂
state_after: case h
τ : Type u_1
α : Type u_2
β : Type u_3
ι : Type u_4
inst✝ : TopologicalSpace β
f : Filter τ
ϕ : τ → α → β
s s₁ s₂ : Set α
y : β
⊢ y ∈ ω f ϕ (s₁ ∪ s₂) ↔ y ∈ ω f ϕ s₁ ∪ ω f ϕ s₂
tactic: ext y
state_before: case h
τ : Type u_1
α : Type u_2
β : Type u_3
ι : Type u_4
inst✝ : TopologicalSpace β
f : Filter τ
ϕ : τ → α → β
s s₁ s₂ : Set α
y : β
⊢ y ∈ ω f ϕ (s₁ ∪ s₂) ↔ y ∈ ω f ϕ s₁ ∪ ω f ϕ s₂
state_after: case h.mp
τ : Type u_1
α : Type u_2
β : Type u_3
ι : Type u_4
inst✝ : TopologicalSpace β
f : Filter τ
ϕ : τ → α → β
s s₁ s₂ : Set α
y : β
⊢ y ∈ ω f ϕ (s₁ ∪ s₂) → y ∈ ω f ϕ s₁ ∪ ω f ϕ s₂

case h.mpr
τ : Type u_1
α : Type u_2
β : Type u_3
ι : Type u_4
inst✝ : TopologicalSpace β
f : Filter τ
ϕ : τ → α → β
s s₁ s₂ : Set α
y : β
⊢ y ∈ ω f ϕ s₁ ∪ ω f ϕ s₂ → y ∈ ω f ϕ (s₁ ∪ s₂)
tactic: constructor
Theorem: Multiset.sum_filter_add_sum_filter_not
File: Mathlib/Algebra/BigOperators/Group/Multiset.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
p : α → Prop
inst✝ : DecidablePred p
⊢ (filter p s).prod * (filter (fun a => ¬p a) s).prod = s.prod
state_after: no goals
tactic: rw [← prod_add, filter_add_not]
Theorem: AddCircle.coe_eq_zero_iff
File: Mathlib/Topology/Instances/AddCircle.lean

Proof steps:
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedAddCommGroup 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p x : 𝕜
⊢ ↑x = 0 ↔ ∃ n, n • p = x
state_after: no goals
tactic: simp [AddSubgroup.mem_zmultiples_iff]
Theorem: Matrix.det_eq_zero_of_column_eq_zero
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

Proof steps:
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
h : ∀ (i : n), A i j = 0
⊢ A.det = 0
state_after: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
h : ∀ (i : n), A i j = 0
⊢ Aᵀ.det = 0
tactic: rw [← det_transpose]
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
h : ∀ (i : n), A i j = 0
⊢ Aᵀ.det = 0
state_after: no goals
tactic: exact det_eq_zero_of_row_eq_zero j h
Theorem: Fin.castPred_succAbove_castPred
File: Mathlib/Data/Fin/Basic.lean

Proof steps:
state_before: n m : ℕ
p : Fin (n + 1)
i j : Fin n
a : Fin (n + 2)
b : Fin (n + 1)
ha : a ≠ last (n + 1)
hb : b ≠ last n
hk : optParam (a.succAbove b ≠ last (n + 1)) ⋯
⊢ (a.castPred ha).succAbove (b.castPred hb) = (a.succAbove b).castPred hk
state_after: no goals
tactic: simp_rw [← castSucc_inj (b := (a.succAbove b).castPred hk), ← castSucc_succAbove_castSucc,
    castSucc_castPred]
Theorem: finsum_cond_ne
File: Mathlib/Algebra/BigOperators/Finprod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
⊢ ∏ᶠ (i : α) (_ : i ≠ a), f i = ∏ i ∈ hf.toFinset.erase a, f i
state_after: case h
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
⊢ ∀ {x : α}, f x ≠ 1 → (x ≠ a ↔ x ∈ hf.toFinset.erase a)
tactic: apply finprod_cond_eq_prod_of_cond_iff
state_before: case h
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
⊢ ∀ {x : α}, f x ≠ 1 → (x ≠ a ↔ x ∈ hf.toFinset.erase a)
state_after: case h
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
x : α
hx : f x ≠ 1
⊢ x ≠ a ↔ x ∈ hf.toFinset.erase a
tactic: intro x hx
state_before: case h
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
x : α
hx : f x ≠ 1
⊢ x ≠ a ↔ x ∈ hf.toFinset.erase a
state_after: case h
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
x : α
hx : f x ≠ 1
⊢ x ≠ a ↔ x ≠ a ∧ f x ≠ 1
tactic: rw [Finset.mem_erase, Finite.mem_toFinset, mem_mulSupport]
state_before: case h
α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝² : CommMonoid M
inst✝¹ : CommMonoid N
f : α → M
a : α
inst✝ : DecidableEq α
hf : (mulSupport f).Finite
x : α
hx : f x ≠ 1
⊢ x ≠ a ↔ x ≠ a ∧ f x ≠ 1
state_after: no goals
tactic: exact ⟨fun h => And.intro h hx, fun h => h.1⟩
Theorem: Set.Ioo_union_right
File: Mathlib/Order/Interval/Set/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : PartialOrder α
a b c : α
hab : a < b
⊢ Ioo a b ∪ {b} = Ioc a b
state_after: no goals
tactic: simpa only [dual_Ioo, dual_Ico] using Ioo_union_left hab.dual
Theorem: CategoryTheory.Limits.walkingParallelFamilyEquivWalkingParallelPair_unitIso_hom_app
File: Mathlib/CategoryTheory/Limits/Shapes/WideEqualizers.lean

Proof steps:
state_before: J : Type w
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f : J → (X✝ ⟶ Y)
X : WalkingParallelFamily (ULift.{w, 0} Bool)
⊢ (𝟭 (WalkingParallelFamily (ULift.{w, 0} Bool))).obj X =
    ((parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right) ⋙
          parallelPair (line { down := true }) (line { down := false })).obj
      X
state_after: no goals
tactic: cases X <;> rfl
state_before: J : Type w
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : J → (X ⟶ Y)
⊢ ∀ {X Y : WalkingParallelFamily (ULift.{w, 0} Bool)} (f : X ⟶ Y),
    (𝟭 (WalkingParallelFamily (ULift.{w, 0} Bool))).map f ≫ ((fun X => eqToIso ⋯) Y).hom =
      ((fun X => eqToIso ⋯) X).hom ≫
        ((parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right) ⋙
              parallelPair (line { down := true }) (line { down := false })).map
          f
state_after: no goals
tactic: rintro _ _ (_|⟨_|_⟩) <;> aesop_cat
state_before: J : Type w
C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f : J → (X✝ ⟶ Y)
X : WalkingParallelPair
⊢ (parallelPair (line { down := true }) (line { down := false }) ⋙
          parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right).obj
      X =
    (𝟭 WalkingParallelPair).obj X
state_after: no goals
tactic: cases X <;> rfl
state_before: J : Type w
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : J → (X ⟶ Y)
⊢ ∀ {X Y : WalkingParallelPair} (f : X ⟶ Y),
    (parallelPair (line { down := true }) (line { down := false }) ⋙
              parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right).map
          f ≫
        ((fun X => eqToIso ⋯) Y).hom =
      ((fun X => eqToIso ⋯) X).hom ≫ (𝟭 WalkingParallelPair).map f
state_after: no goals
tactic: rintro _ _ (_|_|_) <;> aesop_cat
state_before: J : Type w
C : Type u
inst✝ : Category.{v, u} C
X Y : C
f : J → (X ⟶ Y)
⊢ ∀ (X : WalkingParallelFamily (ULift.{w, 0} Bool)),
    (parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right).map
          ((NatIso.ofComponents (fun X => eqToIso ⋯) ⋯).hom.app X) ≫
        (NatIso.ofComponents (fun X => eqToIso ⋯) ⋯).hom.app
          ((parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right).obj
            X) =
      𝟙 ((parallelFamily fun p => bif p.down then WalkingParallelPairHom.left else WalkingParallelPairHom.right).obj X)
state_after: no goals
tactic: rintro (_|_) <;> aesop_cat
Theorem: negPart_sub_posPart
File: Mathlib/Algebra/Order/Group/PosPart.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : Lattice α
inst✝¹ : Group α
a✝ : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a : α
⊢ a⁻ᵐ / a⁺ᵐ = a⁻¹
state_after: no goals
tactic: rw [← inv_div, oneLePart_div_leOnePart]
Theorem: DirichletCharacter.changeLevel_eq_cast_of_dvd
File: Mathlib/NumberTheory/DirichletCharacter/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
m : ℕ
hm : n ∣ m
a : (ZMod m)ˣ
⊢ ((changeLevel hm) χ) ↑a = χ (↑a).cast
state_after: no goals
tactic: set_option tactic.skipAssignedInstances false in
  simpa [changeLevel_def, Function.comp_apply, MonoidHom.coe_comp] using
      toUnitHom_eq_char' _ <| ZMod.IsUnit_cast_of_dvd hm a
Theorem: monovaryOn_neg_right
File: Mathlib/Algebra/Order/Monovary.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : OrderedCommGroup α
inst✝ : OrderedCommGroup β
s : Set ι
f f₁ f₂ : ι → α
g g₁ g₂ : ι → β
⊢ MonovaryOn f g⁻¹ s ↔ AntivaryOn f g s
state_after: no goals
tactic: simpa [MonovaryOn, AntivaryOn] using forall₂_swap
Theorem: Pullback.continuous_totalSpaceMk
File: Mathlib/Topology/FiberBundle/Constructions.lean

Proof steps:
state_before: B : Type u
F : Type v
E : B → Type w₁
B' : Type w₂
f✝ : B' → B
inst✝⁵ : TopologicalSpace B'
inst✝⁴ : TopologicalSpace (TotalSpace F E)
inst✝³ : TopologicalSpace F
inst✝² : TopologicalSpace B
inst✝¹ : (x : B) → TopologicalSpace (E x)
inst✝ : FiberBundle F E
f : B' → B
x : B'
⊢ Continuous (TotalSpace.mk x)
state_after: B : Type u
F : Type v
E : B → Type w₁
B' : Type w₂
f✝ : B' → B
inst✝⁵ : TopologicalSpace B'
inst✝⁴ : TopologicalSpace (TotalSpace F E)
inst✝³ : TopologicalSpace F
inst✝² : TopologicalSpace B
inst✝¹ : (x : B) → TopologicalSpace (E x)
inst✝ : FiberBundle F E
f : B' → B
x : B'
⊢ instTopologicalSpacePullback E f x ≤ induced (fun x_1 => Pullback.lift f { proj := x, snd := x_1 }) inst✝⁴
tactic: simp only [continuous_iff_le_induced, Pullback.TotalSpace.topologicalSpace, induced_compose,
    induced_inf, Function.comp, induced_const, top_inf_eq, pullbackTopology_def]
state_before: B : Type u
F : Type v
E : B → Type w₁
B' : Type w₂
f✝ : B' → B
inst✝⁵ : TopologicalSpace B'
inst✝⁴ : TopologicalSpace (TotalSpace F E)
inst✝³ : TopologicalSpace F
inst✝² : TopologicalSpace B
inst✝¹ : (x : B) → TopologicalSpace (E x)
inst✝ : FiberBundle F E
f : B' → B
x : B'
⊢ instTopologicalSpacePullback E f x ≤ induced (fun x_1 => Pullback.lift f { proj := x, snd := x_1 }) inst✝⁴
state_after: no goals
tactic: exact le_of_eq (FiberBundle.totalSpaceMk_inducing F E (f x)).induced
Theorem: Set.EqOn.image_eq_self
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
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f✝ f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
f : α → α
h : EqOn f id s
⊢ f '' s = s
state_after: no goals
tactic: rw [h.image_eq, image_id]
Theorem: Holor.mul_assoc0
File: Mathlib/Data/Holor.lean

Proof steps:
state_before: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ (x ⊗ y ⊗ z) t = (x ⊗ (y ⊗ z)).assocLeft t
state_after: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ (x ⊗ y ⊗ z) t = cast ⋯ (x ⊗ (y ⊗ z)) t
tactic: rw [assocLeft]
state_before: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ (x ⊗ y ⊗ z) t = cast ⋯ (x ⊗ (y ⊗ z)) t
state_after: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ x t.take.take * y t.take.drop * z t.drop = cast ⋯ (fun t => x t.take * (y t.drop.take * z t.drop.drop)) t
tactic: unfold mul
state_before: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ x t.take.take * y t.take.drop * z t.drop = cast ⋯ (fun t => x t.take * (y t.drop.take * z t.drop.drop)) t
state_after: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ x t.assocRight.take * (y t.assocRight.drop.take * z t.assocRight.drop.drop) =
    (fun t => x (cast ⋯ t).take * (y (cast ⋯ t).drop.take * z (cast ⋯ t).drop.drop)) t

case eq
α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ ds₁ ++ (ds₂ ++ ds₃) = ds₁ ++ ds₂ ++ ds₃
tactic: rw [mul_assoc, ← HolorIndex.take_take, ← HolorIndex.drop_take, ← HolorIndex.drop_drop,
      cast_type]
state_before: case eq
α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
t : HolorIndex (ds₁ ++ ds₂ ++ ds₃)
⊢ ds₁ ++ (ds₂ ++ ds₃) = ds₁ ++ ds₂ ++ ds₃
state_after: no goals
tactic: rw [append_assoc]
Theorem: mem_emetric_ball_one_iff
File: Mathlib/Analysis/Normed/Group/Basic.lean

Proof steps:
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝³ : SeminormedGroup E
inst✝² : SeminormedGroup F
inst✝¹ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r✝ r₁ r₂ : ℝ
inst✝ : FunLike 𝓕 E F
r : ℝ≥0∞
⊢ a ∈ EMetric.ball 1 r ↔ ↑‖a‖₊ < r
state_after: no goals
tactic: rw [EMetric.mem_ball, edist_eq_coe_nnnorm']
Theorem: CstarRing.mul_star_self_eq_zero_iff
File: Mathlib/Analysis/CstarAlgebra/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
α : Type u_3
inst✝² : NonUnitalNormedRing E
inst✝¹ : StarRing E
inst✝ : CstarRing E
x : E
⊢ x * x⋆ = 0 ↔ x = 0
state_after: no goals
tactic: simpa only [star_eq_zero, star_star] using @star_mul_self_eq_zero_iff _ _ _ _ (star x)
Theorem: LinearEquiv.lTensor_zpow
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P ≃ₗ[R] Q
f✝ : N ≃ₗ[R] P
m : M
n✝ : N
p : P
x : M ⊗[R] N
y : N ⊗[R] M
f : N ≃ₗ[R] N
n : ℤ
⊢ lTensor M f ^ n = lTensor M (f ^ n)
state_after: no goals
tactic: simpa only [one_zpow] using TensorProduct.congr_zpow (1 : M ≃ₗ[R] M) f n
Theorem: Real.closedBall_eq_Icc
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

Proof steps:
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x r : ℝ
⊢ closedBall x r = Icc (x - r) (x + r)
state_after: case h
α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x r y : ℝ
⊢ y ∈ closedBall x r ↔ y ∈ Icc (x - r) (x + r)
tactic: ext y
state_before: case h
α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x r y : ℝ
⊢ y ∈ closedBall x r ↔ y ∈ Icc (x - r) (x + r)
state_after: no goals
tactic: rw [mem_closedBall, dist_comm, Real.dist_eq, abs_sub_le_iff, mem_Icc, ← sub_le_iff_le_add',
    sub_le_comm]