ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: MvPolynomial.constantCoeff_rename
File: Mathlib/Algebra/MvPolynomial/Rename.lean

Proof steps:
state_before: σ : Type u_1
τ✝ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
τ : Type u_6
f : σ → τ
φ : MvPolynomial σ R
⊢ constantCoeff ((rename f) φ) = constantCoeff φ
state_after: case h_C
σ : Type u_1
τ✝ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
τ : Type u_6
f : σ → τ
φ : MvPolynomial σ R
⊢ ∀ (a : R), constantCoeff ((rename f) (C a)) = constantCoeff (C a)

case h_add
σ : Type u_1
τ✝ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
τ : Type u_6
f : σ → τ
φ : MvPolynomial σ R
⊢ ∀ (p q : MvPolynomial σ R),
    constantCoeff ((rename f) p) = constantCoeff p →
      constantCoeff ((rename f) q) = constantCoeff q → constantCoeff ((rename f) (p + q)) = constantCoeff (p + q)

case h_X
σ : Type u_1
τ✝ : Type u_2
α : Type u_3
R : Type u_4
S : Type u_5
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
τ : Type u_6
f : σ → τ
φ : MvPolynomial σ R
⊢ ∀ (p : MvPolynomial σ R) (n : σ),
    constantCoeff ((rename f) p) = constantCoeff p → constantCoeff ((rename f) (p * X n)) = constantCoeff (p * X n)
tactic: apply φ.induction_on
Theorem: EllipticCurve.variableChange_Δ'
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
E : EllipticCurve R
C : WeierstrassCurve.VariableChange R
⊢ ↑(C.u⁻¹ ^ 12 * E.Δ') = (E.variableChange C).Δ
state_after: no goals
tactic: rw [Units.val_mul, Units.val_pow_eq_pow_val, coe_Δ', E.variableChange_Δ]
Theorem: Filter.blimsup_eq_limsup_subtype
File: Mathlib/Order/LiminfLimsup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝ : ConditionallyCompleteLattice α
f : Filter β
u : β → α
p : β → Prop
⊢ blimsup u f p = limsup (u ∘ Subtype.val) (comap Subtype.val f)
state_after: no goals
tactic: rw [blimsup_eq_limsup, limsup, limsup, ← map_map, map_comap_setCoe_val]
Theorem: egauge_smul_left
File: Mathlib/Analysis/Convex/EGauge.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝² : NormedDivisionRing 𝕜
α : Type u_2
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
c : 𝕜
s✝ t : Set E
x✝ y : E
r : ℝ≥0∞
hc : c ≠ 0
s : Set E
x : E
⊢ egauge 𝕜 (c • s) x = egauge 𝕜 s x / ↑‖c‖₊
state_after: 𝕜 : Type u_1
inst✝² : NormedDivisionRing 𝕜
α : Type u_2
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
c : 𝕜
s✝ t : Set E
x✝ y : E
r : ℝ≥0∞
hc : c ≠ 0
s : Set E
x : E
⊢ egauge 𝕜 (c • s) x ≤ egauge 𝕜 s x / ↑‖c‖₊
tactic: refine le_antisymm ?_ (le_egauge_smul_left _ _ _)
state_before: 𝕜 : Type u_1
inst✝² : NormedDivisionRing 𝕜
α : Type u_2
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
c : 𝕜
s✝ t : Set E
x✝ y : E
r : ℝ≥0∞
hc : c ≠ 0
s : Set E
x : E
⊢ egauge 𝕜 (c • s) x ≤ egauge 𝕜 s x / ↑‖c‖₊
state_after: 𝕜 : Type u_1
inst✝² : NormedDivisionRing 𝕜
α : Type u_2
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
c : 𝕜
s✝ t : Set E
x✝ y : E
r : ℝ≥0∞
hc : c ≠ 0
s : Set E
x : E
⊢ egauge 𝕜 (c • s) x * ↑‖c‖₊ ≤ egauge 𝕜 s x
tactic: rw [ENNReal.le_div_iff_mul_le (by simp [*]) (by simp)]
state_before: 𝕜 : Type u_1
inst✝² : NormedDivisionRing 𝕜
α : Type u_2
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
c : 𝕜
s✝ t : Set E
x✝ y : E
r : ℝ≥0∞
hc : c ≠ 0
s : Set E
x : E
⊢ egauge 𝕜 (c • s) x * ↑‖c‖₊ ≤ egauge 𝕜 s x
state_after: no goals
tactic: calc
    egauge 𝕜 (c • s) x * ‖c‖₊ = egauge 𝕜 (c • s) x / ‖c⁻¹‖₊ := by
      rw [nnnorm_inv, ENNReal.coe_inv (by simpa), div_eq_mul_inv, inv_inv]
    _ ≤ egauge 𝕜 (c⁻¹ • c • s) x := le_egauge_smul_left _ _ _
    _ = egauge 𝕜 s x := by rw [inv_smul_smul₀ hc]
Theorem: AlgebraicTopology.DoldKan.Γ₀.Obj.Termwise.mapMono_eq_zero
File: Mathlib/AlgebraicTopology/DoldKan/FunctorGamma.lean

Proof steps:
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : Δ ≠ Δ'
h₂ : ¬Isδ₀ i
⊢ mapMono K i = 0
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : Δ ≠ Δ'
h₂ : ¬Isδ₀ i
⊢ (if h : Δ = Δ' then eqToHom ⋯ else if h : Isδ₀ i then K.d Δ.len Δ'.len else 0) = 0
tactic: unfold mapMono
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : Δ ≠ Δ'
h₂ : ¬Isδ₀ i
⊢ (if h : Δ = Δ' then eqToHom ⋯ else if h : Isδ₀ i then K.d Δ.len Δ'.len else 0) = 0
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : ¬Δ = Δ'
h₂ : ¬Isδ₀ i
⊢ (if h : Δ = Δ' then eqToHom ⋯ else if h : Isδ₀ i then K.d Δ.len Δ'.len else 0) = 0
tactic: rw [Ne] at h₁
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : ¬Δ = Δ'
h₂ : ¬Isδ₀ i
⊢ (if h : Δ = Δ' then eqToHom ⋯ else if h : Isδ₀ i then K.d Δ.len Δ'.len else 0) = 0
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : ¬Δ = Δ'
h₂ : ¬Isδ₀ i
⊢ 0 = 0
tactic: split_ifs
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
K K' : ChainComplex C ℕ
f : K ⟶ K'
Δ Δ' Δ'' : SimplexCategory
i : Δ' ⟶ Δ
inst✝ : Mono i
h₁ : ¬Δ = Δ'
h₂ : ¬Isδ₀ i
⊢ 0 = 0
state_after: no goals
tactic: rfl
Theorem: Pell.IsFundamental.zpow_eq_one_iff
File: Mathlib/NumberTheory/Pell.lean

Proof steps:
state_before: d : ℤ
a : Solution₁ d
h : IsFundamental a
n : ℤ
⊢ a ^ n = 1 ↔ n = 0
state_after: d : ℤ
a : Solution₁ d
h : IsFundamental a
n : ℤ
⊢ a ^ n = a ^ 0 ↔ n = 0
tactic: rw [← zpow_zero a]
state_before: d : ℤ
a : Solution₁ d
h : IsFundamental a
n : ℤ
⊢ a ^ n = a ^ 0 ↔ n = 0
state_after: no goals
tactic: exact ⟨fun H => h.y_strictMono.injective (congr_arg Solution₁.y H), fun H => H ▸ rfl⟩
Theorem: inv_ne_zero
File: Mathlib/Algebra/GroupWithZero/NeZero.lean

Proof steps:
state_before: M₀ : Type u_1
M₀' : Type u_2
inst✝² : MulZeroOneClass M₀
inst✝¹ : Nontrivial M₀
G₀ : Type u_3
inst✝ : GroupWithZero G₀
a : G₀
h : a ≠ 0
a_eq_0 : a⁻¹ = 0
⊢ False
state_after: M₀ : Type u_1
M₀' : Type u_2
inst✝² : MulZeroOneClass M₀
inst✝¹ : Nontrivial M₀
G₀ : Type u_3
inst✝ : GroupWithZero G₀
a : G₀
h : a ≠ 0
a_eq_0 : a⁻¹ = 0
this : a * a⁻¹ = 1
⊢ False
tactic: have := mul_inv_cancel h
state_before: M₀ : Type u_1
M₀' : Type u_2
inst✝² : MulZeroOneClass M₀
inst✝¹ : Nontrivial M₀
G₀ : Type u_3
inst✝ : GroupWithZero G₀
a : G₀
h : a ≠ 0
a_eq_0 : a⁻¹ = 0
this : a * a⁻¹ = 1
⊢ False
state_after: no goals
tactic: simp only [a_eq_0, mul_zero, zero_ne_one] at this
Theorem: indicator_le_thickenedIndicator
File: Mathlib/Topology/MetricSpace/ThickenedIndicator.lean

Proof steps:
state_before: α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
δ_pos : 0 < δ
E : Set α
⊢ (E.indicator fun x => 1) ≤ ⇑(thickenedIndicator δ_pos E)
state_after: α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
δ_pos : 0 < δ
E : Set α
a : α
⊢ E.indicator (fun x => 1) a ≤ (thickenedIndicator δ_pos E) a
tactic: intro a
state_before: α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
δ_pos : 0 < δ
E : Set α
a : α
⊢ E.indicator (fun x => 1) a ≤ (thickenedIndicator δ_pos E) a
state_after: case pos
α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
δ_pos : 0 < δ
E : Set α
a : α
h : a ∈ E
⊢ E.indicator (fun x => 1) a ≤ (thickenedIndicator δ_pos E) a

case neg
α : Type u_1
inst✝ : PseudoEMetricSpace α
δ : ℝ
δ_pos : 0 < δ
E : Set α
a : α
h : a ∉ E
⊢ E.indicator (fun x => 1) a ≤ (thickenedIndicator δ_pos E) a
tactic: by_cases h : a ∈ E
Theorem: Submonoid.LocalizationMap.lift_injective_iff
File: Mathlib/GroupTheory/MonoidLocalization/Basic.lean

Proof steps:
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
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
⊢ Injective ⇑(f.lift hg) ↔ ∀ (x y : M), f.toMap x = f.toMap y ↔ g x = g y
state_after: case mp
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
⊢ Injective ⇑(f.lift hg) → ∀ (x y : M), f.toMap x = f.toMap y ↔ g x = g y

case mpr
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
⊢ (∀ (x y : M), f.toMap x = f.toMap y ↔ g x = g y) → Injective ⇑(f.lift hg)
tactic: constructor
Theorem: Real.logb_le_logb_of_base_lt_one
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

Proof steps:
state_before: b x y : ℝ
b_pos : 0 < b
b_lt_one : b < 1
h : 0 < x
h₁ : 0 < y
⊢ logb b x ≤ logb b y ↔ y ≤ x
state_after: no goals
tactic: rw [logb, logb, div_le_div_right_of_neg (log_neg b_pos b_lt_one), log_le_log_iff h₁ h]
Theorem: Function.IsPeriodicPt.eq_of_apply_eq_same
File: Mathlib/Dynamics/PeriodicPts.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hx : IsPeriodicPt f n x
hy : IsPeriodicPt f n y
hn : 0 < n
h : f x = f y
⊢ x = y
state_after: no goals
tactic: rw [← hx.eq, ← hy.eq, ← iterate_pred_comp_of_pos f hn, comp_apply, comp_apply, h]
Theorem: ProbabilityTheory.cdf_measure_stieltjesFunction
File: Mathlib/Probability/Cdf.lean

Proof steps:
state_before: f : StieltjesFunction
hf0 : Tendsto (↑f) atBot (𝓝 0)
hf1 : Tendsto (↑f) atTop (𝓝 1)
⊢ cdf f.measure = f
state_after: f : StieltjesFunction
hf0 : Tendsto (↑f) atBot (𝓝 0)
hf1 : Tendsto (↑f) atTop (𝓝 1)
⊢ (cdf f.measure).measure = f.measure
tactic: refine (cdf f.measure).eq_of_measure_of_tendsto_atBot f ?_ (tendsto_cdf_atBot _) hf0
state_before: f : StieltjesFunction
hf0 : Tendsto (↑f) atBot (𝓝 0)
hf1 : Tendsto (↑f) atTop (𝓝 1)
⊢ (cdf f.measure).measure = f.measure
state_after: f : StieltjesFunction
hf0 : Tendsto (↑f) atBot (𝓝 0)
hf1 : Tendsto (↑f) atTop (𝓝 1)
h_prob : IsProbabilityMeasure f.measure
⊢ (cdf f.measure).measure = f.measure
tactic: have h_prob : IsProbabilityMeasure f.measure :=
    ⟨by rw [f.measure_univ hf0 hf1, sub_zero, ENNReal.ofReal_one]⟩
state_before: f : StieltjesFunction
hf0 : Tendsto (↑f) atBot (𝓝 0)
hf1 : Tendsto (↑f) atTop (𝓝 1)
h_prob : IsProbabilityMeasure f.measure
⊢ (cdf f.measure).measure = f.measure
state_after: no goals
tactic: exact measure_cdf f.measure
Theorem: BumpCovering.continuous_toPOUFun
File: Mathlib/Topology/PartitionOfUnity.lean

Proof steps:
state_before: ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
⊢ Continuous (f.toPOUFun i)
state_after: ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
⊢ LocallyFinite fun i => mulSupport fun x => 1 - (f i) x
tactic: refine (f i).continuous.mul <|
    continuous_finprod_cond (fun j _ => continuous_const.sub (f j).continuous) ?_
state_before: ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
⊢ LocallyFinite fun i => mulSupport fun x => 1 - (f i) x
state_after: ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
⊢ LocallyFinite fun i => support ⇑(f i)
tactic: simp only [mulSupport_one_sub]
state_before: ι : Type u
X : Type v
inst✝ : TopologicalSpace X
s : Set X
f : BumpCovering ι X s
i : ι
⊢ LocallyFinite fun i => support ⇑(f i)
state_after: no goals
tactic: exact f.locallyFinite
Theorem: ContFract.convs_eq_convs'
File: Mathlib/Algebra/ContinuedFractions/ConvergentsEquiv.lean

Proof steps:
state_before: K : Type u_1
n : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
⊢ (↑↑c).convs = (↑↑c).convs'
state_after: case a
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
n : ℕ
⊢ (↑↑c).convs.get n = Stream'.get (↑↑c).convs' n
tactic: ext n
state_before: case a
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
n : ℕ
⊢ (↑↑c).convs.get n = Stream'.get (↑↑c).convs' n
state_after: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
n : ℕ
⊢ ∀ {gp : Pair K} {m : ℕ}, m < n → (↑↑c).s.get? m = some gp → 0 < gp.a ∧ 0 < gp.b
tactic: apply convs_eq_convs'
state_before: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
n : ℕ
⊢ ∀ {gp : Pair K} {m : ℕ}, m < n → (↑↑c).s.get? m = some gp → 0 < gp.a ∧ 0 < gp.b
state_after: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
n : ℕ
gp : Pair K
m : ℕ
a✝ : m < n
s_nth_eq : (↑↑c).s.get? m = some gp
⊢ 0 < gp.a ∧ 0 < gp.b
tactic: intro gp m _ s_nth_eq
state_before: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContFract K
n : ℕ
gp : Pair K
m : ℕ
a✝ : m < n
s_nth_eq : (↑↑c).s.get? m = some gp
⊢ 0 < gp.a ∧ 0 < gp.b
state_after: no goals
tactic: exact ⟨zero_lt_one.trans_le ((c : SimpContFract K).property m gp.a
    (partNum_eq_s_a s_nth_eq)).symm.le, c.property m gp.b <| partDen_eq_s_b s_nth_eq⟩
Theorem: Int.coprime_of_sq_sum
File: Mathlib/NumberTheory/FLT/Four.lean

Proof steps:
state_before: r s : ℤ
h2 : IsCoprime s r
⊢ IsCoprime (r ^ 2 + s ^ 2) r
state_after: r s : ℤ
h2 : IsCoprime s r
⊢ IsCoprime (r * r + s * s) r
tactic: rw [sq, sq]
state_before: r s : ℤ
h2 : IsCoprime s r
⊢ IsCoprime (r * r + s * s) r
state_after: no goals
tactic: exact (IsCoprime.mul_left h2 h2).mul_add_left_left r
Theorem: CategoryTheory.Sieve.equalizer_self
File: Mathlib/CategoryTheory/Sites/LocallyFullyFaithful.lean

Proof steps:
state_before: C : Type uC
inst✝¹ : Category.{vC, uC} C
D : Type uD
inst✝ : Category.{vD, uD} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
U V : C
f : U ⟶ V
⊢ equalizer f f = ⊤
state_after: case h
C : Type uC
inst✝¹ : Category.{vC, uC} C
D : Type uD
inst✝ : Category.{vD, uD} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
U V : C
f : U ⟶ V
Y✝ : C
f✝ : Y✝ ⟶ U
⊢ (equalizer f f).arrows f✝ ↔ ⊤.arrows f✝
tactic: ext
state_before: case h
C : Type uC
inst✝¹ : Category.{vC, uC} C
D : Type uD
inst✝ : Category.{vD, uD} D
G : C ⥤ D
J : GrothendieckTopology C
K : GrothendieckTopology D
U V : C
f : U ⟶ V
Y✝ : C
f✝ : Y✝ ⟶ U
⊢ (equalizer f f).arrows f✝ ↔ ⊤.arrows f✝
state_after: no goals
tactic: simp
Theorem: IsCoprime.add_mul_right_right
File: Mathlib/RingTheory/Coprime/Basic.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
x y : R
h : IsCoprime x y
z : R
⊢ IsCoprime x (y + z * x)
state_after: R : Type u
inst✝ : CommRing R
x y : R
h : IsCoprime x y
z : R
⊢ IsCoprime (y + z * x) x
tactic: rw [isCoprime_comm]
state_before: R : Type u
inst✝ : CommRing R
x y : R
h : IsCoprime x y
z : R
⊢ IsCoprime (y + z * x) x
state_after: no goals
tactic: exact h.symm.add_mul_right_left z
Theorem: Nat.sum_range_choose_halfway
File: Mathlib/Data/Nat/Choose/Sum.lean

Proof steps:
state_before: R : Type u_1
m i : ℕ
hi : i ∈ range (m + 1)
⊢ i ≤ 2 * m + 1
state_after: no goals
tactic: linarith [mem_range.1 hi]
state_before: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ 2 * ∑ i ∈ range (m + 1), (2 * m + 1).choose i =
    ∑ i ∈ range (m + 1), (2 * m + 1).choose i + ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i)
state_after: no goals
tactic: rw [two_mul, this]
state_before: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ ∑ i ∈ range (m + 1), (2 * m + 1).choose i + ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) =
    ∑ i ∈ range (m + 1), (2 * m + 1).choose i + ∑ i ∈ Ico (m + 1) (2 * m + 2), (2 * m + 1).choose i
state_after: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ ∑ i ∈ Ico 0 (m + 1), (2 * m + 1).choose i +
      ∑ j ∈ Ico (2 * m + 1 + 1 - (m + 1)) (2 * m + 1 + 1 - 0), (2 * m + 1).choose j =
    ∑ i ∈ Ico 0 (m + 1), (2 * m + 1).choose i + ∑ i ∈ Ico (m + 1) (2 * m + 2), (2 * m + 1).choose i

case h
R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ m + 1 ≤ 2 * m + 1 + 1
tactic: rw [range_eq_Ico, sum_Ico_reflect]
state_before: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ m + 1 ≤ 2 * m + 2
state_after: no goals
tactic: omega
state_before: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ 2 ^ (2 * m + 1) = 2 * 4 ^ m
state_after: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ 2 * (2 ^ 2) ^ m = 2 * 4 ^ m
tactic: rw [Nat.pow_succ, pow_mul, mul_comm]
state_before: R : Type u_1
m : ℕ
this : ∑ i ∈ range (m + 1), (2 * m + 1).choose (2 * m + 1 - i) = ∑ i ∈ range (m + 1), (2 * m + 1).choose i
⊢ 2 * (2 ^ 2) ^ m = 2 * 4 ^ m
state_after: no goals
tactic: rfl
Theorem: Setoid.comap_eq
File: Mathlib/Data/Setoid/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
r✝ : Setoid α
f✝ f : α → β
r : Setoid β
x y : α
⊢ Setoid.r x y ↔ ⟦f x⟧ = ⟦f y⟧
state_after: α : Type u_1
β : Type u_2
r✝ : Setoid α
f✝ f : α → β
r : Setoid β
x y : α
⊢ Setoid.r x y ↔ f x ≈ f y
tactic: rw [Quotient.eq]
state_before: α : Type u_1
β : Type u_2
r✝ : Setoid α
f✝ f : α → β
r : Setoid β
x y : α
⊢ Setoid.r x y ↔ f x ≈ f y
state_after: no goals
tactic: rfl
Theorem: Matrix.toLinAlgEquiv_apply
File: Mathlib/LinearAlgebra/Matrix/ToLin.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : CommSemiring R
l : Type u_2
m : Type u_3
n : Type u_4
inst✝⁸ : Fintype n
inst✝⁷ : Fintype m
inst✝⁶ : DecidableEq n
M₁ : Type u_5
M₂ : Type u_6
inst✝⁵ : AddCommMonoid M₁
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₁
inst✝² : Module R M₂
v₁ : Basis n R M₁
v₂ : Basis m R M₂
M₃ : Type u_7
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
v₃ : Basis l R M₃
M : Matrix n n R
v : M₁
⊢ v₁.equivFun.symm ((toLinAlgEquiv' M) ⇑(v₁.repr v)) = ∑ j : n, (M *ᵥ ⇑(v₁.repr v)) j • v₁ j
state_after: no goals
tactic: rw [Matrix.toLinAlgEquiv'_apply, v₁.equivFun_symm_apply]
Theorem: WeierstrassCurve.Affine.Point.add_of_Y_eq
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W✝ : Affine R
F : Type u
inst✝ : Field F
W : Affine F
x₁ x₂ y₁ y₂ : F
h₁ : W.Nonsingular x₁ y₁
h₂ : W.Nonsingular x₂ y₂
hx : x₁ = x₂
hy : y₁ = W.negY x₂ y₂
⊢ some h₁ + some h₂ = 0
state_after: R : Type u
inst✝¹ : CommRing R
W✝ : Affine R
F : Type u
inst✝ : Field F
W : Affine F
x₁ x₂ y₁ y₂ : F
h₁ : W.Nonsingular x₁ y₁
h₂ : W.Nonsingular x₂ y₂
hx : x₁ = x₂
hy : y₁ = W.negY x₂ y₂
⊢ (if h : x₁ = x₂ ∧ y₁ = W.negY x₂ y₂ then 0 else some ⋯) = 0
tactic: simp_rw [← add_def, add]
state_before: R : Type u
inst✝¹ : CommRing R
W✝ : Affine R
F : Type u
inst✝ : Field F
W : Affine F
x₁ x₂ y₁ y₂ : F
h₁ : W.Nonsingular x₁ y₁
h₂ : W.Nonsingular x₂ y₂
hx : x₁ = x₂
hy : y₁ = W.negY x₂ y₂
⊢ (if h : x₁ = x₂ ∧ y₁ = W.negY x₂ y₂ then 0 else some ⋯) = 0
state_after: no goals
tactic: exact dif_pos ⟨hx, hy⟩
Theorem: IsSelfAdjoint.imaginaryPart
File: Mathlib/Data/Complex/Module.lean

Proof steps:
state_before: A : Type u_1
inst✝³ : AddCommGroup A
inst✝² : Module ℂ A
inst✝¹ : StarAddMonoid A
inst✝ : StarModule ℂ A
x : A
hx : IsSelfAdjoint x
⊢ ℑ x = 0
state_after: no goals
tactic: rw [imaginaryPart, LinearMap.comp_apply, hx.skewAdjointPart_apply _, map_zero]
Theorem: Nat.log_pos_iff
File: Mathlib/Data/Nat/Log.lean

Proof steps:
state_before: b n : ℕ
⊢ 0 < log b n ↔ b ≤ n ∧ 1 < b
state_after: no goals
tactic: rw [Nat.pos_iff_ne_zero, Ne, log_eq_zero_iff, not_or, not_lt, not_le]
Theorem: frontier_Ioo
File: Mathlib/Topology/Order/DenselyOrdered.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a✝ b✝ : α
s : Set α
a b : α
h : a < b
⊢ frontier (Ioo a b) = {a, b}
state_after: no goals
tactic: rw [frontier, closure_Ioo h.ne, interior_Ioo, Icc_diff_Ioo_same h.le]
Theorem: MeasureTheory.IsSetSemiring.disjoint_diffFinset₀
File: Mathlib/MeasureTheory/SetSemiring.lean

Proof steps:
state_before: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
⊢ Disjoint I (hC.diffFinset₀ hs hI)
state_after: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
h : ¬Disjoint I (hC.diffFinset₀ hs hI)
⊢ False
tactic: by_contra h
state_before: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
h : ¬Disjoint I (hC.diffFinset₀ hs hI)
⊢ False
state_after: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
h : ∃ a ∈ I, a ∈ hC.diffFinset₀ hs hI
⊢ False
tactic: rw [Finset.not_disjoint_iff] at h
state_before: α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
h : ∃ a ∈ I, a ∈ hC.diffFinset₀ hs hI
⊢ False
state_after: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
⊢ False
tactic: obtain ⟨u, huI, hu_diffFinset₀⟩ := h
state_before: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
⊢ False
state_after: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
h_disj : u ≤ ⊥
⊢ False
tactic: have h_disj : u ≤ ⊥ := hC.disjoint_sUnion_diffFinset₀ hs hI (subset_sUnion_of_mem huI)
    (subset_sUnion_of_mem hu_diffFinset₀)
state_before: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
h_disj : u ≤ ⊥
⊢ False
state_after: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
h_disj : u = ∅
⊢ False
tactic: simp only [Set.bot_eq_empty, Set.le_eq_subset, subset_empty_iff] at h_disj
state_before: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
h_disj : u = ∅
⊢ False
state_after: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
h_disj : u = ∅
⊢ ∅ ∈ hC.diffFinset₀ hs hI
tactic: refine hC.empty_not_mem_diffFinset₀ hs hI ?_
state_before: case intro.intro
α : Type u_1
C : Set (Set α)
s t : Set α
I : Finset (Set α)
hC : IsSetSemiring C
hs : s ∈ C
hI : ↑I ⊆ C
u : Set α
huI : u ∈ I
hu_diffFinset₀ : u ∈ hC.diffFinset₀ hs hI
h_disj : u = ∅
⊢ ∅ ∈ hC.diffFinset₀ hs hI
state_after: no goals
tactic: rwa [h_disj] at hu_diffFinset₀
Theorem: Finset.mulEnergy_univ_right
File: Mathlib/Combinatorics/Additive/Energy.lean

Proof steps:
state_before: α : Type u_1
inst✝² : DecidableEq α
inst✝¹ : CommGroup α
inst✝ : Fintype α
s t : Finset α
⊢ Eₘ[s, univ] = Fintype.card α * s.card ^ 2
state_after: no goals
tactic: rw [mulEnergy_comm, mulEnergy_univ_left]