1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: midpoint_comm
File: Mathlib/LinearAlgebra/AffineSpace/Midpoint.lean

tactic: rw [midpoint, ← lineMap_apply_one_sub, one_sub_invOf_two, midpoint]
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁷ : Ring R
inst✝⁶ : Invertible 2
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
x✝ y✝ z x y : P
⊢ midpoint R x y = midpoint R y x
state_after: no goals
Theorem: Ordinal.exists_lt_add_of_not_principal_add
File: Mathlib/SetTheory/Ordinal/Principal.lean

tactic: unfold Principal at ha
state_before: a : Ordinal.{u_1}
ha : ¬Principal (fun x x_1 => x + x_1) a
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a
state_after: a : Ordinal.{u_1}
ha : ¬∀ ⦃a_1 b : Ordinal.{u_1}⦄, a_1 < a → b < a → (fun x x_1 => x + x_1) a_1 b < a
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a

tactic: push_neg at ha
state_before: a : Ordinal.{u_1}
ha : ¬∀ ⦃a_1 b : Ordinal.{u_1}⦄, a_1 < a → b < a → (fun x x_1 => x + x_1) a_1 b < a
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a
state_after: a : Ordinal.{u_1}
ha : ∃ a_1 b, a_1 < a ∧ b < a ∧ a ≤ a_1 + b
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a

tactic: rcases ha with ⟨b, c, hb, hc, H⟩
state_before: a : Ordinal.{u_1}
ha : ∃ a_1 b, a_1 < a ∧ b < a ∧ a ≤ a_1 + b
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a
state_after: case intro.intro.intro.intro
a b c : Ordinal.{u_1}
hb : b < a
hc : c < a
H : a ≤ b + c
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a

tactic: refine
  ⟨b, _, hb, lt_of_le_of_ne (sub_le_self a b) fun hab => ?_, Ordinal.add_sub_cancel_of_le hb.le⟩
state_before: case intro.intro.intro.intro
a b c : Ordinal.{u_1}
hb : b < a
hc : c < a
H : a ≤ b + c
⊢ ∃ b c, b < a ∧ c < a ∧ b + c = a
state_after: case intro.intro.intro.intro
a b c : Ordinal.{u_1}
hb : b < a
hc : c < a
H : a ≤ b + c
hab : a - b = a
⊢ False

tactic: rw [← sub_le, hab] at H
state_before: case intro.intro.intro.intro
a b c : Ordinal.{u_1}
hb : b < a
hc : c < a
H : a ≤ b + c
hab : a - b = a
⊢ False
state_after: case intro.intro.intro.intro
a b c : Ordinal.{u_1}
hb : b < a
hc : c < a
H : a ≤ c
hab : a - b = a
⊢ False

tactic: exact H.not_lt hc
state_before: case intro.intro.intro.intro
a b c : Ordinal.{u_1}
hb : b < a
hc : c < a
H : a ≤ c
hab : a - b = a
⊢ False
state_after: no goals
Theorem: Real.dist_le_of_mem_Icc_01
File: Mathlib/Topology/MetricSpace/Pseudo/Lemmas.lean

tactic: simpa only [sub_zero] using Real.dist_le_of_mem_Icc hx hy
state_before: ι : Type u_1
α : Type u_2
inst✝ : PseudoMetricSpace α
x y : ℝ
hx : x ∈ Icc 0 1
hy : y ∈ Icc 0 1
⊢ dist x y ≤ 1
state_after: no goals
Theorem: Nat.doubleFactorial_le_factorial
File: Mathlib/Data/Nat/Factorial/DoubleFactorial.lean

tactic: rw [factorial_eq_mul_doubleFactorial]
state_before: n : ℕ
⊢ (n + 1)‼ ≤ (n + 1)!
state_after: n : ℕ
⊢ (n + 1)‼ ≤ (n + 1)‼ * n‼

tactic: exact Nat.le_mul_of_pos_right _ n.doubleFactorial_pos
state_before: n : ℕ
⊢ (n + 1)‼ ≤ (n + 1)‼ * n‼
state_after: no goals
Theorem: cauchySeq_of_edist_le_geometric_two
File: Mathlib/Analysis/SpecificLimits/Basic.lean

tactic: simp only [div_eq_mul_inv, ENNReal.inv_pow] at hu
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C / 2 ^ n
a : α
ha : Tendsto f atTop (𝓝 a)
⊢ CauchySeq f
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ CauchySeq f

tactic: refine cauchySeq_of_edist_le_geometric 2⁻¹ C ?_ hC hu
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ CauchySeq f
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ 2⁻¹ < 1

tactic: simp [ENNReal.one_lt_two]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ 2⁻¹ < 1
state_after: no goals
Theorem: ite_ne_right_iff
File: Mathlib/Logic/Basic.lean

tactic: rw [exists_prop]
state_before: α : Sort u_1
σ : α → Sort u_2
P Q R : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b c : α
A : P → α
B : ¬P → α
⊢ (∃ h, a ≠ b) ↔ P ∧ a ≠ b
state_after: no goals
Theorem: Polynomial.natDegree_pos_of_eraseLead_ne_zero
File: Mathlib/Algebra/Polynomial/EraseLead.lean

tactic: by_contra h₂
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : f.eraseLead ≠ 0
⊢ 0 < f.natDegree
state_after: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : f.eraseLead ≠ 0
h₂ : ¬0 < f.natDegree
⊢ False

tactic: rw [eq_C_of_natDegree_eq_zero (Nat.eq_zero_of_not_pos h₂)] at h
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : f.eraseLead ≠ 0
h₂ : ¬0 < f.natDegree
⊢ False
state_after: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : (C (f.coeff 0)).eraseLead ≠ 0
h₂ : ¬0 < f.natDegree
⊢ False

tactic: simp at h
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
h : (C (f.coeff 0)).eraseLead ≠ 0
h₂ : ¬0 < f.natDegree
⊢ False
state_after: no goals
Theorem: PartENat.lt_add_one_iff_lt
File: Mathlib/Data/Nat/PartENat.lean

tactic: refine ⟨le_of_lt_add_one, fun h => ?_⟩
state_before: x y : PartENat
hx : x ≠ ⊤
⊢ x < y + 1 ↔ x ≤ y
state_after: x y : PartENat
hx : x ≠ ⊤
h : x ≤ y
⊢ x < y + 1

tactic: rcases ne_top_iff.mp hx with ⟨m, rfl⟩
state_before: x y : PartENat
hx : x ≠ ⊤
h : x ≤ y
⊢ x < y + 1
state_after: case intro
y : PartENat
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m ≤ y
⊢ ↑m < y + 1

tactic: induction' y using PartENat.casesOn with n
state_before: case intro
y : PartENat
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m ≤ y
⊢ ↑m < y + 1
state_after: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m ≤ ⊤
⊢ ↑m < ⊤ + 1

case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m ≤ ↑n
⊢ ↑m < ↑n + 1

tactic: norm_cast
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m ≤ ↑n
⊢ ↑m < ↑n + 1
state_after: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m ≤ ↑n
⊢ m < n + 1

tactic: apply Nat.lt_succ_of_le
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m ≤ ↑n
⊢ m < n + 1
state_after: case intro.a.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m ≤ ↑n
⊢ m ≤ n

tactic: norm_cast at h
state_before: case intro.a.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m ≤ ↑n
⊢ m ≤ n
state_after: no goals

tactic: rw [top_add]
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m ≤ ⊤
⊢ ↑m < ⊤ + 1
state_after: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m ≤ ⊤
⊢ ↑m < ⊤

tactic: apply natCast_lt_top
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m ≤ ⊤
⊢ ↑m < ⊤
state_after: no goals
Theorem: EMetric.ball_zero
File: Mathlib/Topology/EMetricSpace/Basic.lean

tactic: rw [EMetric.ball_eq_empty_iff]
state_before: α : Type u
β : Type v
X : Type u_1
inst✝ : PseudoEMetricSpace α
x y z : α
ε ε₁ ε₂ : ℝ≥0∞
s t : Set α
⊢ ball x 0 = ∅
state_after: no goals
Theorem: Equiv.Perm.subtypeCongr.apply
File: Mathlib/Logic/Equiv/Basic.lean

tactic: by_cases h : p a <;> simp [Perm.subtypeCongr, h]
state_before: ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
a : ε
⊢ (ep.subtypeCongr en) a = if h : p a then ↑(ep ⟨a, h⟩) else ↑(en ⟨a, h⟩)
state_after: no goals
Theorem: Ideal.span_eq_top_iff_finite
File: Mathlib/RingTheory/Ideal/Basic.lean

tactic: simp_rw [eq_top_iff_one]
state_before: α : Type u
β : Type v
inst✝ : Semiring α
I : Ideal α
a b : α
s : Set α
⊢ span s = ⊤ ↔ ∃ s', ↑s' ⊆ s ∧ span ↑s' = ⊤
state_after: α : Type u
β : Type v
inst✝ : Semiring α
I : Ideal α
a b : α
s : Set α
⊢ 1 ∈ span s ↔ ∃ s', ↑s' ⊆ s ∧ 1 ∈ span ↑s'

tactic: exact ⟨Submodule.mem_span_finite_of_mem_span, fun ⟨s', h₁, h₂⟩ => span_mono h₁ h₂⟩
state_before: α : Type u
β : Type v
inst✝ : Semiring α
I : Ideal α
a b : α
s : Set α
⊢ 1 ∈ span s ↔ ∃ s', ↑s' ⊆ s ∧ 1 ∈ span ↑s'
state_after: no goals
Theorem: dist_div_norm_sq_smul
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: rw [dist_eq_norm, sqrt_sq (norm_nonneg _)]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : F
hx : x ≠ 0
hy : y ≠ 0
R : ℝ
hx' : ‖x‖ ≠ 0
hy' : ‖y‖ ≠ 0
⊢ dist ((R / ‖x‖) ^ 2 • x) ((R / ‖y‖) ^ 2 • y) = √(‖(R / ‖x‖) ^ 2 • x - (R / ‖y‖) ^ 2 • y‖ ^ 2)
state_after: no goals

tactic: field_simp [sq, norm_sub_mul_self_real, norm_smul, real_inner_smul_left, inner_smul_right,
  Real.norm_of_nonneg (mul_self_nonneg _)]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : F
hx : x ≠ 0
hy : y ≠ 0
R : ℝ
hx' : ‖x‖ ≠ 0
hy' : ‖y‖ ≠ 0
⊢ ‖(R / ‖x‖) ^ 2 • x - (R / ‖y‖) ^ 2 • y‖ ^ 2 = (R ^ 2 / (‖x‖ * ‖y‖)) ^ 2 * ‖x - y‖ ^ 2
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : F
hx : x ≠ 0
hy : y ≠ 0
R : ℝ
hx' : ‖x‖ ≠ 0
hy' : ‖y‖ ≠ 0
⊢ ((R * R * ‖x‖ * (R * R * ‖x‖) * (‖y‖ * ‖y‖ * (‖x‖ * ‖x‖)) -
            ‖x‖ * ‖x‖ * (‖x‖ * ‖x‖) * (2 * (R * R * (R * R * ⟪x, y⟫_ℝ)))) *
          (‖y‖ * ‖y‖ * (‖y‖ * ‖y‖)) +
        R * R * ‖y‖ * (R * R * ‖y‖) * (‖x‖ * ‖x‖ * (‖x‖ * ‖x‖) * (‖y‖ * ‖y‖ * (‖x‖ * ‖x‖)))) *
      (‖x‖ * ‖y‖ * (‖x‖ * ‖y‖)) =
    R * R * (R * R) * (‖x‖ * ‖x‖ - 2 * ⟪x, y⟫_ℝ + ‖y‖ * ‖y‖) *
      (‖x‖ * ‖x‖ * (‖x‖ * ‖x‖) * (‖y‖ * ‖y‖ * (‖x‖ * ‖x‖)) * (‖y‖ * ‖y‖ * (‖y‖ * ‖y‖)))

tactic: ring
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : F
hx : x ≠ 0
hy : y ≠ 0
R : ℝ
hx' : ‖x‖ ≠ 0
hy' : ‖y‖ ≠ 0
⊢ ((R * R * ‖x‖ * (R * R * ‖x‖) * (‖y‖ * ‖y‖ * (‖x‖ * ‖x‖)) -
            ‖x‖ * ‖x‖ * (‖x‖ * ‖x‖) * (2 * (R * R * (R * R * ⟪x, y⟫_ℝ)))) *
          (‖y‖ * ‖y‖ * (‖y‖ * ‖y‖)) +
        R * R * ‖y‖ * (R * R * ‖y‖) * (‖x‖ * ‖x‖ * (‖x‖ * ‖x‖) * (‖y‖ * ‖y‖ * (‖x‖ * ‖x‖)))) *
      (‖x‖ * ‖y‖ * (‖x‖ * ‖y‖)) =
    R * R * (R * R) * (‖x‖ * ‖x‖ - 2 * ⟪x, y⟫_ℝ + ‖y‖ * ‖y‖) *
      (‖x‖ * ‖x‖ * (‖x‖ * ‖x‖) * (‖y‖ * ‖y‖ * (‖x‖ * ‖x‖)) * (‖y‖ * ‖y‖ * (‖y‖ * ‖y‖)))
state_after: no goals

tactic: rw [sqrt_mul, sqrt_sq, sqrt_sq, dist_eq_norm] <;> positivity
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : F
hx : x ≠ 0
hy : y ≠ 0
R : ℝ
hx' : ‖x‖ ≠ 0
hy' : ‖y‖ ≠ 0
⊢ √((R ^ 2 / (‖x‖ * ‖y‖)) ^ 2 * ‖x - y‖ ^ 2) = R ^ 2 / (‖x‖ * ‖y‖) * dist x y
state_after: no goals
Theorem: jacobiSym.trichotomy
File: Mathlib/NumberTheory/LegendreSymbol/JacobiSymbol.lean

tactic: rw [Set.pair_comm]
state_before: a : ℤ
b : ℕ
⊢ {0, 1, -1} = ↑(MonoidHom.mrange ↑SignType.castHom)
state_after: a : ℤ
b : ℕ
⊢ {0, -1, 1} = ↑(MonoidHom.mrange ↑SignType.castHom)

tactic: exact (SignType.range_eq SignType.castHom).symm
state_before: a : ℤ
b : ℕ
⊢ {0, -1, 1} = ↑(MonoidHom.mrange ↑SignType.castHom)
state_after: no goals

tactic: intro _ ha'
state_before: a : ℤ
b : ℕ
⊢ ∀ x ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯, x ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯
state_after: a : ℤ
b : ℕ
x✝ : ℤ
ha' : x✝ ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯
⊢ x✝ ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯

tactic: rcases List.mem_pmap.mp ha' with ⟨p, hp, rfl⟩
state_before: a : ℤ
b : ℕ
x✝ : ℤ
ha' : x✝ ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯
⊢ x✝ ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯
state_after: case intro.intro
a : ℤ
b p : ℕ
hp : p ∈ b.factors
ha' : legendreSym p a ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯
⊢ legendreSym p a ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯

tactic: haveI : Fact p.Prime := ⟨prime_of_mem_factors hp⟩
state_before: case intro.intro
a : ℤ
b p : ℕ
hp : p ∈ b.factors
ha' : legendreSym p a ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯
⊢ legendreSym p a ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯
state_after: case intro.intro
a : ℤ
b p : ℕ
hp : p ∈ b.factors
ha' : legendreSym p a ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯
this : Fact (Nat.Prime p)
⊢ legendreSym p a ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯

tactic: exact quadraticChar_isQuadratic (ZMod p) a
state_before: case intro.intro
a : ℤ
b p : ℕ
hp : p ∈ b.factors
ha' : legendreSym p a ∈ List.pmap (fun p pp => legendreSym p a) b.factors ⋯
this : Fact (Nat.Prime p)
⊢ legendreSym p a ∈ (MonoidHom.mrange ↑SignType.castHom).copy {0, 1, -1} ⋯
state_after: no goals
Theorem: Equiv.Perm.sign_permCongr
File: Mathlib/GroupTheory/Perm/Sign.lean

tactic: simp
state_before: α : Type u
inst✝³ : DecidableEq α
β : Type v
inst✝² : Fintype α
inst✝¹ : DecidableEq β
inst✝ : Fintype β
e : α ≃ β
p : Perm α
⊢ ∀ (x : β), e.symm ((e.permCongr p) x) = p (e.symm x)
state_after: no goals
Theorem: MeasureTheory.OuterMeasure.pi_pi_le
File: Mathlib/MeasureTheory/Constructions/Pi.lean

tactic: rcases (pi univ s).eq_empty_or_nonempty with h | h
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝ : Fintype ι
m✝ m : (i : ι) → OuterMeasure (α i)
s : (i : ι) → Set (α i)
⊢ (OuterMeasure.pi m) (univ.pi s) ≤ ∏ i : ι, (m i) (s i)
state_after: case inl
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝ : Fintype ι
m✝ m : (i : ι) → OuterMeasure (α i)
s : (i : ι) → Set (α i)
h : univ.pi s = ∅
⊢ (OuterMeasure.pi m) (univ.pi s) ≤ ∏ i : ι, (m i) (s i)

case inr
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝ : Fintype ι
m✝ m : (i : ι) → OuterMeasure (α i)
s : (i : ι) → Set (α i)
h : (univ.pi s).Nonempty
⊢ (OuterMeasure.pi m) (univ.pi s) ≤ ∏ i : ι, (m i) (s i)

tactic: exact (boundedBy_le _).trans_eq (piPremeasure_pi h)
state_before: case inr
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝ : Fintype ι
m✝ m : (i : ι) → OuterMeasure (α i)
s : (i : ι) → Set (α i)
h : (univ.pi s).Nonempty
⊢ (OuterMeasure.pi m) (univ.pi s) ≤ ∏ i : ι, (m i) (s i)
state_after: no goals

tactic: simp [h]
state_before: case inl
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝ : Fintype ι
m✝ m : (i : ι) → OuterMeasure (α i)
s : (i : ι) → Set (α i)
h : univ.pi s = ∅
⊢ (OuterMeasure.pi m) (univ.pi s) ≤ ∏ i : ι, (m i) (s i)
state_after: no goals
Theorem: Polynomial.eval₂_zero
File: Mathlib/Algebra/Polynomial/Eval.lean

tactic: simp [eval₂_eq_sum]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
x : S
⊢ eval₂ f x 0 = 0
state_after: no goals
Theorem: exists_norm_le_of_cauchySeq
File: Mathlib/Analysis/SpecificLimits/Normed.lean

tactic: obtain ⟨b, ⟨_, key, _⟩⟩ := cauchySeq_iff_le_tendsto_0.mp h
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : SeminormedAddCommGroup α
r C : ℝ
f : ℕ → α
h : CauchySeq fun n => ∑ k ∈ Finset.range n, f k
⊢ ∃ C, ∀ (n : ℕ), ‖f n‖ ≤ C
state_after: case intro.intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : SeminormedAddCommGroup α
r C : ℝ
f : ℕ → α
h : CauchySeq fun n => ∑ k ∈ Finset.range n, f k
b : ℕ → ℝ
left✝ : ∀ (n : ℕ), 0 ≤ b n
key : ∀ (n m N : ℕ), N ≤ n → N ≤ m → dist (∑ k ∈ Finset.range n, f k) (∑ k ∈ Finset.range m, f k) ≤ b N
right✝ : Tendsto b atTop (𝓝 0)
⊢ ∃ C, ∀ (n : ℕ), ‖f n‖ ≤ C

tactic: refine ⟨b 0, fun n ↦ ?_⟩
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : SeminormedAddCommGroup α
r C : ℝ
f : ℕ → α
h : CauchySeq fun n => ∑ k ∈ Finset.range n, f k
b : ℕ → ℝ
left✝ : ∀ (n : ℕ), 0 ≤ b n
key : ∀ (n m N : ℕ), N ≤ n → N ≤ m → dist (∑ k ∈ Finset.range n, f k) (∑ k ∈ Finset.range m, f k) ≤ b N
right✝ : Tendsto b atTop (𝓝 0)
⊢ ∃ C, ∀ (n : ℕ), ‖f n‖ ≤ C
state_after: case intro.intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : SeminormedAddCommGroup α
r C : ℝ
f : ℕ → α
h : CauchySeq fun n => ∑ k ∈ Finset.range n, f k
b : ℕ → ℝ
left✝ : ∀ (n : ℕ), 0 ≤ b n
key : ∀ (n m N : ℕ), N ≤ n → N ≤ m → dist (∑ k ∈ Finset.range n, f k) (∑ k ∈ Finset.range m, f k) ≤ b N
right✝ : Tendsto b atTop (𝓝 0)
n : ℕ
⊢ ‖f n‖ ≤ b 0

tactic: simpa only [dist_partial_sum'] using key n (n + 1) 0 (_root_.zero_le _) (_root_.zero_le _)
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : SeminormedAddCommGroup α
r C : ℝ
f : ℕ → α
h : CauchySeq fun n => ∑ k ∈ Finset.range n, f k
b : ℕ → ℝ
left✝ : ∀ (n : ℕ), 0 ≤ b n
key : ∀ (n m N : ℕ), N ≤ n → N ≤ m → dist (∑ k ∈ Finset.range n, f k) (∑ k ∈ Finset.range m, f k) ≤ b N
right✝ : Tendsto b atTop (𝓝 0)
n : ℕ
⊢ ‖f n‖ ≤ b 0
state_after: no goals
Theorem: dite_ne_left_iff
File: Mathlib/Logic/Basic.lean

tactic: rw [Ne, dite_eq_left_iff, not_forall]
state_before: α : Sort u_1
σ : α → Sort u_2
P Q R : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b c : α
A : P → α
B : ¬P → α
⊢ dite P (fun x => a) B ≠ a ↔ ∃ h, a ≠ B h
state_after: α : Sort u_1
σ : α → Sort u_2
P Q R : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b c : α
A : P → α
B : ¬P → α
⊢ (∃ x, ¬B x = a) ↔ ∃ h, a ≠ B h

tactic: exact exists_congr fun h ↦ by rw [ne_comm]
state_before: α : Sort u_1
σ : α → Sort u_2
P Q R : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b c : α
A : P → α
B : ¬P → α
⊢ (∃ x, ¬B x = a) ↔ ∃ h, a ≠ B h
state_after: no goals

tactic: rw [ne_comm]
state_before: α : Sort u_1
σ : α → Sort u_2
P Q R : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b c : α
A : P → α
B : ¬P → α
h : ¬P
⊢ ¬B h = a ↔ a ≠ B h
state_after: no goals
Theorem: Polynomial.prod_X_sub_C_coeff_card_pred
File: Mathlib/Algebra/Polynomial/BigOperators.lean

tactic: simpa using multiset_prod_X_sub_C_coeff_card_pred (s.1.map f) (by simpa using hs)
state_before: R : Type u
ι : Type w
s✝ : Finset ι
inst✝ : CommRing R
s : Finset ι
f : ι → R
hs : 0 < s.card
⊢ (∏ i ∈ s, (X - C (f i))).coeff (s.card - 1) = -∑ i ∈ s, f i
state_after: no goals

tactic: simpa using hs
state_before: R : Type u
ι : Type w
s✝ : Finset ι
inst✝ : CommRing R
s : Finset ι
f : ι → R
hs : 0 < s.card
⊢ 0 < Multiset.card (Multiset.map f s.val)
state_after: no goals
Theorem: Real.pi_div_two_le_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [Real.pi, mul_div_cancel_left₀ _ (two_ne_zero' ℝ)]
state_before: ⊢ π / 2 ≤ 2
state_after: ⊢ Classical.choose exists_cos_eq_zero ≤ 2

tactic: exact (Classical.choose_spec exists_cos_eq_zero).1.2
state_before: ⊢ Classical.choose exists_cos_eq_zero ≤ 2
state_after: no goals
Theorem: iSup_eq_iSup_finset
File: Mathlib/Data/Finset/Lattice.lean

tactic: refine le_antisymm ?_ ?_
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
ι' : Sort u_7
inst✝ : CompleteLattice α
s : ι → α
⊢ ⨆ i, s i = ⨆ t, ⨆ i ∈ t, s i
state_after: case refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
ι' : Sort u_7
inst✝ : CompleteLattice α
s : ι → α
⊢ ⨆ i, s i ≤ ⨆ t, ⨆ i ∈ t, s i

case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
ι' : Sort u_7
inst✝ : CompleteLattice α
s : ι → α
⊢ ⨆ t, ⨆ i ∈ t, s i ≤ ⨆ i, s i

tactic: exact iSup_le fun b => le_iSup_of_le {b} <| le_iSup_of_le b <| le_iSup_of_le (by simp) <| le_rfl
state_before: case refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
ι' : Sort u_7
inst✝ : CompleteLattice α
s : ι → α
⊢ ⨆ i, s i ≤ ⨆ t, ⨆ i ∈ t, s i
state_after: no goals

tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
ι' : Sort u_7
inst✝ : CompleteLattice α
s : ι → α
b : ι
⊢ b ∈ {b}
state_after: no goals

tactic: exact iSup_le fun t => iSup_le fun b => iSup_le fun _ => le_iSup _ _
state_before: case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
ι' : Sort u_7
inst✝ : CompleteLattice α
s : ι → α
⊢ ⨆ t, ⨆ i ∈ t, s i ≤ ⨆ i, s i
state_after: no goals
Theorem: MeasureTheory.forall_measure_preimage_mul_iff
File: Mathlib/MeasureTheory/Group/Measure.lean

tactic: exact ⟨fun h => ⟨h⟩, fun h => h.1⟩
state_before: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSpace H
inst✝¹ : Mul G
μ✝ : Measure G
inst✝ : MeasurableMul G
μ : Measure G
⊢ (∀ (g : G), Measure.map (fun x => g * x) μ = μ) ↔ μ.IsMulLeftInvariant
state_after: no goals

tactic: simp_rw [Measure.ext_iff]
state_before: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSpace H
inst✝¹ : Mul G
μ✝ : Measure G
inst✝ : MeasurableMul G
μ : Measure G
⊢ (∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => g * h) ⁻¹' A) = μ A) ↔
    ∀ (g : G), Measure.map (fun x => g * x) μ = μ
state_after: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSpace H
inst✝¹ : Mul G
μ✝ : Measure G
inst✝ : MeasurableMul G
μ : Measure G
⊢ (∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => g * h) ⁻¹' A) = μ A) ↔
    ∀ (g : G) (s : Set G), MeasurableSet s → (Measure.map (fun x => g * x) μ) s = μ s

tactic: refine forall_congr' fun g => forall_congr' fun A => forall_congr' fun hA => ?_
state_before: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSpace H
inst✝¹ : Mul G
μ✝ : Measure G
inst✝ : MeasurableMul G
μ : Measure G
⊢ (∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => g * h) ⁻¹' A) = μ A) ↔
    ∀ (g : G) (s : Set G), MeasurableSet s → (Measure.map (fun x => g * x) μ) s = μ s
state_after: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSpace H
inst✝¹ : Mul G
μ✝ : Measure G
inst✝ : MeasurableMul G
μ : Measure G
g : G
A : Set G
hA : MeasurableSet A
⊢ μ ((fun h => g * h) ⁻¹' A) = μ A ↔ (Measure.map (fun x => g * x) μ) A = μ A

tactic: rw [map_apply (measurable_const_mul g) hA]
state_before: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSpace H
inst✝¹ : Mul G
μ✝ : Measure G
inst✝ : MeasurableMul G
μ : Measure G
g : G
A : Set G
hA : MeasurableSet A
⊢ μ ((fun h => g * h) ⁻¹' A) = μ A ↔ (Measure.map (fun x => g * x) μ) A = μ A
state_after: no goals
Theorem: isClosed_range_inr
File: Mathlib/Topology/Constructions.lean

tactic: rw [← isOpen_compl_iff, compl_range_inr]
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace W
⊢ IsClosed (range inr)
state_after: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace W
⊢ IsOpen (range inl)

tactic: exact isOpen_range_inl
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace W
⊢ IsOpen (range inl)
state_after: no goals
Theorem: SetTheory.PGame.birthday_eq_zero
File: Mathlib/SetTheory/Game/Birthday.lean

tactic: rw [birthday_def, max_eq_zero, lsub_eq_zero_iff, lsub_eq_zero_iff]
state_before: x : PGame
⊢ x.birthday = 0 ↔ IsEmpty x.LeftMoves ∧ IsEmpty x.RightMoves
state_after: no goals
Theorem: Localization.liftOn_mk'
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [← mk_eq_monoidOf_mk', liftOn_mk]
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
p : Sort u
f : M → ↥S → p
H : ∀ {a c : M} {b d : ↥S}, (r S) (a, b) (c, d) → f a b = f c d
a : M
b : ↥S
⊢ ((monoidOf S).mk' a b).liftOn f H = f a b
state_after: no goals
Theorem: ZNum.of_nat_toZNumNeg
File: Mathlib/Data/Num/Lemmas.lean

tactic: rw [← of_nat_toZNum, Num.zneg_toZNum]
state_before: α : Type u_1
n : ℕ
⊢ (↑n).toZNumNeg = -↑n
state_after: no goals
Theorem: Real.pi_lt_3141593
File: Mathlib/Data/Real/Pi/Bounds.lean

tactic: pi_upper_bound
    [27720 / 19601, 56935 / 30813, 49359 / 25163, 258754 / 130003, 113599 / 56868,
      1101994 / 551163, 8671537 / 4336095, 3877807 / 1938940, 52483813 / 26242030,
      56946167 / 28473117, 23798415 / 11899211]
state_before: ⊢ π < 3.141593
state_after: no goals