1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.ShortComplex.ShortExact.op
File: Mathlib/Algebra/Homology/ShortComplex/ShortExact.lean

tactic: have := h.epi_g
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
⊢ Mono S.op.f
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Epi S.g
⊢ Mono S.op.f

tactic: dsimp
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Epi S.g
⊢ Mono S.op.f
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Epi S.g
⊢ Mono S.g.op

tactic: infer_instance
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Epi S.g
⊢ Mono S.g.op
state_after: no goals

tactic: have := h.mono_f
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
⊢ Epi S.op.g
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Mono S.f
⊢ Epi S.op.g

tactic: dsimp
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Mono S.f
⊢ Epi S.op.g
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Mono S.f
⊢ Epi S.f.op

tactic: infer_instance
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.4099, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.ShortExact
this : Mono S.f
⊢ Epi S.f.op
state_after: no goals
Theorem: pow_sub
File: Mathlib/Algebra/Group/Basic.lean

tactic: rw [← pow_add, Nat.sub_add_cancel h]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : Group G
a✝ b c d : G
n✝ : ℤ
a : G
m n : ℕ
h : n ≤ m
⊢ a ^ (m - n) * a ^ n = a ^ m
state_after: no goals
Theorem: Polynomial.eraseLead_C_mul_X_pow
File: Mathlib/Algebra/Polynomial/EraseLead.lean

tactic: rw [C_mul_X_pow_eq_monomial, eraseLead_monomial]
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
r : R
n : ℕ
⊢ (C r * X ^ n).eraseLead = 0
state_after: no goals
Theorem: Sym2.inductionOn₂
File: Mathlib/Data/Sym/Sym2.lean

tactic: intro ⟨a₁, a₂⟩ ⟨b₁, b₂⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : Sym2 α → Sym2 β → Prop
i : Sym2 α
j : Sym2 β
hf : ∀ (a₁ a₂ : α) (b₁ b₂ : β), f s(a₁, a₂) s(b₁, b₂)
⊢ ∀ (a : α × α) (b : β × β), f (Quot.mk (Rel α) a) (Quot.mk (Rel β) b)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
f : Sym2 α → Sym2 β → Prop
i : Sym2 α
j : Sym2 β
hf : ∀ (a₁ a₂ : α) (b₁ b₂ : β), f s(a₁, a₂) s(b₁, b₂)
a₁ a₂ : α
b₁ b₂ : β
⊢ f (Quot.mk (Rel α) (a₁, a₂)) (Quot.mk (Rel β) (b₁, b₂))

tactic: exact hf _ _ _ _
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : Sym2 α → Sym2 β → Prop
i : Sym2 α
j : Sym2 β
hf : ∀ (a₁ a₂ : α) (b₁ b₂ : β), f s(a₁, a₂) s(b₁, b₂)
a₁ a₂ : α
b₁ b₂ : β
⊢ f (Quot.mk (Rel α) (a₁, a₂)) (Quot.mk (Rel β) (b₁, b₂))
state_after: no goals
Theorem: NNRat.coe_eq_zero
File: Mathlib/Data/NNRat/Defs.lean

tactic: norm_cast
state_before: α : Type u_1
p q : ℚ≥0
⊢ ↑q = 0 ↔ q = 0
state_after: no goals
Theorem: EuclideanDomain.gcd_mul_lcm
File: Mathlib/Algebra/EuclideanDomain/Basic.lean

tactic: rw [lcm]
state_before: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
⊢ gcd x y * lcm x y = x * y
state_after: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
⊢ gcd x y * (x * y / gcd x y) = x * y

tactic: by_cases h : gcd x y = 0
state_before: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
⊢ gcd x y * (x * y / gcd x y) = x * y
state_after: case pos
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : gcd x y = 0
⊢ gcd x y * (x * y / gcd x y) = x * y

case neg
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : ¬gcd x y = 0
⊢ gcd x y * (x * y / gcd x y) = x * y

tactic: rcases gcd_dvd x y with ⟨⟨r, hr⟩, ⟨s, hs⟩⟩
state_before: case neg
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : ¬gcd x y = 0
⊢ gcd x y * (x * y / gcd x y) = x * y
state_after: case neg.intro.intro.intro
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : ¬gcd x y = 0
r : R
hr : x = gcd x y * r
s : R
hs : y = gcd x y * s
⊢ gcd x y * (x * y / gcd x y) = x * y

tactic: generalize gcd x y = g at h hr ⊢
state_before: case neg.intro.intro.intro
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : ¬gcd x y = 0
r : R
hr : x = gcd x y * r
s : R
hs : y = gcd x y * s
⊢ gcd x y * (x * y / gcd x y) = x * y
state_after: case neg.intro.intro.intro
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y r s : R
hs : y = gcd x y * s
g : R
h : ¬g = 0
hr : x = g * r
⊢ g * (x * y / g) = x * y

tactic: subst hr
state_before: case neg.intro.intro.intro
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y r s : R
hs : y = gcd x y * s
g : R
h : ¬g = 0
hr : x = g * r
⊢ g * (x * y / g) = x * y
state_after: case neg.intro.intro.intro
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
y r s g : R
h : ¬g = 0
hs : y = gcd (g * r) y * s
⊢ g * (g * r * y / g) = g * r * y

tactic: rw [mul_assoc, mul_div_cancel_left₀ _ h]
state_before: case neg.intro.intro.intro
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
y r s g : R
h : ¬g = 0
hs : y = gcd (g * r) y * s
⊢ g * (g * r * y / g) = g * r * y
state_after: no goals

tactic: rw [h, zero_mul]
state_before: case pos
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : gcd x y = 0
⊢ gcd x y * (x * y / gcd x y) = x * y
state_after: case pos
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : gcd x y = 0
⊢ 0 = x * y

tactic: rw [EuclideanDomain.gcd_eq_zero_iff] at h
state_before: case pos
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : gcd x y = 0
⊢ 0 = x * y
state_after: case pos
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : x = 0 ∧ y = 0
⊢ 0 = x * y

tactic: rw [h.1, zero_mul]
state_before: case pos
R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
x y : R
h : x = 0 ∧ y = 0
⊢ 0 = x * y
state_after: no goals
Theorem: NormedSpace.isVonNBounded_iff'
File: Mathlib/Analysis/LocallyConvex/Bounded.lean

tactic: rw [NormedSpace.isVonNBounded_iff, isBounded_iff_forall_norm_le]
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
inst✝² : NontriviallyNormedField 𝕜
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
s : Set E
⊢ Bornology.IsVonNBounded 𝕜 s ↔ ∃ r, ∀ x ∈ s, ‖x‖ ≤ r
state_after: no goals
Theorem: CategoryTheory.leftDistributor_ext₂_right
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

tactic: apply (cancel_mono (α_ _ _ _).inv).mp
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y Z : C
f : J → C
g h : X ⟶ Y ⊗ Z ⊗ ⨁ f
w : ∀ (j : J), g ≫ Y ◁ Z ◁ biproduct.π f j = h ≫ Y ◁ Z ◁ biproduct.π f j
⊢ g = h
state_after: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y Z : C
f : J → C
g h : X ⟶ Y ⊗ Z ⊗ ⨁ f
w : ∀ (j : J), g ≫ Y ◁ Z ◁ biproduct.π f j = h ≫ Y ◁ Z ◁ biproduct.π f j
⊢ g ≫ (α_ Y Z (⨁ f)).inv = h ≫ (α_ Y Z (⨁ f)).inv

tactic: ext
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y Z : C
f : J → C
g h : X ⟶ Y ⊗ Z ⊗ ⨁ f
w : ∀ (j : J), g ≫ Y ◁ Z ◁ biproduct.π f j = h ≫ Y ◁ Z ◁ biproduct.π f j
⊢ g ≫ (α_ Y Z (⨁ f)).inv = h ≫ (α_ Y Z (⨁ f)).inv
state_after: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y Z : C
f : J → C
g h : X ⟶ Y ⊗ Z ⊗ ⨁ f
w : ∀ (j : J), g ≫ Y ◁ Z ◁ biproduct.π f j = h ≫ Y ◁ Z ◁ biproduct.π f j
j✝ : J
⊢ (g ≫ (α_ Y Z (⨁ f)).inv) ≫ (Y ⊗ Z) ◁ biproduct.π f j✝ = (h ≫ (α_ Y Z (⨁ f)).inv) ≫ (Y ⊗ Z) ◁ biproduct.π f j✝

tactic: simp [w]
state_before: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
X Y Z : C
f : J → C
g h : X ⟶ Y ⊗ Z ⊗ ⨁ f
w : ∀ (j : J), g ≫ Y ◁ Z ◁ biproduct.π f j = h ≫ Y ◁ Z ◁ biproduct.π f j
j✝ : J
⊢ (g ≫ (α_ Y Z (⨁ f)).inv) ≫ (Y ⊗ Z) ◁ biproduct.π f j✝ = (h ≫ (α_ Y Z (⨁ f)).inv) ≫ (Y ⊗ Z) ◁ biproduct.π f j✝
state_after: no goals
Theorem: Commute.multiset_sum_right
File: Mathlib/Algebra/BigOperators/Ring/Multiset.lean

tactic: induction s using Quotient.inductionOn
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : NonUnitalNonAssocSemiring α
s : Multiset α
a : α
h : ∀ b ∈ s, Commute a b
⊢ Commute a s.sum
state_after: case h
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : NonUnitalNonAssocSemiring α
s : Multiset α
a : α
a✝ : List α
h : ∀ b ∈ ⟦a✝⟧, Commute a b
⊢ Commute a (sum ⟦a✝⟧)

tactic: rw [quot_mk_to_coe, sum_coe]
state_before: case h
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : NonUnitalNonAssocSemiring α
s : Multiset α
a : α
a✝ : List α
h : ∀ b ∈ ⟦a✝⟧, Commute a b
⊢ Commute a (sum ⟦a✝⟧)
state_after: case h
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : NonUnitalNonAssocSemiring α
s : Multiset α
a : α
a✝ : List α
h : ∀ b ∈ ⟦a✝⟧, Commute a b
⊢ Commute a a✝.sum

tactic: exact Commute.list_sum_right _ _ h
state_before: case h
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : NonUnitalNonAssocSemiring α
s : Multiset α
a : α
a✝ : List α
h : ∀ b ∈ ⟦a✝⟧, Commute a b
⊢ Commute a a✝.sum
state_after: no goals
Theorem: Real.volume_emetric_ball
File: Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean

tactic: rcases eq_or_ne r ∞ with (rfl | hr)
state_before: ι : Type u_1
inst✝ : Fintype ι
a : ℝ
r : ℝ≥0∞
⊢ volume (EMetric.ball a r) = 2 * r
state_after: case inl
ι : Type u_1
inst✝ : Fintype ι
a : ℝ
⊢ volume (EMetric.ball a ⊤) = 2 * ⊤

case inr
ι : Type u_1
inst✝ : Fintype ι
a : ℝ
r : ℝ≥0∞
hr : r ≠ ⊤
⊢ volume (EMetric.ball a r) = 2 * r

tactic: rw [Metric.emetric_ball_top, volume_univ, two_mul, _root_.top_add]
state_before: case inl
ι : Type u_1
inst✝ : Fintype ι
a : ℝ
⊢ volume (EMetric.ball a ⊤) = 2 * ⊤
state_after: no goals

tactic: lift r to ℝ≥0 using hr
state_before: case inr
ι : Type u_1
inst✝ : Fintype ι
a : ℝ
r : ℝ≥0∞
hr : r ≠ ⊤
⊢ volume (EMetric.ball a r) = 2 * r
state_after: case inr.intro
ι : Type u_1
inst✝ : Fintype ι
a : ℝ
r : ℝ≥0
⊢ volume (EMetric.ball a ↑r) = 2 * ↑r

tactic: rw [Metric.emetric_ball_nnreal, volume_ball, two_mul, ← NNReal.coe_add,
  ENNReal.ofReal_coe_nnreal, ENNReal.coe_add, two_mul]
state_before: case inr.intro
ι : Type u_1
inst✝ : Fintype ι
a : ℝ
r : ℝ≥0
⊢ volume (EMetric.ball a ↑r) = 2 * ↑r
state_after: no goals
Theorem: AffineSubspace.affineSpan_parallel_iff_vectorSpan_eq_and_eq_empty_iff_eq_empty
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: repeat rw [← direction_affineSpan, ← affineSpan_eq_bot k]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
⊢ affineSpan k s₁ ∥ affineSpan k s₂ ↔ vectorSpan k s₁ = vectorSpan k s₂ ∧ (s₁ = ∅ ↔ s₂ = ∅)
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
⊢ affineSpan k s₁ ∥ affineSpan k s₂ ↔
    (affineSpan k s₁).direction = (affineSpan k s₂).direction ∧ (affineSpan k s₁ = ⊥ ↔ affineSpan k s₂ = ⊥)

tactic: exact parallel_iff_direction_eq_and_eq_bot_iff_eq_bot
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
⊢ affineSpan k s₁ ∥ affineSpan k s₂ ↔
    (affineSpan k s₁).direction = (affineSpan k s₂).direction ∧ (affineSpan k s₁ = ⊥ ↔ affineSpan k s₂ = ⊥)
state_after: no goals

tactic: rw [← direction_affineSpan, ← affineSpan_eq_bot k]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
⊢ affineSpan k s₁ ∥ affineSpan k s₂ ↔ (affineSpan k s₁).direction = vectorSpan k s₂ ∧ (affineSpan k s₁ = ⊥ ↔ s₂ = ∅)
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
⊢ affineSpan k s₁ ∥ affineSpan k s₂ ↔
    (affineSpan k s₁).direction = (affineSpan k s₂).direction ∧ (affineSpan k s₁ = ⊥ ↔ affineSpan k s₂ = ⊥)
Theorem: AffineIsometryEquiv.dist_pointReflection_self_real
File: Mathlib/Analysis/NormedSpace/AffineIsometry.lean

tactic: rw [dist_pointReflection_self, Real.norm_two]
state_before: 𝕜 : Type u_1
V : Type u_2
V₁ : Type u_3
V₁' : Type u_4
V₂ : Type u_5
V₃ : Type u_6
V₄ : Type u_7
P₁ : Type u_8
P₁' : Type u_9
P : Type u_10
P₂ : Type u_11
P₃ : Type u_12
P₄ : Type u_13
inst✝²⁶ : NormedField 𝕜
inst✝²⁵ : SeminormedAddCommGroup V
inst✝²⁴ : NormedSpace 𝕜 V
inst✝²³ : PseudoMetricSpace P
inst✝²² : NormedAddTorsor V P
inst✝²¹ : SeminormedAddCommGroup V₁
inst✝²⁰ : NormedSpace 𝕜 V₁
inst✝¹⁹ : PseudoMetricSpace P₁
inst✝¹⁸ : NormedAddTorsor V₁ P₁
inst✝¹⁷ : SeminormedAddCommGroup V₁'
inst✝¹⁶ : NormedSpace 𝕜 V₁'
inst✝¹⁵ : MetricSpace P₁'
inst✝¹⁴ : NormedAddTorsor V₁' P₁'
inst✝¹³ : SeminormedAddCommGroup V₂
inst✝¹² : NormedSpace 𝕜 V₂
inst✝¹¹ : PseudoMetricSpace P₂
inst✝¹⁰ : NormedAddTorsor V₂ P₂
inst✝⁹ : SeminormedAddCommGroup V₃
inst✝⁸ : NormedSpace 𝕜 V₃
inst✝⁷ : PseudoMetricSpace P₃
inst✝⁶ : NormedAddTorsor V₃ P₃
inst✝⁵ : SeminormedAddCommGroup V₄
inst✝⁴ : NormedSpace 𝕜 V₄
inst✝³ : PseudoMetricSpace P₄
inst✝² : NormedAddTorsor V₄ P₄
e : P ≃ᵃⁱ[𝕜] P₂
α : Type u_14
inst✝¹ : TopologicalSpace α
inst✝ : NormedSpace ℝ V
x y : P
⊢ dist ((pointReflection ℝ x) y) y = 2 * dist x y
state_after: no goals
Theorem: Fintype.card_filter_piFinset_const_eq_of_mem
File: Mathlib/Data/Fintype/BigOperators.lean

tactic: rw [prod_const s.card, card_erase_of_mem (mem_univ _), card_univ]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
κ : Type u_5
α : ι → Type u_6
inst✝³ : DecidableEq ι
inst✝² : DecidableEq κ
inst✝¹ : Fintype ι
inst✝ : (i : ι) → DecidableEq (α i)
s : Finset κ
i : ι
x : κ
hx : x ∈ s
⊢ ∏ j ∈ univ.erase i, s.card = s.card ^ (card ι - 1)
state_after: no goals
Theorem: pNilradical_eq_bot_of_frobenius_inj
File: Mathlib/FieldTheory/IsPerfectClosure.lean

tactic: rw [mem_pNilradical, Ideal.mem_bot]
state_before: R : Type u_1
inst✝¹ : CommRing R
p : ℕ
inst✝ : ExpChar R p
h : Function.Injective ⇑(frobenius R p)
x : R
⊢ x ∈ pNilradical R p → x ∈ ⊥
state_after: R : Type u_1
inst✝¹ : CommRing R
p : ℕ
inst✝ : ExpChar R p
h : Function.Injective ⇑(frobenius R p)
x : R
⊢ (∃ n, x ^ p ^ n = 0) → x = 0

tactic: exact fun ⟨n, _⟩ ↦ h.iterate n (by rwa [← coe_iterateFrobenius, map_zero])
state_before: R : Type u_1
inst✝¹ : CommRing R
p : ℕ
inst✝ : ExpChar R p
h : Function.Injective ⇑(frobenius R p)
x : R
⊢ (∃ n, x ^ p ^ n = 0) → x = 0
state_after: no goals

tactic: rwa [← coe_iterateFrobenius, map_zero]
state_before: R : Type u_1
inst✝¹ : CommRing R
p : ℕ
inst✝ : ExpChar R p
h : Function.Injective ⇑(frobenius R p)
x : R
x✝ : ∃ n, x ^ p ^ n = 0
n : ℕ
h✝ : x ^ p ^ n = 0
⊢ (⇑(frobenius R p))^[n] x = (⇑(frobenius R p))^[n] 0
state_after: no goals
Theorem: CircleDeg1Lift.translationNumber_pow
File: Mathlib/Dynamics/Circle/RotationNumber/TranslationNumber.lean

tactic: simp
state_before: f g : CircleDeg1Lift
⊢ τ (f ^ 0) = ↑0 * τ f
state_after: no goals

tactic: rw [pow_succ, translationNumber_mul_of_commute (Commute.pow_self f n),
  translationNumber_pow n, Nat.cast_add_one, add_mul, one_mul]
state_before: f g : CircleDeg1Lift
n : ℕ
⊢ τ (f ^ (n + 1)) = ↑(n + 1) * τ f
state_after: no goals
Theorem: DFinsupp.extendWith_zero
File: Mathlib/Data/DFinsupp/Basic.lean

tactic: ext (_ | j)
state_before: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
κ : Type u_1
α : Option ι → Type v
inst✝¹ : DecidableEq ι
inst✝ : (i : Option ι) → Zero (α i)
x : α none
⊢ extendWith x 0 = single none x
state_after: case h.none
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
κ : Type u_1
α : Option ι → Type v
inst✝¹ : DecidableEq ι
inst✝ : (i : Option ι) → Zero (α i)
x : α none
⊢ (extendWith x 0) none = (single none x) none

case h.some
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
κ : Type u_1
α : Option ι → Type v
inst✝¹ : DecidableEq ι
inst✝ : (i : Option ι) → Zero (α i)
x : α none
j : ι
⊢ (extendWith x 0) (some j) = (single none x) (some j)

tactic: rw [extendWith_none, single_eq_same]
state_before: case h.none
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
κ : Type u_1
α : Option ι → Type v
inst✝¹ : DecidableEq ι
inst✝ : (i : Option ι) → Zero (α i)
x : α none
⊢ (extendWith x 0) none = (single none x) none
state_after: no goals

tactic: rw [extendWith_some, single_eq_of_ne (Option.some_ne_none _).symm, zero_apply]
state_before: case h.some
ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝² : DecidableEq ι
κ : Type u_1
α : Option ι → Type v
inst✝¹ : DecidableEq ι
inst✝ : (i : Option ι) → Zero (α i)
x : α none
j : ι
⊢ (extendWith x 0) (some j) = (single none x) (some j)
state_after: no goals
Theorem: MeasureTheory.SimpleFunc.lintegral_eq_of_measure_preimage
File: Mathlib/MeasureTheory/Function/SimpleFunc.lean

tactic: simp only [lintegral, ← H]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ f.lintegral μ = g.lintegral ν
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ ∑ x ∈ f.range, x * μ (↑f ⁻¹' {x}) = ∑ x ∈ g.range, x * μ (↑f ⁻¹' {x})

tactic: apply lintegral_eq_of_subset
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ ∑ x ∈ f.range, x * μ (↑f ⁻¹' {x}) = ∑ x ∈ g.range, x * μ (↑f ⁻¹' {x})
state_after: case hs
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ ∀ (x : α), ↑f x ≠ 0 → μ (↑f ⁻¹' {↑f x}) ≠ 0 → ↑f x ∈ g.range

tactic: simp only [H]
state_before: case hs
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ ∀ (x : α), ↑f x ≠ 0 → μ (↑f ⁻¹' {↑f x}) ≠ 0 → ↑f x ∈ g.range
state_after: case hs
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ ∀ (x : α), ↑f x ≠ 0 → ν (↑g ⁻¹' {↑f x}) ≠ 0 → ↑f x ∈ g.range

tactic: intros
state_before: case hs
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
⊢ ∀ (x : α), ↑f x ≠ 0 → ν (↑g ⁻¹' {↑f x}) ≠ 0 → ↑f x ∈ g.range
state_after: case hs
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
x✝ : α
a✝¹ : ↑f x✝ ≠ 0
a✝ : ν (↑g ⁻¹' {↑f x✝}) ≠ 0
⊢ ↑f x✝ ∈ g.range

tactic: exact mem_range_of_measure_ne_zero ‹_›
state_before: case hs
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
inst✝ : MeasurableSpace β
f : α →ₛ ℝ≥0∞
g : β →ₛ ℝ≥0∞
ν : Measure β
H : ∀ (y : ℝ≥0∞), μ (↑f ⁻¹' {y}) = ν (↑g ⁻¹' {y})
x✝ : α
a✝¹ : ↑f x✝ ≠ 0
a✝ : ν (↑g ⁻¹' {↑f x✝}) ≠ 0
⊢ ↑f x✝ ∈ g.range
state_after: no goals
Theorem: suffixLevenshtein_cons₁_aux
File: Mathlib/Data/List/EditDistance/Defs.lean

tactic: match x, y with
| ⟨hx :: tx, _⟩, ⟨hy :: ty, _⟩ => simp_all
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
inst✝¹ : AddZeroClass δ
inst✝ : Min δ
C : Cost α β δ
x y : { r // 0 < r.length }
w₀ : x.val[0] = y.val[0]
w : x.val.tail = y.val.tail
⊢ x = y
state_after: no goals

tactic: simp_all
state_before: α : Type u_1
β : Type u_2
δ : Type u_3
inst✝¹ : AddZeroClass δ
inst✝ : Min δ
C : Cost α β δ
x y : { r // 0 < r.length }
hx : δ
tx : List δ
property✝¹ : 0 < (hx :: tx).length
hy : δ
ty : List δ
property✝ : 0 < (hy :: ty).length
w₀ : ⟨hx :: tx, property✝¹⟩.val[0] = ⟨hy :: ty, property✝⟩.val[0]
w : ⟨hx :: tx, property✝¹⟩.val.tail = ⟨hy :: ty, property✝⟩.val.tail
⊢ ⟨hx :: tx, property✝¹⟩ = ⟨hy :: ty, property✝⟩
state_after: no goals
Theorem: Monoid.CoprodI.Word.cons_eq_smul
File: Mathlib/GroupTheory/CoprodI.lean

tactic: rw [of_smul_def, equivPair_eq_of_fstIdx_ne _]
state_before: ι : Type u_1
M : ι → Type u_2
inst✝³ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝² : Monoid N
inst✝¹ : (i : ι) → DecidableEq (M i)
inst✝ : DecidableEq ι
i : ι
m : M i
ls : Word M
h1 : ls.fstIdx ≠ some i
h2 : m ≠ 1
⊢ cons m ls h1 h2 = of m • ls
state_after: ι : Type u_1
M : ι → Type u_2
inst✝³ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝² : Monoid N
inst✝¹ : (i : ι) → DecidableEq (M i)
inst✝ : DecidableEq ι
i : ι
m : M i
ls : Word M
h1 : ls.fstIdx ≠ some i
h2 : m ≠ 1
⊢ cons m ls h1 h2 =
    rcons
      (let __src := { head := 1, tail := ls, fstIdx_ne := ?m.191858 };
      { head := m * { head := 1, tail := ls, fstIdx_ne := ?m.191858 }.head, tail := __src.tail, fstIdx_ne := ⋯ })

ι : Type u_1
M : ι → Type u_2
inst✝³ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝² : Monoid N
inst✝¹ : (i : ι) → DecidableEq (M i)
inst✝ : DecidableEq ι
i : ι
m : M i
ls : Word M
h1 : ls.fstIdx ≠ some i
h2 : m ≠ 1
⊢ ls.fstIdx ≠ some i

tactic: simp [cons, rcons, h2]
state_before: ι : Type u_1
M : ι → Type u_2
inst✝³ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝² : Monoid N
inst✝¹ : (i : ι) → DecidableEq (M i)
inst✝ : DecidableEq ι
i : ι
m : M i
ls : Word M
h1 : ls.fstIdx ≠ some i
h2 : m ≠ 1
⊢ cons m ls h1 h2 =
    rcons
      (let __src := { head := 1, tail := ls, fstIdx_ne := ?m.191858 };
      { head := m * { head := 1, tail := ls, fstIdx_ne := ?m.191858 }.head, tail := __src.tail, fstIdx_ne := ⋯ })
state_after: no goals

tactic: exact h1
state_before: ι : Type u_1
M : ι → Type u_2
inst✝³ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝² : Monoid N
inst✝¹ : (i : ι) → DecidableEq (M i)
inst✝ : DecidableEq ι
i : ι
m : M i
ls : Word M
h1 : ls.fstIdx ≠ some i
h2 : m ≠ 1
⊢ ls.fstIdx ≠ some i
state_after: no goals