1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Nat.pow_length_le_mul_ofDigits
File: Mathlib/Data/Nat/Digits.lean

tactic: rw [← List.dropLast_append_getLast hl]
state_before: n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ l.length ≤ (b + 2) * ofDigits (b + 2) l
state_after: n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ (l.dropLast ++ [l.getLast hl]).length ≤ (b + 2) * ofDigits (b + 2) (l.dropLast ++ [l.getLast hl])

tactic: simp only [List.length_append, List.length, zero_add, List.length_dropLast, ofDigits_append,
  List.length_dropLast, ofDigits_singleton, add_comm (l.length - 1), pow_add, pow_one]
state_before: n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ (l.dropLast ++ [l.getLast hl]).length ≤ (b + 2) * ofDigits (b + 2) (l.dropLast ++ [l.getLast hl])
state_after: n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) * (b + 2) ^ (l.length - 1) ≤ (b + 2) * (ofDigits (b + 2) l.dropLast + (b + 2) ^ (l.length - 1) * l.getLast hl)

tactic: apply Nat.mul_le_mul_left
state_before: n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) * (b + 2) ^ (l.length - 1) ≤ (b + 2) * (ofDigits (b + 2) l.dropLast + (b + 2) ^ (l.length - 1) * l.getLast hl)
state_after: case h
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ (l.length - 1) ≤ ofDigits (b + 2) l.dropLast + (b + 2) ^ (l.length - 1) * l.getLast hl

tactic: refine le_trans ?_ (Nat.le_add_left _ _)
state_before: case h
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ (l.length - 1) ≤ ofDigits (b + 2) l.dropLast + (b + 2) ^ (l.length - 1) * l.getLast hl
state_after: case h
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ (l.length - 1) ≤ (b + 2) ^ (l.length - 1) * l.getLast hl

tactic: have : 0 < l.getLast hl := by rwa [pos_iff_ne_zero]
state_before: case h
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ (b + 2) ^ (l.length - 1) ≤ (b + 2) ^ (l.length - 1) * l.getLast hl
state_after: case h
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
this : 0 < l.getLast hl
⊢ (b + 2) ^ (l.length - 1) ≤ (b + 2) ^ (l.length - 1) * l.getLast hl

tactic: convert Nat.mul_le_mul_left ((b + 2) ^ (l.length - 1)) this using 1
state_before: case h
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
this : 0 < l.getLast hl
⊢ (b + 2) ^ (l.length - 1) ≤ (b + 2) ^ (l.length - 1) * l.getLast hl
state_after: case h.e'_3
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
this : 0 < l.getLast hl
⊢ (b + 2) ^ (l.length - 1) = (b + 2) ^ (l.length - 1) * succ 0

tactic: rw [Nat.mul_one]
state_before: case h.e'_3
n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
this : 0 < l.getLast hl
⊢ (b + 2) ^ (l.length - 1) = (b + 2) ^ (l.length - 1) * succ 0
state_after: no goals

tactic: rwa [pos_iff_ne_zero]
state_before: n b : ℕ
l : List ℕ
hl : l ≠ []
hl2 : l.getLast hl ≠ 0
⊢ 0 < l.getLast hl
state_after: no goals
Theorem: HasStrictFDerivAt.cpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean

tactic: convert (@hasStrictFDerivAt_cpow ((fun x => (f x, g x)) x) h0).comp x (hf.prod hg)
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f g : E → ℂ
f' g' : E →L[ℂ] ℂ
x : E
s : Set E
c : ℂ
hf : HasStrictFDerivAt f f' x
hg : HasStrictFDerivAt g g' x
h0 : f x ∈ slitPlane
⊢ HasStrictFDerivAt (fun x => f x ^ g x) ((g x * f x ^ (g x - 1)) • f' + (f x ^ g x * Complex.log (f x)) • g') x
state_after: no goals
Theorem: MeasureTheory.setLIntegral_map
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

tactic: rw [restrict_map hg hs, lintegral_map hf hg]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝ : MeasurableSpace β
f : β → ℝ≥0∞
g : α → β
s : Set β
hs : MeasurableSet s
hf : Measurable f
hg : Measurable g
⊢ ∫⁻ (y : β) in s, f y ∂Measure.map g μ = ∫⁻ (x : α) in g ⁻¹' s, f (g x) ∂μ
state_after: no goals
Theorem: CategoryTheory.IsCoseparating.isCodetecting
File: Mathlib/CategoryTheory/Generator.lean

tactic: simpa only [← isDetecting_op_iff, ← isSeparating_op_iff] using IsSeparating.isDetecting
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : Balanced C
𝒢 : Set C
⊢ IsCoseparating 𝒢 → IsCodetecting 𝒢
state_after: no goals
Theorem: abs_abs_sub_abs_le_abs_sub
File: Mathlib/Algebra/Order/Group/Abs.lean

tactic: rw [abs_sub_comm]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c d a b : α
⊢ |b| - |a| ≤ |a - b|
state_after: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c d a b : α
⊢ |b| - |a| ≤ |b - a|

tactic: apply abs_sub_abs_le_abs_sub
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b✝ c d a b : α
⊢ |b| - |a| ≤ |b - a|
state_after: no goals
Theorem: CategoryTheory.Localization.Preadditive.map_add
File: Mathlib/CategoryTheory/Localization/CalculusOfFractions/Preadditive.lean

tactic: rw [add_eq W (Iso.refl _) (Iso.refl _) (L.map f₁) (L.map f₂)]
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
inst✝² : Preadditive C
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y Z : C
X' Y' Z' : D
eX : L.obj X ≅ X'
eY : L.obj Y ≅ Y'
eZ : L.obj Z ≅ Z'
f₁ f₂ : X ⟶ Y
⊢ L.map (f₁ + f₂) = L.map f₁ + L.map f₂
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
inst✝² : Preadditive C
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y Z : C
X' Y' Z' : D
eX : L.obj X ≅ X'
eY : L.obj Y ≅ Y'
eZ : L.obj Z ≅ Z'
f₁ f₂ : X ⟶ Y
⊢ L.map (f₁ + f₂) = add W (Iso.refl (L.obj X)) (Iso.refl (L.obj Y)) (L.map f₁) (L.map f₂)

tactic: simp [add]
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{u_4, u_2} D
inst✝² : Preadditive C
L : C ⥤ D
W : MorphismProperty C
inst✝¹ : L.IsLocalization W
inst✝ : W.HasLeftCalculusOfFractions
X Y Z : C
X' Y' Z' : D
eX : L.obj X ≅ X'
eY : L.obj Y ≅ Y'
eZ : L.obj Z ≅ Z'
f₁ f₂ : X ⟶ Y
⊢ L.map (f₁ + f₂) = add W (Iso.refl (L.obj X)) (Iso.refl (L.obj Y)) (L.map f₁) (L.map f₂)
state_after: no goals
Theorem: Equiv.piCongrLeft_symm_preimage_univ_pi
File: Mathlib/Data/Set/Prod.lean

tactic: simpa [f.surjective.range_eq] using piCongrLeft_symm_preimage_pi f univ t
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
f : ι' ≃ ι
t : (i : ι) → Set (α i)
⊢ (⇑(piCongrLeft α f).symm ⁻¹' univ.pi fun i' => t (f i')) = univ.pi t
state_after: no goals
Theorem: MeasureTheory.Lp.ext
File: Mathlib/MeasureTheory/Function/LpSpace.lean

tactic: cases f
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 g : ↥(Lp E p μ)
h : ↑↑f =ᶠ[ae μ] ↑↑g
⊢ f = g
state_after: case mk
α : 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
g : ↥(Lp E p μ)
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
h : ↑↑⟨val✝, property✝⟩ =ᶠ[ae μ] ↑↑g
⊢ ⟨val✝, property✝⟩ = g

tactic: cases g
state_before: case mk
α : 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
g : ↥(Lp E p μ)
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
h : ↑↑⟨val✝, property✝⟩ =ᶠ[ae μ] ↑↑g
⊢ ⟨val✝, property✝⟩ = g
state_after: case mk.mk
α : 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
val✝¹ : α →ₘ[μ] E
property✝¹ : val✝¹ ∈ Lp E p μ
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
h : ↑↑⟨val✝¹, property✝¹⟩ =ᶠ[ae μ] ↑↑⟨val✝, property✝⟩
⊢ ⟨val✝¹, property✝¹⟩ = ⟨val✝, property✝⟩

tactic: simp only [Subtype.mk_eq_mk]
state_before: case mk.mk
α : 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
val✝¹ : α →ₘ[μ] E
property✝¹ : val✝¹ ∈ Lp E p μ
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
h : ↑↑⟨val✝¹, property✝¹⟩ =ᶠ[ae μ] ↑↑⟨val✝, property✝⟩
⊢ ⟨val✝¹, property✝¹⟩ = ⟨val✝, property✝⟩
state_after: case mk.mk
α : 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
val✝¹ : α →ₘ[μ] E
property✝¹ : val✝¹ ∈ Lp E p μ
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
h : ↑↑⟨val✝¹, property✝¹⟩ =ᶠ[ae μ] ↑↑⟨val✝, property✝⟩
⊢ val✝¹ = val✝

tactic: exact AEEqFun.ext h
state_before: case mk.mk
α : 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
val✝¹ : α →ₘ[μ] E
property✝¹ : val✝¹ ∈ Lp E p μ
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
h : ↑↑⟨val✝¹, property✝¹⟩ =ᶠ[ae μ] ↑↑⟨val✝, property✝⟩
⊢ val✝¹ = val✝
state_after: no goals
Theorem: Nat.even_iff
File: Mathlib/Algebra/Group/Nat.lean

tactic: simp [← Nat.two_mul, hm]
state_before: m✝ n : ℕ
x✝ : Even n
m : ℕ
hm : n = m + m
⊢ n % 2 = 0
state_after: no goals

tactic: simp [← Nat.two_mul, h]
state_before: m n : ℕ
h : n % 2 = 0
⊢ n % 2 + 2 * (n / 2) = n / 2 + n / 2
state_after: no goals
Theorem: Polynomial.comp_eq_sum_left
File: Mathlib/Algebra/Polynomial/Eval.lean

tactic: rw [comp, eval₂_eq_sum]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
⊢ p.comp q = p.sum fun e a => C a * q ^ e
state_after: no goals
Theorem: DirichletCharacter.modOne_eq_one
File: Mathlib/NumberTheory/LSeries/Dirichlet.lean

tactic: ext
state_before: R : Type u_1
inst✝ : CommSemiring R
χ : DirichletCharacter R 1
⊢ (fun x => χ ↑x) = 1
state_after: case h
R : Type u_1
inst✝ : CommSemiring R
χ : DirichletCharacter R 1
x✝ : ℕ
⊢ χ ↑x✝ = 1 x✝

tactic: rw [χ.level_one, MulChar.one_apply (isUnit_of_subsingleton _), Pi.one_apply]
state_before: case h
R : Type u_1
inst✝ : CommSemiring R
χ : DirichletCharacter R 1
x✝ : ℕ
⊢ χ ↑x✝ = 1 x✝
state_after: no goals
Theorem: Polynomial.evalEval_C
File: Mathlib/Algebra/Polynomial/Bivariate.lean

tactic: rw [evalEval, eval_C]
state_before: R : Type u_1
S : Type u_2
inst✝ : Semiring R
x y : R
p : R[X]
⊢ evalEval x y (C p) = eval x p
state_after: no goals
Theorem: Unitization.inr_mul_inl
File: Mathlib/Algebra/Algebra/Unitization.lean

tactic: rw [smul_zero, zero_add, mul_zero, add_zero]
state_before: R : Type u_1
A : Type u_2
inst✝² : Semiring R
inst✝¹ : NonUnitalNonAssocSemiring A
inst✝ : DistribMulAction R A
r : R
a : A
⊢ 0 • 0 + r • a + a * 0 = r • a
state_after: no goals
Theorem: IsMaxOn.sub
File: Mathlib/Order/Filter/Extr.lean

tactic: simpa only [sub_eq_add_neg] using hf.add hg.neg
state_before: α : Type u
β : Type v
γ : Type w
δ : Type x
inst✝ : OrderedAddCommGroup β
f g : α → β
a : α
s : Set α
l : Filter α
hf : IsMaxOn f s a
hg : IsMinOn g s a
⊢ IsMaxOn (fun x => f x - g x) s a
state_after: no goals
Theorem: Nat.card_sum
File: Mathlib/SetTheory/Cardinal/Finite.lean

tactic: have := Fintype.ofFinite α
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Finite α
inst✝ : Finite β
⊢ Nat.card (α ⊕ β) = Nat.card α + Nat.card β
state_after: α : Type u_1
β : Type u_2
inst✝¹ : Finite α
inst✝ : Finite β
this : Fintype α
⊢ Nat.card (α ⊕ β) = Nat.card α + Nat.card β

tactic: have := Fintype.ofFinite β
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Finite α
inst✝ : Finite β
this : Fintype α
⊢ Nat.card (α ⊕ β) = Nat.card α + Nat.card β
state_after: α : Type u_1
β : Type u_2
inst✝¹ : Finite α
inst✝ : Finite β
this✝ : Fintype α
this : Fintype β
⊢ Nat.card (α ⊕ β) = Nat.card α + Nat.card β

tactic: simp_rw [Nat.card_eq_fintype_card, Fintype.card_sum]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Finite α
inst✝ : Finite β
this✝ : Fintype α
this : Fintype β
⊢ Nat.card (α ⊕ β) = Nat.card α + Nat.card β
state_after: no goals
Theorem: CategoryTheory.IsPullback.inr_fst'
File: Mathlib/CategoryTheory/Limits/Shapes/CommSq.lean

tactic: apply flip
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
P X Y Z : C
fst : P ⟶ X
snd : P ⟶ Y
f : X ⟶ Z
g : Y ⟶ Z
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
b : BinaryBicone X Y
h : b.IsBilimit
⊢ IsPullback b.inr 0 b.fst 0
state_after: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
P X Y Z : C
fst : P ⟶ X
snd : P ⟶ Y
f : X ⟶ Z
g : Y ⟶ Z
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
b : BinaryBicone X Y
h : b.IsBilimit
⊢ IsPullback 0 b.inr 0 b.fst

tactic: refine of_bot ?_ (by simp) (of_isBilimit h)
state_before: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
P X Y Z : C
fst : P ⟶ X
snd : P ⟶ Y
f : X ⟶ Z
g : Y ⟶ Z
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
b : BinaryBicone X Y
h : b.IsBilimit
⊢ IsPullback 0 b.inr 0 b.fst
state_after: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
P X Y Z : C
fst : P ⟶ X
snd : P ⟶ Y
f : X ⟶ Z
g : Y ⟶ Z
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
b : BinaryBicone X Y
h : b.IsBilimit
⊢ IsPullback 0 (b.inr ≫ b.snd) (0 ≫ 0) 0

tactic: simp
state_before: case h
C : Type u₁
inst✝² : Category.{v₁, u₁} C
P X Y Z : C
fst : P ⟶ X
snd : P ⟶ Y
f : X ⟶ Z
g : Y ⟶ Z
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
b : BinaryBicone X Y
h : b.IsBilimit
⊢ IsPullback 0 (b.inr ≫ b.snd) (0 ≫ 0) 0
state_after: no goals

tactic: simp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
P X Y Z : C
fst : P ⟶ X
snd : P ⟶ Y
f : X ⟶ Z
g : Y ⟶ Z
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
b : BinaryBicone X Y
h : b.IsBilimit
⊢ 0 ≫ 0 = b.inr ≫ b.fst
state_after: no goals
Theorem: Cardinal.infinite_iff
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: rw [← not_lt, lt_aleph0_iff_finite, not_finite_iff_infinite]
state_before: α✝ β α : Type u
⊢ Infinite α ↔ ℵ₀ ≤ #α
state_after: no goals
Theorem: SetTheory.PGame.equiv_of_eq
File: Mathlib/SetTheory/Game/PGame.lean

tactic: subst h
state_before: xl xr : Type u
x y : PGame
h : x = y
⊢ x ≈ y
state_after: xl xr : Type u
x : PGame
⊢ x ≈ x

tactic: rfl
state_before: xl xr : Type u
x : PGame
⊢ x ≈ x
state_after: no goals
Theorem: EReal.closedEmbedding_coe_ennreal
File: Mathlib/Topology/Instances/EReal.lean

tactic: rw [range_coe_ennreal]
state_before: α : Type u_1
inst✝ : TopologicalSpace α
⊢ IsClosed (range ENNReal.toEReal)
state_after: α : Type u_1
inst✝ : TopologicalSpace α
⊢ IsClosed (Ici 0)

tactic: exact isClosed_Ici
state_before: α : Type u_1
inst✝ : TopologicalSpace α
⊢ IsClosed (Ici 0)
state_after: no goals
Theorem: LinearMap.IsAdjointPair.comp
File: Mathlib/LinearAlgebra/SesquilinearForm.lean

tactic: rw [LinearMap.comp_apply, LinearMap.comp_apply, h', h]
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : Module R M
inst✝⁵ : AddCommMonoid M₁
inst✝⁴ : Module R M₁
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
I : R →+* R
B F : M →ₗ[R] M →ₛₗ[I] M₃
B' : M₁ →ₗ[R] M₁ →ₛₗ[I] M₃
B'' : M₂ →ₗ[R] M₂ →ₛₗ[I] M₃
f f'✝ : M →ₗ[R] M₁
g g'✝ : M₁ →ₗ[R] M
f' : M₁ →ₗ[R] M₂
g' : M₂ →ₗ[R] M₁
h : B.IsAdjointPair B' f g
h' : B'.IsAdjointPair B'' f' g'
x✝¹ : M
x✝ : M₂
⊢ (B'' ((f' ∘ₗ f) x✝¹)) x✝ = (B x✝¹) ((g ∘ₗ g') x✝)
state_after: no goals
Theorem: Basis.SmithNormalForm.repr_comp_embedding_eq_smul
File: Mathlib/LinearAlgebra/FreeModule/PID.lean

tactic: ext i
state_before: ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
M : Type u_3
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
⊢ ⇑(snf.bM.repr ↑m) ∘ ⇑snf.f = snf.a • ⇑(snf.bN.repr m)
state_after: case h
ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
M : Type u_3
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
i : Fin n
⊢ (⇑(snf.bM.repr ↑m) ∘ ⇑snf.f) i = (snf.a • ⇑(snf.bN.repr m)) i

tactic: simp [Pi.smul_apply (snf.a i)]
state_before: case h
ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
M : Type u_3
inst✝¹ : AddCommGroup M
inst✝ : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
i : Fin n
⊢ (⇑(snf.bM.repr ↑m) ∘ ⇑snf.f) i = (snf.a • ⇑(snf.bN.repr m)) i
state_after: no goals
Theorem: NonUnitalSubsemiring.top_prod
File: Mathlib/RingTheory/NonUnitalSubsemiring/Basic.lean

tactic: simp [mem_prod, MonoidHom.coe_snd]
state_before: R : Type u
S : Type v
T : Type w
inst✝⁴ : NonUnitalNonAssocSemiring R
M : Subsemigroup R
inst✝³ : NonUnitalNonAssocSemiring S
inst✝² : NonUnitalNonAssocSemiring T
F : Type u_1
inst✝¹ : FunLike F R S
inst✝ : NonUnitalRingHomClass F R S
s : NonUnitalSubsemiring S
x : R × S
⊢ x ∈ ⊤.prod s ↔ x ∈ comap (NonUnitalRingHom.snd R S) s
state_after: no goals
Theorem: Polynomial.contract_one
File: Mathlib/Algebra/Polynomial/Expand.lean

tactic: rw [coeff_contract one_ne_zero, mul_one]
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
p q : ℕ
f : R[X]
n : ℕ
⊢ (contract 1 f).coeff n = f.coeff n
state_after: no goals
Theorem: IntermediateField.adjoin_simple_isCompactElement
File: Mathlib/FieldTheory/Adjoin.lean

tactic: simp_rw [isCompactElement_iff_le_of_directed_sSup_le,
  adjoin_simple_le_iff, sSup_eq_iSup', ← exists_prop]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
⊢ IsCompactElement F⟮x⟯
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
⊢ ∀ (s : Set (IntermediateField F E)),
    s.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) s → x ∈ ⨆ a, ↑a → ∃ x_1, ∃ (_ : x_1 ∈ s), x ∈ x_1

tactic: intro s hne hs hx
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
⊢ ∀ (s : Set (IntermediateField F E)),
    s.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) s → x ∈ ⨆ a, ↑a → ∃ x_1, ∃ (_ : x_1 ∈ s), x ∈ x_1
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
s : Set (IntermediateField F E)
hne : s.Nonempty
hs : DirectedOn (fun x x_1 => x ≤ x_1) s
hx : x ∈ ⨆ a, ↑a
⊢ ∃ x_1, ∃ (_ : x_1 ∈ s), x ∈ x_1

tactic: have := hne.to_subtype
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
s : Set (IntermediateField F E)
hne : s.Nonempty
hs : DirectedOn (fun x x_1 => x ≤ x_1) s
hx : x ∈ ⨆ a, ↑a
⊢ ∃ x_1, ∃ (_ : x_1 ∈ s), x ∈ x_1
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
s : Set (IntermediateField F E)
hne : s.Nonempty
hs : DirectedOn (fun x x_1 => x ≤ x_1) s
hx : x ∈ ⨆ a, ↑a
this : Nonempty ↑s
⊢ ∃ x_1, ∃ (_ : x_1 ∈ s), x ∈ x_1

tactic: rwa [← SetLike.mem_coe, coe_iSup_of_directed hs.directed_val, mem_iUnion, Subtype.exists] at hx
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
s : Set (IntermediateField F E)
hne : s.Nonempty
hs : DirectedOn (fun x x_1 => x ≤ x_1) s
hx : x ∈ ⨆ a, ↑a
this : Nonempty ↑s
⊢ ∃ x_1, ∃ (_ : x_1 ∈ s), x ∈ x_1
state_after: no goals
Theorem: CategoryTheory.Limits.coconeOfConeLeftOp_ι_app
File: Mathlib/CategoryTheory/Limits/Cones.lean

tactic: dsimp only [coconeOfConeLeftOp]
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ Cᵒᵖ
c : Cone F.leftOp
j : J
⊢ (coconeOfConeLeftOp c).ι.app j = (c.π.app { unop := j }).op
state_after: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ Cᵒᵖ
c : Cone F.leftOp
j : J
⊢ (NatTrans.removeLeftOp c.π).app j = (c.π.app { unop := j }).op

tactic: simp
state_before: J : Type u₁
inst✝³ : Category.{v₁, u₁} J
K : Type u₂
inst✝² : Category.{v₂, u₂} K
C : Type u₃
inst✝¹ : Category.{v₃, u₃} C
D : Type u₄
inst✝ : Category.{v₄, u₄} D
F : J ⥤ Cᵒᵖ
c : Cone F.leftOp
j : J
⊢ (NatTrans.removeLeftOp c.π).app j = (c.π.app { unop := j }).op
state_after: no goals
Theorem: CategoryTheory.ShortComplex.quasiIso_iff_comp_right
File: Mathlib/Algebra/Homology/ShortComplex/QuasiIso.lean

tactic: constructor
state_before: C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
⊢ QuasiIso (φ ≫ φ') ↔ QuasiIso φ
state_after: case mp
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
⊢ QuasiIso (φ ≫ φ') → QuasiIso φ

case mpr
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
⊢ QuasiIso φ → QuasiIso (φ ≫ φ')

tactic: intro
state_before: case mp
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
⊢ QuasiIso (φ ≫ φ') → QuasiIso φ
state_after: case mp
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
a✝ : QuasiIso (φ ≫ φ')
⊢ QuasiIso φ

tactic: exact quasiIso_of_comp_right φ φ'
state_before: case mp
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
a✝ : QuasiIso (φ ≫ φ')
⊢ QuasiIso φ
state_after: no goals

tactic: intro
state_before: case mpr
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
⊢ QuasiIso φ → QuasiIso (φ ≫ φ')
state_after: case mpr
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
a✝ : QuasiIso φ
⊢ QuasiIso (φ ≫ φ')

tactic: exact quasiIso_comp φ φ'
state_before: case mpr
C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
φ' : S₂ ⟶ S₃
hφ' : QuasiIso φ'
a✝ : QuasiIso φ
⊢ QuasiIso (φ ≫ φ')
state_after: no goals