1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: orthogonalProjection_eq_zero_iff
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: refine ⟨fun h ↦ ?_, fun h ↦ Subtype.eq <| eq_orthogonalProjection_of_mem_orthogonal
  (zero_mem _) ?_⟩
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
⊢ (orthogonalProjection K) v = 0 ↔ v ∈ Kᗮ
state_after: case refine_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : (orthogonalProjection K) v = 0
⊢ v ∈ Kᗮ

case refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : v ∈ Kᗮ
⊢ v - ↑0 ∈ Kᗮ

tactic: simpa [h] using sub_orthogonalProjection_mem_orthogonal (K := K) v
state_before: case refine_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : (orthogonalProjection K) v = 0
⊢ v ∈ Kᗮ
state_after: no goals

tactic: simpa
state_before: case refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
h : v ∈ Kᗮ
⊢ v - ↑0 ∈ Kᗮ
state_after: no goals
Theorem: Ordinal.natCast_sub
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: rcases le_total m n with h | h
state_before: m n : ℕ
⊢ ↑(m - n) = ↑m - ↑n
state_after: case inl
m n : ℕ
h : m ≤ n
⊢ ↑(m - n) = ↑m - ↑n

case inr
m n : ℕ
h : n ≤ m
⊢ ↑(m - n) = ↑m - ↑n

tactic: rw [tsub_eq_zero_iff_le.2 h, Ordinal.sub_eq_zero_iff_le.2 (natCast_le.2 h)]
state_before: case inl
m n : ℕ
h : m ≤ n
⊢ ↑(m - n) = ↑m - ↑n
state_after: case inl
m n : ℕ
h : m ≤ n
⊢ ↑0 = 0

tactic: rfl
state_before: case inl
m n : ℕ
h : m ≤ n
⊢ ↑0 = 0
state_after: no goals

tactic: apply (add_left_cancel n).1
state_before: case inr
m n : ℕ
h : n ≤ m
⊢ ↑(m - n) = ↑m - ↑n
state_after: case inr
m n : ℕ
h : n ≤ m
⊢ ↑n + ↑(m - n) = ↑n + (↑m - ↑n)

tactic: rw [← Nat.cast_add, add_tsub_cancel_of_le h, Ordinal.add_sub_cancel_of_le (natCast_le.2 h)]
state_before: case inr
m n : ℕ
h : n ≤ m
⊢ ↑n + ↑(m - n) = ↑n + (↑m - ↑n)
state_after: no goals
Theorem: Batteries.UnionFind.equiv_union
File: .lake/packages/batteries/Batteries/Data/UnionFind/Lemmas.lean

tactic: simp [union]
state_before: a b : Nat
self : UnionFind
x y : Fin self.size
⊢ (self.union x y).Equiv a b ↔
    self.Equiv a b ∨ self.Equiv a ↑x ∧ self.Equiv (↑y) b ∨ self.Equiv a ↑y ∧ self.Equiv (↑x) b
state_after: a b : Nat
self : UnionFind
x y : Fin self.size
⊢ (((self.find x).fst.find ⟨↑y, ⋯⟩).fst.link ⟨self.rootD ↑x, ⋯⟩ ((self.find x).fst.find ⟨↑y, ⋯⟩).2.val ⋯).Equiv a b ↔
    self.Equiv a b ∨ self.Equiv a ↑x ∧ self.Equiv (↑y) b ∨ self.Equiv a ↑y ∧ self.Equiv (↑x) b

tactic: rw [equiv_link (by simp [← rootD_eq_self, rootD_rootD])]
state_before: a b : Nat
self : UnionFind
x y : Fin self.size
⊢ (((self.find x).fst.find ⟨↑y, ⋯⟩).fst.link ⟨self.rootD ↑x, ⋯⟩ ((self.find x).fst.find ⟨↑y, ⋯⟩).2.val ⋯).Equiv a b ↔
    self.Equiv a b ∨ self.Equiv a ↑x ∧ self.Equiv (↑y) b ∨ self.Equiv a ↑y ∧ self.Equiv (↑x) b
state_after: a b : Nat
self : UnionFind
x y : Fin self.size
⊢ ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv a b ∨
      ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv a ↑⟨self.rootD ↑x, ⋯⟩ ∧
          ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv (↑((self.find x).fst.find ⟨↑y, ⋯⟩).2.val) b ∨
        ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv a ↑((self.find x).fst.find ⟨↑y, ⋯⟩).2.val ∧
          ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv (↑⟨self.rootD ↑x, ⋯⟩) b ↔
    self.Equiv a b ∨ self.Equiv a ↑x ∧ self.Equiv (↑y) b ∨ self.Equiv a ↑y ∧ self.Equiv (↑x) b

tactic: simp [equiv_find]
state_before: a b : Nat
self : UnionFind
x y : Fin self.size
⊢ ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv a b ∨
      ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv a ↑⟨self.rootD ↑x, ⋯⟩ ∧
          ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv (↑((self.find x).fst.find ⟨↑y, ⋯⟩).2.val) b ∨
        ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv a ↑((self.find x).fst.find ⟨↑y, ⋯⟩).2.val ∧
          ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.Equiv (↑⟨self.rootD ↑x, ⋯⟩) b ↔
    self.Equiv a b ∨ self.Equiv a ↑x ∧ self.Equiv (↑y) b ∨ self.Equiv a ↑y ∧ self.Equiv (↑x) b
state_after: no goals

tactic: simp [← rootD_eq_self, rootD_rootD]
state_before: a b : Nat
self : UnionFind
x y : Fin self.size
⊢ ((self.find x).fst.find ⟨↑y, ⋯⟩).fst.parent ↑⟨self.rootD ↑x, ⋯⟩ = ↑⟨self.rootD ↑x, ⋯⟩
state_after: no goals
Theorem: Matrix.PosDef.add_posSemidef
File: Mathlib/LinearAlgebra/Matrix/PosDef.lean

tactic: rw [add_mulVec, dotProduct_add]
state_before: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A B : Matrix m m R
hA : A.PosDef
hB : B.PosSemidef
x : m → R
hx : x ≠ 0
⊢ 0 < star x ⬝ᵥ (A + B) *ᵥ x
state_after: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A B : Matrix m m R
hA : A.PosDef
hB : B.PosSemidef
x : m → R
hx : x ≠ 0
⊢ 0 < star x ⬝ᵥ A *ᵥ x + star x ⬝ᵥ B *ᵥ x

tactic: exact add_pos_of_pos_of_nonneg (hA.2 x hx) (hB.2 x)
state_before: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A B : Matrix m m R
hA : A.PosDef
hB : B.PosSemidef
x : m → R
hx : x ≠ 0
⊢ 0 < star x ⬝ᵥ A *ᵥ x + star x ⬝ᵥ B *ᵥ x
state_after: no goals
Theorem: MeasurableSet.image_of_continuousOn_injOn
File: Mathlib/MeasureTheory/Constructions/Polish.lean

tactic: obtain ⟨t', t't, t'_polish, s_closed, _⟩ :
    ∃ t' : TopologicalSpace γ, t' ≤ tγ ∧ @PolishSpace γ t' ∧ IsClosed[t'] s ∧ IsOpen[t'] s :=
  hs.isClopenable
state_before: α✝ : Type u_1
ι : Type u_2
γ : Type u_3
α : Type u_4
β : Type u_5
tβ : TopologicalSpace β
inst✝⁶ : T2Space β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace α
s : Set γ
f : γ → β
inst✝³ : OpensMeasurableSpace β
tγ : TopologicalSpace γ
inst✝² : PolishSpace γ
inst✝¹ : MeasurableSpace γ
inst✝ : BorelSpace γ
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
⊢ MeasurableSet (f '' s)
state_after: case intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
γ : Type u_3
α : Type u_4
β : Type u_5
tβ : TopologicalSpace β
inst✝⁶ : T2Space β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace α
s : Set γ
f : γ → β
inst✝³ : OpensMeasurableSpace β
tγ : TopologicalSpace γ
inst✝² : PolishSpace γ
inst✝¹ : MeasurableSpace γ
inst✝ : BorelSpace γ
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
⊢ MeasurableSet (f '' s)

tactic: exact
  @IsClosed.measurableSet_image_of_continuousOn_injOn γ t' t'_polish β _ _ _ _ s s_closed f
    (f_cont.mono_dom t't) f_inj
state_before: case intro.intro.intro.intro
α✝ : Type u_1
ι : Type u_2
γ : Type u_3
α : Type u_4
β : Type u_5
tβ : TopologicalSpace β
inst✝⁶ : T2Space β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace α
s : Set γ
f : γ → β
inst✝³ : OpensMeasurableSpace β
tγ : TopologicalSpace γ
inst✝² : PolishSpace γ
inst✝¹ : MeasurableSpace γ
inst✝ : BorelSpace γ
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
t' : TopologicalSpace γ
t't : t' ≤ tγ
t'_polish : PolishSpace γ
s_closed : IsClosed s
right✝ : IsOpen s
⊢ MeasurableSet (f '' s)
state_after: no goals
Theorem: Finmap.mem_replace
File: Mathlib/Data/Finmap.lean

tactic: simp
state_before: α : Type u
β : α → Type v
inst✝ : DecidableEq α
a a' : α
b : β a
s✝ : Finmap β
s : AList β
⊢ a' ∈ replace a b ⟦s⟧ ↔ a' ∈ ⟦s⟧
state_after: no goals
Theorem: Polynomial.eval₂_mul'
File: Mathlib/Algebra/Polynomial/Eval.lean

tactic: exact eval₂_mul_noncomm _ _ fun k => Algebra.commute_algebraMap_left (coeff q k) x
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : CommSemiring R
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p q : R[X]
⊢ eval₂ (algebraMap R S) x (p * q) = eval₂ (algebraMap R S) x p * eval₂ (algebraMap R S) x q
state_after: no goals
Theorem: RelSeries.head_tail
File: Mathlib/Order/RelSeries.lean

tactic: show p (Fin.succ _) = p 1
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ (p.tail len_pos).head = p.toFun 1
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ p.toFun (Fin.cast ⋯ 0).succ = p.toFun 1

tactic: congr
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ p.toFun (Fin.cast ⋯ 0).succ = p.toFun 1
state_after: case e_a
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ (Fin.cast ⋯ 0).succ = 1

tactic: ext
state_before: case e_a
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ (Fin.cast ⋯ 0).succ = 1
state_after: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ ↑(Fin.cast ⋯ 0).succ = ↑1

tactic: show (1 : ℕ) = (1 : ℕ) % _
state_before: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ ↑(Fin.cast ⋯ 0).succ = ↑1
state_after: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ 1 = 1 % (p.length + 1)

tactic: rw [Nat.mod_eq_of_lt]
state_before: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ 1 = 1 % (p.length + 1)
state_after: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ 1 < p.length + 1

tactic: simpa only [lt_add_iff_pos_left, Nat.pos_iff_ne_zero]
state_before: case e_a.h
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p : RelSeries r
len_pos : p.length ≠ 0
⊢ 1 < p.length + 1
state_after: no goals
Theorem: CochainComplex.mkHom_f_succ_succ
File: Mathlib/Algebra/Homology/HomologicalComplex.lean

tactic: dsimp [mkHom, mkHomAux]
state_before: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : HasZeroMorphisms V
P Q : CochainComplex V ℕ
zero : P.X 0 ⟶ Q.X 0
one : P.X 1 ⟶ Q.X 1
one_zero_comm : zero ≫ Q.d 0 1 = P.d 0 1 ≫ one
succ :
  (n : ℕ) →
    (p : (f : P.X n ⟶ Q.X n) ×' (f' : P.X (n + 1) ⟶ Q.X (n + 1)) ×' f ≫ Q.d n (n + 1) = P.d n (n + 1) ≫ f') →
      (f'' : P.X (n + 2) ⟶ Q.X (n + 2)) ×' p.snd.fst ≫ Q.d (n + 1) (n + 2) = P.d (n + 1) (n + 2) ≫ f''
n : ℕ
⊢ (P.mkHom Q zero one one_zero_comm succ).f (n + 2) =
    (succ n ⟨(P.mkHom Q zero one one_zero_comm succ).f n, ⟨(P.mkHom Q zero one one_zero_comm succ).f (n + 1), ⋯⟩⟩).fst
state_after: no goals
Theorem: HomologicalComplex.eq_liftCycles_homologyπ_up_to_refinements
File: Mathlib/Algebra/Homology/Refinements.lean

tactic: subst hj
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
K : HomologicalComplex C c
A : C
i : ι
γ : A ⟶ K.homology i
j : ι
hj : c.next i = j
⊢ ∃ A' π, ∃ (_ : Epi π), ∃ z, ∃ (hz : z ≫ K.d i j = 0), π ≫ γ = K.liftCycles z j hj hz ≫ K.homologyπ i
state_after: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
K : HomologicalComplex C c
A : C
i : ι
γ : A ⟶ K.homology i
⊢ ∃ A' π, ∃ (_ : Epi π), ∃ z, ∃ (hz : z ≫ K.d i (c.next i) = 0), π ≫ γ = K.liftCycles z (c.next i) ⋯ hz ≫ K.homologyπ i

tactic: exact (K.sc i).eq_liftCycles_homologyπ_up_to_refinements γ
state_before: C : Type u_1
ι : Type u_2
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
c : ComplexShape ι
K : HomologicalComplex C c
A : C
i : ι
γ : A ⟶ K.homology i
⊢ ∃ A' π, ∃ (_ : Epi π), ∃ z, ∃ (hz : z ≫ K.d i (c.next i) = 0), π ≫ γ = K.liftCycles z (c.next i) ⋯ hz ≫ K.homologyπ i
state_after: no goals
Theorem: Basis.flag_le_ker_coord
File: Mathlib/LinearAlgebra/Basis/Flag.lean

tactic: nontriviality R
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
n : ℕ
b : Basis (Fin n) R M
k : Fin (n + 1)
l : Fin n
h : k ≤ l.castSucc
⊢ b.flag k ≤ LinearMap.ker (b.coord l)
state_after: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
n : ℕ
b : Basis (Fin n) R M
k : Fin (n + 1)
l : Fin n
h : k ≤ l.castSucc
a✝ : Nontrivial R
⊢ b.flag k ≤ LinearMap.ker (b.coord l)

tactic: exact b.flag_le_ker_coord_iff.2 h
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
n : ℕ
b : Basis (Fin n) R M
k : Fin (n + 1)
l : Fin n
h : k ≤ l.castSucc
a✝ : Nontrivial R
⊢ b.flag k ≤ LinearMap.ker (b.coord l)
state_after: no goals
Theorem: PEquiv.self_trans_symm
File: Mathlib/Data/PEquiv.lean

tactic: ext
state_before: α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
⊢ f.trans f.symm = ofSet {a | (f a).isSome = true}
state_after: case h.a
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ a✝ ∈ (f.trans f.symm) x✝ ↔ a✝ ∈ (ofSet {a | (f a).isSome = true}) x✝

tactic: dsimp [PEquiv.trans]
state_before: case h.a
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ a✝ ∈ (f.trans f.symm) x✝ ↔ a✝ ∈ (ofSet {a | (f a).isSome = true}) x✝
state_after: case h.a
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ a✝ ∈ (f x✝).bind ⇑f.symm ↔ a✝ ∈ (ofSet {a | (f a).isSome = true}) x✝

tactic: simp only [eq_some_iff f, Option.isSome_iff_exists, Option.mem_def, bind_eq_some',
  ofSet_eq_some_iff]
state_before: case h.a
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ a✝ ∈ (f x✝).bind ⇑f.symm ↔ a✝ ∈ (ofSet {a | (f a).isSome = true}) x✝
state_after: case h.a
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ (∃ a, f x✝ = some a ∧ f a✝ = some a) ↔ a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1}

tactic: constructor
state_before: case h.a
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ (∃ a, f x✝ = some a ∧ f a✝ = some a) ↔ a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1}
state_after: case h.a.mp
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ (∃ a, f x✝ = some a ∧ f a✝ = some a) → a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1}

case h.a.mpr
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1} → ∃ a, f x✝ = some a ∧ f a✝ = some a

tactic: rintro ⟨b, hb₁, hb₂⟩
state_before: case h.a.mp
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ (∃ a, f x✝ = some a ∧ f a✝ = some a) → a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1}
state_after: case h.a.mp.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
b : β
hb₁ : f x✝ = some b
hb₂ : f a✝ = some b
⊢ a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1}

tactic: exact ⟨PEquiv.inj _ hb₂ hb₁, b, hb₂⟩
state_before: case h.a.mp.intro.intro
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
b : β
hb₁ : f x✝ = some b
hb₂ : f a✝ = some b
⊢ a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1}
state_after: no goals

tactic: simp (config := { contextual := true })
state_before: case h.a.mpr
α : Type u
β : Type v
γ : Type w
δ : Type x
f : α ≃. β
x✝ a✝ : α
⊢ a✝ = x✝ ∧ a✝ ∈ {a | ∃ a_1, f a = some a_1} → ∃ a, f x✝ = some a ∧ f a✝ = some a
state_after: no goals
Theorem: MeasureTheory.Measure.compProd_congr
File: Mathlib/Probability/Kernel/MeasureCompProd.lean

tactic: ext s hs
state_before: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
⊢ μ ⊗ₘ κ = μ ⊗ₘ η
state_after: case h
α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
s : Set (α × β)
hs : MeasurableSet s
⊢ (μ ⊗ₘ κ) s = (μ ⊗ₘ η) s

tactic: have : (fun a ↦ κ a (Prod.mk a ⁻¹' s)) =ᵐ[μ] fun a ↦ η a (Prod.mk a ⁻¹' s) := by
  filter_upwards [h] with a ha using by rw [ha]
state_before: case h
α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
s : Set (α × β)
hs : MeasurableSet s
⊢ (μ ⊗ₘ κ) s = (μ ⊗ₘ η) s
state_after: case h
α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
s : Set (α × β)
hs : MeasurableSet s
this : (fun a => (κ a) (Prod.mk a ⁻¹' s)) =ᶠ[ae μ] fun a => (η a) (Prod.mk a ⁻¹' s)
⊢ (μ ⊗ₘ κ) s = (μ ⊗ₘ η) s

tactic: rw [compProd_apply hs, lintegral_congr_ae this, compProd_apply hs]
state_before: case h
α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
s : Set (α × β)
hs : MeasurableSet s
this : (fun a => (κ a) (Prod.mk a ⁻¹' s)) =ᶠ[ae μ] fun a => (η a) (Prod.mk a ⁻¹' s)
⊢ (μ ⊗ₘ κ) s = (μ ⊗ₘ η) s
state_after: no goals

tactic: filter_upwards [h] with a ha using by rw [ha]
state_before: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
s : Set (α × β)
hs : MeasurableSet s
⊢ (fun a => (κ a) (Prod.mk a ⁻¹' s)) =ᶠ[ae μ] fun a => (η a) (Prod.mk a ⁻¹' s)
state_after: no goals

tactic: rw [ha]
state_before: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
μ : Measure α
κ η : ↥(kernel α β)
inst✝² : SFinite μ
inst✝¹ : IsSFiniteKernel κ
inst✝ : IsSFiniteKernel η
h : ⇑κ =ᶠ[ae μ] ⇑η
s : Set (α × β)
hs : MeasurableSet s
a : α
ha : κ a = η a
⊢ (κ a) (Prod.mk a ⁻¹' s) = (η a) (Prod.mk a ⁻¹' s)
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.prodMonoidal_rightUnitor_inv_fst
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: cases X
state_before: C : Type u
𝒞 : Category.{v, u} C
inst✝⁴ : MonoidalCategory C
C₁ : Type u₁
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : MonoidalCategory C₁
C₂ : Type u₂
inst✝¹ : Category.{v₂, u₂} C₂
inst✝ : MonoidalCategory C₂
X : C₁ × C₂
⊢ (ρ_ X).inv.1 = (ρ_ X.1).inv
state_after: case mk
C : Type u
𝒞 : Category.{v, u} C
inst✝⁴ : MonoidalCategory C
C₁ : Type u₁
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : MonoidalCategory C₁
C₂ : Type u₂
inst✝¹ : Category.{v₂, u₂} C₂
inst✝ : MonoidalCategory C₂
fst✝ : C₁
snd✝ : C₂
⊢ (ρ_ (fst✝, snd✝)).inv.1 = (ρ_ (fst✝, snd✝).1).inv

tactic: rfl
state_before: case mk
C : Type u
𝒞 : Category.{v, u} C
inst✝⁴ : MonoidalCategory C
C₁ : Type u₁
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : MonoidalCategory C₁
C₂ : Type u₂
inst✝¹ : Category.{v₂, u₂} C₂
inst✝ : MonoidalCategory C₂
fst✝ : C₁
snd✝ : C₂
⊢ (ρ_ (fst✝, snd✝)).inv.1 = (ρ_ (fst✝, snd✝).1).inv
state_after: no goals
Theorem: HurwitzZeta.sinZeta_eq
File: Mathlib/NumberTheory/LSeries/HurwitzZeta.lean

tactic: rw [expZeta, expZeta, cosZeta_neg, sinZeta_neg]
state_before: a : UnitAddCircle
s : ℂ
⊢ sinZeta a s = (expZeta a s - expZeta (-a) s) / (2 * I)
state_after: a : UnitAddCircle
s : ℂ
⊢ sinZeta a s = (cosZeta a s + I * sinZeta a s - (cosZeta a s + I * -sinZeta a s)) / (2 * I)

tactic: field_simp
state_before: a : UnitAddCircle
s : ℂ
⊢ sinZeta a s = (cosZeta a s + I * sinZeta a s - (cosZeta a s + I * -sinZeta a s)) / (2 * I)
state_after: a : UnitAddCircle
s : ℂ
⊢ sinZeta a s * (2 * I) = I * sinZeta a s + I * sinZeta a s

tactic: ring_nf
state_before: a : UnitAddCircle
s : ℂ
⊢ sinZeta a s * (2 * I) = I * sinZeta a s + I * sinZeta a s
state_after: no goals
Theorem: Set.preimage_eq_preimage
File: Mathlib/Data/Set/Image.lean

tactic: rw [← image_preimage_eq s hf, ← image_preimage_eq t hf, eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : α → β
s t : Set α
f : β → α
hf : Surjective f
eq : f ⁻¹' s = f ⁻¹' t
⊢ s = t
state_after: no goals
Theorem: CategoryTheory.Limits.biprod.symmetry
File: Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

tactic: simp
state_before: J : Type w
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
D : Type uD
inst✝² : Category.{uD', uD} D
inst✝¹ : HasZeroMorphisms D
P✝ Q✝ : C
inst✝ : HasBinaryBiproducts C
P Q : C
⊢ (braiding P Q).hom ≫ (braiding Q P).hom = 𝟙 (P ⊞ Q)
state_after: no goals
Theorem: CstarRing.mul_star_self_eq_zero_iff
File: Mathlib/Analysis/NormedSpace/Star/Basic.lean

tactic: simpa only [star_eq_zero, star_star] using @star_mul_self_eq_zero_iff _ _ _ _ (star x)
state_before: 𝕜 : Type u_1
E : Type u_2
α : Type u_3
inst✝² : NonUnitalNormedRing E
inst✝¹ : StarRing E
inst✝ : CstarRing E
x : E
⊢ x * x⋆ = 0 ↔ x = 0
state_after: no goals
Theorem: innerDualCone_eq_iInter_innerDualCone_singleton
File: Mathlib/Analysis/Convex/Cone/InnerDual.lean

tactic: rw [← ConvexCone.coe_iInf, ← innerDualCone_iUnion, iUnion_of_singleton_coe]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹ : NormedAddCommGroup H
inst✝ : InnerProductSpace ℝ H
s t : Set H
⊢ ↑s.innerDualCone = ⋂ i, ↑{↑i}.innerDualCone
state_after: no goals
Theorem: Quotient.mk_eq_iff_out
File: Mathlib/Data/Quot.lean

tactic: refine Iff.trans ?_ Quotient.eq
state_before: α : Sort u_1
β : Sort u_2
s : Setoid α
x : α
y : Quotient s
⊢ ⟦x⟧ = y ↔ x ≈ y.out
state_after: α : Sort u_1
β : Sort u_2
s : Setoid α
x : α
y : Quotient s
⊢ ⟦x⟧ = y ↔ ⟦x⟧ = ⟦y.out⟧

tactic: rw [Quotient.out_eq y]
state_before: α : Sort u_1
β : Sort u_2
s : Setoid α
x : α
y : Quotient s
⊢ ⟦x⟧ = y ↔ ⟦x⟧ = ⟦y.out⟧
state_after: no goals
Theorem: Ideal.IsHomogeneous.bot
File: Mathlib/RingTheory/GradedAlgebra/HomogeneousIdeal.lean

tactic: simp only [Ideal.mem_bot] at hr
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
i : ι
r : A
hr : r ∈ ⊥
⊢ ↑(((decompose 𝒜) r) i) ∈ ⊥
state_after: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
i : ι
r : A
hr : r = 0
⊢ ↑(((decompose 𝒜) r) i) ∈ ⊥

tactic: rw [hr, decompose_zero, zero_apply]
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
i : ι
r : A
hr : r = 0
⊢ ↑(((decompose 𝒜) r) i) ∈ ⊥
state_after: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
i : ι
r : A
hr : r = 0
⊢ ↑0 ∈ ⊥

tactic: apply Ideal.zero_mem
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
i : ι
r : A
hr : r = 0
⊢ ↑0 ∈ ⊥
state_after: no goals