1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Matrix.blockDiagonal_map
File: Mathlib/Data/Matrix/Block.lean

tactic: ext
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : o → Matrix m n α
f : α → β
hf : f 0 = 0
⊢ (blockDiagonal M).map f = blockDiagonal fun k => (M k).map f
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : o → Matrix m n α
f : α → β
hf : f 0 = 0
i✝ : m × o
j✝ : n × o
⊢ (blockDiagonal M).map f i✝ j✝ = blockDiagonal (fun k => (M k).map f) i✝ j✝

tactic: simp only [map_apply, blockDiagonal_apply, eq_comm]
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : o → Matrix m n α
f : α → β
hf : f 0 = 0
i✝ : m × o
j✝ : n × o
⊢ (blockDiagonal M).map f i✝ j✝ = blockDiagonal (fun k => (M k).map f) i✝ j✝
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : o → Matrix m n α
f : α → β
hf : f 0 = 0
i✝ : m × o
j✝ : n × o
⊢ f (if i✝.2 = j✝.2 then M i✝.2 i✝.1 j✝.1 else 0) = if i✝.2 = j✝.2 then f (M i✝.2 i✝.1 j✝.1) else 0

tactic: rw [apply_ite f, hf]
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
p : Type u_5
q : Type u_6
m' : o → Type u_7
n' : o → Type u_8
p' : o → Type u_9
R : Type u_10
S : Type u_11
α : Type u_12
β : Type u_13
inst✝² : DecidableEq o
inst✝¹ : Zero α
inst✝ : Zero β
M : o → Matrix m n α
f : α → β
hf : f 0 = 0
i✝ : m × o
j✝ : n × o
⊢ f (if i✝.2 = j✝.2 then M i✝.2 i✝.1 j✝.1 else 0) = if i✝.2 = j✝.2 then f (M i✝.2 i✝.1 j✝.1) else 0
state_after: no goals
Theorem: CategoryTheory.shiftFunctorAdd'_assoc_hom_app
File: Mathlib/CategoryTheory/Shift/Basic.lean

tactic: rw [← h₁₂, h₁₂₃]
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddMonoid A
inst✝ : HasShift C A
a₁ a₂ a₃ a₁₂ a₂₃ a₁₂₃ : A
h₁₂ : a₁ + a₂ = a₁₂
h₂₃ : a₂ + a₃ = a₂₃
h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃
X : C
⊢ a₁₂ + a₃ = a₁₂₃
state_after: no goals

tactic: rw [← h₂₃, ← add_assoc, h₁₂₃]
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddMonoid A
inst✝ : HasShift C A
a₁ a₂ a₃ a₁₂ a₂₃ a₁₂₃ : A
h₁₂ : a₁ + a₂ = a₁₂
h₂₃ : a₂ + a₃ = a₂₃
h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃
X : C
⊢ a₁ + a₂₃ = a₁₂₃
state_after: no goals

tactic: simpa using NatTrans.congr_app (congr_arg Iso.hom
  (shiftFunctorAdd'_assoc C _ _ _ _ _ _ h₁₂ h₂₃ h₁₂₃)) X
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddMonoid A
inst✝ : HasShift C A
a₁ a₂ a₃ a₁₂ a₂₃ a₁₂₃ : A
h₁₂ : a₁ + a₂ = a₁₂
h₂₃ : a₂ + a₃ = a₂₃
h₁₂₃ : a₁ + a₂ + a₃ = a₁₂₃
X : C
⊢ (shiftFunctorAdd' C a₁₂ a₃ a₁₂₃ ⋯).hom.app X ≫
      (shiftFunctor C a₃).map ((shiftFunctorAdd' C a₁ a₂ a₁₂ h₁₂).hom.app X) =
    (shiftFunctorAdd' C a₁ a₂₃ a₁₂₃ ⋯).hom.app X ≫
      (shiftFunctorAdd' C a₂ a₃ a₂₃ h₂₃).hom.app ((shiftFunctor C a₁).obj X)
state_after: no goals
Theorem: CategoryTheory.Presheaf.isLocallySurjective_of_isLocallySurjective_of_isLocallyInjective_fac
File: Mathlib/CategoryTheory/Sites/LocallySurjective.lean

tactic: subst fac
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Cᵒᵖ ⥤ A
f₁ : F₁ ⟶ F₂
f₂ : F₂ ⟶ F₃
f₃ : F₁ ⟶ F₃
fac : f₁ ≫ f₂ = f₃
inst✝¹ : IsLocallySurjective J f₃
inst✝ : IsLocallyInjective J f₂
⊢ IsLocallySurjective J f₁
state_after: C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Cᵒᵖ ⥤ A
f₁ : F₁ ⟶ F₂
f₂ : F₂ ⟶ F₃
inst✝¹ : IsLocallyInjective J f₂
inst✝ : IsLocallySurjective J (f₁ ≫ f₂)
⊢ IsLocallySurjective J f₁

tactic: exact isLocallySurjective_of_isLocallySurjective_of_isLocallyInjective J f₁ f₂
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝³ : Category.{v', u'} A
inst✝² : ConcreteCategory A
F₁ F₂ F₃ : Cᵒᵖ ⥤ A
f₁ : F₁ ⟶ F₂
f₂ : F₂ ⟶ F₃
inst✝¹ : IsLocallyInjective J f₂
inst✝ : IsLocallySurjective J (f₁ ≫ f₂)
⊢ IsLocallySurjective J f₁
state_after: no goals
Theorem: nhdsWithin_Ioi_eq_bot_iff
File: Mathlib/Topology/Order/LeftRightNhds.lean

tactic: by_cases ha : IsTop a
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
⊢ 𝓝[>] a = ⊥ ↔ IsTop a ∨ ∃ b, a ⋖ b
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : IsTop a
⊢ 𝓝[>] a = ⊥ ↔ IsTop a ∨ ∃ b, a ⋖ b

case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : ¬IsTop a
⊢ 𝓝[>] a = ⊥ ↔ IsTop a ∨ ∃ b, a ⋖ b

tactic: simp [ha, ha.isMax.Ioi_eq]
state_before: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : IsTop a
⊢ 𝓝[>] a = ⊥ ↔ IsTop a ∨ ∃ b, a ⋖ b
state_after: no goals

tactic: simp only [ha, false_or]
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : ¬IsTop a
⊢ 𝓝[>] a = ⊥ ↔ IsTop a ∨ ∃ b, a ⋖ b
state_after: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : ¬IsTop a
⊢ 𝓝[>] a = ⊥ ↔ ∃ b, a ⋖ b

tactic: rw [isTop_iff_isMax, not_isMax_iff] at ha
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : ¬IsTop a
⊢ 𝓝[>] a = ⊥ ↔ ∃ b, a ⋖ b
state_after: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : ∃ b, a < b
⊢ 𝓝[>] a = ⊥ ↔ ∃ b, a ⋖ b

tactic: simp only [(nhdsWithin_Ioi_basis' ha).eq_bot_iff, covBy_iff_Ioo_eq]
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : LinearOrder α
inst✝ : OrderTopology α
a : α
ha : ∃ b, a < b
⊢ 𝓝[>] a = ⊥ ↔ ∃ b, a ⋖ b
state_after: no goals
Theorem: Polynomial.rootMultiplicity_X_sub_C
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: split_ifs with hxy
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
⊢ rootMultiplicity x (X - C y) = if x = y then 1 else 0
state_after: case pos
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
hxy : x = y
⊢ rootMultiplicity x (X - C y) = 1

case neg
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
hxy : ¬x = y
⊢ rootMultiplicity x (X - C y) = 0

tactic: exact rootMultiplicity_eq_zero (mt root_X_sub_C.mp (Ne.symm hxy))
state_before: case neg
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
hxy : ¬x = y
⊢ rootMultiplicity x (X - C y) = 0
state_after: no goals

tactic: rw [hxy]
state_before: case pos
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
hxy : x = y
⊢ rootMultiplicity x (X - C y) = 1
state_after: case pos
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
hxy : x = y
⊢ rootMultiplicity y (X - C y) = 1

tactic: exact rootMultiplicity_X_sub_C_self
state_before: case pos
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : Nontrivial R
inst✝ : DecidableEq R
x y : R
hxy : x = y
⊢ rootMultiplicity y (X - C y) = 1
state_after: no goals
Theorem: ZNum.mul_to_int
File: Mathlib/Data/Num/Lemmas.lean

tactic: cases a <;> exact (zero_mul _).symm
state_before: α : Type u_1
a : ZNum
⊢ ↑(0 * a) = ↑0 * ↑a
state_after: no goals

tactic: cases b <;> exact (mul_zero _).symm
state_before: α : Type u_1
b : ZNum
⊢ ↑(b * 0) = ↑b * ↑0
state_after: no goals

tactic: rw [PosNum.cast_mul, neg_mul_eq_mul_neg]
state_before: α : Type u_1
a b : PosNum
⊢ -↑(a * b) = ↑a * -↑b
state_after: no goals

tactic: rw [PosNum.cast_mul, neg_mul_eq_neg_mul]
state_before: α : Type u_1
a b : PosNum
⊢ -↑(a * b) = -↑a * ↑b
state_after: no goals

tactic: rw [PosNum.cast_mul, neg_mul_neg]
state_before: α : Type u_1
a b : PosNum
⊢ ↑(a * b) = -↑a * -↑b
state_after: no goals
Theorem: RingTheory.Sequence.isRegular_cons_iff
File: Mathlib/RingTheory/Regular/RegularSequence.lean

tactic: rw [isRegular_iff, isRegular_iff, isWeaklyRegular_cons_iff M r rs,
  ne_eq, top_eq_ofList_cons_smul_iff, and_assoc]
state_before: R : Type u_1
S : Type u_2
M : Type u_3
M₂ : Type u_4
M₃ : Type u_5
M₄ : Type u_6
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M₂
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : AddCommGroup M₄
inst✝³ : Module R M
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Module R M₄
r : R
rs : List R
⊢ IsRegular M (r :: rs) ↔ IsSMulRegular M r ∧ IsRegular (QuotSMulTop r M) rs
state_after: no goals
Theorem: Complex.sinh_mul_I
File: Mathlib/Data/Complex/Exponential.lean

tactic: rw [← mul_right_inj' (two_ne_zero' ℂ), two_sinh, ← mul_assoc, two_sin, mul_assoc, I_mul_I,
  mul_neg_one, neg_sub, neg_mul_eq_neg_mul]
state_before: x y : ℂ
⊢ sinh (x * I) = sin x * I
state_after: no goals
Theorem: PerfectClosure.eq_iff
File: Mathlib/FieldTheory/PerfectClosure.lean

tactic: simpa only [add_comm, iterate_add] using H
state_before: K : Type u
inst✝³ : CommRing K
inst✝² : IsReduced K
p : ℕ
inst✝¹ : Fact (Nat.Prime p)
inst✝ : CharP K p
x y : ℕ × K
x✝ : ∃ z, (⇑(frobenius K p))^[y.1 + z] x.2 = (⇑(frobenius K p))^[x.1 + z] y.2
z : ℕ
H : (⇑(frobenius K p))^[y.1 + z] x.2 = (⇑(frobenius K p))^[x.1 + z] y.2
⊢ (⇑(frobenius K p))^[z] ((⇑(frobenius K p))^[y.1] x.2) = (⇑(frobenius K p))^[z] ((⇑(frobenius K p))^[x.1] y.2)
state_after: no goals
Theorem: Real.cos_int_mul_two_pi_sub_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: simpa only [cos_zero] using (cos_periodic.int_mul n).sub_antiperiod_eq cos_antiperiodic
state_before: n : ℤ
⊢ cos (↑n * (2 * π) - π) = -1
state_after: no goals
Theorem: Multiset.Rel.add
File: Mathlib/Data/Multiset/Basic.lean

tactic: induction hst with
| zero => simpa using huv
| cons hab hst ih => simpa using ih.cons hab
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
r : α → β → Prop
p : γ → δ → Prop
s : Multiset α
t : Multiset β
u : Multiset α
v : Multiset β
hst : Rel r s t
huv : Rel r u v
⊢ Rel r (s + u) (t + v)
state_after: no goals

tactic: simpa using huv
state_before: case zero
α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
r : α → β → Prop
p : γ → δ → Prop
s : Multiset α
t : Multiset β
u : Multiset α
v : Multiset β
huv : Rel r u v
⊢ Rel r (0 + u) (0 + v)
state_after: no goals

tactic: simpa using ih.cons hab
state_before: case cons
α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
r : α → β → Prop
p : γ → δ → Prop
s : Multiset α
t : Multiset β
u : Multiset α
v : Multiset β
huv : Rel r u v
a✝ : α
b✝ : β
as✝ : Multiset α
bs✝ : Multiset β
hab : r a✝ b✝
hst : Rel r as✝ bs✝
ih : Rel r (as✝ + u) (bs✝ + v)
⊢ Rel r (a✝ ::ₘ as✝ + u) (b✝ ::ₘ bs✝ + v)
state_after: no goals
Theorem: CategoryTheory.Functor.homologySequenceδ_naturality
File: Mathlib/CategoryTheory/Triangulated/HomologicalFunctor.lean

tactic: dsimp only [homologySequenceδ]
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁶ : Category.{u_5, u_1} C
inst✝¹⁵ : HasZeroObject C
inst✝¹⁴ : HasShift C ℤ
inst✝¹³ : Preadditive C
inst✝¹² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹¹ : Pretriangulated C
inst✝¹⁰ : Category.{?u.41363, u_2} D
inst✝⁹ : HasZeroObject D
inst✝⁸ : HasShift D ℤ
inst✝⁷ : Preadditive D
inst✝⁶ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁵ : Pretriangulated D
inst✝⁴ : Category.{u_4, u_3} A
inst✝³ : Abelian A
F : C ⥤ A
inst✝² inst✝¹ : F.IsHomological
inst✝ : F.ShiftSequence ℤ
T T' : Triangle C
hT : T ∈ distinguishedTriangles
hT' : T' ∈ distinguishedTriangles
φ : T ⟶ T'
n₀ n₁ : ℤ
h : n₀ + 1 = n₁
⊢ (F.shift n₀).map φ.hom₃ ≫ F.homologySequenceδ T' n₀ n₁ h = F.homologySequenceδ T n₀ n₁ h ≫ (F.shift n₁).map φ.hom₁
state_after: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁶ : Category.{u_5, u_1} C
inst✝¹⁵ : HasZeroObject C
inst✝¹⁴ : HasShift C ℤ
inst✝¹³ : Preadditive C
inst✝¹² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹¹ : Pretriangulated C
inst✝¹⁰ : Category.{?u.41363, u_2} D
inst✝⁹ : HasZeroObject D
inst✝⁸ : HasShift D ℤ
inst✝⁷ : Preadditive D
inst✝⁶ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁵ : Pretriangulated D
inst✝⁴ : Category.{u_4, u_3} A
inst✝³ : Abelian A
F : C ⥤ A
inst✝² inst✝¹ : F.IsHomological
inst✝ : F.ShiftSequence ℤ
T T' : Triangle C
hT : T ∈ distinguishedTriangles
hT' : T' ∈ distinguishedTriangles
φ : T ⟶ T'
n₀ n₁ : ℤ
h : n₀ + 1 = n₁
⊢ (F.shift n₀).map φ.hom₃ ≫ F.shiftMap T'.mor₃ n₀ n₁ ⋯ = F.shiftMap T.mor₃ n₀ n₁ ⋯ ≫ (F.shift n₁).map φ.hom₁

tactic: rw [← shiftMap_comp', ← φ.comm₃, shiftMap_comp]
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁶ : Category.{u_5, u_1} C
inst✝¹⁵ : HasZeroObject C
inst✝¹⁴ : HasShift C ℤ
inst✝¹³ : Preadditive C
inst✝¹² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹¹ : Pretriangulated C
inst✝¹⁰ : Category.{?u.41363, u_2} D
inst✝⁹ : HasZeroObject D
inst✝⁸ : HasShift D ℤ
inst✝⁷ : Preadditive D
inst✝⁶ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁵ : Pretriangulated D
inst✝⁴ : Category.{u_4, u_3} A
inst✝³ : Abelian A
F : C ⥤ A
inst✝² inst✝¹ : F.IsHomological
inst✝ : F.ShiftSequence ℤ
T T' : Triangle C
hT : T ∈ distinguishedTriangles
hT' : T' ∈ distinguishedTriangles
φ : T ⟶ T'
n₀ n₁ : ℤ
h : n₀ + 1 = n₁
⊢ (F.shift n₀).map φ.hom₃ ≫ F.shiftMap T'.mor₃ n₀ n₁ ⋯ = F.shiftMap T.mor₃ n₀ n₁ ⋯ ≫ (F.shift n₁).map φ.hom₁
state_after: no goals
Theorem: Polynomial.eraseLead_coeff
File: Mathlib/Algebra/Polynomial/EraseLead.lean

tactic: simp only [eraseLead, coeff_erase]
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
⊢ f.eraseLead.coeff i = if i = f.natDegree then 0 else f.coeff i
state_after: no goals
Theorem: mem_circle_iff_normSq
File: Mathlib/Analysis/Complex/Circle.lean

tactic: simp [Complex.abs]
state_before: z : ℂ
⊢ z ∈ circle ↔ normSq z = 1
state_after: no goals
Theorem: Real.inv_sign
File: Mathlib/Data/Real/Sign.lean

tactic: obtain hn | hz | hp := sign_apply_eq r
state_before: r : ℝ
⊢ r.sign⁻¹ = r.sign
state_after: case inl
r : ℝ
hn : r.sign = -1
⊢ r.sign⁻¹ = r.sign

case inr.inl
r : ℝ
hz : r.sign = 0
⊢ r.sign⁻¹ = r.sign

case inr.inr
r : ℝ
hp : r.sign = 1
⊢ r.sign⁻¹ = r.sign

tactic: rw [hn]
state_before: case inl
r : ℝ
hn : r.sign = -1
⊢ r.sign⁻¹ = r.sign
state_after: case inl
r : ℝ
hn : r.sign = -1
⊢ (-1)⁻¹ = -1

tactic: norm_num
state_before: case inl
r : ℝ
hn : r.sign = -1
⊢ (-1)⁻¹ = -1
state_after: no goals

tactic: rw [hz]
state_before: case inr.inl
r : ℝ
hz : r.sign = 0
⊢ r.sign⁻¹ = r.sign
state_after: case inr.inl
r : ℝ
hz : r.sign = 0
⊢ 0⁻¹ = 0

tactic: exact inv_zero
state_before: case inr.inl
r : ℝ
hz : r.sign = 0
⊢ 0⁻¹ = 0
state_after: no goals

tactic: rw [hp]
state_before: case inr.inr
r : ℝ
hp : r.sign = 1
⊢ r.sign⁻¹ = r.sign
state_after: case inr.inr
r : ℝ
hp : r.sign = 1
⊢ 1⁻¹ = 1

tactic: exact inv_one
state_before: case inr.inr
r : ℝ
hp : r.sign = 1
⊢ 1⁻¹ = 1
state_after: no goals
Theorem: CategoryTheory.ComposableArrows.Precomp.map_zero_one
File: Mathlib/CategoryTheory/ComposableArrows.lean

tactic: simp
state_before: C : Type u_1
inst✝ : Category.{?u.96046, u_1} C
n m : ℕ
F G : ComposableArrows C n
X : C
f : X ⟶ F.left
⊢ 0 ≤ 1
state_after: no goals
Theorem: strictConcaveOn_sin_Icc
File: Mathlib/Analysis/Convex/SpecificFunctions/Deriv.lean

tactic: apply strictConcaveOn_of_deriv2_neg (convex_Icc _ _) continuousOn_sin fun x hx => ?_
state_before: ⊢ StrictConcaveOn ℝ (Icc 0 π) sin
state_after: x : ℝ
hx : x ∈ interior (Icc 0 π)
⊢ deriv^[2] sin x < 0

tactic: rw [interior_Icc] at hx
state_before: x : ℝ
hx : x ∈ interior (Icc 0 π)
⊢ deriv^[2] sin x < 0
state_after: x : ℝ
hx : x ∈ Ioo 0 π
⊢ deriv^[2] sin x < 0

tactic: simp [sin_pos_of_mem_Ioo hx]
state_before: x : ℝ
hx : x ∈ Ioo 0 π
⊢ deriv^[2] sin x < 0
state_after: no goals
Theorem: String.revFind_of_valid
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

tactic: simpa using revFindAux_of_valid p s.1.reverse []
state_before: p : Char → Bool
s : String
⊢ s.revFind p = Option.map (fun x => { byteIdx := utf8Len x }) (List.dropWhile (fun x => !p x) s.data.reverse).tail?
state_after: no goals
Theorem: MvQPF.id_map
File: Mathlib/Data/QPF/Multivariate/Basic.lean

tactic: rw [← abs_repr x, ← abs_map]
state_before: n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
α : TypeVec.{u} n
x : F α
⊢ TypeVec.id <$$> x = x
state_after: n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
α : TypeVec.{u} n
x : F α
⊢ abs (TypeVec.id <$$> repr x) = abs (repr x)

tactic: rfl
state_before: n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
α : TypeVec.{u} n
x : F α
⊢ abs (TypeVec.id <$$> repr x) = abs (repr x)
state_after: no goals
Theorem: CategoryTheory.Limits.limitIsoLimitCurryCompLim_inv_π
File: Mathlib/CategoryTheory/Limits/Fubini.lean

tactic: rw [← cancel_epi (limitIsoLimitCurryCompLim G).hom]
state_before: J K : Type v
inst✝⁵ : SmallCategory J
inst✝⁴ : SmallCategory K
C : Type u
inst✝³ : Category.{v, u} C
F : J ⥤ K ⥤ C
G : J × K ⥤ C
inst✝² : HasLimitsOfShape K C
inst✝¹ : HasLimit G
inst✝ : HasLimit (curry.obj G ⋙ lim)
j : J
k : K
⊢ (limitIsoLimitCurryCompLim G).inv ≫ limit.π G (j, k) = limit.π (curry.obj G ⋙ lim) j ≫ limit.π ((curry.obj G).obj j) k
state_after: J K : Type v
inst✝⁵ : SmallCategory J
inst✝⁴ : SmallCategory K
C : Type u
inst✝³ : Category.{v, u} C
F : J ⥤ K ⥤ C
G : J × K ⥤ C
inst✝² : HasLimitsOfShape K C
inst✝¹ : HasLimit G
inst✝ : HasLimit (curry.obj G ⋙ lim)
j : J
k : K
⊢ (limitIsoLimitCurryCompLim G).hom ≫ (limitIsoLimitCurryCompLim G).inv ≫ limit.π G (j, k) =
    (limitIsoLimitCurryCompLim G).hom ≫ limit.π (curry.obj G ⋙ lim) j ≫ limit.π ((curry.obj G).obj j) k

tactic: simp
state_before: J K : Type v
inst✝⁵ : SmallCategory J
inst✝⁴ : SmallCategory K
C : Type u
inst✝³ : Category.{v, u} C
F : J ⥤ K ⥤ C
G : J × K ⥤ C
inst✝² : HasLimitsOfShape K C
inst✝¹ : HasLimit G
inst✝ : HasLimit (curry.obj G ⋙ lim)
j : J
k : K
⊢ (limitIsoLimitCurryCompLim G).hom ≫ (limitIsoLimitCurryCompLim G).inv ≫ limit.π G (j, k) =
    (limitIsoLimitCurryCompLim G).hom ≫ limit.π (curry.obj G ⋙ lim) j ≫ limit.π ((curry.obj G).obj j) k
state_after: no goals
Theorem: Filter.tendsto_mul_const_atBot_iff
File: Mathlib/Order/Filter/AtTopBot.lean

tactic: simp only [mul_comm _ r, tendsto_const_mul_atBot_iff]
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : LinearOrderedField α
l : Filter β
f : β → α
r : α
inst✝ : l.NeBot
⊢ Tendsto (fun x => f x * r) l atBot ↔ 0 < r ∧ Tendsto f l atBot ∨ r < 0 ∧ Tendsto f l atTop
state_after: no goals
Theorem: CategoryTheory.Limits.cokernelIsoOfEq_hom_comp_desc
File: Mathlib/CategoryTheory/Limits/Shapes/Kernels.lean

tactic: simp [h, he]
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f g : X ⟶ Y
inst✝¹ : HasCokernel f
inst✝ : HasCokernel g
h : f = g
e : Y ⟶ Z
he : g ≫ e = 0
⊢ f ≫ e = 0
state_after: no goals

tactic: cases h
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f g : X ⟶ Y
inst✝¹ : HasCokernel f
inst✝ : HasCokernel g
h : f = g
e : Y ⟶ Z
he : g ≫ e = 0
⊢ (cokernelIsoOfEq h).hom ≫ cokernel.desc g e he = cokernel.desc f e ⋯
state_after: case refl
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f : X ⟶ Y
inst✝¹ : HasCokernel f
e : Y ⟶ Z
inst✝ : HasCokernel f
he : f ≫ e = 0
⊢ (cokernelIsoOfEq ⋯).hom ≫ cokernel.desc f e he = cokernel.desc f e ⋯

tactic: simp
state_before: case refl
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f : X ⟶ Y
inst✝¹ : HasCokernel f
e : Y ⟶ Z
inst✝ : HasCokernel f
he : f ≫ e = 0
⊢ (cokernelIsoOfEq ⋯).hom ≫ cokernel.desc f e he = cokernel.desc f e ⋯
state_after: no goals
Theorem: Nat.lcm_mul_left
File: Mathlib/Data/Nat/GCD/Basic.lean

tactic: apply dvd_antisymm
state_before: m n k : ℕ
⊢ (m * n).lcm (m * k) = m * n.lcm k
state_after: case a
m n k : ℕ
⊢ (m * n).lcm (m * k) ∣ m * n.lcm k

case a
m n k : ℕ
⊢ m * n.lcm k ∣ (m * n).lcm (m * k)

tactic: exact lcm_dvd (mul_dvd_mul_left m (dvd_lcm_left n k)) (mul_dvd_mul_left m (dvd_lcm_right n k))
state_before: case a
m n k : ℕ
⊢ (m * n).lcm (m * k) ∣ m * n.lcm k
state_after: no goals

tactic: have h : m ∣ lcm (m * n) (m * k) := (dvd_mul_right m n).trans (dvd_lcm_left (m * n) (m * k))
state_before: case a
m n k : ℕ
⊢ m * n.lcm k ∣ (m * n).lcm (m * k)
state_after: case a
m n k : ℕ
h : m ∣ (m * n).lcm (m * k)
⊢ m * n.lcm k ∣ (m * n).lcm (m * k)

tactic: rw [← dvd_div_iff_mul_dvd h, lcm_dvd_iff, dvd_div_iff_mul_dvd h, dvd_div_iff_mul_dvd h,
  ← lcm_dvd_iff]
state_before: case a
m n k : ℕ
h : m ∣ (m * n).lcm (m * k)
⊢ m * n.lcm k ∣ (m * n).lcm (m * k)
state_after: no goals
Theorem: Complex.Gammaℝ_one
File: Mathlib/Analysis/SpecialFunctions/Gamma/Deligne.lean

tactic: rw [Gammaℝ_def, Complex.Gamma_one_half_eq]
state_before: ⊢ Gammaℝ 1 = 1
state_after: ⊢ ↑π ^ (-1 / 2) * ↑π ^ (1 / 2) = 1

tactic: simp [neg_div, cpow_neg, inv_mul_cancel, pi_ne_zero]
state_before: ⊢ ↑π ^ (-1 / 2) * ↑π ^ (1 / 2) = 1
state_after: no goals
Theorem: Ordinal.nfp_mul_zero
File: Mathlib/SetTheory/Ordinal/FixedPoint.lean

tactic: rw [← Ordinal.le_zero, nfp_le_iff]
state_before: a : Ordinal.{u_1}
⊢ nfp (fun x => a * x) 0 = 0
state_after: a : Ordinal.{u_1}
⊢ ∀ (n : ℕ), (fun x => a * x)^[n] 0 ≤ 0

tactic: intro n
state_before: a : Ordinal.{u_1}
⊢ ∀ (n : ℕ), (fun x => a * x)^[n] 0 ≤ 0
state_after: a : Ordinal.{u_1}
n : ℕ
⊢ (fun x => a * x)^[n] 0 ≤ 0

tactic: induction' n with n hn
state_before: a : Ordinal.{u_1}
n : ℕ
⊢ (fun x => a * x)^[n] 0 ≤ 0
state_after: case zero
a : Ordinal.{u_1}
⊢ (fun x => a * x)^[0] 0 ≤ 0

case succ
a : Ordinal.{u_1}
n : ℕ
hn : (fun x => a * x)^[n] 0 ≤ 0
⊢ (fun x => a * x)^[n + 1] 0 ≤ 0

tactic: rwa [iterate_succ_apply, mul_zero]
state_before: case succ
a : Ordinal.{u_1}
n : ℕ
hn : (fun x => a * x)^[n] 0 ≤ 0
⊢ (fun x => a * x)^[n + 1] 0 ≤ 0
state_after: no goals

tactic: rfl
state_before: case zero
a : Ordinal.{u_1}
⊢ (fun x => a * x)^[0] 0 ≤ 0
state_after: no goals
Theorem: eq_of_mul_inv_eq_one
File: Mathlib/Algebra/Group/Basic.lean

tactic: simpa using eq_inv_of_mul_eq_one_left h
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionMonoid α
a b c d : α
h : a * b⁻¹ = 1
⊢ a = b
state_after: no goals