1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: FiniteDimensional.rank_linearMap
File: Mathlib/LinearAlgebra/FreeModule/Finite/Matrix.lean

tactic: rw [(linearMapEquivFun R S M N).rank_eq, rank_fun_eq_lift_mul,
  ← finrank_eq_card_chooseBasisIndex, ← finrank_eq_rank R, lift_natCast]
state_before: R : Type u
S : Type u'
M : Type v
N : Type w
inst✝¹² : Ring R
inst✝¹¹ : Ring S
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
inst✝⁸ : Module.Free R M
inst✝⁷ : Module.Finite R M
inst✝⁶ : AddCommGroup N
inst✝⁵ : Module R N
inst✝⁴ : Module S N
inst✝³ : SMulCommClass R S N
inst✝² : StrongRankCondition R
inst✝¹ : StrongRankCondition S
inst✝ : Module.Free S N
⊢ Module.rank S (M →ₗ[R] N) = lift.{w, v} (Module.rank R M) * lift.{v, w} (Module.rank S N)
state_after: no goals
Theorem: SimpleGraph.Walk.isEulerian_iff
File: Mathlib/Combinatorics/SimpleGraph/Trails.lean

tactic: constructor
state_before: V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
⊢ p.IsEulerian ↔ p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges
state_after: case mp
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
⊢ p.IsEulerian → p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges

case mpr
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
⊢ (p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges) → p.IsEulerian

tactic: intro h
state_before: case mp
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
⊢ p.IsEulerian → p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges
state_after: case mp
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
h : p.IsEulerian
⊢ p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges

tactic: exact ⟨h.isTrail, fun _ => h.mem_edges_iff.mpr⟩
state_before: case mp
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
h : p.IsEulerian
⊢ p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges
state_after: no goals

tactic: rintro ⟨h, hl⟩
state_before: case mpr
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
⊢ (p.IsTrail ∧ ∀ e ∈ G.edgeSet, e ∈ p.edges) → p.IsEulerian
state_after: case mpr.intro
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
h : p.IsTrail
hl : ∀ e ∈ G.edgeSet, e ∈ p.edges
⊢ p.IsEulerian

tactic: exact h.isEulerian_of_forall_mem hl
state_before: case mpr.intro
V : Type u_1
G : SimpleGraph V
inst✝ : DecidableEq V
u v : V
p : G.Walk u v
h : p.IsTrail
hl : ∀ e ∈ G.edgeSet, e ∈ p.edges
⊢ p.IsEulerian
state_after: no goals
Theorem: SimpleGraph.deleteEdges_deleteEdges
File: Mathlib/Combinatorics/SimpleGraph/Basic.lean

tactic: simp [deleteEdges, sdiff_sdiff]
state_before: ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v w : V
e : Sym2 V
H : SimpleGraph V
s✝ s₁ s₂ s s' : Set (Sym2 V)
⊢ (G.deleteEdges s).deleteEdges s' = G.deleteEdges (s ∪ s')
state_after: no goals
Theorem: Polynomial.not_separable_zero
File: Mathlib/FieldTheory/Separable.lean

tactic: rintro ⟨x, y, h⟩
state_before: R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial R
⊢ ¬Separable 0
state_after: case intro.intro
R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial R
x y : R[X]
h : x * 0 + y * derivative 0 = 1
⊢ False

tactic: simp only [derivative_zero, mul_zero, add_zero, zero_ne_one] at h
state_before: case intro.intro
R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial R
x y : R[X]
h : x * 0 + y * derivative 0 = 1
⊢ False
state_after: no goals
Theorem: List.bagInter_nil_iff_inter_nil
File: Mathlib/Data/List/Lattice.lean

tactic: simp
state_before: α : Type u_1
l l₁ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
l₂ : List α
⊢ [].bagInter l₂ = [] ↔ [] ∩ l₂ = []
state_after: no goals

tactic: by_cases h : b ∈ l₂ <;> simp [h]
state_before: α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
⊢ (b :: l₁).bagInter l₂ = [] ↔ (b :: l₁) ∩ l₂ = []
state_after: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ l₁.bagInter l₂ = [] ↔ l₁ ∩ l₂ = []

tactic: exact bagInter_nil_iff_inter_nil l₁ l₂
state_before: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ l₁.bagInter l₂ = [] ↔ l₁ ∩ l₂ = []
state_after: no goals
Theorem: Multiset.disjoint_finset_sum_right
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: simpa only [disjoint_comm] using disjoint_finset_sum_left
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β✝ : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a✝ : α
f✝ g : α → β✝
β : Type u_6
i : Finset β
f : β → Multiset α
a : Multiset α
⊢ a.Disjoint (i.sum f) ↔ ∀ b ∈ i, a.Disjoint (f b)
state_after: no goals
Theorem: Fin.prod_univ_add
File: Mathlib/Algebra/BigOperators/Fin.lean

tactic: rw [Fintype.prod_equiv finSumFinEquiv.symm f fun i => f (finSumFinEquiv.toFun i)]
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
⊢ ∏ i : Fin (a + b), f i = (∏ i : Fin a, f (castAdd b i)) * ∏ i : Fin b, f (natAdd a i)
state_after: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
⊢ ∏ x : Fin a ⊕ Fin b, f (finSumFinEquiv.toFun x) = (∏ i : Fin a, f (castAdd b i)) * ∏ i : Fin b, f (natAdd a i)

α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
⊢ ∀ (x : Fin (a + b)), f x = f (finSumFinEquiv.toFun (finSumFinEquiv.symm x))

tactic: apply Fintype.prod_sum_type
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
⊢ ∏ x : Fin a ⊕ Fin b, f (finSumFinEquiv.toFun x) = (∏ i : Fin a, f (castAdd b i)) * ∏ i : Fin b, f (natAdd a i)
state_after: no goals

tactic: intro x
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
⊢ ∀ (x : Fin (a + b)), f x = f (finSumFinEquiv.toFun (finSumFinEquiv.symm x))
state_after: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
x : Fin (a + b)
⊢ f x = f (finSumFinEquiv.toFun (finSumFinEquiv.symm x))

tactic: simp only [Equiv.toFun_as_coe, Equiv.apply_symm_apply]
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
x : Fin (a + b)
⊢ f x = f (finSumFinEquiv.toFun (finSumFinEquiv.symm x))
state_after: no goals
Theorem: MeasureTheory.lintegral_one
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

tactic: rw [lintegral_const, one_mul]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
⊢ ∫⁻ (x : α), 1 ∂μ = μ univ
state_after: no goals
Theorem: List.getElem?_ofFn
File: Mathlib/Data/List/OfFn.lean

tactic: rw [getElem?_eq_getElem h, getElem_ofFn]
state_before: α : Type u
n : ℕ
f : Fin n → α
i : ℕ
h : i < (ofFn f).length
⊢ (ofFn f)[i]? = ofFnNthVal f i
state_after: α : Type u
n : ℕ
f : Fin n → α
i : ℕ
h : i < (ofFn f).length
⊢ some (f ⟨i, ⋯⟩) = ofFnNthVal f i

tactic: simp only [length_ofFn] at h
state_before: α : Type u
n : ℕ
f : Fin n → α
i : ℕ
h : i < (ofFn f).length
⊢ some (f ⟨i, ⋯⟩) = ofFnNthVal f i
state_after: α : Type u
n : ℕ
f : Fin n → α
i : ℕ
h✝ : i < (ofFn f).length
h : i < n
⊢ some (f ⟨i, ⋯⟩) = ofFnNthVal f i

tactic: simp [ofFnNthVal, h]
state_before: α : Type u
n : ℕ
f : Fin n → α
i : ℕ
h✝ : i < (ofFn f).length
h : i < n
⊢ some (f ⟨i, ⋯⟩) = ofFnNthVal f i
state_after: no goals

tactic: rw [ofFnNthVal, dif_neg] <;>
simpa using h
state_before: α : Type u
n : ℕ
f : Fin n → α
i : ℕ
h : ¬i < (ofFn f).length
⊢ (ofFn f)[i]? = ofFnNthVal f i
state_after: no goals
Theorem: CategoryTheory.transferNatTransSelf_id
File: Mathlib/CategoryTheory/Adjunction/Mates.lean

tactic: ext
state_before: C : Type u₁
D : Type u₂
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
⊢ (transferNatTransSelf adj₁ adj₁) (𝟙 L₁) = 𝟙 R₁
state_after: case w.h
C : Type u₁
D : Type u₂
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
x✝ : D
⊢ ((transferNatTransSelf adj₁ adj₁) (𝟙 L₁)).app x✝ = (𝟙 R₁).app x✝

tactic: dsimp [transferNatTransSelf, transferNatTrans]
state_before: case w.h
C : Type u₁
D : Type u₂
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
x✝ : D
⊢ ((transferNatTransSelf adj₁ adj₁) (𝟙 L₁)).app x✝ = (𝟙 R₁).app x✝
state_after: case w.h
C : Type u₁
D : Type u₂
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
x✝ : D
⊢ 𝟙 (R₁.obj x✝) ≫
      (adj₁.unit.app (R₁.obj x✝) ≫
          R₁.map ((𝟙 (L₁.obj (R₁.obj x✝)) ≫ 𝟙 (L₁.obj (R₁.obj x✝)) ≫ 𝟙 (L₁.obj (R₁.obj x✝))) ≫ adj₁.counit.app x✝)) ≫
        𝟙 (R₁.obj x✝) =
    𝟙 (R₁.obj x✝)

tactic: simp
state_before: case w.h
C : Type u₁
D : Type u₂
inst✝¹ : Category.{v₁, u₁} C
inst✝ : Category.{v₂, u₂} D
L₁ L₂ L₃ : C ⥤ D
R₁ R₂ R₃ : D ⥤ C
adj₁ : L₁ ⊣ R₁
adj₂ : L₂ ⊣ R₂
adj₃ : L₃ ⊣ R₃
x✝ : D
⊢ 𝟙 (R₁.obj x✝) ≫
      (adj₁.unit.app (R₁.obj x✝) ≫
          R₁.map ((𝟙 (L₁.obj (R₁.obj x✝)) ≫ 𝟙 (L₁.obj (R₁.obj x✝)) ≫ 𝟙 (L₁.obj (R₁.obj x✝))) ≫ adj₁.counit.app x✝)) ≫
        𝟙 (R₁.obj x✝) =
    𝟙 (R₁.obj x✝)
state_after: no goals
Theorem: CategoryTheory.GrothendieckTopology.W_iff_isLocallyBijective
File: Mathlib/CategoryTheory/Sites/LocallyBijective.lean

tactic: apply WEqualsLocallyBijective.iff
state_before: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
A : Type u'
inst✝² : Category.{v', u'} A
inst✝¹ : ConcreteCategory A
inst✝ : J.WEqualsLocallyBijective A
X Y : Cᵒᵖ ⥤ A
f : X ⟶ Y
⊢ J.W f ↔ Presheaf.IsLocallyInjective J f ∧ Presheaf.IsLocallySurjective J f
state_after: no goals
Theorem: isLittleO_zpow_exp_pos_mul_atTop
File: Mathlib/Analysis/SpecialFunctions/Pow/Asymptotics.lean

tactic: simpa only [Real.rpow_intCast] using isLittleO_rpow_exp_pos_mul_atTop k hb
state_before: k : ℤ
b : ℝ
hb : 0 < b
⊢ (fun x => x ^ k) =o[atTop] fun x => rexp (b * x)
state_after: no goals
Theorem: nhdsWithin_eq_nhdsWithin'
File: Mathlib/Topology/ContinuousOn.lean

tactic: rw [nhdsWithin_restrict' t hs, nhdsWithin_restrict' u hs, h₂]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : TopologicalSpace α
a : α
s t u : Set α
hs : s ∈ 𝓝 a
h₂ : t ∩ s = u ∩ s
⊢ 𝓝[t] a = 𝓝[u] a
state_after: no goals
Theorem: Submodule.map₂_iSup_left
File: Mathlib/Algebra/Module/Submodule/Bilinear.lean

tactic: suffices map₂ f (⨆ i, span R (s i : Set M)) (span R t) = ⨆ i, map₂ f (span R (s i)) (span R t) by
  simpa only [span_eq] using this
state_before: ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
⊢ map₂ f (⨆ i, s i) t = ⨆ i, map₂ f (s i) t
state_after: ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
⊢ map₂ f (⨆ i, span R ↑(s i)) (span R ↑t) = ⨆ i, map₂ f (span R ↑(s i)) (span R ↑t)

tactic: simp_rw [map₂_span_span, ← span_iUnion, map₂_span_span, Set.image2_iUnion_left]
state_before: ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
⊢ map₂ f (⨆ i, span R ↑(s i)) (span R ↑t) = ⨆ i, map₂ f (span R ↑(s i)) (span R ↑t)
state_after: no goals

tactic: simpa only [span_eq] using this
state_before: ι : Sort uι
R : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid N
inst✝³ : AddCommMonoid P
inst✝² : Module R M
inst✝¹ : Module R N
inst✝ : Module R P
f : M →ₗ[R] N →ₗ[R] P
s : ι → Submodule R M
t : Submodule R N
this : map₂ f (⨆ i, span R ↑(s i)) (span R ↑t) = ⨆ i, map₂ f (span R ↑(s i)) (span R ↑t)
⊢ map₂ f (⨆ i, s i) t = ⨆ i, map₂ f (s i) t
state_after: no goals
Theorem: Orientation.rotation_neg_orientation_eq_neg
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: simp [rotation_apply]
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)
θ : Real.Angle
⊢ ∀ (x : V), ((-o).rotation θ) x = (o.rotation (-θ)) x
state_after: no goals
Theorem: Subtype.preconnectedSpace
File: Mathlib/Topology/Connected/Basic.lean

tactic: rwa [← inducing_subtype_val.isPreconnected_image, image_univ, Subtype.range_val]
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝ : TopologicalSpace α
s✝ t u v s : Set α
h : IsPreconnected s
⊢ IsPreconnected univ
state_after: no goals
Theorem: min_mul_distrib
File: Mathlib/Algebra/Order/Monoid/Canonical/Defs.lean

tactic: rcases le_total a b with hb | hb
state_before: α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
⊢ min a (b * c) = min a (min a b * min a c)
state_after: case inl
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : a ≤ b
⊢ min a (b * c) = min a (min a b * min a c)

case inr
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : b ≤ a
⊢ min a (b * c) = min a (min a b * min a c)

tactic: simp [hb, le_mul_right]
state_before: case inl
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : a ≤ b
⊢ min a (b * c) = min a (min a b * min a c)
state_after: no goals

tactic: rcases le_total a c with hc | hc
state_before: case inr
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : b ≤ a
⊢ min a (b * c) = min a (min a b * min a c)
state_after: case inr.inl
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : b ≤ a
hc : a ≤ c
⊢ min a (b * c) = min a (min a b * min a c)

case inr.inr
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : b ≤ a
hc : c ≤ a
⊢ min a (b * c) = min a (min a b * min a c)

tactic: simp [hc, le_mul_left]
state_before: case inr.inl
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : b ≤ a
hc : a ≤ c
⊢ min a (b * c) = min a (min a b * min a c)
state_after: no goals

tactic: simp [hb, hc]
state_before: case inr.inr
α : Type u
inst✝ : CanonicallyLinearOrderedCommMonoid α
a b c : α
hb : b ≤ a
hc : c ≤ a
⊢ min a (b * c) = min a (min a b * min a c)
state_after: no goals
Theorem: Cardinal.mul_lt_of_lt
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: rw [mul_eq_self h]
state_before: a b c : Cardinal.{u_1}
hc : ℵ₀ ≤ c
h1 : a < c
h2 : b < c
h : ℵ₀ ≤ max a b
⊢ max a b * max a b < c
state_after: a b c : Cardinal.{u_1}
hc : ℵ₀ ≤ c
h1 : a < c
h2 : b < c
h : ℵ₀ ≤ max a b
⊢ max a b < c

tactic: exact max_lt h1 h2
state_before: a b c : Cardinal.{u_1}
hc : ℵ₀ ≤ c
h1 : a < c
h2 : b < c
h : ℵ₀ ≤ max a b
⊢ max a b < c
state_after: no goals
Theorem: Finset.image_mul_right'
File: Mathlib/Data/Finset/Pointwise.lean

tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq β
inst✝³ : Group α
inst✝² : DivisionMonoid β
inst✝¹ : FunLike F α β
inst✝ : MonoidHomClass F α β
f : F
s t : Finset α
a b : α
⊢ image (fun x => x * b⁻¹) t = t.preimage (fun x => x * b) ⋯
state_after: no goals
Theorem: EuclideanGeometry.collinear_iff_eq_or_eq_or_sin_eq_zero
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Affine.lean

tactic: rw [sin_eq_zero_iff_angle_eq_zero_or_angle_eq_pi,
  collinear_iff_eq_or_eq_or_angle_eq_zero_or_angle_eq_pi]
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁✝ p₂✝ p₁ p₂ p₃ : P
⊢ Collinear ℝ {p₁, p₂, p₃} ↔ p₁ = p₂ ∨ p₃ = p₂ ∨ sin (∠ p₁ p₂ p₃) = 0
state_after: no goals
Theorem: toIocMod_add_zsmul'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: simp only [toIocMod, toIocDiv_add_zsmul', sub_smul, sub_add]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ toIocMod hp (a + m • p) b = toIocMod hp a b + m • p
state_after: no goals
Theorem: Multipliable.tprod_vanishing
File: Mathlib/Topology/Algebra/InfiniteSum/Group.lean

tactic: classical
letI : UniformSpace G := TopologicalGroup.toUniformSpace G
have : UniformGroup G := comm_topologicalGroup_is_uniform
exact cauchySeq_finset_iff_tprod_vanishing.1 hf.hasProd.cauchySeq e he
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
G : Type u_5
inst✝² : TopologicalSpace G
inst✝¹ : CommGroup G
inst✝ : TopologicalGroup G
f : α → G
hf : Multipliable f
e : Set G
he : e ∈ 𝓝 1
⊢ ∃ s, ∀ (t : Set α), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e
state_after: no goals

tactic: letI : UniformSpace G := TopologicalGroup.toUniformSpace G
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
G : Type u_5
inst✝² : TopologicalSpace G
inst✝¹ : CommGroup G
inst✝ : TopologicalGroup G
f : α → G
hf : Multipliable f
e : Set G
he : e ∈ 𝓝 1
⊢ ∃ s, ∀ (t : Set α), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
G : Type u_5
inst✝² : TopologicalSpace G
inst✝¹ : CommGroup G
inst✝ : TopologicalGroup G
f : α → G
hf : Multipliable f
e : Set G
he : e ∈ 𝓝 1
this : UniformSpace G := TopologicalGroup.toUniformSpace G
⊢ ∃ s, ∀ (t : Set α), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e

tactic: have : UniformGroup G := comm_topologicalGroup_is_uniform
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
G : Type u_5
inst✝² : TopologicalSpace G
inst✝¹ : CommGroup G
inst✝ : TopologicalGroup G
f : α → G
hf : Multipliable f
e : Set G
he : e ∈ 𝓝 1
this : UniformSpace G := TopologicalGroup.toUniformSpace G
⊢ ∃ s, ∀ (t : Set α), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
G : Type u_5
inst✝² : TopologicalSpace G
inst✝¹ : CommGroup G
inst✝ : TopologicalGroup G
f : α → G
hf : Multipliable f
e : Set G
he : e ∈ 𝓝 1
this✝ : UniformSpace G := TopologicalGroup.toUniformSpace G
this : UniformGroup G
⊢ ∃ s, ∀ (t : Set α), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e

tactic: exact cauchySeq_finset_iff_tprod_vanishing.1 hf.hasProd.cauchySeq e he
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
G : Type u_5
inst✝² : TopologicalSpace G
inst✝¹ : CommGroup G
inst✝ : TopologicalGroup G
f : α → G
hf : Multipliable f
e : Set G
he : e ∈ 𝓝 1
this✝ : UniformSpace G := TopologicalGroup.toUniformSpace G
this : UniformGroup G
⊢ ∃ s, ∀ (t : Set α), Disjoint t ↑s → ∏' (b : ↑t), f ↑b ∈ e
state_after: no goals
Theorem: Batteries.RBNode.DelProp.redred
File: .lake/packages/batteries/Batteries/Data/RBMap/WF.lean

tactic: unfold DelProp at h
state_before: c : RBColor
α✝ : Type u_1
t : RBNode α✝
n : Nat
h : DelProp c t n
⊢ ∃ n', RedRed (c = black) t n'
state_after: c : RBColor
α✝ : Type u_1
t : RBNode α✝
n : Nat
h :
  match c with
  | black => ∃ n', n = n' + 1 ∧ RedRed True t n'
  | red => ∃ c, t.Balanced c n
⊢ ∃ n', RedRed (c = black) t n'

tactic: exact match c, h with
| red, ⟨_, h⟩ => ⟨_, .balanced h⟩
| black, ⟨_, _, h⟩ => ⟨_, h.imp fun _ => rfl⟩
state_before: c : RBColor
α✝ : Type u_1
t : RBNode α✝
n : Nat
h :
  match c with
  | black => ∃ n', n = n' + 1 ∧ RedRed True t n'
  | red => ∃ c, t.Balanced c n
⊢ ∃ n', RedRed (c = black) t n'
state_after: no goals
Theorem: Finset.union_sdiff_symm
File: Mathlib/Data/Finset/Basic.lean

tactic: simp [union_comm]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a b : α
⊢ s ∪ t \ s = t ∪ s \ t
state_after: no goals
Theorem: Set.preimage_mul_preimage_subset
File: Mathlib/Data/Set/Pointwise/Basic.lean

tactic: rintro _ ⟨_, _, _, _, rfl⟩
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : Mul α
inst✝² : Mul β
inst✝¹ : FunLike F α β
inst✝ : MulHomClass F α β
m : F
s✝ t✝ : Set α
s t : Set β
⊢ ⇑m ⁻¹' s * ⇑m ⁻¹' t ⊆ ⇑m ⁻¹' (s * t)
state_after: case intro.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : Mul α
inst✝² : Mul β
inst✝¹ : FunLike F α β
inst✝ : MulHomClass F α β
m : F
s✝ t✝ : Set α
s t : Set β
w✝¹ : α
left✝¹ : w✝¹ ∈ ⇑m ⁻¹' s
w✝ : α
left✝ : w✝ ∈ ⇑m ⁻¹' t
⊢ (fun x x_1 => x * x_1) w✝¹ w✝ ∈ ⇑m ⁻¹' (s * t)

tactic: exact ⟨_, ‹_›, _, ‹_›, (map_mul m _ _).symm⟩
state_before: case intro.intro.intro.intro
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : Mul α
inst✝² : Mul β
inst✝¹ : FunLike F α β
inst✝ : MulHomClass F α β
m : F
s✝ t✝ : Set α
s t : Set β
w✝¹ : α
left✝¹ : w✝¹ ∈ ⇑m ⁻¹' s
w✝ : α
left✝ : w✝ ∈ ⇑m ⁻¹' t
⊢ (fun x x_1 => x * x_1) w✝¹ w✝ ∈ ⇑m ⁻¹' (s * t)
state_after: no goals
Theorem: Polynomial.leadingCoeff_X_add_C
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: rw [← pow_one (X : S[X]), leadingCoeff_X_pow_add_C zero_lt_one]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝¹ : Semiring R
inst✝ : Semiring S
r : S
⊢ (X + C r).leadingCoeff = 1
state_after: no goals
Theorem: CategoryTheory.obj_μ_app
File: Mathlib/CategoryTheory/Monoidal/End.lean

tactic: rw [← associativity_app_assoc]
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μ m₁ m₂).app X) =
    (F.μ m₂ m₃).app ((F.obj m₁).obj X) ≫
      (F.μ m₁ (m₂ ⊗ m₃)).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μ m₁ m₂).app X) =
    (F.obj m₃).map ((F.μ m₁ m₂).app X) ≫
      (F.μ (m₁ ⊗ m₂) m₃).app X ≫
        (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X

tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m₁ m₂ m₃ : M
X : C
⊢ (F.obj m₃).map ((F.μ m₁ m₂).app X) =
    (F.obj m₃).map ((F.μ m₁ m₂).app X) ≫
      (F.μ (m₁ ⊗ m₂) m₃).app X ≫
        (F.map (α_ m₁ m₂ m₃).hom).app X ≫ (F.map (α_ m₁ m₂ m₃).inv).app X ≫ (F.μIso (m₁ ⊗ m₂) m₃).inv.app X
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.id_tensor_associator_inv_naturality
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: rw [← tensor_id, associator_inv_naturality]
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V W X✝ Y✝ Z✝ X Y Z X' : C
f : X ⟶ X'
⊢ (f ⊗ 𝟙 (Y ⊗ Z)) ≫ (α_ X' Y Z).inv = (α_ X Y Z).inv ≫ ((f ⊗ 𝟙 Y) ⊗ 𝟙 Z)
state_after: no goals
Theorem: MeasureTheory.Lp.toLp_coeFn
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 : ↥(Lp E p μ)
hf : Memℒp (↑↑f) p μ
⊢ Memℒp.toLp (↑↑f) hf = f
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
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
hf : Memℒp (↑↑⟨val✝, property✝⟩) p μ
⊢ Memℒp.toLp (↑↑⟨val✝, property✝⟩) hf = ⟨val✝, property✝⟩

tactic: simp [Memℒp.toLp]
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
val✝ : α →ₘ[μ] E
property✝ : val✝ ∈ Lp E p μ
hf : Memℒp (↑↑⟨val✝, property✝⟩) p μ
⊢ Memℒp.toLp (↑↑⟨val✝, property✝⟩) hf = ⟨val✝, property✝⟩
state_after: no goals