ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: perfectField_iff_splits_of_natSepDegree_eq_one
File: Mathlib/FieldTheory/SeparableDegree.lean

Proof steps:
state_before: F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
⊢ PerfectField F ↔ ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
state_after: case refine_1
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
x✝ : PerfectField F
f : F[X]
hf : f.natSepDegree = 1
h : ∀ {f : F[X]}, Irreducible f → f.Separable
hn : ¬Polynomial.map (RingHom.id F) f = 0
g : F[X]
hg : Irreducible g
hd : g ∣ Polynomial.map (RingHom.id F) f
⊢ g.degree = 1

case refine_2
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
h : ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
⊢ PerfectField F
tactic: refine ⟨fun ⟨h⟩ f hf ↦ or_iff_not_imp_left.2 fun hn g hg hd ↦ ?_, fun h ↦ ?_⟩
state_before: case refine_2
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
h : ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
⊢ PerfectField F
state_after: case refine_2.intro
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
h : ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
p : ℕ
h✝ : ExpChar F p
⊢ PerfectField F
tactic: obtain ⟨p, _⟩ := ExpChar.exists F
state_before: case refine_2.intro
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
h : ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
p : ℕ
h✝ : ExpChar F p
⊢ PerfectField F
state_after: case refine_2.intro
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
h : ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
p : ℕ
h✝ : ExpChar F p
this : PerfectRing F p
⊢ PerfectField F
tactic: haveI := PerfectRing.ofSurjective F p fun x ↦ by
    obtain ⟨y, hy⟩ := exists_root_of_splits _
      (h _ (pow_one p ▸ natSepDegree_X_pow_char_pow_sub_C p 1 x))
      ((degree_X_pow_sub_C (expChar_pos F p) x).symm ▸ Nat.cast_pos.2 (expChar_pos F p)).ne'
    exact ⟨y, by rwa [← eval, eval_sub, eval_pow, eval_X, eval_C, sub_eq_zero] at hy⟩
state_before: case refine_2.intro
F✝ : Type u
E : Type v
inst✝⁵ : Field F✝
inst✝⁴ : Field E
inst✝³ : Algebra F✝ E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F✝ K
F : Type u_1
inst✝ : Field F
h : ∀ (f : F[X]), f.natSepDegree = 1 → Splits (RingHom.id F) f
p : ℕ
h✝ : ExpChar F p
this : PerfectRing F p
⊢ PerfectField F
state_after: no goals
tactic: exact PerfectRing.toPerfectField F p
Theorem: Basis.det_ne_zero
File: Mathlib/LinearAlgebra/Determinant.lean

Proof steps:
state_before: R : Type u_1
inst✝⁷ : CommRing R
M : Type u_2
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type u_3
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
ι : Type u_4
inst✝² : DecidableEq ι
inst✝¹ : Fintype ι
e : Basis ι R M
inst✝ : Nontrivial R
h : e.det = 0
⊢ False
state_after: no goals
tactic: simpa [h] using e.det_self
Theorem: AlgebraicGeometry.disjointGlueData_U
File: Mathlib/AlgebraicGeometry/Limits.lean

Proof steps:
state_before: ι : Type u
f : ι → Scheme
i j : __spread✝⁻⁰.J
⊢ IsOpenImmersion (__spread✝⁻⁰.f i j)
state_after: ι : Type u
f : ι → Scheme
i j : __spread✝⁻⁰.J
⊢ IsOpenImmersion (if h : i = j then eqToHom ⋯ else eqToHom ⋯ ≫ (f i).emptyTo)
tactic: dsimp only [GlueData.ofGlueData', GlueData'.f', disjointGlueData']
state_before: ι : Type u
f : ι → Scheme
i j : __spread✝⁻⁰.J
⊢ IsOpenImmersion (if h : i = j then eqToHom ⋯ else eqToHom ⋯ ≫ (f i).emptyTo)
state_after: no goals
tactic: split <;> infer_instance
Theorem: Finset.powersetCard_zero
File: Mathlib/Data/Finset/Powerset.lean

Proof steps:
state_before: α : Type u_1
s✝¹ t✝ : Finset α
n : ?m.14608
s✝ t s : Finset α
⊢ powersetCard 0 s = {∅}
state_after: case a
α : Type u_1
s✝¹ t✝ : Finset α
n : ?m.14608
s✝ t s a✝ : Finset α
⊢ a✝ ∈ powersetCard 0 s ↔ a✝ ∈ {∅}
tactic: ext
state_before: case a
α : Type u_1
s✝¹ t✝ : Finset α
n : ?m.14608
s✝ t s a✝ : Finset α
⊢ a✝ ∈ powersetCard 0 s ↔ a✝ ∈ {∅}
state_after: case a
α : Type u_1
s✝¹ t✝ : Finset α
n : ?m.14608
s✝ t s a✝ : Finset α
⊢ a✝ ⊆ s ∧ a✝ = ∅ ↔ a✝ = ∅
tactic: rw [mem_powersetCard, mem_singleton, card_eq_zero]
state_before: case a
α : Type u_1
s✝¹ t✝ : Finset α
n : ?m.14608
s✝ t s a✝ : Finset α
⊢ a✝ ⊆ s ∧ a✝ = ∅ ↔ a✝ = ∅
state_after: no goals
tactic: refine
    ⟨fun h => h.2, fun h => by
      rw [h]
      exact ⟨empty_subset s, rfl⟩⟩
Theorem: Matroid.map_image_indep_iff
File: Mathlib/Data/Matroid/Map.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
⊢ (M.map f hf).Indep (f '' I) ↔ M.Indep I
state_after: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
⊢ (∃ I₀, M.Indep I₀ ∧ f '' I = f '' I₀) ↔ M.Indep I
tactic: rw [map_indep_iff]
state_before: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
⊢ (∃ I₀, M.Indep I₀ ∧ f '' I = f '' I₀) ↔ M.Indep I
state_after: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
x✝ : ∃ I₀, M.Indep I₀ ∧ f '' I = f '' I₀
J : Set α
hJ : M.Indep J
hIJ : f '' I = f '' J
⊢ M.Indep I
tactic: refine ⟨fun ⟨J, hJ, hIJ⟩ ↦ ?_, fun h ↦ ⟨I, h, rfl⟩⟩
state_before: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
x✝ : ∃ I₀, M.Indep I₀ ∧ f '' I = f '' I₀
J : Set α
hJ : M.Indep J
hIJ : f '' I = f '' J
⊢ M.Indep I
state_after: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
x✝ : ∃ I₀, M.Indep I₀ ∧ f '' I = f '' I₀
J : Set α
hJ : M.Indep J
hIJ : I = J
⊢ M.Indep I
tactic: rw [hf.image_eq_image_iff hI hJ.subset_ground] at hIJ
state_before: α : Type u_1
β : Type u_2
f : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
hf : InjOn f M.E
I : Set α
hI : I ⊆ M.E
x✝ : ∃ I₀, M.Indep I₀ ∧ f '' I = f '' I₀
J : Set α
hJ : M.Indep J
hIJ : I = J
⊢ M.Indep I
state_after: no goals
tactic: rwa [hIJ]
Theorem: Finset.sum_choose_succ_mul
File: Mathlib/Data/Nat/Choose/Sum.lean

Proof steps:
state_before: R✝ : Type u_1
M : Type u_2
R : Type u_3
inst✝¹ : CommMonoid M
inst✝ : NonAssocSemiring R
f : ℕ → ℕ → R
n : ℕ
⊢ ∑ i ∈ range (n + 2), ↑((n + 1).choose i) * f i (n + 1 - i) =
    ∑ i ∈ range (n + 1), ↑(n.choose i) * f i (n + 1 - i) + ∑ i ∈ range (n + 1), ↑(n.choose i) * f (i + 1) (n - i)
state_after: no goals
tactic: simpa only [nsmul_eq_mul] using sum_choose_succ_nsmul f n
Theorem: Function.extend_nonpos
File: Mathlib/Algebra/Order/Pi.lean

Proof steps:
state_before: ι : Type u_1
I : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : I → Type u_6
x y : (i : I) → f✝ i
i : I
inst✝¹ : One γ
inst✝ : LE γ
f : α → β
g : α → γ
e : β → γ
hg : g ≤ 1
he : e ≤ 1
_b : β
⊢ extend f g e _b ≤ 1 _b
state_after: no goals
tactic: classical exact dite_le_one (fun _ ↦ hg _) (fun _ ↦ he _)
Theorem: Real.abs_cos_le_one
File: Mathlib/Data/Complex/Exponential.lean

Proof steps:
state_before: x y : ℝ
⊢ cos x * cos x ≤ 1
state_after: no goals
tactic: simp only [← sq, cos_sq_le_one]
Theorem: AdicCompletion.component_sumInv
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
ι : Type u_6
inst✝³ : DecidableEq ι
M : ι → Type u_7
inst✝² : (i : ι) → AddCommGroup (M i)
inst✝¹ : (i : ι) → Module R (M i)
inst✝ : Fintype ι
x : AdicCompletion I (⨁ (j : ι), M j)
j : ι
⊢ (component (AdicCompletion I R) ι (fun i => AdicCompletion I (M i)) j) ((sumInv I M) x) =
    (map I (component R ι M j)) x
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
P : Type u_4
inst✝⁷ : AddCommGroup P
inst✝⁶ : Module R P
T : Type u_5
inst✝⁵ : AddCommGroup T
inst✝⁴ : Module (AdicCompletion I R) T
ι : Type u_6
inst✝³ : DecidableEq ι
M : ι → Type u_7
inst✝² : (i : ι) → AddCommGroup (M i)
inst✝¹ : (i : ι) → Module R (M i)
inst✝ : Fintype ι
x✝ : AdicCompletion I (⨁ (j : ι), M j)
j : ι
x : AdicCauchySequence I (⨁ (j : ι), M j)
⊢ (component (AdicCompletion I R) ι (fun i => AdicCompletion I (M i)) j) ((sumInv I M) ((mk I (⨁ (j : ι), M j)) x)) =
    (map I (component R ι M j)) ((mk I (⨁ (j : ι), M j)) x)
tactic: apply induction_on I _ x (fun x ↦ ?_)
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
ι : Type u_6
inst✝³ : DecidableEq ι
M : ι → Type u_7
inst✝² : (i : ι) → AddCommGroup (M i)
inst✝¹ : (i : ι) → Module R (M i)
inst✝ : Fintype ι
x✝ : AdicCompletion I (⨁ (j : ι), M j)
j : ι
x : AdicCauchySequence I (⨁ (j : ι), M j)
⊢ (component (AdicCompletion I R) ι (fun i => AdicCompletion I (M i)) j) ((sumInv I M) ((mk I (⨁ (j : ι), M j)) x)) =
    (map I (component R ι M j)) ((mk I (⨁ (j : ι), M j)) x)
state_after: no goals
tactic: rfl
Theorem: LinearIndependent.repr_range
File: Mathlib/LinearAlgebra/LinearIndependent.lean

Proof steps:
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
⊢ LinearMap.range hv.repr = ⊤
state_after: no goals
tactic: rw [LinearIndependent.repr, LinearEquiv.range]
Theorem: innerDualCone_iUnion
File: Mathlib/Analysis/Convex/Cone/InnerDual.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
⊢ (⋃ i, f i).innerDualCone = ⨅ i, (f i).innerDualCone
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
⊢ ⨅ i, (f i).innerDualCone ≤ (⋃ i, f i).innerDualCone
tactic: refine le_antisymm (le_iInf fun i x hx y hy => hx _ <| mem_iUnion_of_mem _ hy) ?_
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
⊢ ⨅ i, (f i).innerDualCone ≤ (⋃ i, f i).innerDualCone
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
x : H
hx : x ∈ ⨅ i, (f i).innerDualCone
y : H
hy : y ∈ ⋃ i, f i
⊢ 0 ≤ ⟪y, x⟫_ℝ
tactic: intro x hx y hy
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
x : H
hx : x ∈ ⨅ i, (f i).innerDualCone
y : H
hy : y ∈ ⋃ i, f i
⊢ 0 ≤ ⟪y, x⟫_ℝ
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
x : H
hx : ∀ (i : ι), x ∈ (f i).innerDualCone
y : H
hy : y ∈ ⋃ i, f i
⊢ 0 ≤ ⟪y, x⟫_ℝ
tactic: rw [ConvexCone.mem_iInf] at hx
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
x : H
hx : ∀ (i : ι), x ∈ (f i).innerDualCone
y : H
hy : y ∈ ⋃ i, f i
⊢ 0 ≤ ⟪y, x⟫_ℝ
state_after: case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
x : H
hx : ∀ (i : ι), x ∈ (f i).innerDualCone
y : H
hy : y ∈ ⋃ i, f i
j : ι
hj : y ∈ f j
⊢ 0 ≤ ⟪y, x⟫_ℝ
tactic: obtain ⟨j, hj⟩ := mem_iUnion.mp hy
state_before: case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
ι : Sort u_6
f : ι → Set H
x : H
hx : ∀ (i : ι), x ∈ (f i).innerDualCone
y : H
hy : y ∈ ⋃ i, f i
j : ι
hj : y ∈ f j
⊢ 0 ≤ ⟪y, x⟫_ℝ
state_after: no goals
tactic: exact hx _ _ hj
Theorem: NormedAddCommGroup.nhds_basis_norm_lt
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₂ : ℝ
x : E
⊢ (𝓝 x).HasBasis (fun ε => 0 < ε) fun ε => {y | ‖y / x‖ < ε}
state_after: 𝓕 : 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₂ : ℝ
x : E
⊢ (𝓝 x).HasBasis (fun ε => 0 < ε) fun ε => ball x ε
tactic: simp_rw [← ball_eq']
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₂ : ℝ
x : E
⊢ (𝓝 x).HasBasis (fun ε => 0 < ε) fun ε => ball x ε
state_after: no goals
tactic: exact Metric.nhds_basis_ball
Theorem: compact_covered_by_add_left_translates
File: Mathlib/Topology/Algebra/Group/Basic.lean

Proof steps:
state_before: case intro
G : Type w
H : Type x
α : Type u
β : Type v
inst✝² : TopologicalSpace G
inst✝¹ : Group G
inst✝ : TopologicalGroup G
K V : Set G
hK : IsCompact K
hV : (interior V).Nonempty
t : Finset G
ht : K ⊆ ⋃ x ∈ t, interior ((fun x_1 => x * x_1) ⁻¹' V)
⊢ ∃ t, K ⊆ ⋃ g ∈ t, (fun x => g * x) ⁻¹' V
state_after: no goals
tactic: exact ⟨t, Subset.trans ht <| iUnion₂_mono fun g _ => interior_subset⟩
Theorem: Fin.append_left_eq_cons
File: Mathlib/Data/Fin/Tuple/Basic.lean

Proof steps:
state_before: m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
α : Type u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ append x₀ x = cons (x₀ 0) x ∘ cast ⋯
state_after: case h
m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i✝ : Fin n✝
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin (1 + n)
⊢ append x₀ x i = (cons (x₀ 0) x ∘ cast ⋯) i
tactic: ext i
state_before: case h
m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i✝ : Fin n✝
y : α✝ i✝.succ
z : α✝ 0
α : Type u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
i : Fin (1 + n)
⊢ append x₀ x i = (cons (x₀ 0) x ∘ cast ⋯) i
state_after: case h.refine_1
m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
α : Type u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ ∀ (i : Fin 1), append x₀ x (castAdd n i) = (cons (x₀ 0) x ∘ cast ⋯) (castAdd n i)

case h.refine_2
m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x✝ : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
α : Type u_1
n : ℕ
x₀ : Fin 1 → α
x : Fin n → α
⊢ ∀ (i : Fin n), append x₀ x (natAdd 1 i) = (cons (x₀ 0) x ∘ cast ⋯) (natAdd 1 i)
tactic: refine Fin.addCases ?_ ?_ i <;> clear i
Theorem: FiniteDimensional.finrank_eq_card_finset_basis
File: Mathlib/LinearAlgebra/Dimension/StrongRankCondition.lean

Proof steps:
state_before: R : Type u
M : Type v
inst✝³ : Ring R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝ : StrongRankCondition R
ι : Type w
b : Finset ι
h : Basis { x // x ∈ b } R M
⊢ finrank R M = b.card
state_after: no goals
tactic: rw [finrank_eq_card_basis h, Fintype.card_coe]
Theorem: Matrix.IsHermitian.mulVec_eigenvectorBasis
File: Mathlib/LinearAlgebra/Matrix/Spectrum.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝² : RCLike 𝕜
n : Type u_2
inst✝¹ : Fintype n
A : Matrix n n 𝕜
inst✝ : DecidableEq n
hA : A.IsHermitian
j : n
⊢ A *ᵥ (WithLp.equiv 2 ((i : n) → (fun x => 𝕜) i)) (hA.eigenvectorBasis j) =
    hA.eigenvalues j • (WithLp.equiv 2 ((i : n) → (fun x => 𝕜) i)) (hA.eigenvectorBasis j)
state_after: no goals
tactic: simpa only [eigenvectorBasis, OrthonormalBasis.reindex_apply, toEuclideanLin_apply,
    RCLike.real_smul_eq_coe_smul (K := 𝕜)] using
      congr(⇑$((isHermitian_iff_isSymmetric.1 hA).apply_eigenvectorBasis
        finrank_euclideanSpace ((Fintype.equivOfCardEq (Fintype.card_fin _)).symm j)))
Theorem: LinearMap.toKerIsLocalized_apply_coe
File: Mathlib/Algebra/Module/Submodule/Localization.lean

Proof steps:
state_before: R : Type u
S : Type u'
M : Type v
N : Type v'
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : Module R M
inst✝¹² : Module R N
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Module S N
inst✝⁹ : IsScalarTower R S N
p : Submonoid R
inst✝⁸ : IsLocalization p S
f : M →ₗ[R] N
inst✝⁷ : IsLocalizedModule p f
hp : p ≤ R⁰
M' : Submodule R M
P : Type w
inst✝⁶ : AddCommGroup P
inst✝⁵ : Module R P
Q : Type w'
inst✝⁴ : AddCommGroup Q
inst✝³ : Module R Q
inst✝² : Module S Q
inst✝¹ : IsScalarTower R S Q
f' : P →ₗ[R] Q
inst✝ : IsLocalizedModule p f'
g : M →ₗ[R] P
x : M
hx : x ∈ ker g
⊢ f x ∈ ker ((IsLocalizedModule.map p f f') g)
state_after: no goals
tactic: simp [LinearMap.mem_ker, LinearMap.mem_ker.mp hx]
Theorem: IsWellOrderLimitElement.wellOrderSucc_lt
File: Mathlib/Order/IsWellOrderLimitElement.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : LinearOrder α
a : α
ha : IsWellOrderLimitElement a
inst✝ : IsWellOrder α fun x x_1 => x < x_1
b : α
hb : b < a
⊢ wellOrderSucc b < a
state_after: case intro.intro
α : Type u_1
inst✝¹ : LinearOrder α
a : α
ha : IsWellOrderLimitElement a
inst✝ : IsWellOrder α fun x x_1 => x < x_1
b : α
hb : b < a
c : α
hc₁ : b < c
hc₂ : c < a
⊢ wellOrderSucc b < a
tactic: obtain ⟨c, hc₁, hc₂⟩ := ha.not_succ b hb
state_before: case intro.intro
α : Type u_1
inst✝¹ : LinearOrder α
a : α
ha : IsWellOrderLimitElement a
inst✝ : IsWellOrder α fun x x_1 => x < x_1
b : α
hb : b < a
c : α
hc₁ : b < c
hc₂ : c < a
⊢ wellOrderSucc b < a
state_after: no goals
tactic: exact lt_of_le_of_lt (wellOrderSucc_le hc₁) hc₂
Theorem: iteratedFDeriv_sum
File: Mathlib/Analysis/Calculus/ContDiff/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type u_2
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u✝ : Set E
f✝ f₁ : E → F
g : F → G
x✝ x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
ι : Type u_3
f : ι → E → F
u : Finset ι
i : ℕ
h : ∀ j ∈ u, ContDiff 𝕜 (↑i) (f j)
x : E
⊢ iteratedFDeriv 𝕜 i (fun x => ∑ j ∈ u, f j x) x = (∑ j ∈ u, iteratedFDeriv 𝕜 i (f j)) x
state_after: no goals
tactic: simpa [iteratedFDerivWithin_univ] using
    iteratedFDerivWithin_sum_apply uniqueDiffOn_univ (mem_univ x) fun j hj ↦ (h j hj).contDiffOn
Theorem: YoungDiagram.mem_iff_lt_rowLen
File: Mathlib/Combinatorics/Young/YoungDiagram.lean

Proof steps:
state_before: μ : YoungDiagram
i j : ℕ
⊢ (i, j) ∈ μ ↔ j < μ.rowLen i
state_after: μ : YoungDiagram
i j : ℕ
⊢ (i, j) ∈ μ ↔ ∀ m ≤ j, ¬(i, m) ∉ μ
tactic: rw [rowLen, Nat.lt_find_iff]
state_before: μ : YoungDiagram
i j : ℕ
⊢ (i, j) ∈ μ ↔ ∀ m ≤ j, ¬(i, m) ∉ μ
state_after: μ : YoungDiagram
i j : ℕ
⊢ (i, j) ∈ μ ↔ ∀ m ≤ j, (i, m) ∈ μ
tactic: push_neg
state_before: μ : YoungDiagram
i j : ℕ
⊢ (i, j) ∈ μ ↔ ∀ m ≤ j, (i, m) ∈ μ
state_after: no goals
tactic: exact ⟨fun h _ hmj => μ.up_left_mem (by rfl) hmj h, fun h => h _ (by rfl)⟩
Theorem: Surreal.Multiplication.P3_neg
File: Mathlib/SetTheory/Surreal/Multiplication.lean

Proof steps:
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ P3 x₁ x₂ y₁ y₂ ↔ P3 (-x₂) (-x₁) y₁ y₂
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ ⟦x₁ * y₂⟧ + ⟦x₂ * y₁⟧ < ⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ ↔ -⟦x₂ * y₂⟧ + -⟦x₁ * y₁⟧ < -⟦x₂ * y₁⟧ + -⟦x₁ * y₂⟧
tactic: simp_rw [P3, quot_neg_mul]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ ⟦x₁ * y₂⟧ + ⟦x₂ * y₁⟧ < ⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ ↔ -⟦x₂ * y₂⟧ + -⟦x₁ * y₁⟧ < -⟦x₂ * y₁⟧ + -⟦x₁ * y₂⟧
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ -(⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧) < -(⟦x₁ * y₂⟧ + ⟦x₂ * y₁⟧) ↔ -⟦x₂ * y₂⟧ + -⟦x₁ * y₁⟧ < -⟦x₂ * y₁⟧ + -⟦x₁ * y₂⟧
tactic: rw [← _root_.neg_lt_neg_iff]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
⊢ -(⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧) < -(⟦x₁ * y₂⟧ + ⟦x₂ * y₁⟧) ↔ -⟦x₂ * y₂⟧ + -⟦x₁ * y₁⟧ < -⟦x₂ * y₁⟧ + -⟦x₁ * y₂⟧
state_after: no goals
tactic: abel_nf
Theorem: Pi.support_single_zero
File: Mathlib/Algebra/Group/Support.lean

Proof steps:
state_before: A : Type u_1
B : Type u_2
inst✝¹ : DecidableEq A
inst✝ : One B
a : A
b : B
⊢ mulSupport (mulSingle a 1) = ∅
state_after: no goals
tactic: simp
Theorem: Algebra.Generators.Cotangent.map_mk
File: Mathlib/RingTheory/Generators.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝²⁵ : CommRing R
inst✝²⁴ : CommRing S
inst✝²³ : Algebra R S
P : Generators R S
R' : Type ?u.888157
S' : Type ?u.888160
inst✝²² : CommRing R'
inst✝²¹ : CommRing S'
inst✝²⁰ : Algebra R' S'
P' : Generators R' S'
inst✝¹⁹ : Algebra R R'
inst✝¹⁸ : Algebra S S'
inst✝¹⁷ : Algebra R S'
inst✝¹⁶ : IsScalarTower R R' S'
inst✝¹⁵ : IsScalarTower R S S'
R'' : Type ?u.890591
S'' : Type ?u.890594
inst✝¹⁴ : CommRing R''
inst✝¹³ : CommRing S''
inst✝¹² : Algebra R'' S''
P'' : Generators R'' S''
inst✝¹¹ : Algebra R R''
inst✝¹⁰ : Algebra S S''
inst✝⁹ : Algebra R S''
inst✝⁸ : IsScalarTower R R'' S''
inst✝⁷ : IsScalarTower R S S''
inst✝⁶ : Algebra R' R''
inst✝⁵ : Algebra S' S''
inst✝⁴ : Algebra R' S''
inst✝³ : IsScalarTower R' R'' S''
inst✝² : IsScalarTower R' S' S''
inst✝¹ : IsScalarTower R R' R''
inst✝ : IsScalarTower S S' S''
f : P.Hom P'
x : ↥P.ker
⊢ f.toAlgHom ↑x ∈ P'.ker
state_after: no goals
tactic: simpa [-map_aeval] using RingHom.congr_arg (algebraMap S S') x.2
Theorem: inv_pow_sub₀
File: Mathlib/Algebra/GroupWithZero/Units/Basic.lean

Proof steps:
state_before: α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝¹ : MonoidWithZero M₀
inst✝ : GroupWithZero G₀
a b c d : G₀
m n : ℕ
ha : a ≠ 0
h : n ≤ m
⊢ a⁻¹ ^ (m - n) = (a ^ m)⁻¹ * a ^ n
state_after: no goals
tactic: rw [pow_sub₀ _ (inv_ne_zero ha) h, inv_pow, inv_pow, inv_inv]
Theorem: Irreducible.coprime_iff_not_dvd
File: Mathlib/RingTheory/PrincipalIdealDomain.lean

Proof steps:
state_before: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : IsBezout R
p n : R
hp : Irreducible p
⊢ IsCoprime p n ↔ ¬p ∣ n
state_after: no goals
tactic: rw [← isRelPrime_iff_isCoprime, hp.isRelPrime_iff_not_dvd]
Theorem: PartialEquiv.isImage_source_target_of_disjoint
File: Mathlib/Logic/Equiv/PartialEquiv.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
e : PartialEquiv α β
e'✝ : PartialEquiv β γ
e' : PartialEquiv α β
hs : Disjoint e.source e'.source
ht : Disjoint e.target e'.target
⊢ ↑e '' (e.source ∩ e'.source) = e.target ∩ e'.target
state_after: no goals
tactic: rw [hs.inter_eq, ht.inter_eq, image_empty]