1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Orientation.oangle_eq_zero_iff_sameRay
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

tactic: rw [oangle, kahler_apply_apply, Complex.arg_coe_angle_eq_iff_eq_toReal, Real.Angle.toReal_zero,
  Complex.arg_eq_zero_iff]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ o.oangle x y = 0 ↔ SameRay ℝ x y
state_after: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ 0 ≤ (↑⟪x, y⟫_ℝ + (o.areaForm x) y • I).re ∧ (↑⟪x, y⟫_ℝ + (o.areaForm x) y • I).im = 0 ↔ SameRay ℝ x y

tactic: simpa using o.nonneg_inner_and_areaForm_eq_zero_iff_sameRay x y
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ 0 ≤ (↑⟪x, y⟫_ℝ + (o.areaForm x) y • I).re ∧ (↑⟪x, y⟫_ℝ + (o.areaForm x) y • I).im = 0 ↔ SameRay ℝ x y
state_after: no goals
Theorem: bit1_injective
File: Mathlib/Algebra/CharZero/Lemmas.lean

tactic: simp only [bit1, add_left_inj] at h
state_before: R : Type u_1
inst✝² : NonAssocRing R
inst✝¹ : NoZeroDivisors R
inst✝ : CharZero R
a b : R
h : bit1 a = bit1 b
⊢ a = b
state_after: R : Type u_1
inst✝² : NonAssocRing R
inst✝¹ : NoZeroDivisors R
inst✝ : CharZero R
a b : R
h : bit0 a = bit0 b
⊢ a = b

tactic: exact bit0_injective h
state_before: R : Type u_1
inst✝² : NonAssocRing R
inst✝¹ : NoZeroDivisors R
inst✝ : CharZero R
a b : R
h : bit0 a = bit0 b
⊢ a = b
state_after: no goals
Theorem: Matrix.det_of_upperTriangular
File: Mathlib/LinearAlgebra/Matrix/Block.lean

tactic: haveI : DecidableEq R := Classical.decEq _
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝⁵ : CommRing R
M N : Matrix m m R
b : m → α
inst✝⁴ : DecidableEq m
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : Fintype n
inst✝ : LinearOrder m
h : M.BlockTriangular id
⊢ M.det = ∏ i : m, M i i
state_after: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝⁵ : CommRing R
M N : Matrix m m R
b : m → α
inst✝⁴ : DecidableEq m
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : Fintype n
inst✝ : LinearOrder m
h : M.BlockTriangular id
this : DecidableEq R
⊢ M.det = ∏ i : m, M i i

tactic: simp_rw [h.det, image_id, det_toSquareBlock_id]
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝⁵ : CommRing R
M N : Matrix m m R
b : m → α
inst✝⁴ : DecidableEq m
inst✝³ : Fintype m
inst✝² : DecidableEq n
inst✝¹ : Fintype n
inst✝ : LinearOrder m
h : M.BlockTriangular id
this : DecidableEq R
⊢ M.det = ∏ i : m, M i i
state_after: no goals
Theorem: Orientation.cos_oangle_sub_left_mul_norm_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: rw [← neg_inj, oangle_rev, ← oangle_neg_orientation_eq_neg, neg_inj] at h ⊢
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ (o.oangle (x - y) x).cos * ‖x - y‖ = ‖x‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ((-o).oangle x (x - y)).cos * ‖x - y‖ = ‖x‖

tactic: exact (-o).cos_oangle_sub_right_mul_norm_of_oangle_eq_pi_div_two h
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ((-o).oangle x (x - y)).cos * ‖x - y‖ = ‖x‖
state_after: no goals
Theorem: HomologicalComplex.homotopyCofiber.d_sndX
File: Mathlib/Algebra/Homology/HomotopyCofiber.lean

tactic: dsimp [d]
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
i j : ι
hij : c.Rel i j
⊢ d φ i j ≫ sndX φ j = fstX φ i j hij ≫ φ.f j + sndX φ i ≫ G.d i j
state_after: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
i j : ι
hij : c.Rel i j
⊢ (if hij : c.Rel i j then
        (if hj : c.Rel j (c.next j) then -fstX φ i j hij ≫ F.d j (c.next j) ≫ inlX φ (c.next j) j hj else 0) +
            fstX φ i j hij ≫ φ.f j ≫ inrX φ j +
          sndX φ i ≫ G.d i j ≫ inrX φ j
      else 0) ≫
      sndX φ j =
    fstX φ i j hij ≫ φ.f j + sndX φ i ≫ G.d i j

tactic: split_ifs with hij <;> simp
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
ι : Type u_2
c : ComplexShape ι
F G K : HomologicalComplex C c
φ : F ⟶ G
inst✝¹ : HasHomotopyCofiber φ
inst✝ : DecidableRel c.Rel
i j : ι
hij : c.Rel i j
⊢ (if hij : c.Rel i j then
        (if hj : c.Rel j (c.next j) then -fstX φ i j hij ≫ F.d j (c.next j) ≫ inlX φ (c.next j) j hj else 0) +
            fstX φ i j hij ≫ φ.f j ≫ inrX φ j +
          sndX φ i ≫ G.d i j ≫ inrX φ j
      else 0) ≫
      sndX φ j =
    fstX φ i j hij ≫ φ.f j + sndX φ i ≫ G.d i j
state_after: no goals
Theorem: Nat.log_eq_of_pow_le_of_lt_pow
File: Mathlib/Data/Nat/Log.lean

tactic: rcases eq_or_ne m 0 with (rfl | hm)
state_before: b m n : ℕ
h₁ : b ^ m ≤ n
h₂ : n < b ^ (m + 1)
⊢ log b n = m
state_after: case inl
b n : ℕ
h₁ : b ^ 0 ≤ n
h₂ : n < b ^ (0 + 1)
⊢ log b n = 0

case inr
b m n : ℕ
h₁ : b ^ m ≤ n
h₂ : n < b ^ (m + 1)
hm : m ≠ 0
⊢ log b n = m

tactic: rw [Nat.pow_one] at h₂
state_before: case inl
b n : ℕ
h₁ : b ^ 0 ≤ n
h₂ : n < b ^ (0 + 1)
⊢ log b n = 0
state_after: case inl
b n : ℕ
h₁ : b ^ 0 ≤ n
h₂ : n < b
⊢ log b n = 0

tactic: exact log_of_lt h₂
state_before: case inl
b n : ℕ
h₁ : b ^ 0 ≤ n
h₂ : n < b
⊢ log b n = 0
state_after: no goals

tactic: exact (log_eq_iff (Or.inl hm)).2 ⟨h₁, h₂⟩
state_before: case inr
b m n : ℕ
h₁ : b ^ m ≤ n
h₂ : n < b ^ (m + 1)
hm : m ≠ 0
⊢ log b n = m
state_after: no goals
Theorem: CategoryTheory.isSeparator_op_iff
File: Mathlib/CategoryTheory/Generator.lean

tactic: rw [IsSeparator, IsCoseparator, ← isSeparating_op_iff, Set.singleton_op]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
⊢ IsSeparator { unop := G } ↔ IsCoseparator G
state_after: no goals
Theorem: Real.continuousAt_rpow_of_ne
File: Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean

tactic: rw [ne_iff_lt_or_gt] at hp
state_before: p : ℝ × ℝ
hp : p.1 ≠ 0
⊢ ContinuousAt (fun p => p.1 ^ p.2) p
state_after: p : ℝ × ℝ
hp : p.1 < 0 ∨ p.1 > 0
⊢ ContinuousAt (fun p => p.1 ^ p.2) p

tactic: rw [continuousAt_congr (rpow_eq_nhds_of_neg hp)]
state_before: case inl
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun p => p.1 ^ p.2) p
state_after: case inl
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => rexp (log x.1 * x.2) * cos (x.2 * π)) p

tactic: refine ContinuousAt.mul ?_ (continuous_cos.continuousAt.comp ?_)
state_before: case inl
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => rexp (log x.1 * x.2) * cos (x.2 * π)) p
state_after: case inl.refine_1
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => rexp (log x.1 * x.2)) p

case inl.refine_2
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => x.2 * π) p

tactic: refine continuous_exp.continuousAt.comp (ContinuousAt.mul ?_ continuous_snd.continuousAt)
state_before: case inl.refine_1
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => rexp (log x.1 * x.2)) p
state_after: case inl.refine_1
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => log x.1) p

tactic: refine (continuousAt_log ?_).comp continuous_fst.continuousAt
state_before: case inl.refine_1
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => log x.1) p
state_after: case inl.refine_1
p : ℝ × ℝ
hp : p.1 < 0
⊢ p.1 ≠ 0

tactic: exact hp.ne
state_before: case inl.refine_1
p : ℝ × ℝ
hp : p.1 < 0
⊢ p.1 ≠ 0
state_after: no goals

tactic: exact continuous_snd.continuousAt.mul continuousAt_const
state_before: case inl.refine_2
p : ℝ × ℝ
hp : p.1 < 0
⊢ ContinuousAt (fun x => x.2 * π) p
state_after: no goals

tactic: rw [continuousAt_congr (rpow_eq_nhds_of_pos hp)]
state_before: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ ContinuousAt (fun p => p.1 ^ p.2) p
state_after: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ ContinuousAt (fun x => rexp (log x.1 * x.2)) p

tactic: refine continuous_exp.continuousAt.comp (ContinuousAt.mul ?_ continuous_snd.continuousAt)
state_before: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ ContinuousAt (fun x => rexp (log x.1 * x.2)) p
state_after: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ ContinuousAt (fun x => log x.1) p

tactic: refine (continuousAt_log ?_).comp continuous_fst.continuousAt
state_before: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ ContinuousAt (fun x => log x.1) p
state_after: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ p.1 ≠ 0

tactic: exact hp.lt.ne.symm
state_before: case inr
p : ℝ × ℝ
hp : p.1 > 0
⊢ p.1 ≠ 0
state_after: no goals
Theorem: BoxIntegral.Box.iUnion_coe_splitCenterBox
File: Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean

tactic: ext x
state_before: ι : Type u_1
I✝ J I : Box ι
⊢ ⋃ s, ↑(I.splitCenterBox s) = ↑I
state_after: case h
ι : Type u_1
I✝ J I : Box ι
x : ι → ℝ
⊢ x ∈ ⋃ s, ↑(I.splitCenterBox s) ↔ x ∈ ↑I

tactic: simp
state_before: case h
ι : Type u_1
I✝ J I : Box ι
x : ι → ℝ
⊢ x ∈ ⋃ s, ↑(I.splitCenterBox s) ↔ x ∈ ↑I
state_after: no goals
Theorem: Filter.frequently_atTop
File: Mathlib/Order/Filter/AtTopBot.lean

tactic: simp
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : SemilatticeSup α
inst✝ : Nonempty α
p : α → Prop
⊢ (∀ (i : α), True → ∃ x ∈ Ici i, p x) ↔ ∀ (a : α), ∃ b ≥ a, p b
state_after: no goals
Theorem: TensorProduct.finsuppScalarLeft_apply_tmul_apply
File: Mathlib/LinearAlgebra/DirectSum/Finsupp.lean

tactic: simp [finsuppScalarLeft]
state_before: R : Type u_1
inst✝⁹ : CommSemiring R
M : Type u_2
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
N : Type u_3
inst✝⁶ : AddCommMonoid N
inst✝⁵ : Module R N
ι : Type u_4
inst✝⁴ : DecidableEq ι
S : Type u_5
inst✝³ : CommSemiring S
inst✝² : Algebra R S
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
p : ι →₀ R
n : N
i : ι
⊢ ((finsuppScalarLeft R N ι) (p ⊗ₜ[R] n)) i = p i • n
state_after: no goals
Theorem: Turing.PartrecToTM2.codeSupp'_self
File: Mathlib/Computability/TMToPartrec.lean

tactic: cases c <;> first | rfl | exact Finset.union_subset_left (fun _ a ↦ a)
state_before: c : Code
k : Cont'
⊢ trStmts₁ (trNormal c k) ⊆ codeSupp' c k
state_after: no goals

tactic: rfl
state_before: case tail
k : Cont'
⊢ trStmts₁ (trNormal Code.tail k) ⊆ codeSupp' Code.tail k
state_after: no goals

tactic: exact Finset.union_subset_left (fun _ a ↦ a)
state_before: case fix
k : Cont'
a✝ : Code
⊢ trStmts₁ (trNormal a✝.fix k) ⊆ codeSupp' a✝.fix k
state_after: no goals
Theorem: edist_eq_coe_nnnorm_div
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: rw [edist_dist, dist_eq_norm_div, ofReal_norm_eq_coe_nnnorm']
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝³ : SeminormedGroup E
inst✝² : SeminormedGroup F
inst✝¹ : SeminormedGroup G
s : Set E
a✝ a₁ a₂ b✝ b₁ b₂ : E
r r₁ r₂ : ℝ
inst✝ : FunLike 𝓕 E F
a b : E
⊢ edist a b = ↑‖a / b‖₊
state_after: no goals
Theorem: Finsupp.zipWith_neLocus_eq_right
File: Mathlib/Data/Finsupp/NeLocus.lean

tactic: ext
state_before: α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq M
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f₁ f₂ : α →₀ M
g : α →₀ N
hF : ∀ (g : N), Function.Injective fun f => F f g
⊢ (zipWith F F0 f₁ g).neLocus (zipWith F F0 f₂ g) = f₁.neLocus f₂
state_after: case a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq M
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f₁ f₂ : α →₀ M
g : α →₀ N
hF : ∀ (g : N), Function.Injective fun f => F f g
a✝ : α
⊢ a✝ ∈ (zipWith F F0 f₁ g).neLocus (zipWith F F0 f₂ g) ↔ a✝ ∈ f₁.neLocus f₂

tactic: simpa only [mem_neLocus] using (hF _).ne_iff
state_before: case a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq M
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f₁ f₂ : α →₀ M
g : α →₀ N
hF : ∀ (g : N), Function.Injective fun f => F f g
a✝ : α
⊢ a✝ ∈ (zipWith F F0 f₁ g).neLocus (zipWith F F0 f₂ g) ↔ a✝ ∈ f₁.neLocus f₂
state_after: no goals
Theorem: Nat.mem_factoredNumbers_iff_forall_le
File: Mathlib/NumberTheory/SmoothNumbers.lean

tactic: simp_rw [mem_factoredNumbers, mem_factors']
state_before: s : Finset ℕ
m : ℕ
⊢ m ∈ factoredNumbers s ↔ m ≠ 0 ∧ ∀ p ≤ m, Prime p → p ∣ m → p ∈ s
state_after: s : Finset ℕ
m : ℕ
⊢ (m ≠ 0 ∧ ∀ (p : ℕ), Prime p ∧ p ∣ m ∧ m ≠ 0 → p ∈ s) ↔ m ≠ 0 ∧ ∀ p ≤ m, Prime p → p ∣ m → p ∈ s

tactic: exact ⟨fun ⟨H₀, H₁⟩ ↦ ⟨H₀, fun p _ hp₂ hp₃ ↦ H₁ p ⟨hp₂, hp₃, H₀⟩⟩,
  fun ⟨H₀, H₁⟩ ↦
    ⟨H₀, fun p ⟨hp₁, hp₂, hp₃⟩ ↦ H₁ p (le_of_dvd (Nat.pos_of_ne_zero hp₃) hp₂) hp₁ hp₂⟩⟩
state_before: s : Finset ℕ
m : ℕ
⊢ (m ≠ 0 ∧ ∀ (p : ℕ), Prime p ∧ p ∣ m ∧ m ≠ 0 → p ∈ s) ↔ m ≠ 0 ∧ ∀ p ≤ m, Prime p → p ∣ m → p ∈ s
state_after: no goals
Theorem: MeasureTheory.SignedMeasure.rnDeriv_sub
File: Mathlib/MeasureTheory/Decomposition/SignedLebesgue.lean

tactic: rw [sub_eq_add_neg] at hst
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s✝ t✝ s t : SignedMeasure α
μ : Measure α
inst✝¹ : s.HaveLebesgueDecomposition μ
inst✝ : t.HaveLebesgueDecomposition μ
hst : (s - t).HaveLebesgueDecomposition μ
⊢ (s - t).rnDeriv μ =ᶠ[ae μ] s.rnDeriv μ - t.rnDeriv μ
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s✝ t✝ s t : SignedMeasure α
μ : Measure α
inst✝¹ : s.HaveLebesgueDecomposition μ
inst✝ : t.HaveLebesgueDecomposition μ
hst : (s + -t).HaveLebesgueDecomposition μ
⊢ (s - t).rnDeriv μ =ᶠ[ae μ] s.rnDeriv μ - t.rnDeriv μ

tactic: rw [sub_eq_add_neg, sub_eq_add_neg]
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s✝ t✝ s t : SignedMeasure α
μ : Measure α
inst✝¹ : s.HaveLebesgueDecomposition μ
inst✝ : t.HaveLebesgueDecomposition μ
hst : (s + -t).HaveLebesgueDecomposition μ
⊢ (s - t).rnDeriv μ =ᶠ[ae μ] s.rnDeriv μ - t.rnDeriv μ
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s✝ t✝ s t : SignedMeasure α
μ : Measure α
inst✝¹ : s.HaveLebesgueDecomposition μ
inst✝ : t.HaveLebesgueDecomposition μ
hst : (s + -t).HaveLebesgueDecomposition μ
⊢ (s + -t).rnDeriv μ =ᶠ[ae μ] s.rnDeriv μ + -t.rnDeriv μ

tactic: exact ae_eq_trans (rnDeriv_add _ _ _) (Filter.EventuallyEq.add (ae_eq_refl _) (rnDeriv_neg _ _))
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s✝ t✝ s t : SignedMeasure α
μ : Measure α
inst✝¹ : s.HaveLebesgueDecomposition μ
inst✝ : t.HaveLebesgueDecomposition μ
hst : (s + -t).HaveLebesgueDecomposition μ
⊢ (s + -t).rnDeriv μ =ᶠ[ae μ] s.rnDeriv μ + -t.rnDeriv μ
state_after: no goals
Theorem: Class.coe_sUnion
File: Mathlib/SetTheory/ZFC/Basic.lean

tactic: rfl
state_before: x y : ZFSet
⊢ (∃ z, ↑x z ∧ y ∈ z) ↔ ∃ z ∈ x, y ∈ z
state_after: no goals
Theorem: Doset.right_bot_eq_right_quot
File: Mathlib/GroupTheory/DoubleCoset.lean

tactic: unfold Quotient
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
⊢ Quotient ↑H.toSubmonoid ↑⊥ = _root_.Quotient (QuotientGroup.rightRel H)
state_after: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
⊢ _root_.Quotient (setoid ↑H.toSubmonoid ↑⊥) = _root_.Quotient (QuotientGroup.rightRel H)

tactic: congr
state_before: G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
⊢ _root_.Quotient (setoid ↑H.toSubmonoid ↑⊥) = _root_.Quotient (QuotientGroup.rightRel H)
state_after: case e_s
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
⊢ setoid ↑H.toSubmonoid ↑⊥ = QuotientGroup.rightRel H

tactic: ext
state_before: case e_s
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
⊢ setoid ↑H.toSubmonoid ↑⊥ = QuotientGroup.rightRel H
state_after: case e_s.H
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
a✝ b✝ : G
⊢ (setoid ↑H.toSubmonoid ↑⊥).Rel a✝ b✝ ↔ (QuotientGroup.rightRel H).Rel a✝ b✝

tactic: simp_rw [← rel_bot_eq_right_group_rel H]
state_before: case e_s.H
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
a✝ b✝ : G
⊢ (setoid ↑H.toSubmonoid ↑⊥).Rel a✝ b✝ ↔ (QuotientGroup.rightRel H).Rel a✝ b✝
state_after: case e_s.H
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
a✝ b✝ : G
⊢ (setoid ↑H.toSubmonoid ↑⊥).Rel a✝ b✝ ↔ (setoid ↑H ↑⊥).Rel a✝ b✝

tactic: rfl
state_before: case e_s.H
G : Type u_1
inst✝¹ : Group G
α : Type u_2
inst✝ : Mul α
J : Subgroup G
g : G
H : Subgroup G
a✝ b✝ : G
⊢ (setoid ↑H.toSubmonoid ↑⊥).Rel a✝ b✝ ↔ (setoid ↑H ↑⊥).Rel a✝ b✝
state_after: no goals
Theorem: Mathlib.Tactic.Abel.term_add_termg
File: Mathlib/Tactic/Abel.lean

tactic: simp only [termg, h₁.symm, add_zsmul, h₂.symm]
state_before: α : Type u_1
inst✝ : AddCommGroup α
n₁ : ℤ
x a₁ : α
n₂ : ℤ
a₂ : α
n' : ℤ
a' : α
h₁ : n₁ + n₂ = n'
h₂ : a₁ + a₂ = a'
⊢ termg n₁ x a₁ + termg n₂ x a₂ = termg n' x a'
state_after: α : Type u_1
inst✝ : AddCommGroup α
n₁ : ℤ
x a₁ : α
n₂ : ℤ
a₂ : α
n' : ℤ
a' : α
h₁ : n₁ + n₂ = n'
h₂ : a₁ + a₂ = a'
⊢ n₁ • x + a₁ + (n₂ • x + a₂) = n₁ • x + n₂ • x + (a₁ + a₂)

tactic: exact add_add_add_comm (n₁ • x) a₁ (n₂ • x) a₂
state_before: α : Type u_1
inst✝ : AddCommGroup α
n₁ : ℤ
x a₁ : α
n₂ : ℤ
a₂ : α
n' : ℤ
a' : α
h₁ : n₁ + n₂ = n'
h₂ : a₁ + a₂ = a'
⊢ n₁ • x + a₁ + (n₂ • x + a₂) = n₁ • x + n₂ • x + (a₁ + a₂)
state_after: no goals
Theorem: Submonoid.LocalizationMap.map_mul_left
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [mul_comm, f.map_mul_right]
state_before: M : Type u_1
inst✝³ : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝² : CommMonoid N
P : Type u_3
inst✝¹ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
T : Submonoid P
hy : ∀ (y : ↥S), g ↑y ∈ T
Q : Type u_4
inst✝ : CommMonoid Q
k : T.LocalizationMap Q
z : N
⊢ k.toMap (g ↑(f.sec z).2) * (f.map hy k) z = k.toMap (g (f.sec z).1)
state_after: no goals
Theorem: Matrix.cons_mul
File: Mathlib/Data/Matrix/Notation.lean

tactic: ext i j
state_before: α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
⊢ of (vecCons v A) * B = of (vecCons (v ᵥ* B) (of.symm (of A * B)))
state_after: case a
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
i : Fin m.succ
j : o'
⊢ (of (vecCons v A) * B) i j = of (vecCons (v ᵥ* B) (of.symm (of A * B))) i j

tactic: refine Fin.cases ?_ ?_ i
state_before: case a
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
i : Fin m.succ
j : o'
⊢ (of (vecCons v A) * B) i j = of (vecCons (v ᵥ* B) (of.symm (of A * B))) i j
state_after: case a.refine_1
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
i : Fin m.succ
j : o'
⊢ (of (vecCons v A) * B) 0 j = of (vecCons (v ᵥ* B) (of.symm (of A * B))) 0 j

case a.refine_2
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
i : Fin m.succ
j : o'
⊢ ∀ (i : Fin m), (of (vecCons v A) * B) i.succ j = of (vecCons (v ᵥ* B) (of.symm (of A * B))) i.succ j

tactic: simp [mul_val_succ]
state_before: case a.refine_2
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
i : Fin m.succ
j : o'
⊢ ∀ (i : Fin m), (of (vecCons v A) * B) i.succ j = of (vecCons (v ᵥ* B) (of.symm (of A * B))) i.succ j
state_after: no goals

tactic: rfl
state_before: case a.refine_1
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : NonUnitalNonAssocSemiring α
inst✝ : Fintype n'
v : n' → α
A : Fin m → n' → α
B : Matrix n' o' α
i : Fin m.succ
j : o'
⊢ (of (vecCons v A) * B) 0 j = of (vecCons (v ᵥ* B) (of.symm (of A * B))) 0 j
state_after: no goals
Theorem: Matrix.dotProduct_diagonal'
File: Mathlib/Data/Matrix/Basic.lean

tactic: have : ∀ j ≠ i, v j * diagonal w j i = 0 := fun j hij => by
  simp [diagonal_apply_ne _ hij]
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝³ : Fintype m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i : m
⊢ (v ⬝ᵥ fun j => diagonal w j i) = v i * w i
state_after: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝³ : Fintype m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i : m
this : ∀ (j : m), j ≠ i → v j * diagonal w j i = 0
⊢ (v ⬝ᵥ fun j => diagonal w j i) = v i * w i

tactic: convert Finset.sum_eq_single i (fun j _ => this j) _ using 1 <;> simp
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝³ : Fintype m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i : m
this : ∀ (j : m), j ≠ i → v j * diagonal w j i = 0
⊢ (v ⬝ᵥ fun j => diagonal w j i) = v i * w i
state_after: no goals

tactic: simp [diagonal_apply_ne _ hij]
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝³ : Fintype m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i j : m
hij : j ≠ i
⊢ v j * diagonal w j i = 0
state_after: no goals