ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Polynomial.coeff_expand_mul
File: Mathlib/Algebra/Polynomial/Expand.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
p✝ q p : ℕ
hp : 0 < p
f : R[X]
n : ℕ
⊢ ((expand R p) f).coeff (n * p) = f.coeff n
state_after: no goals
tactic: rw [coeff_expand hp, if_pos (dvd_mul_left _ _), Nat.mul_div_cancel _ hp]
Theorem: Real.cosh_three_mul
File: Mathlib/Data/Complex/Exponential.lean

Proof steps:
state_before: x y : ℝ
⊢ cosh (3 * x) = 4 * cosh x ^ 3 - 3 * cosh x
state_after: x y : ℝ
⊢ ↑(cosh (3 * x)) = ↑(4 * cosh x ^ 3 - 3 * cosh x)
tactic: rw [← ofReal_inj]
state_before: x y : ℝ
⊢ ↑(cosh (3 * x)) = ↑(4 * cosh x ^ 3 - 3 * cosh x)
state_after: no goals
tactic: simp [cosh_three_mul]
Theorem: HomotopyCategory.quasiIso_eq_quasiIso_map_quotient
File: Mathlib/Algebra/Homology/Localization.lean

Proof steps:
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
⊢ quasiIso C c = (HomologicalComplex.quasiIso C c).map (quotient C c)
state_after: case h.mk.mk
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
K L : HomologicalComplex C c
f : { as := K } ⟶ { as := L }
⊢ quasiIso C c f ↔ (HomologicalComplex.quasiIso C c).map (quotient C c) f
tactic: ext ⟨K⟩ ⟨L⟩ f
state_before: case h.mk.mk
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
K L : HomologicalComplex C c
f : { as := K } ⟶ { as := L }
⊢ quasiIso C c f ↔ (HomologicalComplex.quasiIso C c).map (quotient C c) f
state_after: case h.mk.mk.intro
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
K L : HomologicalComplex C c
f : K ⟶ L
⊢ quasiIso C c ((quotient C c).map f) ↔ (HomologicalComplex.quasiIso C c).map (quotient C c) ((quotient C c).map f)
tactic: obtain ⟨f, rfl⟩ := (HomotopyCategory.quotient C c).map_surjective f
state_before: case h.mk.mk.intro
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
K L : HomologicalComplex C c
f : K ⟶ L
⊢ quasiIso C c ((quotient C c).map f) ↔ (HomologicalComplex.quasiIso C c).map (quotient C c) ((quotient C c).map f)
state_after: case h.mk.mk.intro.mp
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
K L : HomologicalComplex C c
f : K ⟶ L
⊢ quasiIso C c ((quotient C c).map f) → (HomologicalComplex.quasiIso C c).map (quotient C c) ((quotient C c).map f)

case h.mk.mk.intro.mpr
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : Preadditive C
inst✝¹ : CategoryWithHomology C
inst✝ : (HomologicalComplex.quasiIso C c).HasLocalization
K L : HomologicalComplex C c
f : K ⟶ L
⊢ (HomologicalComplex.quasiIso C c).map (quotient C c) ((quotient C c).map f) → quasiIso C c ((quotient C c).map f)
tactic: constructor
Theorem: Finset.wcovBy_insert
File: Mathlib/Data/Finset/Grade.lean

Proof steps:
state_before: α : Type u_1
s✝ t : Finset α
a✝ : α
inst✝ : DecidableEq α
s : Finset α
a : α
⊢ s ⩿ insert a s
state_after: no goals
tactic: simp [← coe_wcovBy_coe]
Theorem: Finset.single_lt_prod'
File: Mathlib/Algebra/Order/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝ : OrderedCancelCommMonoid M
f g : ι → M
s t : Finset ι
i j : ι
hij : j ≠ i
hi : i ∈ s
hj : j ∈ s
hlt : 1 < f j
hle : ∀ k ∈ s, k ≠ i → 1 ≤ f k
⊢ f i = ∏ k ∈ {i}, f k
state_after: no goals
tactic: rw [prod_singleton]
Theorem: MeasureTheory.L2.inner_indicatorConstLp_eq_inner_setIntegral
File: Mathlib/MeasureTheory/Function/L2Space.lean

Proof steps:
state_before: α : Type u_1
E : Type u_2
F : Type u_3
𝕜 : Type u_4
inst✝⁶ : RCLike 𝕜
inst✝⁵ : MeasurableSpace α
μ : Measure α
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace 𝕜 E
inst✝² : NormedAddCommGroup F
s : Set α
inst✝¹ : CompleteSpace E
inst✝ : NormedSpace ℝ E
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c : E
f : ↥(Lp E 2 μ)
⊢ ⟪indicatorConstLp 2 hs hμs c, f⟫_𝕜 = ⟪c, ∫ (x : α) in s, ↑↑f x ∂μ⟫_𝕜
state_after: no goals
tactic: rw [← integral_inner (integrableOn_Lp_of_measure_ne_top f fact_one_le_two_ennreal.elim hμs),
    L2.inner_indicatorConstLp_eq_setIntegral_inner]
Theorem: AddAction.nsmul_add_period_vadd
File: Mathlib/Dynamics/PeriodicPts.lean

Proof steps:
state_before: α : Type v
G : Type u
inst✝³ : Group G
inst✝² : MulAction G α
M : Type u
inst✝¹ : Monoid M
inst✝ : MulAction M α
n : ℕ
m : M
a : α
⊢ m ^ (n + period m a) • a = m ^ n • a
state_after: no goals
tactic: rw [← pow_mod_period_smul, Nat.add_mod_right, pow_mod_period_smul]
Theorem: inv_div'
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionCommMonoid α
a b c d : α
⊢ (a / b)⁻¹ = a⁻¹ / b⁻¹
state_after: no goals
tactic: simp
Theorem: inv_eq_one_divp'
File: Mathlib/Algebra/Group/Units.lean

Proof steps:
state_before: α : Type u
inst✝ : Monoid α
a b c : α
u : αˣ
⊢ ↑(1 / u) = 1 /ₚ u
state_after: no goals
tactic: rw [one_div, one_divp]
Theorem: Multiset.Nodup.disjSum
File: Mathlib/Data/Multiset/Sum.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a : α
b : β
x : α ⊕ β
hs : s.Nodup
ht : t.Nodup
⊢ (s.disjSum t).Nodup
state_after: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a : α
b : β
x✝ : α ⊕ β
hs✝ : s.Nodup
ht✝ : t.Nodup
x : α ⊕ β
hs : x ∈ Multiset.map inl s
ht : x ∈ Multiset.map inr t
⊢ False
tactic: refine ((hs.map inl_injective).add_iff <| ht.map inr_injective).2 fun x hs ht => ?_
state_before: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a : α
b : β
x✝ : α ⊕ β
hs✝ : s.Nodup
ht✝ : t.Nodup
x : α ⊕ β
hs : x ∈ Multiset.map inl s
ht : x ∈ Multiset.map inr t
⊢ False
state_after: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a : α
b : β
x✝ : α ⊕ β
hs✝ : s.Nodup
ht✝ : t.Nodup
x : α ⊕ β
hs : ∃ a ∈ s, inl a = x
ht : ∃ a ∈ t, inr a = x
⊢ False
tactic: rw [Multiset.mem_map] at hs ht
state_before: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a : α
b : β
x✝ : α ⊕ β
hs✝ : s.Nodup
ht✝ : t.Nodup
x : α ⊕ β
hs : ∃ a ∈ s, inl a = x
ht : ∃ a ∈ t, inr a = x
⊢ False
state_after: case intro.intro
α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a✝ : α
b : β
x : α ⊕ β
hs : s.Nodup
ht✝ : t.Nodup
a : α
left✝ : a ∈ s
ht : ∃ a_1 ∈ t, inr a_1 = inl a
⊢ False
tactic: obtain ⟨a, _, rfl⟩ := hs
state_before: case intro.intro
α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a✝ : α
b : β
x : α ⊕ β
hs : s.Nodup
ht✝ : t.Nodup
a : α
left✝ : a ∈ s
ht : ∃ a_1 ∈ t, inr a_1 = inl a
⊢ False
state_after: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a✝ : α
b✝ : β
x : α ⊕ β
hs : s.Nodup
ht : t.Nodup
a : α
left✝¹ : a ∈ s
b : β
left✝ : b ∈ t
h : inr b = inl a
⊢ False
tactic: obtain ⟨b, _, h⟩ := ht
state_before: case intro.intro.intro.intro
α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
s₁ s₂ : Multiset α
t₁ t₂ : Multiset β
a✝ : α
b✝ : β
x : α ⊕ β
hs : s.Nodup
ht : t.Nodup
a : α
left✝¹ : a ∈ s
b : β
left✝ : b ∈ t
h : inr b = inl a
⊢ False
state_after: no goals
tactic: exact inr_ne_inl h
Theorem: Ordinal.toNatOrdinal_cast_nat
File: Mathlib/SetTheory/Ordinal/NaturalOps.lean

Proof steps:
state_before: n : ℕ
⊢ toNatOrdinal ↑n = ↑n
state_after: n : ℕ
⊢ toNatOrdinal (toOrdinal ↑n) = ↑n
tactic: rw [← toOrdinal_cast_nat n]
state_before: n : ℕ
⊢ toNatOrdinal (toOrdinal ↑n) = ↑n
state_after: no goals
tactic: rfl
Theorem: Array.extract_append_left
File: Mathlib/Data/Array/ExtractLemmas.lean

Proof steps:
state_before: α : Type u
i✝ : Nat
a b : Array α
i j : Nat
h : j ≤ a.size
⊢ (a ++ b).extract i j = a.extract i j
state_after: case h₁
α : Type u
i✝ : Nat
a b : Array α
i j : Nat
h : j ≤ a.size
⊢ ((a ++ b).extract i j).size = (a.extract i j).size

case h₂
α : Type u
i✝ : Nat
a b : Array α
i j : Nat
h : j ≤ a.size
⊢ ∀ (i_1 : Nat) (hi₁ : i_1 < ((a ++ b).extract i j).size) (hi₂ : i_1 < (a.extract i j).size),
    ((a ++ b).extract i j)[i_1] = (a.extract i j)[i_1]
tactic: apply ext
Theorem: norm_le_norm_add_norm_sub'
File: Mathlib/Analysis/Normed/Group/Basic.lean

Proof steps:
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖u‖ ≤ ‖v‖ + ‖u / v‖
state_after: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖u‖ ≤ ‖u / v‖ + ‖v‖
tactic: rw [add_comm]
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖u‖ ≤ ‖u / v‖ + ‖v‖
state_after: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖u‖ = ‖u / v * v‖
tactic: refine (norm_mul_le' _ _).trans_eq' ?_
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖u‖ = ‖u / v * v‖
state_after: no goals
tactic: rw [div_mul_cancel]
Theorem: KaehlerDifferential.D_tensorProductTo
File: Mathlib/RingTheory/Kaehler/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : ↥(ideal R S)
⊢ (D R S).tensorProductTo ↑x = (ideal R S).toCotangent x
state_after: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : ↥(ideal R S)
⊢ LinearMap.id ((ideal R S).toCotangent x) = (ideal R S).toCotangent x
tactic: rw [← Derivation.liftKaehlerDifferential_apply, Derivation.liftKaehlerDifferential_D]
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
M : Type u_1
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : Module S M
inst✝ : IsScalarTower R S M
x : ↥(ideal R S)
⊢ LinearMap.id ((ideal R S).toCotangent x) = (ideal R S).toCotangent x
state_after: no goals
tactic: rfl
Theorem: Real.sin_int_mul_pi_sub
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: x : ℝ
n : ℤ
⊢ sin (↑n * π - x) = -((-1) ^ n * sin x)
state_after: no goals
tactic: simpa only [sin_neg, mul_neg, Int.coe_negOnePow] using sin_antiperiodic.int_mul_sub_eq n
Theorem: List.sum_range_sub
File: Mathlib/Algebra/BigOperators/Group/List.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : CommGroup G
n : ℕ
f : ℕ → G
h : ((fun x => x⁻¹) ∘ fun k => f (k + 1) / f k) = fun k => f k / f (k + 1)
⊢ (map (fun k => f (k + 1) / f k) (range n)).prod = f n / f 0
state_after: no goals
tactic: rw [← inv_inj, prod_inv, map_map, inv_div, h, prod_range_div']
Theorem: Multiset.prod_nsmul
File: Mathlib/Algebra/BigOperators/Group/Multiset.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m✝ : Multiset ι
f g : ι → α
m : Multiset α
⊢ (0 • m).prod = m.prod ^ 0
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m✝ : Multiset ι
f g : ι → α
m : Multiset α
⊢ prod 0 = 1
tactic: rw [zero_nsmul, pow_zero]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m✝ : Multiset ι
f g : ι → α
m : Multiset α
⊢ prod 0 = 1
state_after: no goals
tactic: rfl
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m✝ : Multiset ι
f g : ι → α
m : Multiset α
n : ℕ
⊢ ((n + 1) • m).prod = m.prod ^ (n + 1)
state_after: no goals
tactic: rw [add_nsmul, one_nsmul, pow_add, pow_one, prod_add, prod_nsmul m n]
Theorem: Ordinal.opow_le_opow_right
File: Mathlib/SetTheory/Ordinal/Exponential.lean

Proof steps:
state_before: a b c : Ordinal.{u_1}
h₁ : 0 < a
h₂ : b ≤ c
⊢ a ^ b ≤ a ^ c
state_after: case inl
a b c : Ordinal.{u_1}
h₁✝ : 0 < a
h₂ : b ≤ c
h₁ : 1 < a
⊢ a ^ b ≤ a ^ c

case inr
a b c : Ordinal.{u_1}
h₁✝ : 0 < a
h₂ : b ≤ c
h₁ : 1 = a
⊢ a ^ b ≤ a ^ c
tactic: rcases lt_or_eq_of_le (one_le_iff_pos.2 h₁) with h₁ | h₁
Theorem: Nat.odd_iff
File: Mathlib/Algebra/Ring/Parity.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m✝ n : ℕ
x✝ : Odd n
m : ℕ
hm : n = 2 * m + 1
⊢ n % 2 = 1
state_after: no goals
tactic: omega
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h : n % 2 = 1
⊢ n % 2 + 2 * (n / 2) = 2 * (n / 2) + 1
state_after: no goals
tactic: rw [h, add_comm]
Theorem: map_finset_sup
File: Mathlib/Data/Finset/Lattice.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝⁵ : SemilatticeSup α
inst✝⁴ : OrderBot α
s✝¹ s₁ s₂ : Finset β
f✝ g✝ : β → α
a : α
inst✝³ : SemilatticeSup β
inst✝² : OrderBot β
inst✝¹ : FunLike F α β
inst✝ : SupBotHomClass F α β
f : F
s✝ : Finset ι
g : ι → α
i : ι
s : Finset ι
x✝ : i ∉ s
h : f (s.sup g) = s.sup (⇑f ∘ g)
⊢ f ((cons i s x✝).sup g) = (cons i s x✝).sup (⇑f ∘ g)
state_after: no goals
tactic: rw [sup_cons, sup_cons, map_sup, h, Function.comp_apply]
Theorem: Relation.reflTransGen_transGen
File: Mathlib/Logic/Relation.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a b c d : α
⊢ ReflTransGen (TransGen r) = ReflTransGen r
state_after: no goals
tactic: simp only [← reflGen_transGen, transGen_idem]
Theorem: Filter.tendsto_mul_const_atTop_of_pos
File: Mathlib/Order/Filter/AtTopBot.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
hr : 0 < r
⊢ Tendsto (fun x => f x * r) l atTop ↔ Tendsto f l atTop
state_after: no goals
tactic: simpa only [mul_comm] using tendsto_const_mul_atTop_of_pos hr
Theorem: Order.pred_lt_pred_iff_of_not_isMin
File: Mathlib/Order/SuccPred/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : PredOrder α
a b : α
ha : ¬IsMin a
hb : ¬IsMin b
⊢ pred a < pred b ↔ a < b
state_after: no goals
tactic: rw [pred_lt_iff_of_not_isMin ha, le_pred_iff_of_not_isMin hb]
Theorem: Multiset.addHom_ext
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : AddZeroClass β
f g : Multiset α →+ β
h : ∀ (x : α), f {x} = g {x}
⊢ f = g
state_after: case h
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : AddZeroClass β
f g : Multiset α →+ β
h : ∀ (x : α), f {x} = g {x}
s : Multiset α
⊢ f s = g s
tactic: ext s
state_before: case h
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : AddZeroClass β
f g : Multiset α →+ β
h : ∀ (x : α), f {x} = g {x}
s : Multiset α
⊢ f s = g s
state_after: case h.empty
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : AddZeroClass β
f g : Multiset α →+ β
h : ∀ (x : α), f {x} = g {x}
⊢ f 0 = g 0

case h.cons
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : AddZeroClass β
f g : Multiset α →+ β
h : ∀ (x : α), f {x} = g {x}
a : α
s : Multiset α
ih : f s = g s
⊢ f (a ::ₘ s) = g (a ::ₘ s)
tactic: induction' s using Multiset.induction_on with a s ih
Theorem: Polynomial.eval₂_C
File: Mathlib/Algebra/Polynomial/Eval.lean

Proof steps:
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 (C a) = f a
state_after: no goals
tactic: simp [eval₂_eq_sum]
Theorem: Stream'.WSeq.tail_ofSeq
File: Mathlib/Data/Seq/WSeq.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
⊢ (↑s).tail = ↑s.tail
state_after: α : Type u
β : Type v
γ : Type w
s : Seq α
⊢ Option.rec nil Prod.snd (Option.map (fun a => (a, ↑s.tail)) s.head) = ↑s.tail
tactic: simp only [tail, destruct_ofSeq, map_pure', flatten_pure]
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
⊢ Option.rec nil Prod.snd (Option.map (fun a => (a, ↑s.tail)) s.head) = ↑s.tail
state_after: case h1
α : Type u
β : Type v
γ : Type w
⊢ nil = some <$> Seq.nil
tactic: induction' s using Seq.recOn with x s <;> simp only [ofSeq, Seq.tail_nil, Seq.head_nil,
    Option.map_none', Seq.tail_cons, Seq.head_cons, Option.map_some']
Theorem: orbit_fixingSubgroup_compl_subset
File: Mathlib/GroupTheory/GroupAction/FixingSubgroup.lean

Proof steps:
state_before: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
⊢ orbit (↥(fixingSubgroup M sᶜ)) a ⊆ s
state_after: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
⊢ b ∈ s
tactic: intro b b_in_orbit
state_before: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
⊢ b ∈ s
state_after: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
g : M
g_fixing : g ∈ fixingSubgroup M sᶜ
g_eq : ⟨g, g_fixing⟩ • a = b
⊢ b ∈ s
tactic: let ⟨⟨g, g_fixing⟩, g_eq⟩ := MulAction.mem_orbit_iff.mp b_in_orbit
state_before: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
g : M
g_fixing : g ∈ fixingSubgroup M sᶜ
g_eq : ⟨g, g_fixing⟩ • a = b
⊢ b ∈ s
state_after: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
g : M
g_fixing : g ∈ fixingSubgroup M sᶜ
g_eq : g • a = b
⊢ b ∈ s
tactic: rw [Submonoid.mk_smul] at g_eq
state_before: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
g : M
g_fixing : g ∈ fixingSubgroup M sᶜ
g_eq : g • a = b
⊢ b ∈ s
state_after: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
g : M
g_fixing : (fixedBy α g)ᶜ ⊆ s
g_eq : g • a = b
⊢ b ∈ s
tactic: rw [mem_fixingSubgroup_compl_iff_movedBy_subset] at g_fixing
state_before: M : Type u_1
α : Type u_2
inst✝¹ : Group M
inst✝ : MulAction M α
s : Set α
a : α
a_in_s : a ∈ s
b : α
b_in_orbit : b ∈ orbit (↥(fixingSubgroup M sᶜ)) a
g : M
g_fixing : (fixedBy α g)ᶜ ⊆ s
g_eq : g • a = b
⊢ b ∈ s
state_after: no goals
tactic: rwa [← g_eq, smul_mem_of_set_mem_fixedBy (set_mem_fixedBy_of_movedBy_subset g_fixing)]
Theorem: Polynomial.cyclotomic'_one
File: Mathlib/RingTheory/Polynomial/Cyclotomic/Basic.lean

Proof steps:
state_before: R✝ : Type u_1
inst✝³ : CommRing R✝
inst✝² : IsDomain R✝
R : Type u_2
inst✝¹ : CommRing R
inst✝ : IsDomain R
⊢ cyclotomic' 1 R = X - 1
state_after: no goals
tactic: simp only [cyclotomic', Finset.prod_singleton, RingHom.map_one,
    IsPrimitiveRoot.primitiveRoots_one]
Theorem: CategoryTheory.initiallySmall_of_small_weakly_initial_set
File: Mathlib/CategoryTheory/Limits/FinallySmall.lean

Proof steps:
state_before: J : Type u
inst✝² : Category.{v, u} J
inst✝¹ : IsCofilteredOrEmpty J
s : Set J
inst✝ : Small.{v, u} ↑s
hs : ∀ (i : J), ∃ j ∈ s, Nonempty (j ⟶ i)
⊢ (fullSubcategoryInclusion fun x => x ∈ s).Initial
state_after: J : Type u
inst✝² : Category.{v, u} J
inst✝¹ : IsCofilteredOrEmpty J
s : Set J
inst✝ : Small.{v, u} ↑s
hs : ∀ (i : J), ∃ j ∈ s, Nonempty (j ⟶ i)
i : J
⊢ ∃ c, Nonempty ((fullSubcategoryInclusion fun x => x ∈ s).obj c ⟶ i)
tactic: refine Functor.initial_of_exists_of_isCofiltered_of_fullyFaithful _ (fun i => ?_)
state_before: J : Type u
inst✝² : Category.{v, u} J
inst✝¹ : IsCofilteredOrEmpty J
s : Set J
inst✝ : Small.{v, u} ↑s
hs : ∀ (i : J), ∃ j ∈ s, Nonempty (j ⟶ i)
i : J
⊢ ∃ c, Nonempty ((fullSubcategoryInclusion fun x => x ∈ s).obj c ⟶ i)
state_after: case intro.intro
J : Type u
inst✝² : Category.{v, u} J
inst✝¹ : IsCofilteredOrEmpty J
s : Set J
inst✝ : Small.{v, u} ↑s
hs : ∀ (i : J), ∃ j ∈ s, Nonempty (j ⟶ i)
i j : J
hj₁ : j ∈ s
hj₂ : Nonempty (j ⟶ i)
⊢ ∃ c, Nonempty ((fullSubcategoryInclusion fun x => x ∈ s).obj c ⟶ i)
tactic: obtain ⟨j, hj₁, hj₂⟩ := hs i
state_before: case intro.intro
J : Type u
inst✝² : Category.{v, u} J
inst✝¹ : IsCofilteredOrEmpty J
s : Set J
inst✝ : Small.{v, u} ↑s
hs : ∀ (i : J), ∃ j ∈ s, Nonempty (j ⟶ i)
i j : J
hj₁ : j ∈ s
hj₂ : Nonempty (j ⟶ i)
⊢ ∃ c, Nonempty ((fullSubcategoryInclusion fun x => x ∈ s).obj c ⟶ i)
state_after: no goals
tactic: exact ⟨⟨j, hj₁⟩, hj₂⟩
Theorem: Measurable.nnreal_tsum
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Real.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι✝ : Sort y
s t u : Set α
inst✝¹ : MeasurableSpace α
ι : Type u_5
inst✝ : Countable ι
f : ι → α → ℝ≥0
h : ∀ (i : ι), Measurable (f i)
⊢ Measurable fun x => ∑' (i : ι), f i x
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι✝ : Sort y
s t u : Set α
inst✝¹ : MeasurableSpace α
ι : Type u_5
inst✝ : Countable ι
f : ι → α → ℝ≥0
h : ∀ (i : ι), Measurable (f i)
⊢ Measurable fun x => (∑' (b : ι), ↑(f b x)).toNNReal
tactic: simp_rw [NNReal.tsum_eq_toNNReal_tsum]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι✝ : Sort y
s t u : Set α
inst✝¹ : MeasurableSpace α
ι : Type u_5
inst✝ : Countable ι
f : ι → α → ℝ≥0
h : ∀ (i : ι), Measurable (f i)
⊢ Measurable fun x => (∑' (b : ι), ↑(f b x)).toNNReal
state_after: no goals
tactic: exact (Measurable.ennreal_tsum fun i => (h i).coe_nnreal_ennreal).ennreal_toNNReal
Theorem: EReal.add_pos
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: a b : EReal
ha : 0 < a
hb : 0 < b
⊢ 0 < a + b
state_after: case h_bot
b : EReal
hb : 0 < b
ha : 0 < ⊥
⊢ 0 < ⊥ + b

case h_real
b : EReal
hb : 0 < b
a✝ : ℝ
ha : 0 < ↑a✝
⊢ 0 < ↑a✝ + b

case h_top
b : EReal
hb : 0 < b
ha : 0 < ⊤
⊢ 0 < ⊤ + b
tactic: induction a
Theorem: Polynomial.mul_mem_nthRootsFinset
File: Mathlib/Algebra/Polynomial/Roots.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
η₁ η₂ : R
hη₁ : η₁ ∈ nthRootsFinset n R
hη₂ : η₂ ∈ nthRootsFinset n R
⊢ η₁ * η₂ ∈ nthRootsFinset n R
state_after: no goals
tactic: cases n with
  | zero =>
    simp only [Nat.zero_eq, nthRootsFinset_zero, not_mem_empty] at hη₁
  | succ n =>
    rw [mem_nthRootsFinset n.succ_pos] at hη₁ hη₂ ⊢
    rw [mul_pow, hη₁, hη₂, one_mul]