ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Finset.map_map
File: Mathlib/Data/Finset/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α ↪ β
s✝ : Finset α
f : α ↪ β
g : β ↪ γ
s : Finset α
⊢ (map g (map f s)).val = (map (f.trans g) s).val
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α ↪ β
s✝ : Finset α
f : α ↪ β
g : β ↪ γ
s : Finset α
⊢ Multiset.map (⇑g ∘ ⇑f) s.val = Multiset.map (⇑(f.trans g)) s.val
tactic: simp only [map_val, Multiset.map_map]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α ↪ β
s✝ : Finset α
f : α ↪ β
g : β ↪ γ
s : Finset α
⊢ Multiset.map (⇑g ∘ ⇑f) s.val = Multiset.map (⇑(f.trans g)) s.val
state_after: no goals
tactic: rfl
Theorem: QuotientGroup.rightRel_r_eq_rightCosetEquivalence
File: Mathlib/GroupTheory/Coset.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Group α
s : Subgroup α
⊢ Setoid.r = RightCosetEquivalence ↑s
state_after: case h.h.a
α : Type u_1
inst✝ : Group α
s : Subgroup α
x✝¹ x✝ : α
⊢ Setoid.r x✝¹ x✝ ↔ RightCosetEquivalence (↑s) x✝¹ x✝
tactic: ext
state_before: case h.h.a
α : Type u_1
inst✝ : Group α
s : Subgroup α
x✝¹ x✝ : α
⊢ Setoid.r x✝¹ x✝ ↔ RightCosetEquivalence (↑s) x✝¹ x✝
state_after: case h.h.a
α : Type u_1
inst✝ : Group α
s : Subgroup α
x✝¹ x✝ : α
⊢ (fun x y => y * x⁻¹ ∈ s) x✝¹ x✝ ↔ RightCosetEquivalence (↑s) x✝¹ x✝
tactic: rw [rightRel_eq]
state_before: case h.h.a
α : Type u_1
inst✝ : Group α
s : Subgroup α
x✝¹ x✝ : α
⊢ (fun x y => y * x⁻¹ ∈ s) x✝¹ x✝ ↔ RightCosetEquivalence (↑s) x✝¹ x✝
state_after: no goals
tactic: exact (rightCoset_eq_iff s).symm
Theorem: List.Perm.pairwise_iff
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

Proof steps:
state_before: α : Type u_1
R : α → α → Prop
S : ∀ {x y : α}, R x y → R y x
l₁✝ l₂✝ l₁ l₂ : List α
p : l₁ ~ l₂
d : Pairwise R l₁
⊢ Pairwise R l₂
state_after: no goals
tactic: induction d generalizing l₂ with
    | nil => rw [← p.nil_eq]; constructor
    | cons h _ IH =>
      have : _ ∈ l₂ := p.subset (mem_cons_self _ _)
      obtain ⟨s₂, t₂, rfl⟩ := append_of_mem this
      have p' := (p.trans perm_middle).cons_inv
      refine (pairwise_middle S).2 (pairwise_cons.2 ⟨fun b m => ?_, IH p'⟩)
      exact h _ (p'.symm.subset m)
Theorem: PiTensorProduct.piTensorHomMap₂_tprod_tprod_tprod
File: Mathlib/LinearAlgebra/PiTensorProduct.lean

Proof steps:
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝¹¹ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝¹⁰ : (i : ι) → AddCommMonoid (s i)
inst✝⁹ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
E : Type u_9
inst✝⁶ : AddCommMonoid E
inst✝⁵ : Module R E
F : Type u_10
inst✝⁴ : AddCommMonoid F
t : ι → Type u_11
t' : ι → Type u_12
inst✝³ : (i : ι) → AddCommMonoid (t i)
inst✝² : (i : ι) → Module R (t i)
inst✝¹ : (i : ι) → AddCommMonoid (t' i)
inst✝ : (i : ι) → Module R (t' i)
g : (i : ι) → t i →ₗ[R] t' i
f✝ : (i : ι) → s i →ₗ[R] t i
f : (i : ι) → s i →ₗ[R] t i →ₗ[R] t' i
a : (i : ι) → s i
b : (i : ι) → t i
⊢ ((piTensorHomMap₂ ((tprod R) f)) ((tprod R) a)) ((tprod R) b) = ⨂ₜ[R] (i : ι), ((f i) (a i)) (b i)
state_after: no goals
tactic: simp [piTensorHomMapFun₂, piTensorHomMap₂]
Theorem: ContDiff.lipschitzWith_of_hasCompactSupport
File: Mathlib/Analysis/Calculus/ContDiff/RCLike.lean

Proof steps:
state_before: n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
⊢ ∃ C, LipschitzWith C f
state_after: case intro
n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
C : ℝ
hC : ∀ (x : E'), ‖fderiv 𝕂 f x‖ ≤ C
⊢ ∃ C, LipschitzWith C f
tactic: obtain ⟨C, hC⟩ := (hf.fderiv 𝕂).exists_bound_of_continuous (h'f.continuous_fderiv hn)
state_before: case intro
n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
C : ℝ
hC : ∀ (x : E'), ‖fderiv 𝕂 f x‖ ≤ C
⊢ ∃ C, LipschitzWith C f
state_after: case intro
n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
C : ℝ
hC : ∀ (x : E'), ‖fderiv 𝕂 f x‖ ≤ C
⊢ LipschitzWith ⟨max C 0, ⋯⟩ f
tactic: refine ⟨⟨max C 0, le_max_right _ _⟩, ?_⟩
state_before: case intro
n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
C : ℝ
hC : ∀ (x : E'), ‖fderiv 𝕂 f x‖ ≤ C
⊢ LipschitzWith ⟨max C 0, ⋯⟩ f
state_after: n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
C : ℝ
hC : ∀ (x : E'), ‖fderiv 𝕂 f x‖ ≤ C
x : E'
⊢ ‖fderiv 𝕂 f x‖₊ ≤ ⟨max C 0, ⋯⟩
tactic: apply lipschitzWith_of_nnnorm_fderiv_le (h'f.differentiable hn) (fun x ↦ ?_)
state_before: n✝ : ℕ∞
𝕂 : Type u_1
inst✝⁴ : RCLike 𝕂
E' : Type u_2
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕂 E'
F' : Type u_3
inst✝¹ : NormedAddCommGroup F'
inst✝ : NormedSpace 𝕂 F'
f : E' → F'
n : ℕ∞
hf : HasCompactSupport f
h'f : ContDiff 𝕂 n f
hn : 1 ≤ n
C : ℝ
hC : ∀ (x : E'), ‖fderiv 𝕂 f x‖ ≤ C
x : E'
⊢ ‖fderiv 𝕂 f x‖₊ ≤ ⟨max C 0, ⋯⟩
state_after: no goals
tactic: simp [← NNReal.coe_le_coe, hC x]
Theorem: InnerProductGeometry.norm_div_sin_angle_sub_of_inner_eq_zero
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, y⟫_ℝ = 0
h0 : x = 0 ∨ y ≠ 0
⊢ ‖y‖ / Real.sin (angle x (x - y)) = ‖x - y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, -y⟫_ℝ = 0
h0 : x = 0 ∨ y ≠ 0
⊢ ‖y‖ / Real.sin (angle x (x - y)) = ‖x - y‖
tactic: rw [← neg_eq_zero, ← inner_neg_right] at h
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, -y⟫_ℝ = 0
h0 : x = 0 ∨ y ≠ 0
⊢ ‖y‖ / Real.sin (angle x (x - y)) = ‖x - y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, -y⟫_ℝ = 0
h0 : x = 0 ∨ -y ≠ 0
⊢ ‖y‖ / Real.sin (angle x (x - y)) = ‖x - y‖
tactic: rw [← neg_ne_zero] at h0
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : ⟪x, -y⟫_ℝ = 0
h0 : x = 0 ∨ -y ≠ 0
⊢ ‖y‖ / Real.sin (angle x (x - y)) = ‖x - y‖
state_after: no goals
tactic: rw [sub_eq_add_neg, ← norm_neg, norm_div_sin_angle_add_of_inner_eq_zero h h0]
Theorem: Nat.dist_add_add_left
File: Mathlib/Data/Nat/Dist.lean

Proof steps:
state_before: k n m : ℕ
⊢ (k + n).dist (k + m) = n.dist m
state_after: k n m : ℕ
⊢ (n + k).dist (m + k) = n.dist m
tactic: rw [add_comm k n, add_comm k m]
state_before: k n m : ℕ
⊢ (n + k).dist (m + k) = n.dist m
state_after: no goals
tactic: apply dist_add_add_right
Theorem: WeierstrassCurve.Jacobian.Point.toAffine_of_Z_eq_zero
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 → F
hPz : P z = 0
⊢ toAffine W P = 0
state_after: no goals
tactic: rw [toAffine, dif_neg <| not_and_not_right.mpr fun _ => hPz]
Theorem: padicValInt.self
File: Mathlib/NumberTheory/Padics/PadicVal.lean

Proof steps:
state_before: p : ℕ
hp : 1 < p
⊢ padicValInt p ↑p = 1
state_after: no goals
tactic: simp [padicValNat.self hp]
Theorem: Set.image2_iUnion₂_left
File: Mathlib/Data/Set/Lattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
f : α → β → γ
s✝ : Set α
t✝ : Set β
s : (i : ι) → κ i → Set α
t : Set β
⊢ image2 f (⋃ i, ⋃ j, s i j) t = ⋃ i, ⋃ j, image2 f (s i j) t
state_after: no goals
tactic: simp_rw [image2_iUnion_left]
Theorem: Orientation.sin_oangle_sub_left_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ (o.oangle (x - y) x).sin = ‖y‖ / ‖x - y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ((-o).oangle x (x - y)).sin = ‖y‖ / ‖x - y‖
tactic: rw [← neg_inj, oangle_rev, ← oangle_neg_orientation_eq_neg, neg_inj] at h ⊢
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ((-o).oangle x (x - y)).sin = ‖y‖ / ‖x - y‖
state_after: no goals
tactic: exact (-o).sin_oangle_sub_right_of_oangle_eq_pi_div_two h
Theorem: Types.monoOverEquivalenceSet_inverse_map
File: Mathlib/CategoryTheory/Subobject/Types.lean

Proof steps:
state_before: α : Type u
f g : MonoOver α
t : f ⟶ g
⊢ (fun f => Set.range f.obj.hom) f ≤ (fun f => Set.range f.obj.hom) g
state_after: case intro
α : Type u
f g : MonoOver α
t : f ⟶ g
x : (𝟭 (Type u)).obj f.obj.left
⊢ f.obj.hom x ∈ (fun f => Set.range f.obj.hom) g
tactic: rintro a ⟨x, rfl⟩
state_before: case intro
α : Type u
f g : MonoOver α
t : f ⟶ g
x : (𝟭 (Type u)).obj f.obj.left
⊢ f.obj.hom x ∈ (fun f => Set.range f.obj.hom) g
state_after: no goals
tactic: exact ⟨t.1 x, congr_fun t.w x⟩
Theorem: CategoryTheory.Monad.toMon_mul
File: Mathlib/CategoryTheory/Monad/EquivMon.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
M : Monad C
⊢ MonoidalCategory.whiskerRight M.μ M.toFunctor ≫ M.μ =
    (MonoidalCategory.associator M.toFunctor M.toFunctor M.toFunctor).hom ≫
      MonoidalCategory.whiskerLeft M.toFunctor M.μ ≫ M.μ
state_after: case w.h
C : Type u
inst✝ : Category.{v, u} C
M : Monad C
x✝ : C
⊢ (MonoidalCategory.whiskerRight M.μ M.toFunctor ≫ M.μ).app x✝ =
    ((MonoidalCategory.associator M.toFunctor M.toFunctor M.toFunctor).hom ≫
          MonoidalCategory.whiskerLeft M.toFunctor M.μ ≫ M.μ).app
      x✝
tactic: ext
state_before: case w.h
C : Type u
inst✝ : Category.{v, u} C
M : Monad C
x✝ : C
⊢ (MonoidalCategory.whiskerRight M.μ M.toFunctor ≫ M.μ).app x✝ =
    ((MonoidalCategory.associator M.toFunctor M.toFunctor M.toFunctor).hom ≫
          MonoidalCategory.whiskerLeft M.toFunctor M.μ ≫ M.μ).app
      x✝
state_after: no goals
tactic: simp [M.assoc]
Theorem: Monoid.PushoutI.NormalWord.cons_head
File: Mathlib/GroupTheory/PushoutI.lean

Proof steps:
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
i : ι
g : G i
w : NormalWord d
hmw : w.fstIdx ≠ some i
hgr : g ∉ (φ i).range
n : ↑↑(φ i).range × ↑(d.set i) := ⋯.equiv (g * (φ i) w.head)
⊢ (φ i) w.head ∈ (φ i).range
state_after: no goals
tactic: simp
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
i✝ : ι
g✝ : G i✝
w : NormalWord d
hmw : w.fstIdx ≠ some i✝
hgr : g✝ ∉ (φ i✝).range
n : ↑↑(φ i✝).range × ↑(d.set i✝) := ⋯.equiv (g✝ * (φ i✝) w.head)
w' : Word G := Word.cons (↑n.2) w.toWord hmw ⋯
i : ι
g : G i
hg : ⟨i, g⟩ ∈ w'.toList
⊢ g ∈ d.set i
state_after: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
i✝ : ι
g✝ : G i✝
w : NormalWord d
hmw : w.fstIdx ≠ some i✝
hgr : g✝ ∉ (φ i✝).range
n : ↑↑(φ i✝).range × ↑(d.set i✝) := ⋯.equiv (g✝ * (φ i✝) w.head)
w' : Word G := Word.cons (↑n.2) w.toWord hmw ⋯
i : ι
g : G i
hg : i = i✝ ∧ HEq g ↑n.2 ∨ ⟨i, g⟩ ∈ w.toList
⊢ g ∈ d.set i
tactic: simp only [w', Word.cons, mem_cons, Sigma.mk.inj_iff] at hg
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
i✝ : ι
g✝ : G i✝
w : NormalWord d
hmw : w.fstIdx ≠ some i✝
hgr : g✝ ∉ (φ i✝).range
n : ↑↑(φ i✝).range × ↑(d.set i✝) := ⋯.equiv (g✝ * (φ i✝) w.head)
w' : Word G := Word.cons (↑n.2) w.toWord hmw ⋯
i : ι
g : G i
hg : i = i✝ ∧ HEq g ↑n.2 ∨ ⟨i, g⟩ ∈ w.toList
⊢ g ∈ d.set i
state_after: case inl.intro.refl
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
w : NormalWord d
i : ι
g : G i
hmw : w.fstIdx ≠ some i
hgr : g ∉ (φ i).range
n : ↑↑(φ i).range × ↑(d.set i) := ⋯.equiv (g * (φ i) w.head)
w' : Word G := Word.cons (↑n.2) w.toWord hmw ⋯
β : Type u_2
⊢ ↑n.2 ∈ d.set i

case inr
ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
i✝ : ι
g✝ : G i✝
w : NormalWord d
hmw : w.fstIdx ≠ some i✝
hgr : g✝ ∉ (φ i✝).range
n : ↑↑(φ i✝).range × ↑(d.set i✝) := ⋯.equiv (g✝ * (φ i✝) w.head)
w' : Word G := Word.cons (↑n.2) w.toWord hmw ⋯
i : ι
g : G i
h✝ : ⟨i, g⟩ ∈ w.toList
⊢ g ∈ d.set i
tactic: rcases hg with ⟨rfl, hg | hg⟩
Theorem: SzemerediRegularity.hundred_div_ε_pow_five_le_m
File: Mathlib/Combinatorics/SimpleGraph/Regularity/Bound.lean

Proof steps:
state_before: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
P : Finpartition univ
u : Finset α
ε : ℝ
inst✝ : Nonempty α
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPε : 100 ≤ 4 ^ P.parts.card * ε ^ 5
⊢ 0 ≤ 4 ^ P.parts.card
state_after: no goals
tactic: positivity
state_before: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
P : Finpartition univ
u : Finset α
ε : ℝ
inst✝ : Nonempty α
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPε : 100 ≤ 4 ^ P.parts.card * ε ^ 5
⊢ 4 ^ P.parts.card ≤ ↑m
state_after: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
P : Finpartition univ
u : Finset α
ε : ℝ
inst✝ : Nonempty α
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPε : 100 ≤ 4 ^ P.parts.card * ε ^ 5
⊢ 4 ^ P.parts.card ≤ m
tactic: norm_cast
state_before: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : Fintype α
P : Finpartition univ
u : Finset α
ε : ℝ
inst✝ : Nonempty α
hPα : P.parts.card * 16 ^ P.parts.card ≤ Fintype.card α
hPε : 100 ≤ 4 ^ P.parts.card * ε ^ 5
⊢ 4 ^ P.parts.card ≤ m
state_after: no goals
tactic: rwa [Nat.le_div_iff_mul_le' (stepBound_pos (P.parts_nonempty <|
      univ_nonempty.ne_empty).card_pos), stepBound, mul_left_comm, ← mul_pow]
Theorem: Finsupp.support_smul
File: Mathlib/Data/Finsupp/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddMonoid M
inst✝ : SMulZeroClass R M
b : R
g : α →₀ M
a : α
⊢ a ∈ (b • g).support → a ∈ g.support
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddMonoid M
inst✝ : SMulZeroClass R M
b : R
g : α →₀ M
a : α
⊢ ¬b • g a = 0 → ¬g a = 0
tactic: simp only [smul_apply, mem_support_iff, Ne]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddMonoid M
inst✝ : SMulZeroClass R M
b : R
g : α →₀ M
a : α
⊢ ¬b • g a = 0 → ¬g a = 0
state_after: no goals
tactic: exact mt fun h => h.symm ▸ smul_zero _
Theorem: Fin.card_fintypeIco
File: Mathlib/Order/Interval/Finset/Fin.lean

Proof steps:
state_before: n : ℕ
a b : Fin n
⊢ Fintype.card ↑(Set.Ico a b) = ↑b - ↑a
state_after: no goals
tactic: rw [← card_Ico, Fintype.card_ofFinset]
Theorem: EllipticCurve.variableChange_toWeierstrassCurve
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
E : EllipticCurve R
C : WeierstrassCurve.VariableChange R
⊢ ↑(C.u⁻¹ ^ 12 * E.Δ') = (E.variableChange C).Δ
state_after: no goals
tactic: rw [Units.val_mul, Units.val_pow_eq_pow_val, coe_Δ', E.variableChange_Δ]
Theorem: CategoryTheory.Functor.essImage.unit_isIso
File: Mathlib/CategoryTheory/Adjunction/Reflective.lean

Proof steps:
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝³ : Category.{v₁, u₁} C
inst✝² : Category.{v₂, u₂} D
inst✝¹ : Category.{v₃, u₃} E
i : D ⥤ C
inst✝ : Reflective i
A : C
h : A ∈ i.essImage
⊢ IsIso ((reflectorAdjunction i).unit.app A)
state_after: no goals
tactic: rwa [isIso_unit_app_iff_mem_essImage]
Theorem: Finset.exists_card_fiber_le_of_card_le_nsmul
File: Mathlib/Combinatorics/Pigeonhole.lean

Proof steps:
state_before: α : Type u
β : Type v
M : Type w
inst✝¹ : DecidableEq β
s : Finset α
t : Finset β
f : α → β
w : α → M
b : M
n : ℕ
inst✝ : LinearOrderedCommSemiring M
ht : t.Nonempty
hb : ↑s.card ≤ t.card • b
⊢ ∃ y ∈ t, ↑(filter (fun x => f x = y) s).card ≤ b
state_after: α : Type u
β : Type v
M : Type w
inst✝¹ : DecidableEq β
s : Finset α
t : Finset β
f : α → β
w : α → M
b : M
n : ℕ
inst✝ : LinearOrderedCommSemiring M
ht : t.Nonempty
hb : ∑ a ∈ s, 1 ≤ t.card • b
⊢ ∃ y ∈ t, ∑ a ∈ filter (fun x => f x = y) s, 1 ≤ b
tactic: simp_rw [cast_card] at hb ⊢
state_before: α : Type u
β : Type v
M : Type w
inst✝¹ : DecidableEq β
s : Finset α
t : Finset β
f : α → β
w : α → M
b : M
n : ℕ
inst✝ : LinearOrderedCommSemiring M
ht : t.Nonempty
hb : ∑ a ∈ s, 1 ≤ t.card • b
⊢ ∃ y ∈ t, ∑ a ∈ filter (fun x => f x = y) s, 1 ≤ b
state_after: no goals
tactic: refine
    exists_sum_fiber_le_of_sum_fiber_nonneg_of_sum_le_nsmul
      (fun _ _ => sum_nonneg fun _ _ => zero_le_one) ht hb
Theorem: associative_of_commutative_of_le
File: Mathlib/Order/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : PartialOrder α
f : α → α → α
comm : Commutative f
assoc : ∀ (a b c : α), f (f a b) c ≤ f a (f b c)
a b c : α
⊢ f a (f b c) ≤ f (f a b) c
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : PartialOrder α
f : α → α → α
comm : Commutative f
assoc : ∀ (a b c : α), f (f a b) c ≤ f a (f b c)
a b c : α
⊢ f (f c b) a ≤ f c (f b a)
tactic: rw [comm, comm b, comm _ c, comm a]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : PartialOrder α
f : α → α → α
comm : Commutative f
assoc : ∀ (a b c : α), f (f a b) c ≤ f a (f b c)
a b c : α
⊢ f (f c b) a ≤ f c (f b a)
state_after: no goals
tactic: exact assoc _ _ _
Theorem: Fin.append_cast_left
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
n m : ℕ
α : Type u_1
xs : Fin n → α
ys : Fin m → α
n' : ℕ
h : n' = n
⊢ n' + m = n + m
state_after: no goals
tactic: rw [h]
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
n m : ℕ
α : Type u_1
xs : Fin n → α
ys : Fin m → α
n' : ℕ
h : n' = n
⊢ append (xs ∘ cast h) ys = append xs ys ∘ cast ⋯
state_after: 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
m : ℕ
α : Type u_1
ys : Fin m → α
n' : ℕ
xs : Fin n' → α
⊢ append (xs ∘ cast ⋯) ys = append xs ys ∘ cast ⋯
tactic: subst h
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
m : ℕ
α : Type u_1
ys : Fin m → α
n' : ℕ
xs : Fin n' → α
⊢ append (xs ∘ cast ⋯) ys = append xs ys ∘ cast ⋯
state_after: no goals
tactic: simp
Theorem: Sym2.other_invol'
File: Mathlib/Data/Sym/Sym2.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
a : α
z : Sym2 α
ha : a ∈ z
hb : Mem.other' ha ∈ z
⊢ Mem.other' hb = a
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
a x✝ y✝ : α
ha : a ∈ s(x✝, y✝)
hb : Mem.other' ha ∈ s(x✝, y✝)
⊢ Mem.other' hb = a
tactic: induction z
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
a x✝ y✝ : α
ha : a ∈ s(x✝, y✝)
hb : Mem.other' ha ∈ s(x✝, y✝)
⊢ Mem.other' hb = a
state_after: no goals
tactic: aesop (rule_sets := [Sym2]) (add norm unfold [Sym2.rec, Quot.rec])
Theorem: CategoryTheory.ProjectiveResolution.lift_commutes
File: Mathlib/CategoryTheory/Abelian/ProjectiveResolution.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
Y Z : C
f : Y ⟶ Z
P : ProjectiveResolution Y
Q : ProjectiveResolution Z
⊢ lift f P Q ≫ Q.π = P.π ≫ (ChainComplex.single₀ C).map f
state_after: case hfg
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
Y Z : C
f : Y ⟶ Z
P : ProjectiveResolution Y
Q : ProjectiveResolution Z
⊢ (lift f P Q ≫ Q.π).f 0 = (P.π ≫ (ChainComplex.single₀ C).map f).f 0
tactic: ext
state_before: case hfg
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
Y Z : C
f : Y ⟶ Z
P : ProjectiveResolution Y
Q : ProjectiveResolution Z
⊢ (lift f P Q ≫ Q.π).f 0 = (P.π ≫ (ChainComplex.single₀ C).map f).f 0
state_after: no goals
tactic: simp [lift, liftFZero, liftFOne]
Theorem: minpolyDiv_spec
File: Mathlib/FieldTheory/Minpoly/MinpolyDiv.lean

Proof steps:
state_before: R : Type u_2
K : Type ?u.2896
L : Type ?u.2899
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x : S
⊢ minpolyDiv R x * (X - C x) = map (algebraMap R S) (minpoly R x)
state_after: R : Type u_2
K : Type ?u.2896
L : Type ?u.2899
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x : S
⊢ map (algebraMap R S) (minpoly R x) /ₘ (X - C x) * (X - C x) = map (algebraMap R S) (minpoly R x)
tactic: delta minpolyDiv
state_before: R : Type u_2
K : Type ?u.2896
L : Type ?u.2899
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x : S
⊢ map (algebraMap R S) (minpoly R x) /ₘ (X - C x) * (X - C x) = map (algebraMap R S) (minpoly R x)
state_after: no goals
tactic: rw [mul_comm, mul_divByMonic_eq_iff_isRoot, IsRoot, eval_map, ← aeval_def, minpoly.aeval]