ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Finset.Nontrivial.ne_singleton
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s : Finset α
a b : α
hs : s.Nontrivial
⊢ s ≠ {a}
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
a b : α
hs : {a}.Nontrivial
⊢ False
tactic: rintro rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
a b : α
hs : {a}.Nontrivial
⊢ False
state_after: no goals
tactic: exact not_nontrivial_singleton hs
Theorem: List.nodupKeys_cons
File: Mathlib/Data/List/Sigma.lean

Proof steps:
state_before: α : Type u
β : α → Type v
l✝ l₁ l₂ : List (Sigma β)
s : Sigma β
l : List (Sigma β)
⊢ (s :: l).NodupKeys ↔ s.fst ∉ l.keys ∧ l.NodupKeys
state_after: no goals
tactic: simp [keys, NodupKeys]
Theorem: Fintype.prod_fiberwise'
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : κ → α
⊢ ∏ j : κ, ∏ _i : { i // g i = j }, f j = ∏ i : ι, f (g i)
state_after: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : κ → α
⊢ ∏ j : κ, ∏ _i : { i // g i = j }, f j = ∏ j : κ, ∏ _i ∈ filter (fun i => g i = j) univ, f j
tactic: rw [← Finset.prod_fiberwise' _ g f]
state_before: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : κ → α
⊢ ∏ j : κ, ∏ _i : { i // g i = j }, f j = ∏ j : κ, ∏ _i ∈ filter (fun i => g i = j) univ, f j
state_after: case e_f.h
ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : κ → α
j : κ
⊢ ∏ _i : { i // g i = j }, f j = ∏ _i ∈ filter (fun i => g i = j) univ, f j
tactic: congr with j
state_before: case e_f.h
ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : κ → α
j : κ
⊢ ∏ _i : { i // g i = j }, f j = ∏ _i ∈ filter (fun i => g i = j) univ, f j
state_after: no goals
tactic: exact (prod_subtype _ (by simp) fun _ ↦ _).symm
Theorem: Num.add_zero
File: Mathlib/Data/Num/Lemmas.lean

Proof steps:
state_before: α : Type u_1
n : Num
⊢ n + 0 = n
state_after: no goals
tactic: cases n <;> rfl
Theorem: Ordinal.le_cof_type
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsWellOrder α r
c : Cardinal.{u_1}
⊢ (∀ (S : Set α), Unbounded r S → c ≤ #↑S) → ∀ b ∈ {c | ∃ S, Unbounded r S ∧ #↑S = c}, c ≤ b
state_after: case intro.intro
α : Type u_1
r : α → α → Prop
inst✝ : IsWellOrder α r
c : Cardinal.{u_1}
H : ∀ (S : Set α), Unbounded r S → c ≤ #↑S
S : Set α
h : Unbounded r S
⊢ c ≤ #↑S
tactic: rintro H d ⟨S, h, rfl⟩
state_before: case intro.intro
α : Type u_1
r : α → α → Prop
inst✝ : IsWellOrder α r
c : Cardinal.{u_1}
H : ∀ (S : Set α), Unbounded r S → c ≤ #↑S
S : Set α
h : Unbounded r S
⊢ c ≤ #↑S
state_after: no goals
tactic: exact H _ h
Theorem: SimpleGraph.neighborFinset_compl
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

Proof steps:
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝² : Fintype V
inst✝¹ : DecidableEq V
inst✝ : DecidableRel G.Adj
v : V
⊢ Gᶜ.neighborFinset v = (G.neighborFinset v)ᶜ \ {v}
state_after: no goals
tactic: simp only [neighborFinset, neighborSet_compl, Set.toFinset_diff, Set.toFinset_compl,
    Set.toFinset_singleton]
Theorem: ContDiff.inv
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
R : Type u_3
inst✝⁴ : NormedRing R
inst✝³ : NormedAlgebra 𝕜 R
𝕜' : Type u_4
inst✝² : NormedField 𝕜'
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : CompleteSpace 𝕜'
f : E → 𝕜'
n : ℕ∞
hf : ContDiff 𝕜 n f
h : ∀ (x : E), f x ≠ 0
⊢ ContDiff 𝕜 n fun x => (f x)⁻¹
state_after: 𝕜 : 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
R : Type u_3
inst✝⁴ : NormedRing R
inst✝³ : NormedAlgebra 𝕜 R
𝕜' : Type u_4
inst✝² : NormedField 𝕜'
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : CompleteSpace 𝕜'
f : E → 𝕜'
n : ℕ∞
hf : ContDiff 𝕜 n f
h : ∀ (x : E), f x ≠ 0
⊢ ∀ (x : E), ContDiffAt 𝕜 n (fun x => (f x)⁻¹) x
tactic: rw [contDiff_iff_contDiffAt]
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
R : Type u_3
inst✝⁴ : NormedRing R
inst✝³ : NormedAlgebra 𝕜 R
𝕜' : Type u_4
inst✝² : NormedField 𝕜'
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : CompleteSpace 𝕜'
f : E → 𝕜'
n : ℕ∞
hf : ContDiff 𝕜 n f
h : ∀ (x : E), f x ≠ 0
⊢ ∀ (x : E), ContDiffAt 𝕜 n (fun x => (f x)⁻¹) x
state_after: no goals
tactic: exact fun x => hf.contDiffAt.inv (h x)
Theorem: AddAction.orbit_vadd
File: Mathlib/GroupTheory/GroupAction/Basic.lean

Proof steps:
state_before: G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
g : G
a : α
⊢ orbit G a = orbit G (g⁻¹ • g • a)
state_after: no goals
tactic: rw [inv_smul_smul]
Theorem: existsUnique_sub_zsmul_mem_Ioc
File: Mathlib/Algebra/Order/Archimedean.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
a : α
ha : 0 < a
b c : α
⊢ ∃! x, b - (Equiv.neg ℤ) x • a ∈ Ioc c (c + a)
state_after: no goals
tactic: simpa only [Equiv.neg_apply, neg_zsmul, sub_neg_eq_add] using
      existsUnique_add_zsmul_mem_Ioc ha b c
Theorem: Finset.sum_erase_add
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a✝ : α
f✝ g : α → β
inst✝¹ : CommMonoid β
inst✝ : DecidableEq α
s : Finset α
f : α → β
a : α
h : a ∈ s
⊢ (∏ x ∈ s.erase a, f x) * f a = ∏ x ∈ s, f x
state_after: no goals
tactic: rw [mul_comm, mul_prod_erase s f h]
Theorem: AddCommMonoid.addTorsion.isTorsion
File: Mathlib/GroupTheory/Torsion.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑((fun x_1 => ⟨x, ⋯⟩ * x_1)^[n] 1) = ↑1
state_after: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑((fun x_1 => ⟨x, ⋯⟩ * x_1)^[n] 1) = 1
tactic: dsimp
state_before: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑((fun x_1 => ⟨x, ⋯⟩ * x_1)^[n] 1) = 1
state_after: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑((fun x_1 => ⟨x, ⋯⟩ ^ n * x_1) 1) = 1
tactic: rw [mul_left_iterate]
state_before: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑((fun x_1 => ⟨x, ⋯⟩ ^ n * x_1) 1) = 1
state_after: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑(⟨x, ⋯⟩ ^ n) * 1 = 1
tactic: change _ * 1 = 1
state_before: G : Type u_1
H : Type u_2
inst✝ : CommMonoid G
x✝ : ↥(torsion G)
x : G
n : ℕ
npos : n > 0
hn : Function.IsPeriodicPt (fun x_1 => x * x_1) n 1
⊢ ↑(⟨x, ⋯⟩ ^ n) * 1 = 1
state_after: no goals
tactic: rw [_root_.mul_one, SubmonoidClass.coe_pow, Subtype.coe_mk,
        (isPeriodicPt_mul_iff_pow_eq_one _).mp hn]
Theorem: AddSubgroup.comap_normalizer_eq_of_surjective
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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
⊢ (comap f H).normalizer ≤ comap f H.normalizer
state_after: 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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : x ∈ (comap f H).normalizer
⊢ x ∈ comap f H.normalizer
tactic: intro x hx
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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : x ∈ (comap f H).normalizer
⊢ x ∈ comap f H.normalizer
state_after: 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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
⊢ ∀ (h : G), h ∈ H ↔ f x * h * (f x)⁻¹ ∈ H
tactic: simp only [mem_comap, mem_normalizer_iff] at *
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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
⊢ ∀ (h : G), h ∈ H ↔ f x * h * (f x)⁻¹ ∈ H
state_after: 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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
n : G
⊢ n ∈ H ↔ f x * n * (f x)⁻¹ ∈ H
tactic: intro n
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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
n : G
⊢ n ∈ H ↔ f x * n * (f x)⁻¹ ∈ H
state_after: case intro
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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
y : N
⊢ f y ∈ H ↔ f x * f y * (f x)⁻¹ ∈ H
tactic: rcases hf n with ⟨y, rfl⟩
state_before: case intro
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
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
y : N
⊢ f y ∈ H ↔ f x * f y * (f x)⁻¹ ∈ H
state_after: no goals
tactic: simp [hx y]
Theorem: Matrix.col_mulVec
File: Mathlib/Data/Matrix/RowCol.lean

Proof steps:
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
inst✝¹ : Fintype n
inst✝ : NonUnitalNonAssocSemiring α
M : Matrix m n α
v : n → α
⊢ col ι (M *ᵥ v) = M * col ι v
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
inst✝¹ : Fintype n
inst✝ : NonUnitalNonAssocSemiring α
M : Matrix m n α
v : n → α
i✝ : m
j✝ : ι
⊢ col ι (M *ᵥ v) i✝ j✝ = (M * col ι v) i✝ j✝
tactic: ext
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
inst✝¹ : Fintype n
inst✝ : NonUnitalNonAssocSemiring α
M : Matrix m n α
v : n → α
i✝ : m
j✝ : ι
⊢ col ι (M *ᵥ v) i✝ j✝ = (M * col ι v) i✝ j✝
state_after: no goals
tactic: rfl
Theorem: Order.IsSuccLimit.succ_lt
File: Mathlib/Order/SuccPred/Limit.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : SuccOrder α
a b : α
C : α → Sort u_2
hb : IsSuccLimit b
ha : a < b
⊢ succ a < b
state_after: case pos
α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : SuccOrder α
a b : α
C : α → Sort u_2
hb : IsSuccLimit b
ha : a < b
h : IsMax a
⊢ succ a < b

case neg
α : Type u_1
inst✝¹ : PartialOrder α
inst✝ : SuccOrder α
a b : α
C : α → Sort u_2
hb : IsSuccLimit b
ha : a < b
h : ¬IsMax a
⊢ succ a < b
tactic: by_cases h : IsMax a
Theorem: Complex.I_mul_im
File: Mathlib/Data/Complex/Basic.lean

Proof steps:
state_before: z : ℂ
⊢ (I * z).im = z.re
state_after: no goals
tactic: simp
Theorem: WeierstrassCurve.Jacobian.addY_self
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
hP : W'.Equation P
⊢ W'.addY P P = 0
state_after: no goals
tactic: erw [addY, addX_self hP, negAddY_self, addZ_self, negY_of_Z_eq_zero rfl, neg_zero]
Theorem: TopologicalSpace.Opens.adjunction_counit_map_functor
File: Mathlib/Topology/Category/TopCat/Opens.lean

Proof steps:
state_before: X : TopCat
U : Opens ↑X
V : Opens ↥U
⊢ (map U.inclusion ⋙ ⋯.functor).obj (⋯.functor.obj V) = (𝟭 (Opens ↑X)).obj (⋯.functor.obj V)
state_after: X : TopCat
U : Opens ↑X
V : Opens ↥U
⊢ ⋯.functor.obj ((map U.inclusion).obj (⋯.functor.obj V)) = ⋯.functor.obj V
tactic: dsimp
state_before: X : TopCat
U : Opens ↑X
V : Opens ↥U
⊢ ⋯.functor.obj ((map U.inclusion).obj (⋯.functor.obj V)) = ⋯.functor.obj V
state_after: no goals
tactic: rw [map_functor_eq V]
state_before: X : TopCat
U : Opens ↑X
V : Opens ↥U
⊢ ⋯.adjunction.counit.app (⋯.functor.obj V) = eqToHom ⋯
state_after: no goals
tactic: subsingleton
Theorem: Finsupp.card_Iic
File: Mathlib/Data/Finsupp/Interval.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : CanonicallyOrderedAddCommMonoid α
inst✝ : LocallyFiniteOrder α
f : ι →₀ α
⊢ (Iic f).card = ∏ i ∈ f.support, (Iic (f i)).card
state_after: no goals
tactic: classical simp_rw [Iic_eq_Icc, card_Icc, Finsupp.bot_eq_zero, support_zero, empty_union,
      zero_apply, bot_eq_zero]
Theorem: Polynomial.natSepDegree_pow_of_ne_zero
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 : F[X]
n : ℕ
hn : n ≠ 0
⊢ (f ^ n).natSepDegree = f.natSepDegree
state_after: no goals
tactic: simp_rw [natSepDegree_pow, hn, ite_false]
Theorem: LieSubmodule.toEnd_comp_subtype_mem
File: Mathlib/Algebra/Lie/OfAssociative.lean

Proof steps:
state_before: R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
N : LieSubmodule R L M
x : L
m : M
hm : m ∈ ↑N
⊢ ((toEnd R L M) x ∘ₗ (↑N).subtype) ⟨m, hm⟩ ∈ ↑N
state_after: no goals
tactic: simpa using N.lie_mem hm
Theorem: CategoryTheory.Equivalence.precoherent_isSheaf_iff
File: Mathlib/CategoryTheory/Sites/Coherent/Equivalence.lean

Proof steps:
state_before: C : Type u_1
inst✝³ : Category.{u_4, u_1} C
D : Type u_2
inst✝² : Category.{u_6, u_2} D
e : C ≌ D
inst✝¹ : Precoherent C
A : Type u_3
inst✝ : Category.{u_5, u_3} A
F : Cᵒᵖ ⥤ A
⊢ IsSheaf (coherentTopology C) F ↔ IsSheaf (coherentTopology D) (e.inverse.op ⋙ F)
state_after: C : Type u_1
inst✝³ : Category.{u_4, u_1} C
D : Type u_2
inst✝² : Category.{u_6, u_2} D
e : C ≌ D
inst✝¹ : Precoherent C
A : Type u_3
inst✝ : Category.{u_5, u_3} A
F : Cᵒᵖ ⥤ A
hF : IsSheaf (coherentTopology D) (e.inverse.op ⋙ F)
⊢ IsSheaf (coherentTopology C) F
tactic: refine ⟨fun hF ↦ ((e.sheafCongrPrecoherent A).functor.obj ⟨F, hF⟩).cond, fun hF ↦ ?_⟩
state_before: C : Type u_1
inst✝³ : Category.{u_4, u_1} C
D : Type u_2
inst✝² : Category.{u_6, u_2} D
e : C ≌ D
inst✝¹ : Precoherent C
A : Type u_3
inst✝ : Category.{u_5, u_3} A
F : Cᵒᵖ ⥤ A
hF : IsSheaf (coherentTopology D) (e.inverse.op ⋙ F)
⊢ IsSheaf (coherentTopology C) F
state_after: C : Type u_1
inst✝³ : Category.{u_4, u_1} C
D : Type u_2
inst✝² : Category.{u_6, u_2} D
e : C ≌ D
inst✝¹ : Precoherent C
A : Type u_3
inst✝ : Category.{u_5, u_3} A
F : Cᵒᵖ ⥤ A
hF : IsSheaf (coherentTopology D) (e.inverse.op ⋙ F)
⊢ IsSheaf (coherentTopology C) (e.functor.op ⋙ e.inverse.op ⋙ F)

C : Type u_1
inst✝³ : Category.{u_4, u_1} C
D : Type u_2
inst✝² : Category.{u_6, u_2} D
e : C ≌ D
inst✝¹ : Precoherent C
A : Type u_3
inst✝ : Category.{u_5, u_3} A
F : Cᵒᵖ ⥤ A
hF : IsSheaf (coherentTopology D) (e.inverse.op ⋙ F)
⊢ F ≅ e.functor.op ⋙ e.inverse.op ⋙ F
tactic: rw [isSheaf_of_iso_iff (P' := e.functor.op ⋙ e.inverse.op ⋙ F)]
Theorem: Set.preimage_eq_iff_eq_image
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u
β : Type v
f✝ f : α → β
hf : Bijective f
s : Set β
t : Set α
⊢ f ⁻¹' s = t ↔ s = f '' t
state_after: no goals
tactic: rw [← image_eq_image hf.1, hf.2.image_preimage]
Theorem: Mathlib.Meta.NormNum.minFacHelper_2
File: Mathlib/Tactic/NormNum/Prime.lean

Proof steps:
state_before: n k k' : ℕ
e : k + 2 = k'
nk : ¬Nat.Prime k
h : MinFacHelper n k
⊢ MinFacHelper n k'
state_after: n k k' : ℕ
e : k + 2 = k'
nk : ¬Nat.Prime k
h : MinFacHelper n k
h2 : n.minFac = k
⊢ False
tactic: refine minFacHelper_1 e h λ h2 ↦ ?_
state_before: n k k' : ℕ
e : k + 2 = k'
nk : ¬Nat.Prime k
h : MinFacHelper n k
h2 : n.minFac = k
⊢ False
state_after: n k k' : ℕ
e : k + 2 = k'
nk : ¬Nat.Prime n.minFac
h : MinFacHelper n k
h2 : n.minFac = k
⊢ False
tactic: rw [← h2] at nk
state_before: n k k' : ℕ
e : k + 2 = k'
nk : ¬Nat.Prime n.minFac
h : MinFacHelper n k
h2 : n.minFac = k
⊢ False
state_after: no goals
tactic: exact nk <| minFac_prime h.one_lt.ne'
Theorem: Nat.prime_iff_fac_equiv_neg_one
File: Mathlib/NumberTheory/Wilson.lean

Proof steps:
state_before: n : ℕ
h : n ≠ 1
⊢ Prime n ↔ ↑(n - 1)! = -1
state_after: n : ℕ
h : n ≠ 1
h1 : Prime n
⊢ ↑(n - 1)! = -1
tactic: refine ⟨fun h1 => ?_, fun h2 => prime_of_fac_equiv_neg_one h2 h⟩
state_before: n : ℕ
h : n ≠ 1
h1 : Prime n
⊢ ↑(n - 1)! = -1
state_after: n : ℕ
h : n ≠ 1
h1 : Prime n
this : Fact (Prime n)
⊢ ↑(n - 1)! = -1
tactic: haveI := Fact.mk h1
state_before: n : ℕ
h : n ≠ 1
h1 : Prime n
this : Fact (Prime n)
⊢ ↑(n - 1)! = -1
state_after: no goals
tactic: exact ZMod.wilsons_lemma n
Theorem: IsNoetherian.range_finsetBasis
File: Mathlib/FieldTheory/Finiteness.lean

Proof steps:
state_before: K : Type u
V : Type v
inst✝³ : DivisionRing K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : IsNoetherian K V
⊢ Set.range ⇑(finsetBasis K V) = Basis.ofVectorSpaceIndex K V
state_after: no goals
tactic: rw [finsetBasis, Basis.range_reindex, Basis.range_ofVectorSpace]
Theorem: EllipticCurve.ofJ_0_of_three_eq_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

Proof steps:
state_before: R : Type u
inst✝² : CommRing R
E : EllipticCurve R
F : Type u
inst✝¹ : Field F
j : F
inst✝ : DecidableEq F
h3 : 3 = 0
⊢ ofJ 0 = ofJ1728 F
state_after: no goals
tactic: rw [ofJ, dif_pos rfl, dif_pos h3]
Theorem: Multiset.length_toList
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
s : Multiset α
⊢ s.toList.length = card s
state_after: no goals
tactic: rw [← coe_card, coe_toList]
Theorem: MulAction.IsBlock.translate
File: Mathlib/GroupTheory/GroupAction/Blocks.lean

Proof steps:
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock G B
⊢ IsBlock G (g • B)
state_after: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock (↥⊤) B
⊢ IsBlock (↥⊤) (g • B)
tactic: rw [IsBlock.iff_top] at hB ⊢
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock (↥⊤) B
⊢ IsBlock (↥⊤) (g • B)
state_after: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock (↥⊤) B
⊢ IsBlock (↥(Subgroup.map (↑(MulAut.conj g)) (Subgroup.comap ↑(MulAut.conj g) ⊤))) (g • B)
tactic: rw [← Subgroup.map_comap_eq_self_of_surjective (f := MulAut.conj g) (MulAut.conj g).surjective ⊤]
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock (↥⊤) B
⊢ IsBlock (↥(Subgroup.map (↑(MulAut.conj g)) (Subgroup.comap ↑(MulAut.conj g) ⊤))) (g • B)
state_after: case hB
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock (↥⊤) B
⊢ IsBlock (↥(Subgroup.comap ↑(MulAut.conj g) ⊤)) B
tactic: apply IsBlock.of_subgroup_of_conjugate
state_before: case hB
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
B : Set X
g : G
hB : IsBlock (↥⊤) B
⊢ IsBlock (↥(Subgroup.comap ↑(MulAut.conj g) ⊤)) B
state_after: no goals
tactic: rwa [Subgroup.comap_top]
Theorem: GenContFract.contsAux_recurrence
File: Mathlib/Algebra/ContinuedFractions/ContinuantsRecurrence.lean

Proof steps:
state_before: K : Type u_1
g : GenContFract K
n : ℕ
inst✝ : DivisionRing K
gp ppred pred : Pair K
nth_s_eq : g.s.get? n = some gp
nth_contsAux_eq : g.contsAux n = ppred
succ_nth_contsAux_eq : g.contsAux (n + 1) = pred
⊢ g.contsAux (n + 2) = { a := gp.b * pred.a + gp.a * ppred.a, b := gp.b * pred.b + gp.a * ppred.b }
state_after: no goals
tactic: simp [*, contsAux, nextConts, nextDen, nextNum]
Theorem: AddGrp.epi_iff_surjective
File: Mathlib/Algebra/Category/Grp/EpiMono.lean

Proof steps:
state_before: A B : AddGrp
f : A ⟶ B
⊢ Epi f ↔ Function.Surjective ⇑f
state_after: A B : AddGrp
f : A ⟶ B
i1 : Epi f ↔ Epi (groupAddGroupEquivalence.inverse.map f)
⊢ Epi f ↔ Function.Surjective ⇑f
tactic: have i1 : Epi f ↔ Epi (groupAddGroupEquivalence.inverse.map f) := by
    refine ⟨?_, groupAddGroupEquivalence.inverse.epi_of_epi_map⟩
    intro e'
    apply groupAddGroupEquivalence.inverse.map_epi
state_before: A B : AddGrp
f : A ⟶ B
i1 : Epi f ↔ Epi (groupAddGroupEquivalence.inverse.map f)
⊢ Epi f ↔ Function.Surjective ⇑f
state_after: no goals
tactic: rwa [Grp.epi_iff_surjective] at i1
Theorem: IsLocalization.algEquiv_symm_mk'
File: Mathlib/RingTheory/Localization/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝⁷ : CommSemiring R
M : Submonoid R
S : Type u_2
inst✝⁶ : CommSemiring S
inst✝⁵ : Algebra R S
P : Type u_3
inst✝⁴ : CommSemiring P
inst✝³ : IsLocalization M S
g : R →+* P
hg : ∀ (y : ↥M), IsUnit (g ↑y)
Q : Type u_4
inst✝² : CommSemiring Q
inst✝¹ : Algebra R Q
inst✝ : IsLocalization M Q
x : R
y : ↥M
⊢ (algEquiv M S Q).symm (mk' Q x y) = mk' S x y
state_after: no goals
tactic: simp
Theorem: one_sub_dvd_one_sub_pow
File: Mathlib/Algebra/GeomSum.lean

Proof steps:
state_before: α : Type u
inst✝ : Ring α
x : α
n : ℕ
⊢ 1 - x ∣ 1 - x ^ n
state_after: α : Type u
inst✝ : Ring α
x : α
n : ℕ
⊢ 1 - x ∣ 1 ^ n - x ^ n
tactic: conv_rhs => rw [← one_pow n]
state_before: α : Type u
inst✝ : Ring α
x : α
n : ℕ
⊢ 1 - x ∣ 1 ^ n - x ^ n
state_after: no goals
tactic: exact (Commute.one_left x).sub_dvd_pow_sub_pow n