1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: pos_nilpotencyClass_iff
File: Mathlib/RingTheory/Nilpotent/Defs.lean

tactic: refine ⟨isNilpotent_of_pos_nilpotencyClass, fun hx ↦ Nat.pos_of_ne_zero fun hx' ↦ ?_⟩
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
⊢ 0 < nilpotencyClass x ↔ IsNilpotent x
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
hx : IsNilpotent x
hx' : nilpotencyClass x = 0
⊢ False

tactic: replace hx := pow_nilpotencyClass hx
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
hx : IsNilpotent x
hx' : nilpotencyClass x = 0
⊢ False
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
hx' : nilpotencyClass x = 0
hx : x ^ nilpotencyClass x = 0
⊢ False

tactic: rw [hx', pow_zero] at hx
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
hx' : nilpotencyClass x = 0
hx : x ^ nilpotencyClass x = 0
⊢ False
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
hx' : nilpotencyClass x = 0
hx : 1 = 0
⊢ False

tactic: exact one_ne_zero hx
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
hx' : nilpotencyClass x = 0
hx : 1 = 0
⊢ False
state_after: no goals
Theorem: Behrend.lower_bound_le_one
File: Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean

tactic: obtain rfl | hN := hN.eq_or_lt
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN : 1 ≤ N
hN' : N ≤ 4096
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ 1
state_after: case inl
α : Type u_1
β : Type u_2
n d k : ℕ
x : Fin n → ℕ
hN : 1 ≤ 1
hN' : 1 ≤ 4096
⊢ ↑1 * rexp (-4 * √(log ↑1)) ≤ 1

case inr
α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN✝ : 1 ≤ N
hN' : N ≤ 4096
hN : 1 < N
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ 1

tactic: norm_num
state_before: case inl
α : Type u_1
β : Type u_2
n d k : ℕ
x : Fin n → ℕ
hN : 1 ≤ 1
hN' : 1 ≤ 4096
⊢ ↑1 * rexp (-4 * √(log ↑1)) ≤ 1
state_after: no goals

tactic: exact lower_bound_le_one' hN hN'
state_before: case inr
α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
hN✝ : 1 ≤ N
hN' : N ≤ 4096
hN : 1 < N
⊢ ↑N * rexp (-4 * √(log ↑N)) ≤ 1
state_after: no goals
Theorem: MeasureTheory.snorm_nnreal_eq_snorm'
File: Mathlib/MeasureTheory/Function/LpSeminorm/Basic.lean

tactic: exact_mod_cast hp
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p✝ : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
f : α → F
p : ℝ≥0
hp : p ≠ 0
⊢ ↑p ≠ 0
state_after: no goals
Theorem: Polynomial.eraseLead_coeff_natDegree
File: Mathlib/Algebra/Polynomial/EraseLead.lean

tactic: simp [eraseLead_coeff]
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
⊢ f.eraseLead.coeff f.natDegree = 0
state_after: no goals
Theorem: MonoidHom.noncommCoprod_unique
File: Mathlib/GroupTheory/NoncommCoprod.lean

tactic: simp [coprod_apply, inl_apply, inr_apply, ← map_mul]
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : Monoid P
f✝ : M →* P
g : N →* P
comm : ∀ (m : M) (n : N), Commute (f✝ m) (g n)
f : M × N →* P
x : M × N
⊢ ((f.comp (inl M N)).noncommCoprod (f.comp (inr M N)) ⋯) x = f x
state_after: no goals
Theorem: unitInterval.mul_pos_mem_iff
File: Mathlib/Topology/UnitInterval.lean

tactic: constructor <;> rintro ⟨h₁, h₂⟩ <;> constructor
state_before: a t : ℝ
ha : 0 < a
⊢ a * t ∈ I ↔ t ∈ Icc 0 (1 / a)
state_after: case mp.intro.left
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ a * t
h₂ : a * t ≤ 1
⊢ 0 ≤ t

case mp.intro.right
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ a * t
h₂ : a * t ≤ 1
⊢ t ≤ 1 / a

case mpr.intro.left
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ t
h₂ : t ≤ 1 / a
⊢ 0 ≤ a * t

case mpr.intro.right
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ t
h₂ : t ≤ 1 / a
⊢ a * t ≤ 1

tactic: exact nonneg_of_mul_nonneg_right h₁ ha
state_before: case mp.intro.left
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ a * t
h₂ : a * t ≤ 1
⊢ 0 ≤ t
state_after: no goals

tactic: rwa [le_div_iff ha, mul_comm]
state_before: case mp.intro.right
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ a * t
h₂ : a * t ≤ 1
⊢ t ≤ 1 / a
state_after: no goals

tactic: exact mul_nonneg ha.le h₁
state_before: case mpr.intro.left
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ t
h₂ : t ≤ 1 / a
⊢ 0 ≤ a * t
state_after: no goals

tactic: rwa [le_div_iff ha, mul_comm] at h₂
state_before: case mpr.intro.right
a t : ℝ
ha : 0 < a
h₁ : 0 ≤ t
h₂ : t ≤ 1 / a
⊢ a * t ≤ 1
state_after: no goals
Theorem: AlgebraicGeometry.LocallyRingedSpace.basicOpen_zero
File: Mathlib/Geometry/RingedSpace/LocallyRingedSpace.lean

tactic: ext x
state_before: X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
⊢ X.toRingedSpace.basicOpen 0 = ⊥
state_after: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
⊢ x ∈ ↑(X.toRingedSpace.basicOpen 0) ↔ x ∈ ↑⊥

tactic: simp only [RingedSpace.basicOpen, Opens.coe_mk, Set.mem_image, Set.mem_setOf_eq, Subtype.exists,
  exists_and_right, exists_eq_right, Opens.coe_bot, Set.mem_empty_iff_false,
  iff_false, not_exists]
state_before: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
⊢ x ∈ ↑(X.toRingedSpace.basicOpen 0) ↔ x ∈ ↑⊥
state_after: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
⊢ ∀ (x_1 : x ∈ U), ¬IsUnit ((X.toRingedSpace.presheaf.germ ⟨x, ⋯⟩) 0)

tactic: intros hx
state_before: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
⊢ ∀ (x_1 : x ∈ U), ¬IsUnit ((X.toRingedSpace.presheaf.germ ⟨x, ⋯⟩) 0)
state_after: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
hx : x ∈ U
⊢ ¬IsUnit ((X.toRingedSpace.presheaf.germ ⟨x, ⋯⟩) 0)

tactic: rw [map_zero, isUnit_zero_iff]
state_before: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
hx : x ∈ U
⊢ ¬IsUnit ((X.toRingedSpace.presheaf.germ ⟨x, ⋯⟩) 0)
state_after: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
hx : x ∈ U
⊢ ¬0 = 1

tactic: change (0 : X.stalk x) ≠ (1 : X.stalk x)
state_before: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
hx : x ∈ U
⊢ ¬0 = 1
state_after: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
hx : x ∈ U
⊢ 0 ≠ 1

tactic: exact zero_ne_one
state_before: case h.h
X✝ X : LocallyRingedSpace
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toRingedSpace.toPresheafedSpace
hx : x ∈ U
⊢ 0 ≠ 1
state_after: no goals
Theorem: Part.Fix.approx_mono'
File: Mathlib/Control/LawfulFix.lean

tactic: induction i with
| zero => dsimp [approx]; apply @bot_le _ _ _ (f ⊥)
| succ _ i_ih => intro; apply f.monotone; apply i_ih
state_before: α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
i : ℕ
⊢ approx (⇑f) i ≤ approx (⇑f) i.succ
state_after: no goals

tactic: dsimp [approx]
state_before: case zero
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
⊢ approx (⇑f) 0 ≤ approx (⇑f) (Nat.succ 0)
state_after: case zero
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
⊢ ⊥ ≤ f ⊥

tactic: apply @bot_le _ _ _ (f ⊥)
state_before: case zero
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
⊢ ⊥ ≤ f ⊥
state_after: no goals

tactic: intro
state_before: case succ
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
n✝ : ℕ
i_ih : approx (⇑f) n✝ ≤ approx (⇑f) n✝.succ
⊢ approx (⇑f) (n✝ + 1) ≤ approx (⇑f) (n✝ + 1).succ
state_after: case succ
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
n✝ : ℕ
i_ih : approx (⇑f) n✝ ≤ approx (⇑f) n✝.succ
i✝ : α
⊢ approx (⇑f) (n✝ + 1) i✝ ≤ approx (⇑f) (n✝ + 1).succ i✝

tactic: apply f.monotone
state_before: case succ
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
n✝ : ℕ
i_ih : approx (⇑f) n✝ ≤ approx (⇑f) n✝.succ
i✝ : α
⊢ approx (⇑f) (n✝ + 1) i✝ ≤ approx (⇑f) (n✝ + 1).succ i✝
state_after: case succ.a
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
n✝ : ℕ
i_ih : approx (⇑f) n✝ ≤ approx (⇑f) n✝.succ
i✝ : α
⊢ approx (⇑f) n✝ ≤ approx (⇑f) (n✝ + 1)

tactic: apply i_ih
state_before: case succ.a
α : Type u_1
β : α → Type u_2
f : ((a : α) → Part (β a)) →o (a : α) → Part (β a)
n✝ : ℕ
i_ih : approx (⇑f) n✝ ≤ approx (⇑f) n✝.succ
i✝ : α
⊢ approx (⇑f) n✝ ≤ approx (⇑f) (n✝ + 1)
state_after: no goals
Theorem: List.mem_sublists
File: Mathlib/Data/List/Sublists.lean

tactic: rw [← reverse_sublist, ← mem_sublists', sublists'_reverse,
  mem_map_of_injective reverse_injective]
state_before: α : Type u
β : Type v
γ : Type w
s t : List α
⊢ s ∈ t.sublists ↔ s <+ t
state_after: no goals
Theorem: Irrational.of_int_add
File: Mathlib/Data/Real/Irrational.lean

tactic: rw [← cast_intCast] at h
state_before: q : ℚ
x y : ℝ
m : ℤ
h : Irrational (↑m + x)
⊢ Irrational x
state_after: q : ℚ
x y : ℝ
m : ℤ
h : Irrational (↑↑m + x)
⊢ Irrational x

tactic: exact h.of_rat_add m
state_before: q : ℚ
x y : ℝ
m : ℤ
h : Irrational (↑↑m + x)
⊢ Irrational x
state_after: no goals
Theorem: CategoryTheory.Limits.Multifork.IsLimit.hom_ext
File: Mathlib/CategoryTheory/Limits/Shapes/Multiequalizer.lean

tactic: apply hK.hom_ext
state_before: C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
⊢ f = g
state_after: C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
⊢ ∀ (j : WalkingMulticospan I.fstTo I.sndTo), f ≫ K.π.app j = g ≫ K.π.app j

tactic: rintro (_|b)
state_before: C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
⊢ ∀ (j : WalkingMulticospan I.fstTo I.sndTo), f ≫ K.π.app j = g ≫ K.π.app j
state_after: case left
C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
a✝ : I.L
⊢ f ≫ K.π.app (WalkingMulticospan.left a✝) = g ≫ K.π.app (WalkingMulticospan.left a✝)

case right
C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
b : I.R
⊢ f ≫ K.π.app (WalkingMulticospan.right b) = g ≫ K.π.app (WalkingMulticospan.right b)

tactic: apply h
state_before: case left
C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
a✝ : I.L
⊢ f ≫ K.π.app (WalkingMulticospan.left a✝) = g ≫ K.π.app (WalkingMulticospan.left a✝)
state_after: no goals

tactic: rw [app_right_eq_ι_comp_fst, reassoc_of% h]
state_before: case right
C : Type u
inst✝ : Category.{v, u} C
I : MulticospanIndex C
K : Multifork I
hK : IsLimit K
T : C
f g : T ⟶ K.pt
h : ∀ (a : I.L), f ≫ K.ι a = g ≫ K.ι a
b : I.R
⊢ f ≫ K.π.app (WalkingMulticospan.right b) = g ≫ K.π.app (WalkingMulticospan.right b)
state_after: no goals
Theorem: NumberField.Units.dirichletUnitTheorem.logEmbedding_component_le
File: Mathlib/NumberTheory/NumberField/Units/DirichletTheorem.lean

tactic: lift r to NNReal using hr
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
r : ℝ
x : (𝓞 K)ˣ
hr : 0 ≤ r
h : ‖(logEmbedding K) x‖ ≤ r
w : { w // w ≠ w₀ }
⊢ |(logEmbedding K) x w| ≤ r
state_after: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : (𝓞 K)ˣ
w : { w // w ≠ w₀ }
r : NNReal
h : ‖(logEmbedding K) x‖ ≤ ↑r
⊢ |(logEmbedding K) x w| ≤ ↑r

tactic: simp_rw [Pi.norm_def, NNReal.coe_le_coe, Finset.sup_le_iff, ← NNReal.coe_le_coe] at h
state_before: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : (𝓞 K)ˣ
w : { w // w ≠ w₀ }
r : NNReal
h : ‖(logEmbedding K) x‖ ≤ ↑r
⊢ |(logEmbedding K) x w| ≤ ↑r
state_after: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : (𝓞 K)ˣ
w : { w // w ≠ w₀ }
r : NNReal
h : ∀ b ∈ univ, ↑‖(logEmbedding K) x b‖₊ ≤ ↑r
⊢ |(logEmbedding K) x w| ≤ ↑r

tactic: exact h w (mem_univ _)
state_before: case intro
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : (𝓞 K)ˣ
w : { w // w ≠ w₀ }
r : NNReal
h : ∀ b ∈ univ, ↑‖(logEmbedding K) x b‖₊ ≤ ↑r
⊢ |(logEmbedding K) x w| ≤ ↑r
state_after: no goals
Theorem: finprod_mem_inter_mulSupport
File: Mathlib/Algebra/BigOperators/Finprod.lean

tactic: rw [finprod_mem_def, finprod_mem_def, mulIndicator_inter_mulSupport]
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
s : Set α
⊢ ∏ᶠ (i : α) (_ : i ∈ s ∩ mulSupport f), f i = ∏ᶠ (i : α) (_ : i ∈ s), f i
state_after: no goals
Theorem: mul_div_right_comm
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionCommMonoid α
a b c d : α
⊢ a * b / c = a / c * b
state_after: no goals
Theorem: Equiv.Perm.card_cycleType_eq_one
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

tactic: rw [card_eq_one]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ card σ.cycleType = 1 ↔ σ.IsCycle
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ (∃ a, σ.cycleType = {a}) ↔ σ.IsCycle

tactic: simp_rw [cycleType_def, Multiset.map_eq_singleton, ← Finset.singleton_val, Finset.val_inj,
  cycleFactorsFinset_eq_singleton_iff]
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ (∃ a, σ.cycleType = {a}) ↔ σ.IsCycle
state_after: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ (∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a) ↔ σ.IsCycle

tactic: constructor
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ (∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a) ↔ σ.IsCycle
state_after: case mp
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ (∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a) → σ.IsCycle

case mpr
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ σ.IsCycle → ∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a

tactic: rintro ⟨_, _, ⟨h, -⟩, -⟩
state_before: case mp
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ (∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a) → σ.IsCycle
state_after: case mp.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
w✝¹ : ℕ
w✝ : Perm α
h : σ.IsCycle
⊢ σ.IsCycle

tactic: exact h
state_before: case mp.intro.intro.intro.intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
w✝¹ : ℕ
w✝ : Perm α
h : σ.IsCycle
⊢ σ.IsCycle
state_after: no goals

tactic: intro h
state_before: case mpr
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
⊢ σ.IsCycle → ∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a
state_after: case mpr
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h : σ.IsCycle
⊢ ∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a

tactic: use σ.support.card, σ
state_before: case mpr
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h : σ.IsCycle
⊢ ∃ a a_1, (σ.IsCycle ∧ σ = a_1) ∧ (Finset.card ∘ support) a_1 = a
state_after: case h
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h : σ.IsCycle
⊢ (σ.IsCycle ∧ σ = σ) ∧ (Finset.card ∘ support) σ = σ.support.card

tactic: simp [h]
state_before: case h
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h : σ.IsCycle
⊢ (σ.IsCycle ∧ σ = σ) ∧ (Finset.card ∘ support) σ = σ.support.card
state_after: no goals
Theorem: exists_pair_lt
File: Mathlib/Logic/Nontrivial/Basic.lean

tactic: rcases exists_pair_ne α with ⟨x, y, hxy⟩
state_before: α✝ : Type u_1
β : Type u_2
α : Type u_3
inst✝¹ : Nontrivial α
inst✝ : LinearOrder α
⊢ ∃ x y, x < y
state_after: case intro.intro
α✝ : Type u_1
β : Type u_2
α : Type u_3
inst✝¹ : Nontrivial α
inst✝ : LinearOrder α
x y : α
hxy : x ≠ y
⊢ ∃ x y, x < y

tactic: cases lt_or_gt_of_ne hxy <;> exact ⟨_, _, ‹_›⟩
state_before: case intro.intro
α✝ : Type u_1
β : Type u_2
α : Type u_3
inst✝¹ : Nontrivial α
inst✝ : LinearOrder α
x y : α
hxy : x ≠ y
⊢ ∃ x y, x < y
state_after: no goals
Theorem: Finset.mulETransformLeft.fst_mul_snd_subset
File: Mathlib/Combinatorics/Additive/ETransform.lean

tactic: refine inter_mul_union_subset_union.trans (union_subset Subset.rfl ?_)
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ (mulETransformLeft e x).1 * (mulETransformLeft e x).2 ⊆ x.1 * x.2
state_after: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ op e • x.1 * e⁻¹ • x.2 ⊆ x.1 * x.2

tactic: rw [op_smul_finset_mul_eq_mul_smul_finset, smul_inv_smul]
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ op e • x.1 * e⁻¹ • x.2 ⊆ x.1 * x.2
state_after: no goals
Theorem: Module.sum_smul_eq_zero_of_isTrivialRelation
File: Mathlib/RingTheory/Flat/EquationalCriterion.lean

tactic: simpa using
  congr_arg (TensorProduct.lid R M) <|
    sum_tmul_eq_zero_of_vanishesTrivially R (isTrivialRelation_iff_vanishesTrivially.mp h)
state_before: R M : Type u
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
ι : Type u
inst✝ : Fintype ι
f : ι → R
x : ι → M
h : IsTrivialRelation f x
⊢ ∑ i : ι, f i • x i = 0
state_after: no goals
Theorem: npow_mul'
File: Mathlib/Algebra/Group/NatPowAssoc.lean

tactic: rw [mul_comm]
state_before: M : Type u_1
inst✝² : MulOneClass M
inst✝¹ : Pow M ℕ
inst✝ : NatPowAssoc M
x : M
m n : ℕ
⊢ x ^ (m * n) = (x ^ n) ^ m
state_after: M : Type u_1
inst✝² : MulOneClass M
inst✝¹ : Pow M ℕ
inst✝ : NatPowAssoc M
x : M
m n : ℕ
⊢ x ^ (n * m) = (x ^ n) ^ m

tactic: exact npow_mul x n m
state_before: M : Type u_1
inst✝² : MulOneClass M
inst✝¹ : Pow M ℕ
inst✝ : NatPowAssoc M
x : M
m n : ℕ
⊢ x ^ (n * m) = (x ^ n) ^ m
state_after: no goals
Theorem: Submonoid.LocalizationMap.subsingleton
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: refine ⟨fun a b ↦ ?_⟩
state_before: M : Type u_1
inst✝² : CommMonoidWithZero M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoidWithZero N
P : Type u_3
inst✝ : CommMonoidWithZero P
f : S.LocalizationMap N
h : 0 ∈ S
⊢ Subsingleton N
state_after: M : Type u_1
inst✝² : CommMonoidWithZero M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoidWithZero N
P : Type u_3
inst✝ : CommMonoidWithZero P
f : S.LocalizationMap N
h : 0 ∈ S
a b : N
⊢ a = b

tactic: rw [← LocalizationMap.mk'_sec f a, ← LocalizationMap.mk'_sec f b, LocalizationMap.eq]
state_before: M : Type u_1
inst✝² : CommMonoidWithZero M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoidWithZero N
P : Type u_3
inst✝ : CommMonoidWithZero P
f : S.LocalizationMap N
h : 0 ∈ S
a b : N
⊢ a = b
state_after: M : Type u_1
inst✝² : CommMonoidWithZero M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoidWithZero N
P : Type u_3
inst✝ : CommMonoidWithZero P
f : S.LocalizationMap N
h : 0 ∈ S
a b : N
⊢ ∃ c, ↑c * (↑(f.sec b).2 * (f.sec a).1) = ↑c * (↑(f.sec a).2 * (f.sec b).1)

tactic: exact ⟨⟨0, h⟩, by simp only [zero_mul]⟩
state_before: M : Type u_1
inst✝² : CommMonoidWithZero M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoidWithZero N
P : Type u_3
inst✝ : CommMonoidWithZero P
f : S.LocalizationMap N
h : 0 ∈ S
a b : N
⊢ ∃ c, ↑c * (↑(f.sec b).2 * (f.sec a).1) = ↑c * (↑(f.sec a).2 * (f.sec b).1)
state_after: no goals

tactic: simp only [zero_mul]
state_before: M : Type u_1
inst✝² : CommMonoidWithZero M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoidWithZero N
P : Type u_3
inst✝ : CommMonoidWithZero P
f : S.LocalizationMap N
h : 0 ∈ S
a b : N
⊢ ↑⟨0, h⟩ * (↑(f.sec b).2 * (f.sec a).1) = ↑⟨0, h⟩ * (↑(f.sec a).2 * (f.sec b).1)
state_after: no goals
Theorem: ONote.fastGrowing_one
File: Mathlib/SetTheory/Ordinal/Notation.lean

tactic: rw [@fastGrowing_succ 1 0 rfl]
state_before: ⊢ fastGrowing 1 = fun n => 2 * n
state_after: ⊢ (fun i => (fastGrowing 0)^[i] i) = fun n => 2 * n

tactic: funext i
state_before: ⊢ (fun i => (fastGrowing 0)^[i] i) = fun n => 2 * n
state_after: case h
i : ℕ
⊢ (fastGrowing 0)^[i] i = 2 * i

tactic: rw [two_mul, fastGrowing_zero]
state_before: case h
i : ℕ
⊢ (fastGrowing 0)^[i] i = 2 * i
state_after: case h
i : ℕ
⊢ Nat.succ^[i] i = i + i

tactic: suffices ∀ a b, Nat.succ^[a] b = b + a from this _ _
state_before: case h
i : ℕ
⊢ Nat.succ^[i] i = i + i
state_after: case h
i : ℕ
⊢ ∀ (a b : ℕ), Nat.succ^[a] b = b + a

tactic: intro a b
state_before: case h
i : ℕ
⊢ ∀ (a b : ℕ), Nat.succ^[a] b = b + a
state_after: case h
i a b : ℕ
⊢ Nat.succ^[a] b = b + a

tactic: induction a <;> simp [*, Function.iterate_succ', Nat.add_assoc, -Function.iterate_succ]
state_before: case h
i a b : ℕ
⊢ Nat.succ^[a] b = b + a
state_after: no goals
Theorem: AbsoluteValue.map_units_int
File: Mathlib/Data/Int/AbsoluteValue.lean

tactic: rcases Int.units_eq_one_or x with (rfl | rfl) <;> simp
state_before: R : Type u_1
S : Type u_2
inst✝¹ : Ring R
inst✝ : LinearOrderedCommRing S
abv : AbsoluteValue ℤ S
x : ℤˣ
⊢ abv ↑x = 1
state_after: no goals
Theorem: Nat.divisors_prime_pow
File: Mathlib/NumberTheory/Divisors.lean

tactic: ext a
state_before: n p : ℕ
pp : Prime p
k : ℕ
⊢ (p ^ k).divisors = map { toFun := fun x => p ^ x, inj' := ⋯ } (range (k + 1))
state_after: case a
n p : ℕ
pp : Prime p
k a : ℕ
⊢ a ∈ (p ^ k).divisors ↔ a ∈ map { toFun := fun x => p ^ x, inj' := ⋯ } (range (k + 1))

tactic: rw [mem_divisors_prime_pow pp]
state_before: case a
n p : ℕ
pp : Prime p
k a : ℕ
⊢ a ∈ (p ^ k).divisors ↔ a ∈ map { toFun := fun x => p ^ x, inj' := ⋯ } (range (k + 1))
state_after: case a
n p : ℕ
pp : Prime p
k a : ℕ
⊢ (∃ j ≤ k, a = p ^ j) ↔ a ∈ map { toFun := fun x => p ^ x, inj' := ⋯ } (range (k + 1))

tactic: simp [Nat.lt_succ, eq_comm]
state_before: case a
n p : ℕ
pp : Prime p
k a : ℕ
⊢ (∃ j ≤ k, a = p ^ j) ↔ a ∈ map { toFun := fun x => p ^ x, inj' := ⋯ } (range (k + 1))
state_after: no goals
Theorem: Rat.uniformContinuous_neg
File: Mathlib/Topology/Instances/Rat.lean

tactic: rw [dist_comm] at h
state_before: ε : ℝ
ε0 : ε > 0
a✝ b✝ : ℚ
h : dist a✝ b✝ < ε
⊢ dist (-a✝) (-b✝) < ε
state_after: ε : ℝ
ε0 : ε > 0
a✝ b✝ : ℚ
h : dist b✝ a✝ < ε
⊢ dist (-a✝) (-b✝) < ε

tactic: simpa only [dist_eq, cast_neg, neg_sub_neg] using h
state_before: ε : ℝ
ε0 : ε > 0
a✝ b✝ : ℚ
h : dist b✝ a✝ < ε
⊢ dist (-a✝) (-b✝) < ε
state_after: no goals
Theorem: Polynomial.isNilpotent_C_iff
File: Mathlib/RingTheory/Polynomial/Nilpotent.lean

tactic: simpa only [← C_pow] using C_eq_zero
state_before: R : Type u_1
r : R
inst✝ : Semiring R
P : R[X]
k : ℕ
⊢ C r ^ k = 0 ↔ r ^ k = 0
state_after: no goals
Theorem: sup_eq_bot_iff
File: Mathlib/Order/BoundedOrder.lean

tactic: rw [eq_bot_iff, sup_le_iff]
state_before: α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
a b : α
⊢ a ⊔ b = ⊥ ↔ a = ⊥ ∧ b = ⊥
state_after: α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
a b : α
⊢ a ≤ ⊥ ∧ b ≤ ⊥ ↔ a = ⊥ ∧ b = ⊥

tactic: simp
state_before: α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
a b : α
⊢ a ≤ ⊥ ∧ b ≤ ⊥ ↔ a = ⊥ ∧ b = ⊥
state_after: no goals
Theorem: Rat.lt_one_iff_num_lt_denom
File: Mathlib/Algebra/Order/Ring/Rat.lean

tactic: simp [Rat.lt_def]
state_before: a b c p q✝ q : ℚ
⊢ q < 1 ↔ q.num < ↑q.den
state_after: no goals
Theorem: WeierstrassCurve.Affine.eval_negPolynomial
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

tactic: rw [negY, sub_sub, negPolynomial]
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ evalEval x y W.negPolynomial = W.negY x y
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ evalEval x y (-Y - C (C W.a₁ * X + C W.a₃)) = -y - (W.a₁ * x + W.a₃)

tactic: eval_simp
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ evalEval x y (-Y - C (C W.a₁ * X + C W.a₃)) = -y - (W.a₁ * x + W.a₃)
state_after: no goals