1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: MulAction.zpow_smul_eq_iff_minimalPeriod_dvd
File: Mathlib/Dynamics/PeriodicPts.lean

tactic: rw [← period_eq_minimalPeriod, zpow_smul_eq_iff_period_dvd]
state_before: α : Type v
G : Type u
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u
inst✝¹ : Monoid M
inst✝ : MulAction M α
a : G
b : α
n : ℤ
⊢ a ^ n • b = b ↔ ↑(minimalPeriod (fun x => a • x) b) ∣ n
state_after: no goals
Theorem: MonotoneOn.mapsTo_uIcc
File: Mathlib/Order/Interval/Set/UnorderedInterval.lean

tactic: rw [uIcc, uIcc, ← hf.map_sup, ← hf.map_inf] <;>
  apply_rules [left_mem_uIcc, right_mem_uIcc, hf.mapsTo_Icc]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : Lattice β
f : α → β
s : Set α
a b : α
hf : MonotoneOn f [[a, b]]
⊢ MapsTo f [[a, b]] [[f a, f b]]
state_after: no goals
Theorem: LowerSet.Iic_sup_erase
File: Mathlib/Order/UpperLower/Basic.lean

tactic: rw [sup_comm, erase_sup_Iic ha has]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : Preorder α
s : LowerSet α
t : Set α
a : α
ha : a ∈ s
has : ∀ b ∈ s, a ≤ b → b = a
⊢ Iic a ⊔ s.erase a = s
state_after: no goals
Theorem: MeasureTheory.withDensity_add_left
File: Mathlib/MeasureTheory/Measure/WithDensity.lean

tactic: refine Measure.ext fun s hs => ?_
state_before: α : Type u_1
m0 : MeasurableSpace α
μ : Measure α
f : α → ℝ≥0∞
hf : Measurable f
g : α → ℝ≥0∞
⊢ μ.withDensity (f + g) = μ.withDensity f + μ.withDensity g
state_after: α : Type u_1
m0 : MeasurableSpace α
μ : Measure α
f : α → ℝ≥0∞
hf : Measurable f
g : α → ℝ≥0∞
s : Set α
hs : MeasurableSet s
⊢ (μ.withDensity (f + g)) s = (μ.withDensity f + μ.withDensity g) s

tactic: rw [withDensity_apply _ hs, Measure.add_apply, withDensity_apply _ hs, withDensity_apply _ hs,
  ← lintegral_add_left hf]
state_before: α : Type u_1
m0 : MeasurableSpace α
μ : Measure α
f : α → ℝ≥0∞
hf : Measurable f
g : α → ℝ≥0∞
s : Set α
hs : MeasurableSet s
⊢ (μ.withDensity (f + g)) s = (μ.withDensity f + μ.withDensity g) s
state_after: α : Type u_1
m0 : MeasurableSpace α
μ : Measure α
f : α → ℝ≥0∞
hf : Measurable f
g : α → ℝ≥0∞
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, (f + g) a ∂μ = ∫⁻ (a : α) in s, f a + g a ∂μ

tactic: simp only [Pi.add_apply]
state_before: α : Type u_1
m0 : MeasurableSpace α
μ : Measure α
f : α → ℝ≥0∞
hf : Measurable f
g : α → ℝ≥0∞
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, (f + g) a ∂μ = ∫⁻ (a : α) in s, f a + g a ∂μ
state_after: no goals
Theorem: Multiset.cons_ndinter_of_mem
File: Mathlib/Data/Multiset/FinsetOps.lean

tactic: simp [ndinter, h]
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ : Multiset α
a : α
s t : Multiset α
h : a ∈ t
⊢ (a ::ₘ s).ndinter t = a ::ₘ s.ndinter t
state_after: no goals
Theorem: EisensteinSeries.r_lower_bound_on_verticalStrip
File: Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConvergence.lean

tactic: apply min_le_min hz.2
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ r ⟨{ re := A, im := B }, h⟩ ≤ r z
state_after: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ √(r1 ⟨{ re := A, im := B }, h⟩) ≤ √(r1 z)

tactic: rw [Real.sqrt_le_sqrt_iff (by apply (r1_pos z).le)]
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ √(r1 ⟨{ re := A, im := B }, h⟩) ≤ √(r1 z)
state_after: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ r1 ⟨{ re := A, im := B }, h⟩ ≤ r1 z

tactic: simp only [r1_eq, div_pow, one_div]
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ r1 ⟨{ re := A, im := B }, h⟩ ≤ r1 z
state_after: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ (UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2 / UpperHalfPlane.im ⟨{ re := A, im := B }, h⟩ ^ 2 + 1)⁻¹ ≤
    (z.re ^ 2 / z.im ^ 2 + 1)⁻¹

tactic: rw [inv_le_inv (by positivity) (by positivity), add_le_add_iff_right]
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ (UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2 / UpperHalfPlane.im ⟨{ re := A, im := B }, h⟩ ^ 2 + 1)⁻¹ ≤
    (z.re ^ 2 / z.im ^ 2 + 1)⁻¹
state_after: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ z.re ^ 2 / z.im ^ 2 ≤
    UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2 / UpperHalfPlane.im ⟨{ re := A, im := B }, h⟩ ^ 2

tactic: apply div_le_div (sq_nonneg _) _ (by positivity) (pow_le_pow_left h.le hz.2 2)
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ z.re ^ 2 / z.im ^ 2 ≤
    UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2 / UpperHalfPlane.im ⟨{ re := A, im := B }, h⟩ ^ 2
state_after: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ z.re ^ 2 ≤ UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2

tactic: simpa only [even_two.pow_abs] using pow_le_pow_left (abs_nonneg _) hz.1 2
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ z.re ^ 2 ≤ UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2
state_after: no goals

tactic: apply (r1_pos z).le
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ 0 ≤ r1 z
state_after: no goals

tactic: positivity
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ 0 < UpperHalfPlane.re ⟨{ re := A, im := B }, h⟩ ^ 2 / UpperHalfPlane.im ⟨{ re := A, im := B }, h⟩ ^ 2 + 1
state_after: no goals

tactic: positivity
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ 0 < z.re ^ 2 / z.im ^ 2 + 1
state_after: no goals

tactic: positivity
state_before: z : ℍ
A B : ℝ
h : 0 < B
hz : z ∈ verticalStrip A B
⊢ 0 < B ^ 2
state_after: no goals
Theorem: Irrational.rat_add
File: Mathlib/Data/Real/Irrational.lean

tactic: rwa [cast_neg, neg_add_cancel_left]
state_before: q : ℚ
x y : ℝ
h : Irrational x
⊢ Irrational (↑(-q) + (↑q + x))
state_after: no goals
Theorem: MeasureTheory.MeasurePreserving.setLIntegral_comp_emb
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

tactic: rw [← hg.setLIntegral_comp_preimage_emb hge, preimage_image_eq _ hge.injective]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν✝ : Measure α
mb : MeasurableSpace β
ν : Measure β
g : α → β
hg : MeasurePreserving g μ ν
hge : MeasurableEmbedding g
f : β → ℝ≥0∞
s : Set α
⊢ ∫⁻ (a : α) in s, f (g a) ∂μ = ∫⁻ (b : β) in g '' s, f b ∂ν
state_after: no goals
Theorem: toIcoMod_mem_Ico'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: convert toIcoMod_mem_Ico hp 0 b
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b✝ c : α
n : ℤ
b : α
⊢ toIcoMod hp 0 b ∈ Set.Ico 0 p
state_after: case h.e'_5.h.e'_4
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b✝ c : α
n : ℤ
b : α
⊢ p = 0 + p

tactic: exact (zero_add p).symm
state_before: case h.e'_5.h.e'_4
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b✝ c : α
n : ℤ
b : α
⊢ p = 0 + p
state_after: no goals
Theorem: Set.mulIndicator_apply_eq_self
File: Mathlib/Algebra/Group/Indicator.lean

tactic: rw [@eq_comm _ (f a)]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
M : Type u_4
N : Type u_5
inst✝¹ : One M
inst✝ : One N
s t : Set α
f g : α → M
a : α
this : Decidable (a ∈ s) := Classical.dec (a ∈ s)
⊢ a ∉ s → 1 = f a ↔ a ∉ s → f a = 1
state_after: no goals
Theorem: MeasureTheory.AEStronglyMeasurable.mul_iff_right
File: Mathlib/MeasureTheory/Function/StronglyMeasurable/Basic.lean

tactic: simp only [mul_inv_cancel_comm]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
inst✝⁴ : Countable ι
m : MeasurableSpace α
μ ν : Measure α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
f g : α → β
inst✝¹ : CommGroup β
inst✝ : TopologicalGroup β
hf : AEStronglyMeasurable f μ
h : AEStronglyMeasurable (f * g) μ
⊢ g = f * g * f⁻¹
state_after: no goals
Theorem: Group.toDivInvMonoid_injective
File: Mathlib/Algebra/Group/Ext.lean

tactic: rintro ⟨⟩ ⟨⟩ ⟨⟩
state_before: G : Type u_1
⊢ Injective (@toDivInvMonoid G)
state_after: case mk.mk.refl
G : Type u_1
toDivInvMonoid✝ : DivInvMonoid G
mul_left_inv✝¹ mul_left_inv✝ : ∀ (a : G), a⁻¹ * a = 1
⊢ mk mul_left_inv✝¹ = mk mul_left_inv✝

tactic: rfl
state_before: case mk.mk.refl
G : Type u_1
toDivInvMonoid✝ : DivInvMonoid G
mul_left_inv✝¹ mul_left_inv✝ : ∀ (a : G), a⁻¹ * a = 1
⊢ mk mul_left_inv✝¹ = mk mul_left_inv✝
state_after: no goals
Theorem: MeasureTheory.Lp.norm_le_of_ae_bound
File: Mathlib/MeasureTheory/Function/LpSpace.lean

tactic: lift C to ℝ≥0 using hC
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
inst✝ : IsFiniteMeasure μ
f : ↥(Lp E p μ)
C : ℝ
hC : 0 ≤ C
hfC : ∀ᵐ (x : α) ∂μ, ‖↑↑f x‖ ≤ C
⊢ ‖f‖ ≤ ↑(measureUnivNNReal μ) ^ p.toReal⁻¹ * C
state_after: case intro
α : 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
inst✝ : IsFiniteMeasure μ
f : ↥(Lp E p μ)
C : ℝ≥0
hfC : ∀ᵐ (x : α) ∂μ, ‖↑↑f x‖ ≤ ↑C
⊢ ‖f‖ ≤ ↑(measureUnivNNReal μ) ^ p.toReal⁻¹ * ↑C

tactic: have := nnnorm_le_of_ae_bound hfC
state_before: case intro
α : 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
inst✝ : IsFiniteMeasure μ
f : ↥(Lp E p μ)
C : ℝ≥0
hfC : ∀ᵐ (x : α) ∂μ, ‖↑↑f x‖ ≤ ↑C
⊢ ‖f‖ ≤ ↑(measureUnivNNReal μ) ^ p.toReal⁻¹ * ↑C
state_after: case intro
α : 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
inst✝ : IsFiniteMeasure μ
f : ↥(Lp E p μ)
C : ℝ≥0
hfC : ∀ᵐ (x : α) ∂μ, ‖↑↑f x‖ ≤ ↑C
this : ‖f‖₊ ≤ measureUnivNNReal μ ^ p.toReal⁻¹ * C
⊢ ‖f‖ ≤ ↑(measureUnivNNReal μ) ^ p.toReal⁻¹ * ↑C

tactic: rwa [← NNReal.coe_le_coe, NNReal.coe_mul, NNReal.coe_rpow] at this
state_before: case intro
α : 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
inst✝ : IsFiniteMeasure μ
f : ↥(Lp E p μ)
C : ℝ≥0
hfC : ∀ᵐ (x : α) ∂μ, ‖↑↑f x‖ ≤ ↑C
this : ‖f‖₊ ≤ measureUnivNNReal μ ^ p.toReal⁻¹ * C
⊢ ‖f‖ ≤ ↑(measureUnivNNReal μ) ^ p.toReal⁻¹ * ↑C
state_after: no goals
Theorem: Pi.faithfulSMul_at
File: Mathlib/GroupTheory/GroupAction/Pi.lean

tactic: classical
  have :=
    congr_fun (h <| Function.update (fun j => Classical.choice (‹∀ i, Nonempty (f i)› j)) i a)
      i
  simpa using this
state_before: I : Type u
f : I → Type v
x y : (i : I) → f i
i✝ : I
α : Type u_1
inst✝² : (i : I) → SMul α (f i)
inst✝¹ : ∀ (i : I), Nonempty (f i)
i : I
inst✝ : FaithfulSMul α (f i)
m₁✝ m₂✝ : α
h : ∀ (a : (i : I) → f i), m₁✝ • a = m₂✝ • a
a : f i
⊢ m₁✝ • a = m₂✝ • a
state_after: no goals

tactic: have :=
  congr_fun (h <| Function.update (fun j => Classical.choice (‹∀ i, Nonempty (f i)› j)) i a)
    i
state_before: I : Type u
f : I → Type v
x y : (i : I) → f i
i✝ : I
α : Type u_1
inst✝² : (i : I) → SMul α (f i)
inst✝¹ : ∀ (i : I), Nonempty (f i)
i : I
inst✝ : FaithfulSMul α (f i)
m₁✝ m₂✝ : α
h : ∀ (a : (i : I) → f i), m₁✝ • a = m₂✝ • a
a : f i
⊢ m₁✝ • a = m₂✝ • a
state_after: I : Type u
f : I → Type v
x y : (i : I) → f i
i✝ : I
α : Type u_1
inst✝² : (i : I) → SMul α (f i)
inst✝¹ : ∀ (i : I), Nonempty (f i)
i : I
inst✝ : FaithfulSMul α (f i)
m₁✝ m₂✝ : α
h : ∀ (a : (i : I) → f i), m₁✝ • a = m₂✝ • a
a : f i
this :
  (m₁✝ • Function.update (fun j => Classical.choice ⋯) i a) i =
    (m₂✝ • Function.update (fun j => Classical.choice ⋯) i a) i
⊢ m₁✝ • a = m₂✝ • a

tactic: simpa using this
state_before: I : Type u
f : I → Type v
x y : (i : I) → f i
i✝ : I
α : Type u_1
inst✝² : (i : I) → SMul α (f i)
inst✝¹ : ∀ (i : I), Nonempty (f i)
i : I
inst✝ : FaithfulSMul α (f i)
m₁✝ m₂✝ : α
h : ∀ (a : (i : I) → f i), m₁✝ • a = m₂✝ • a
a : f i
this :
  (m₁✝ • Function.update (fun j => Classical.choice ⋯) i a) i =
    (m₂✝ • Function.update (fun j => Classical.choice ⋯) i a) i
⊢ m₁✝ • a = m₂✝ • a
state_after: no goals
Theorem: Fin.pred_le_iff
File: Mathlib/Data/Fin/Basic.lean

tactic: rw [← succ_le_succ_iff, succ_pred]
state_before: n m : ℕ
j : Fin n
i : Fin (n + 1)
hi : i ≠ 0
⊢ i.pred hi ≤ j ↔ i ≤ j.succ
state_after: no goals
Theorem: mem_nhdsSet_empty
File: Mathlib/Topology/NhdsSet.lean

tactic: simp
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f : Filter X
s t s₁ s₂ t₁ t₂ : Set X
x : X
⊢ s ∈ 𝓝ˢ ∅
state_after: no goals
Theorem: expNegInvGlue.contDiff_polynomial_eval_inv_mul
File: Mathlib/Analysis/SpecialFunctions/SmoothTransition.lean

tactic: apply contDiff_all_iff_nat.2 (fun m => ?_) n
state_before: n : ℕ∞
p : ℝ[X]
⊢ ContDiff ℝ n fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
state_after: n : ℕ∞
p : ℝ[X]
m : ℕ
⊢ ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x

tactic: induction m generalizing p with
| zero => exact contDiff_zero.2 <| continuous_polynomial_eval_inv_mul _
| succ m ihm =>
  refine contDiff_succ_iff_deriv.2 ⟨differentiable_polynomial_eval_inv_mul _, ?_⟩
  convert ihm (X ^ 2 * (p - derivative (R := ℝ) p)) using 2
  exact (hasDerivAt_polynomial_eval_inv_mul p _).deriv
state_before: n : ℕ∞
p : ℝ[X]
m : ℕ
⊢ ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
state_after: no goals

tactic: exact contDiff_zero.2 <| continuous_polynomial_eval_inv_mul _
state_before: case zero
n : ℕ∞
p : ℝ[X]
⊢ ContDiff ℝ ↑0 fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
state_after: no goals

tactic: refine contDiff_succ_iff_deriv.2 ⟨differentiable_polynomial_eval_inv_mul _, ?_⟩
state_before: case succ
n : ℕ∞
m : ℕ
ihm : ∀ (p : ℝ[X]), ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
p : ℝ[X]
⊢ ContDiff ℝ ↑(m + 1) fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
state_after: case succ
n : ℕ∞
m : ℕ
ihm : ∀ (p : ℝ[X]), ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
p : ℝ[X]
⊢ ContDiff ℝ (↑m) (deriv fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x)

tactic: convert ihm (X ^ 2 * (p - derivative (R := ℝ) p)) using 2
state_before: case succ
n : ℕ∞
m : ℕ
ihm : ∀ (p : ℝ[X]), ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
p : ℝ[X]
⊢ ContDiff ℝ (↑m) (deriv fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x)
state_after: case h.e'_10.h
n : ℕ∞
m : ℕ
ihm : ∀ (p : ℝ[X]), ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
p : ℝ[X]
x✝ : ℝ
⊢ deriv (fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x) x✝ =
    Polynomial.eval x✝⁻¹ (X ^ 2 * (p - derivative p)) * expNegInvGlue x✝

tactic: exact (hasDerivAt_polynomial_eval_inv_mul p _).deriv
state_before: case h.e'_10.h
n : ℕ∞
m : ℕ
ihm : ∀ (p : ℝ[X]), ContDiff ℝ ↑m fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x
p : ℝ[X]
x✝ : ℝ
⊢ deriv (fun x => Polynomial.eval x⁻¹ p * expNegInvGlue x) x✝ =
    Polynomial.eval x✝⁻¹ (X ^ 2 * (p - derivative p)) * expNegInvGlue x✝
state_after: no goals
Theorem: Real.le_arcsin_iff_sin_le
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Inverse.lean

tactic: rw [← neg_le_neg_iff, ← arcsin_neg,
  arcsin_le_iff_le_sin ⟨neg_le_neg hy.2, neg_le.2 hy.1⟩ ⟨neg_le_neg hx.2, neg_le.2 hx.1⟩, sin_neg,
  neg_le_neg_iff]
state_before: x✝ y✝ x y : ℝ
hx : x ∈ Icc (-(π / 2)) (π / 2)
hy : y ∈ Icc (-1) 1
⊢ x ≤ arcsin y ↔ sin x ≤ y
state_after: no goals
Theorem: HomologicalComplex.shortExact_iff_degreewise_shortExact
File: Mathlib/Algebra/Homology/HomologicalComplexAbelian.lean

tactic: constructor
state_before: C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
⊢ S.ShortExact ↔ ∀ (i : ι), (S.map (eval C c i)).ShortExact
state_after: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
⊢ S.ShortExact → ∀ (i : ι), (S.map (eval C c i)).ShortExact

case mpr
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
⊢ (∀ (i : ι), (S.map (eval C c i)).ShortExact) → S.ShortExact

tactic: intro hS i
state_before: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
⊢ S.ShortExact → ∀ (i : ι), (S.map (eval C c i)).ShortExact
state_after: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i : ι
⊢ (S.map (eval C c i)).ShortExact

tactic: have := hS.mono_f
state_before: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i : ι
⊢ (S.map (eval C c i)).ShortExact
state_after: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i : ι
this : Mono S.f
⊢ (S.map (eval C c i)).ShortExact

tactic: have := hS.epi_g
state_before: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i : ι
this : Mono S.f
⊢ (S.map (eval C c i)).ShortExact
state_after: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i : ι
this✝ : Mono S.f
this : Epi S.g
⊢ (S.map (eval C c i)).ShortExact

tactic: exact hS.map (eval C c i)
state_before: case mp
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i : ι
this✝ : Mono S.f
this : Epi S.g
⊢ (S.map (eval C c i)).ShortExact
state_after: no goals

tactic: exact shortExact_of_degreewise_shortExact S
state_before: case mpr
C : Type u_1
ι : Type u_2
c : ComplexShape ι
inst✝¹ : Category.{u_3, u_1} C
inst✝ : Abelian C
S : ShortComplex (HomologicalComplex C c)
⊢ (∀ (i : ι), (S.map (eval C c i)).ShortExact) → S.ShortExact
state_after: no goals
Theorem: PrimeSpectrum.zeroLocus_span
File: Mathlib/AlgebraicGeometry/PrimeSpectrum/Basic.lean

tactic: ext x
state_before: R : Type u
S : Type v
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
s : Set R
⊢ zeroLocus ↑(Ideal.span s) = zeroLocus s
state_after: case h
R : Type u
S : Type v
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
s : Set R
x : PrimeSpectrum R
⊢ x ∈ zeroLocus ↑(Ideal.span s) ↔ x ∈ zeroLocus s

tactic: exact (Submodule.gi R R).gc s x.asIdeal
state_before: case h
R : Type u
S : Type v
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
s : Set R
x : PrimeSpectrum R
⊢ x ∈ zeroLocus ↑(Ideal.span s) ↔ x ∈ zeroLocus s
state_after: no goals
Theorem: CategoryTheory.Iso.cancel_iso_inv_right
File: Mathlib/CategoryTheory/Iso.lean

tactic: simp only [cancel_mono]
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ Z✝ X Y Z : C
f f' : X ⟶ Y
g : Z ≅ Y
⊢ f ≫ g.inv = f' ≫ g.inv ↔ f = f'
state_after: no goals
Theorem: toIocDiv_add_right'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: simpa only [one_zsmul] using toIocDiv_add_zsmul' hp a b 1
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIocDiv hp (a + p) b = toIocDiv hp a b - 1
state_after: no goals
Theorem: CauSeq.lim_neg
File: Mathlib/Algebra/Order/CauSeq/Completion.lean

tactic: rw [const_neg, sub_neg_eq_add, add_comm, ← sub_eq_add_neg]
state_before: α : Type u_1
inst✝³ : LinearOrderedField α
β : Type u_2
inst✝² : Ring β
abv : β → α
inst✝¹ : IsAbsoluteValue abv
inst✝ : IsComplete β abv
f : CauSeq β abv
⊢ (-f - const abv (-f.lim)).LimZero
state_after: α : Type u_1
inst✝³ : LinearOrderedField α
β : Type u_2
inst✝² : Ring β
abv : β → α
inst✝¹ : IsAbsoluteValue abv
inst✝ : IsComplete β abv
f : CauSeq β abv
⊢ (const abv f.lim - f).LimZero

tactic: exact Setoid.symm (equiv_lim f)
state_before: α : Type u_1
inst✝³ : LinearOrderedField α
β : Type u_2
inst✝² : Ring β
abv : β → α
inst✝¹ : IsAbsoluteValue abv
inst✝ : IsComplete β abv
f : CauSeq β abv
⊢ (const abv f.lim - f).LimZero
state_after: no goals
Theorem: EuclideanGeometry.oangle_left_eq_arcsin_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: have hs : (∡ p₃ p₁ p₂).sign = 1 := by rw [← oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ ∡ p₃ p₁ p₂ = ↑(Real.arcsin (dist p₃ p₂ / dist p₁ p₃))
state_after: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₃ p₁ p₂).sign = 1
⊢ ∡ p₃ p₁ p₂ = ↑(Real.arcsin (dist p₃ p₂ / dist p₁ p₃))

tactic: rw [oangle_eq_angle_of_sign_eq_one hs, angle_comm,
  angle_eq_arcsin_of_angle_eq_pi_div_two (angle_rev_eq_pi_div_two_of_oangle_eq_pi_div_two h)
    (Or.inr (left_ne_of_oangle_eq_pi_div_two h)),
  dist_comm p₁ p₃]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₃ p₁ p₂).sign = 1
⊢ ∡ p₃ p₁ p₂ = ↑(Real.arcsin (dist p₃ p₂ / dist p₁ p₃))
state_after: no goals

tactic: rw [← oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ (∡ p₃ p₁ p₂).sign = 1
state_after: no goals
Theorem: SimpleGraph.fromEdgeSet_empty
File: Mathlib/Combinatorics/SimpleGraph/Basic.lean

tactic: ext v w
state_before: ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v w : V
e : Sym2 V
s : Set (Sym2 V)
⊢ fromEdgeSet ∅ = ⊥
state_after: case Adj.h.h.a
ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v✝ w✝ : V
e : Sym2 V
s : Set (Sym2 V)
v w : V
⊢ (fromEdgeSet ∅).Adj v w ↔ ⊥.Adj v w

tactic: simp only [fromEdgeSet_adj, Set.mem_empty_iff_false, false_and_iff, bot_adj]
state_before: case Adj.h.h.a
ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v✝ w✝ : V
e : Sym2 V
s : Set (Sym2 V)
v w : V
⊢ (fromEdgeSet ∅).Adj v w ↔ ⊥.Adj v w
state_after: no goals
Theorem: Finmap.disjoint_union_right
File: Mathlib/Data/Finmap.lean

tactic: rw [Disjoint.symm_iff, disjoint_union_left, Disjoint.symm_iff _ x, Disjoint.symm_iff _ x]
state_before: α : Type u
β : α → Type v
inst✝ : DecidableEq α
x y z : Finmap β
⊢ x.Disjoint (y ∪ z) ↔ x.Disjoint y ∧ x.Disjoint z
state_after: no goals
Theorem: WeierstrassCurve.Affine.map_addPolynomial
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

tactic: rw [addPolynomial, map_polynomial, eval_map, linePolynomial, addPolynomial, ← coe_mapRingHom,
  ← eval₂_hom, linePolynomial]
state_before: R : Type u
inst✝¹ : CommRing R
W : Affine R
S : Type v
inst✝ : CommRing S
f : R →+* S
x y L : R
⊢ (map W f).toAffine.addPolynomial (f x) (f y) (f L) = Polynomial.map f (W.addPolynomial x y L)
state_after: R : Type u
inst✝¹ : CommRing R
W : Affine R
S : Type v
inst✝ : CommRing S
f : R →+* S
x y L : R
⊢ eval₂ (mapRingHom f) (C (f L) * (X - C (f x)) + C (f y)) W.polynomial =
    eval₂ (mapRingHom f) ((mapRingHom f) (C L * (X - C x) + C y)) W.polynomial

tactic: map_simp
state_before: R : Type u
inst✝¹ : CommRing R
W : Affine R
S : Type v
inst✝ : CommRing S
f : R →+* S
x y L : R
⊢ eval₂ (mapRingHom f) (C (f L) * (X - C (f x)) + C (f y)) W.polynomial =
    eval₂ (mapRingHom f) ((mapRingHom f) (C L * (X - C x) + C y)) W.polynomial
state_after: no goals