1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.Presheaf.equalizerSieve_eq_top_iff
File: Mathlib/CategoryTheory/Sites/LocallyInjective.lean

tactic: constructor
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
⊢ equalizerSieve x y = ⊤ ↔ x = y
state_after: case mp
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
⊢ equalizerSieve x y = ⊤ → x = y

case mpr
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
⊢ x = y → equalizerSieve x y = ⊤

tactic: intro h
state_before: case mp
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
⊢ equalizerSieve x y = ⊤ → x = y
state_after: case mp
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
h : equalizerSieve x y = ⊤
⊢ x = y

tactic: simpa using (show equalizerSieve x y (𝟙 _) by simp [h])
state_before: case mp
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
h : equalizerSieve x y = ⊤
⊢ x = y
state_after: no goals

tactic: simp [h]
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
h : equalizerSieve x y = ⊤
⊢ (equalizerSieve x y).arrows (𝟙 X.unop)
state_after: no goals

tactic: rintro rfl
state_before: case mpr
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x y : (forget D).obj (F.obj X)
⊢ x = y → equalizerSieve x y = ⊤
state_after: case mpr
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x : (forget D).obj (F.obj X)
⊢ equalizerSieve x x = ⊤

tactic: apply equalizerSieve_self_eq_top
state_before: case mpr
C : Type u
inst✝² : Category.{v, u} C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : ConcreteCategory D
J : GrothendieckTopology C
F : Cᵒᵖ ⥤ D
X : Cᵒᵖ
x : (forget D).obj (F.obj X)
⊢ equalizerSieve x x = ⊤
state_after: no goals
Theorem: WeierstrassCurve.Projective.equiv_some_of_Z_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/Projective.lean

tactic: simp [← fin3_def P, mul_div_cancel₀ _ hPz]
state_before: R : Type u
inst✝¹ : CommRing R
W✝ : Projective R
F : Type u
inst✝ : Field F
W : Projective F
P : Fin 3 → F
hPz : P 2 ≠ 0
⊢ (fun m => m • ![P 0 / P 2, P 1 / P 2, 1]) (Units.mk0 (P 2) hPz) = P
state_after: no goals
Theorem: MeasureTheory.VectorMeasure.AbsolutelyContinuous.neg_right
File: Mathlib/MeasureTheory/Measure/VectorMeasure.lean

tactic: intro s hs
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
L : Type u_3
M : Type u_4
N✝ : Type u_5
inst✝⁸ : AddCommMonoid L
inst✝⁷ : TopologicalSpace L
inst✝⁶ : AddCommMonoid M
inst✝⁵ : TopologicalSpace M
inst✝⁴ : AddCommMonoid N✝
inst✝³ : TopologicalSpace N✝
v✝ : VectorMeasure α M
w✝ : VectorMeasure α N✝
N : Type u_6
inst✝² : AddCommGroup N
inst✝¹ : TopologicalSpace N
inst✝ : TopologicalAddGroup N
v : VectorMeasure α M
w : VectorMeasure α N
h : v ≪ᵥ w
⊢ v ≪ᵥ -w
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
L : Type u_3
M : Type u_4
N✝ : Type u_5
inst✝⁸ : AddCommMonoid L
inst✝⁷ : TopologicalSpace L
inst✝⁶ : AddCommMonoid M
inst✝⁵ : TopologicalSpace M
inst✝⁴ : AddCommMonoid N✝
inst✝³ : TopologicalSpace N✝
v✝ : VectorMeasure α M
w✝ : VectorMeasure α N✝
N : Type u_6
inst✝² : AddCommGroup N
inst✝¹ : TopologicalSpace N
inst✝ : TopologicalAddGroup N
v : VectorMeasure α M
w : VectorMeasure α N
h : v ≪ᵥ w
s : Set α
hs : ↑(-w) s = 0
⊢ ↑v s = 0

tactic: rw [neg_apply, neg_eq_zero] at hs
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
L : Type u_3
M : Type u_4
N✝ : Type u_5
inst✝⁸ : AddCommMonoid L
inst✝⁷ : TopologicalSpace L
inst✝⁶ : AddCommMonoid M
inst✝⁵ : TopologicalSpace M
inst✝⁴ : AddCommMonoid N✝
inst✝³ : TopologicalSpace N✝
v✝ : VectorMeasure α M
w✝ : VectorMeasure α N✝
N : Type u_6
inst✝² : AddCommGroup N
inst✝¹ : TopologicalSpace N
inst✝ : TopologicalAddGroup N
v : VectorMeasure α M
w : VectorMeasure α N
h : v ≪ᵥ w
s : Set α
hs : ↑(-w) s = 0
⊢ ↑v s = 0
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
L : Type u_3
M : Type u_4
N✝ : Type u_5
inst✝⁸ : AddCommMonoid L
inst✝⁷ : TopologicalSpace L
inst✝⁶ : AddCommMonoid M
inst✝⁵ : TopologicalSpace M
inst✝⁴ : AddCommMonoid N✝
inst✝³ : TopologicalSpace N✝
v✝ : VectorMeasure α M
w✝ : VectorMeasure α N✝
N : Type u_6
inst✝² : AddCommGroup N
inst✝¹ : TopologicalSpace N
inst✝ : TopologicalAddGroup N
v : VectorMeasure α M
w : VectorMeasure α N
h : v ≪ᵥ w
s : Set α
hs : ↑w s = 0
⊢ ↑v s = 0

tactic: exact h hs
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
L : Type u_3
M : Type u_4
N✝ : Type u_5
inst✝⁸ : AddCommMonoid L
inst✝⁷ : TopologicalSpace L
inst✝⁶ : AddCommMonoid M
inst✝⁵ : TopologicalSpace M
inst✝⁴ : AddCommMonoid N✝
inst✝³ : TopologicalSpace N✝
v✝ : VectorMeasure α M
w✝ : VectorMeasure α N✝
N : Type u_6
inst✝² : AddCommGroup N
inst✝¹ : TopologicalSpace N
inst✝ : TopologicalAddGroup N
v : VectorMeasure α M
w : VectorMeasure α N
h : v ≪ᵥ w
s : Set α
hs : ↑w s = 0
⊢ ↑v s = 0
state_after: no goals
Theorem: Function.range_eq_image_or_of_mulSupport_subset
File: Mathlib/Algebra/Group/Support.lean

tactic: apply (wcovBy_insert _ _).eq_or_eq (image_subset_range _ _)
state_before: α : Type u_1
β : Type u_2
A : Type u_3
B : Type u_4
M : Type u_5
N : Type u_6
P : Type u_7
G : Type u_8
inst✝² : One M
inst✝¹ : One N
inst✝ : One P
f : α → M
k : Set α
h : mulSupport f ⊆ k
⊢ range f = f '' k ∨ range f = insert 1 (f '' k)
state_after: α : Type u_1
β : Type u_2
A : Type u_3
B : Type u_4
M : Type u_5
N : Type u_6
P : Type u_7
G : Type u_8
inst✝² : One M
inst✝¹ : One N
inst✝ : One P
f : α → M
k : Set α
h : mulSupport f ⊆ k
⊢ range f ≤ insert 1 (f '' k)

tactic: exact (range_subset_insert_image_mulSupport f).trans (insert_subset_insert (image_subset f h))
state_before: α : Type u_1
β : Type u_2
A : Type u_3
B : Type u_4
M : Type u_5
N : Type u_6
P : Type u_7
G : Type u_8
inst✝² : One M
inst✝¹ : One N
inst✝ : One P
f : α → M
k : Set α
h : mulSupport f ⊆ k
⊢ range f ≤ insert 1 (f '' k)
state_after: no goals
Theorem: AlgebraicGeometry.Scheme.inv_app_top
File: Mathlib/AlgebraicGeometry/Scheme.lean

tactic: simp
state_before: X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
⊢ Hom.app (inv f) ⊤ = inv (Hom.app f ⊤)
state_after: no goals
Theorem: PartENat.withTopEquiv_lt
File: Mathlib/Data/Nat/PartENat.lean

tactic: simp
state_before: x y : PartENat
⊢ withTopEquiv x < withTopEquiv y ↔ x < y
state_after: no goals
Theorem: Finset.compl_filter
File: Mathlib/Data/Fintype/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α
s t : Finset α
inst✝² : DecidableEq α
a : α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : (x : α) → Decidable ¬p x
⊢ ∀ (a : α), a ∈ (filter p univ)ᶜ ↔ a ∈ filter (fun x => ¬p x) univ
state_after: no goals
Theorem: Cardinal.mk_preimage_of_injective_lift
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: rw [lift_mk_le.{0}]
state_before: α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ lift.{v, u} #↑(f ⁻¹' s) ≤ lift.{u, v} #↑s
state_after: α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ Nonempty (↑(f ⁻¹' s) ↪ ↑s)

tactic: use Subtype.coind (fun x => f x.1) fun x => mem_preimage.mp x.2
state_before: α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ Nonempty (↑(f ⁻¹' s) ↪ ↑s)
state_after: case inj'
α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ Injective (Subtype.coind (fun x => f ↑x) ⋯)

tactic: apply Subtype.coind_injective
state_before: case inj'
α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ Injective (Subtype.coind (fun x => f ↑x) ⋯)
state_after: case inj'.hf
α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ Injective fun x => f ↑x

tactic: exact h.comp Subtype.val_injective
state_before: case inj'.hf
α✝ β✝ : Type u
c : Cardinal.{?u.227258}
α : Type u
β : Type v
f : α → β
s : Set β
h : Injective f
⊢ Injective fun x => f ↑x
state_after: no goals
Theorem: Set.infsep_pos_iff_nontrivial_of_finite
File: Mathlib/Topology/MetricSpace/Infsep.lean

tactic: rw [infsep_pos, einfsep_lt_top_iff, and_iff_right_iff_imp]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MetricSpace α
s : Set α
inst✝ : Finite ↑s
⊢ 0 < s.infsep ↔ s.Nontrivial
state_after: α : Type u_1
β : Type u_2
inst✝¹ : MetricSpace α
s : Set α
inst✝ : Finite ↑s
⊢ s.Nontrivial → 0 < s.einfsep

tactic: exact fun _ => einfsep_pos_of_finite
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MetricSpace α
s : Set α
inst✝ : Finite ↑s
⊢ s.Nontrivial → 0 < s.einfsep
state_after: no goals
Theorem: Finset.card_pow_div_pow_le'
File: Mathlib/Combinatorics/Additive/PluenneckeRuzsa.lean

tactic: rw [← card_inv, inv_div', ← inv_pow, ← inv_pow, div_eq_mul_inv A]
state_before: α : Type u_1
inst✝¹ : CommGroup α
inst✝ : DecidableEq α
A B✝ C : Finset α
hA : A.Nonempty
B : Finset α
m n : ℕ
⊢ ↑(B ^ m / B ^ n).card ≤ (↑(A / B).card / ↑A.card) ^ (m + n) * ↑A.card
state_after: α : Type u_1
inst✝¹ : CommGroup α
inst✝ : DecidableEq α
A B✝ C : Finset α
hA : A.Nonempty
B : Finset α
m n : ℕ
⊢ ↑(B⁻¹ ^ m / B⁻¹ ^ n).card ≤ (↑(A * B⁻¹).card / ↑A.card) ^ (m + n) * ↑A.card

tactic: exact card_pow_div_pow_le hA _ _ _
state_before: α : Type u_1
inst✝¹ : CommGroup α
inst✝ : DecidableEq α
A B✝ C : Finset α
hA : A.Nonempty
B : Finset α
m n : ℕ
⊢ ↑(B⁻¹ ^ m / B⁻¹ ^ n).card ≤ (↑(A * B⁻¹).card / ↑A.card) ^ (m + n) * ↑A.card
state_after: no goals
Theorem: Filter.Germ.isConstant_comp_tendsto
File: Mathlib/Order/Filter/Germ.lean

tactic: rcases hf with ⟨b, hb⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
l : Filter α
f g✝ h : α → β
lc : Filter γ
g : γ → α
hf : (↑f).IsConstant
hg : Tendsto g lc l
⊢ (↑(f ∘ g)).IsConstant
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
l : Filter α
f g✝ h : α → β
lc : Filter γ
g : γ → α
hg : Tendsto g lc l
b : β
hb : f =ᶠ[l] fun x => b
⊢ (↑(f ∘ g)).IsConstant

tactic: exact ⟨b, hb.comp_tendsto hg⟩
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
l : Filter α
f g✝ h : α → β
lc : Filter γ
g : γ → α
hg : Tendsto g lc l
b : β
hb : f =ᶠ[l] fun x => b
⊢ (↑(f ∘ g)).IsConstant
state_after: no goals
Theorem: HasDerivAtFilter.const_sub
File: Mathlib/Analysis/Calculus/Deriv/Add.lean

tactic: simpa only [sub_eq_add_neg] using hf.neg.const_add c
state_before: 𝕜 : Type u
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type w
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L : Filter 𝕜
c : F
hf : HasDerivAtFilter f f' x L
⊢ HasDerivAtFilter (fun x => c - f x) (-f') x L
state_after: no goals
Theorem: Real.pi_div_four_le_arcsin
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Inverse.lean

tactic: rw [← sin_pi_div_four, le_arcsin_iff_sin_le']
state_before: x✝ y x : ℝ
⊢ π / 4 ≤ arcsin x ↔ √2 / 2 ≤ x
state_after: x✝ y x : ℝ
⊢ π / 4 ∈ Ioc (-(π / 2)) (π / 2)

tactic: have := pi_pos
state_before: x✝ y x : ℝ
⊢ π / 4 ∈ Ioc (-(π / 2)) (π / 2)
state_after: x✝ y x : ℝ
this : 0 < π
⊢ π / 4 ∈ Ioc (-(π / 2)) (π / 2)

tactic: constructor <;> linarith
state_before: x✝ y x : ℝ
this : 0 < π
⊢ π / 4 ∈ Ioc (-(π / 2)) (π / 2)
state_after: no goals
Theorem: PNat.dvd_prime
File: Mathlib/Data/PNat/Prime.lean

tactic: rw [PNat.dvd_iff]
state_before: p m : ℕ+
pp : p.Prime
⊢ m ∣ p ↔ m = 1 ∨ m = p
state_after: p m : ℕ+
pp : p.Prime
⊢ ↑m ∣ ↑p ↔ m = 1 ∨ m = p

tactic: rw [Nat.dvd_prime pp]
state_before: p m : ℕ+
pp : p.Prime
⊢ ↑m ∣ ↑p ↔ m = 1 ∨ m = p
state_after: p m : ℕ+
pp : p.Prime
⊢ ↑m = 1 ∨ ↑m = ↑p ↔ m = 1 ∨ m = p

tactic: simp
state_before: p m : ℕ+
pp : p.Prime
⊢ ↑m = 1 ∨ ↑m = ↑p ↔ m = 1 ∨ m = p
state_after: no goals
Theorem: MeasureTheory.L1.SimpleFunc.setToL1SCLM_congr_left
File: Mathlib/MeasureTheory/Integral/SetToL1.lean

tactic: rw [h]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
F' : Type u_4
G : Type u_5
𝕜 : Type u_6
p : ℝ≥0∞
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace ℝ F'
inst✝³ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝² : NormedField 𝕜
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace 𝕜 F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
hT : DominatedFinMeasAdditive μ T C
hT' : DominatedFinMeasAdditive μ T' C'
h : T = T'
f : ↥(simpleFunc E 1 μ)
x✝² : Set α
x✝¹ : MeasurableSet x✝²
x✝ : μ x✝² < ⊤
⊢ T x✝² = T' x✝²
state_after: no goals
Theorem: jacobiTheta₂'_add_right
File: Mathlib/NumberTheory/ModularForms/JacobiTheta/TwoVariable.lean

tactic: refine tsum_congr (fun n ↦ ?_)
state_before: z τ : ℂ
⊢ jacobiTheta₂' z (τ + 2) = jacobiTheta₂' z τ
state_after: z τ : ℂ
n : ℤ
⊢ jacobiTheta₂'_term n z (τ + 2) = jacobiTheta₂'_term n z τ

tactic: simp_rw [jacobiTheta₂'_term, jacobiTheta₂_term, Complex.exp_add]
state_before: z τ : ℂ
n : ℤ
⊢ jacobiTheta₂'_term n z (τ + 2) = jacobiTheta₂'_term n z τ
state_after: z τ : ℂ
n : ℤ
⊢ 2 * ↑π * I * ↑n * (cexp (2 * ↑π * I * ↑n * z) * cexp (↑π * I * ↑n ^ 2 * (τ + 2))) =
    2 * ↑π * I * ↑n * (cexp (2 * ↑π * I * ↑n * z) * cexp (↑π * I * ↑n ^ 2 * τ))

tactic: suffices cexp (π * I * n ^ 2 * 2 : ℂ) = 1 by rw [mul_add, Complex.exp_add, this, mul_one]
state_before: z τ : ℂ
n : ℤ
⊢ 2 * ↑π * I * ↑n * (cexp (2 * ↑π * I * ↑n * z) * cexp (↑π * I * ↑n ^ 2 * (τ + 2))) =
    2 * ↑π * I * ↑n * (cexp (2 * ↑π * I * ↑n * z) * cexp (↑π * I * ↑n ^ 2 * τ))
state_after: z τ : ℂ
n : ℤ
⊢ cexp (↑π * I * ↑n ^ 2 * 2) = 1

tactic: rw [(by push_cast; ring : (π * I * n ^ 2 * 2 : ℂ) = (n ^ 2 :) * (2 * π * I)), exp_int_mul,
  exp_two_pi_mul_I, one_zpow]
state_before: z τ : ℂ
n : ℤ
⊢ cexp (↑π * I * ↑n ^ 2 * 2) = 1
state_after: no goals

tactic: rw [mul_add, Complex.exp_add, this, mul_one]
state_before: z τ : ℂ
n : ℤ
this : cexp (↑π * I * ↑n ^ 2 * 2) = 1
⊢ 2 * ↑π * I * ↑n * (cexp (2 * ↑π * I * ↑n * z) * cexp (↑π * I * ↑n ^ 2 * (τ + 2))) =
    2 * ↑π * I * ↑n * (cexp (2 * ↑π * I * ↑n * z) * cexp (↑π * I * ↑n ^ 2 * τ))
state_after: no goals

tactic: push_cast
state_before: z τ : ℂ
n : ℤ
⊢ ↑π * I * ↑n ^ 2 * 2 = ↑(n ^ 2) * (2 * ↑π * I)
state_after: z τ : ℂ
n : ℤ
⊢ ↑π * I * ↑n ^ 2 * 2 = ↑n ^ 2 * (2 * ↑π * I)

tactic: ring
state_before: z τ : ℂ
n : ℤ
⊢ ↑π * I * ↑n ^ 2 * 2 = ↑n ^ 2 * (2 * ↑π * I)
state_after: no goals
Theorem: Real.Angle.abs_cos_eq_of_two_nsmul_eq
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [two_nsmul_eq_iff] at h
state_before: θ ψ : Angle
h : 2 • θ = 2 • ψ
⊢ |θ.cos| = |ψ.cos|
state_after: θ ψ : Angle
h : θ = ψ ∨ θ = ψ + ↑π
⊢ |θ.cos| = |ψ.cos|

tactic: rcases h with (rfl | rfl)
state_before: θ ψ : Angle
h : θ = ψ ∨ θ = ψ + ↑π
⊢ |θ.cos| = |ψ.cos|
state_after: case inl
θ : Angle
⊢ |θ.cos| = |θ.cos|

case inr
ψ : Angle
⊢ |(ψ + ↑π).cos| = |ψ.cos|

tactic: rfl
state_before: case inl
θ : Angle
⊢ |θ.cos| = |θ.cos|
state_after: no goals

tactic: rw [cos_add_pi, abs_neg]
state_before: case inr
ψ : Angle
⊢ |(ψ + ↑π).cos| = |ψ.cos|
state_after: no goals
Theorem: Filter.countable_compl_ker
File: Mathlib/Order/Filter/Cofinite.lean

tactic: rcases exists_antitone_basis l with ⟨s, hs⟩
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : l.IsCountablyGenerated
h : cofinite ≤ l
⊢ l.kerᶜ.Countable
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : l.IsCountablyGenerated
h : cofinite ≤ l
s : ℕ → Set α
hs : l.HasAntitoneBasis s
⊢ l.kerᶜ.Countable

tactic: simp only [hs.ker, iInter_true, compl_iInter]
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : l.IsCountablyGenerated
h : cofinite ≤ l
s : ℕ → Set α
hs : l.HasAntitoneBasis s
⊢ l.kerᶜ.Countable
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : l.IsCountablyGenerated
h : cofinite ≤ l
s : ℕ → Set α
hs : l.HasAntitoneBasis s
⊢ (⋃ i, (s i)ᶜ).Countable

tactic: exact countable_iUnion fun n ↦ Set.Finite.countable <| h <| hs.mem _
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
l : Filter α
inst✝ : l.IsCountablyGenerated
h : cofinite ≤ l
s : ℕ → Set α
hs : l.HasAntitoneBasis s
⊢ (⋃ i, (s i)ᶜ).Countable
state_after: no goals
Theorem: Unique.bijective
File: Mathlib/Logic/Unique.lean

tactic: rw [Function.bijective_iff_has_inverse]
state_before: α : Sort u_1
A : Sort u_2
B : Sort u_3
inst✝¹ : Unique A
inst✝ : Unique B
f : A → B
⊢ Function.Bijective f
state_after: α : Sort u_1
A : Sort u_2
B : Sort u_3
inst✝¹ : Unique A
inst✝ : Unique B
f : A → B
⊢ ∃ g, Function.LeftInverse g f ∧ Function.RightInverse g f

tactic: refine ⟨default, ?_, ?_⟩ <;> intro x <;> simp
state_before: α : Sort u_1
A : Sort u_2
B : Sort u_3
inst✝¹ : Unique A
inst✝ : Unique B
f : A → B
⊢ ∃ g, Function.LeftInverse g f ∧ Function.RightInverse g f
state_after: no goals
Theorem: Real.uniformContinuous_neg
File: Mathlib/Topology/Instances/Real.lean

tactic: rw [dist_comm] at h
state_before: α : Type u
β : Type v
γ : Type w
ε : ℝ
ε0 : ε > 0
a✝ b✝ : ℝ
h : dist a✝ b✝ < ε
⊢ dist (-a✝) (-b✝) < ε
state_after: α : Type u
β : Type v
γ : Type w
ε : ℝ
ε0 : ε > 0
a✝ b✝ : ℝ
h : dist b✝ a✝ < ε
⊢ dist (-a✝) (-b✝) < ε

tactic: simpa only [Real.dist_eq, neg_sub_neg] using h
state_before: α : Type u
β : Type v
γ : Type w
ε : ℝ
ε0 : ε > 0
a✝ b✝ : ℝ
h : dist b✝ a✝ < ε
⊢ dist (-a✝) (-b✝) < ε
state_after: no goals
Theorem: Complex.frontier_setOf_re_le
File: Mathlib/Analysis/Complex/ReImTopology.lean

tactic: simpa only [frontier_Iic] using frontier_preimage_re (Iic a)
state_before: a : ℝ
⊢ frontier {z | z.re ≤ a} = {z | z.re = a}
state_after: no goals
Theorem: Fin.succAbove_eq_zero_iff
File: Mathlib/Data/Fin/Basic.lean

tactic: rw [← succAbove_ne_zero_zero ha, succAbove_right_inj]
state_before: n m : ℕ
p : Fin (n + 1)
i j : Fin n
inst✝ : NeZero n
a : Fin (n + 1)
b : Fin n
ha : a ≠ 0
⊢ a.succAbove b = 0 ↔ b = 0
state_after: no goals
Theorem: Finset.noncommProd_eq_pow_card
File: Mathlib/Data/Finset/NoncommProd.lean

tactic: rw [noncommProd, Multiset.noncommProd_eq_pow_card _ _ m]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ s.noncommProd f comm = m ^ s.card
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ m ^ Multiset.card (Multiset.map f s.val) = m ^ s.card

F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ ∀ x ∈ Multiset.map f s.val, x = m

tactic: simp only [Finset.card_def, Multiset.card_map]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ m ^ Multiset.card (Multiset.map f s.val) = m ^ s.card
state_after: no goals

tactic: simpa using h
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
f✝ : α → β → β
op : α → α → α
inst✝² : Monoid β
inst✝¹ : Monoid γ
inst✝ : FunLike F β γ
s : Finset α
f : α → β
comm : (↑s).Pairwise fun a b => Commute (f a) (f b)
m : β
h : ∀ x ∈ s, f x = m
⊢ ∀ x ∈ Multiset.map f s.val, x = m
state_after: no goals
Theorem: Finset.mem_subtype
File: Mathlib/Data/Finset/Image.lean

tactic: simp [Finset.subtype, ha]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
p : α → Prop
inst✝ : DecidablePred p
s : Finset α
a : α
ha : p a
⊢ ⟨a, ha⟩ ∈ Finset.subtype p s ↔ ↑⟨a, ha⟩ ∈ s
state_after: no goals
Theorem: List.bind_eq_nil
File: Mathlib/Data/List/Join.lean

tactic: simp only [mem_map, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂]
state_before: α : Type u_1
β : Type u_2
l : List α
f : α → List β
⊢ (∀ (l_1 : List β), l_1 ∈ map f l → l_1 = []) ↔ ∀ (x : α), x ∈ l → f x = []
state_after: no goals
Theorem: Set.inter_insert_of_mem
File: Mathlib/Data/Set/Basic.lean

tactic: rw [insert_inter_distrib, insert_eq_of_mem h]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁ s₂ t t₁ t₂ u : Set α
h : a ∈ s
⊢ s ∩ insert a t = insert a (s ∩ t)
state_after: no goals
Theorem: HasGradientAtFilter.hasDerivAtFilter
File: Mathlib/Analysis/Calculus/Gradient/Basic.lean

tactic: have : ContinuousLinearMap.smulRight (1 : 𝕜 →L[𝕜] 𝕜) (starRingEnd 𝕜 g') = (toDual 𝕜 𝕜) g' := by
  ext; simp
state_before: 𝕜 : Type u_1
F : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 F
inst✝ : CompleteSpace F
f : F → 𝕜
f' x : F
s : Set F
L : Filter F
g : 𝕜 → 𝕜
g' u : 𝕜
L' : Filter 𝕜
h : HasGradientAtFilter g g' u L'
⊢ HasDerivAtFilter g ((starRingEnd 𝕜) g') u L'
state_after: 𝕜 : Type u_1
F : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 F
inst✝ : CompleteSpace F
f : F → 𝕜
f' x : F
s : Set F
L : Filter F
g : 𝕜 → 𝕜
g' u : 𝕜
L' : Filter 𝕜
h : HasGradientAtFilter g g' u L'
this : ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') = (toDual 𝕜 𝕜) g'
⊢ HasDerivAtFilter g ((starRingEnd 𝕜) g') u L'

tactic: rwa [HasDerivAtFilter, this]
state_before: 𝕜 : Type u_1
F : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 F
inst✝ : CompleteSpace F
f : F → 𝕜
f' x : F
s : Set F
L : Filter F
g : 𝕜 → 𝕜
g' u : 𝕜
L' : Filter 𝕜
h : HasGradientAtFilter g g' u L'
this : ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') = (toDual 𝕜 𝕜) g'
⊢ HasDerivAtFilter g ((starRingEnd 𝕜) g') u L'
state_after: no goals

tactic: ext
state_before: 𝕜 : Type u_1
F : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 F
inst✝ : CompleteSpace F
f : F → 𝕜
f' x : F
s : Set F
L : Filter F
g : 𝕜 → 𝕜
g' u : 𝕜
L' : Filter 𝕜
h : HasGradientAtFilter g g' u L'
⊢ ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g') = (toDual 𝕜 𝕜) g'
state_after: case h
𝕜 : Type u_1
F : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 F
inst✝ : CompleteSpace F
f : F → 𝕜
f' x : F
s : Set F
L : Filter F
g : 𝕜 → 𝕜
g' u : 𝕜
L' : Filter 𝕜
h : HasGradientAtFilter g g' u L'
⊢ (ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g')) 1 = ((toDual 𝕜 𝕜) g') 1

tactic: simp
state_before: case h
𝕜 : Type u_1
F : Type u_2
inst✝³ : RCLike 𝕜
inst✝² : NormedAddCommGroup F
inst✝¹ : InnerProductSpace 𝕜 F
inst✝ : CompleteSpace F
f : F → 𝕜
f' x : F
s : Set F
L : Filter F
g : 𝕜 → 𝕜
g' u : 𝕜
L' : Filter 𝕜
h : HasGradientAtFilter g g' u L'
⊢ (ContinuousLinearMap.smulRight 1 ((starRingEnd 𝕜) g')) 1 = ((toDual 𝕜 𝕜) g') 1
state_after: no goals