tasksource/leandojo huggingface dataset:
Theorem: le_mulRothNumber_product
File: Mathlib/Combinatorics/Additive/SalemSpencer.lean

tactic: obtain ⟨u, hus, hucard, hu⟩ := mulRothNumber_spec s
state_before: F : Type ?u.140244
α : Type u_1
β : Type u_2
𝕜 : Type ?u.140253
E : Type ?u.140256
inst✝³ : DecidableEq α
inst✝² : Monoid α
inst✝¹ : DecidableEq β
inst✝ : Monoid β
s✝ t✝ : Finset α
n : ℕ
s : Finset α
t : Finset β
⊢ ↑mulRothNumber s * ↑mulRothNumber t ≤ ↑mulRothNumber (s ×ˢ t)

tactic: obtain ⟨v, hvt, hvcard, hv⟩ := mulRothNumber_spec t
state_before: case intro.intro.intro
F : Type ?u.140244
α : Type u_1
β : Type u_2
𝕜 : Type ?u.140253
E : Type ?u.140256
inst✝³ : DecidableEq α
inst✝² : Monoid α
inst✝¹ : DecidableEq β
inst✝ : Monoid β
s✝ t✝ : Finset α
n : ℕ
s : Finset α
t : Finset β
u : Finset α
hus : u ⊆ s
hucard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
⊢ ↑mulRothNumber s * ↑mulRothNumber t ≤ ↑mulRothNumber (s ×ˢ t)

tactic: rw [← hucard, ← hvcard, ← card_product]
state_before: case intro.intro.intro.intro.intro.intro
F : Type ?u.140244
α : Type u_1
β : Type u_2
𝕜 : Type ?u.140253
E : Type ?u.140256
inst✝³ : DecidableEq α
inst✝² : Monoid α
inst✝¹ : DecidableEq β
inst✝ : Monoid β
s✝ t✝ : Finset α
n : ℕ
s : Finset α
t : Finset β
u : Finset α
hus : u ⊆ s
hucard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
v : Finset β
hvt : v ⊆ t
hvcard : card v = ↑mulRothNumber t
hv : MulSalemSpencer ↑v
⊢ ↑mulRothNumber s * ↑mulRothNumber t ≤ ↑mulRothNumber (s ×ˢ t)

tactic: refine' MulSalemSpencer.le_mulRothNumber _ (product_subset_product hus hvt)
state_before: case intro.intro.intro.intro.intro.intro
F : Type ?u.140244
α : Type u_1
β : Type u_2
𝕜 : Type ?u.140253
E : Type ?u.140256
inst✝³ : DecidableEq α
inst✝² : Monoid α
inst✝¹ : DecidableEq β
inst✝ : Monoid β
s✝ t✝ : Finset α
n : ℕ
s : Finset α
t : Finset β
u : Finset α
hus : u ⊆ s
hucard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
v : Finset β
hvt : v ⊆ t
hvcard : card v = ↑mulRothNumber t
hv : MulSalemSpencer ↑v
⊢ card (u ×ˢ v) ≤ ↑mulRothNumber (s ×ˢ t)

tactic: rw [coe_product]
state_before: case intro.intro.intro.intro.intro.intro
F : Type ?u.140244
α : Type u_1
β : Type u_2
𝕜 : Type ?u.140253
E : Type ?u.140256
inst✝³ : DecidableEq α
inst✝² : Monoid α
inst✝¹ : DecidableEq β
inst✝ : Monoid β
s✝ t✝ : Finset α
n : ℕ
s : Finset α
t : Finset β
u : Finset α
hus : u ⊆ s
hucard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
v : Finset β
hvt : v ⊆ t
hvcard : card v = ↑mulRothNumber t
hv : MulSalemSpencer ↑v
⊢ MulSalemSpencer ↑(u ×ˢ v)

tactic: exact hu.prod hv
state_before: case intro.intro.intro.intro.intro.intro
F : Type ?u.140244
α : Type u_1
β : Type u_2
𝕜 : Type ?u.140253
E : Type ?u.140256
inst✝³ : DecidableEq α
inst✝² : Monoid α
inst✝¹ : DecidableEq β
inst✝ : Monoid β
s✝ t✝ : Finset α
n : ℕ
s : Finset α
t : Finset β
u : Finset α
hus : u ⊆ s
hucard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
v : Finset β
hvt : v ⊆ t
hvcard : card v = ↑mulRothNumber t
hv : MulSalemSpencer ↑v
⊢ MulSalemSpencer (↑u ×ˢ ↑v)
Theorem: Convex.closure_subset_image_homothety_interior_of_one_lt
File: Mathlib/Analysis/Convex/Topology.lean

tactic: intro y hy
state_before: ι : Type ?u.164256
𝕜 : Type ?u.164259
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousSMul ℝ E
s : Set E
hs : Convex ℝ s
x : E
hx : x ∈ interior s
t : ℝ
ht : 1 < t
⊢ closure s ⊆ ↑(homothety x t) '' interior s

tactic: have hne : t ≠ 0 := (one_pos.trans ht).ne'
state_before: ι : Type ?u.164256
𝕜 : Type ?u.164259
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousSMul ℝ E
s : Set E
hs : Convex ℝ s
x : E
hx : x ∈ interior s
t : ℝ
ht : 1 < t
y : E
hy : y ∈ closure s
⊢ y ∈ ↑(homothety x t) '' interior s

tactic: refine'
  ⟨homothety x t⁻¹ y, hs.openSegment_interior_closure_subset_interior hx hy _,
    (AffineEquiv.homothetyUnitsMulHom x (Units.mk0 t hne)).apply_symm_apply y⟩
state_before: ι : Type ?u.164256
𝕜 : Type ?u.164259
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousSMul ℝ E
s : Set E
hs : Convex ℝ s
x : E
hx : x ∈ interior s
t : ℝ
ht : 1 < t
y : E
hy : y ∈ closure s
hne : t ≠ 0
⊢ y ∈ ↑(homothety x t) '' interior s

tactic: rw [openSegment_eq_image_lineMap, ← inv_one, ← inv_Ioi (zero_lt_one' ℝ), ← image_inv, image_image,
  homothety_eq_lineMap]
state_before: ι : Type ?u.164256
𝕜 : Type ?u.164259
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousSMul ℝ E
s : Set E
hs : Convex ℝ s
x : E
hx : x ∈ interior s
t : ℝ
ht : 1 < t
y : E
hy : y ∈ closure s
hne : t ≠ 0
⊢ ↑(homothety x t⁻¹) y ∈ openSegment ℝ x y

tactic: exact mem_image_of_mem _ ht
state_before: ι : Type ?u.164256
𝕜 : Type ?u.164259
E : Type u_1
inst✝⁴ : AddCommGroup E
inst✝³ : Module ℝ E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousSMul ℝ E
s : Set E
hs : Convex ℝ s
x : E
hx : x ∈ interior s
t : ℝ
ht : 1 < t
y : E
hy : y ∈ closure s
hne : t ≠ 0
⊢ ↑(lineMap x y) t⁻¹ ∈ (fun x_1 => ↑(lineMap x y) x_1⁻¹) '' Ioi 1
Theorem: map_derivedSeries_le_derivedSeries
File: Mathlib/GroupTheory/Solvable.lean

tactic: induction' n with n ih
state_before: G : Type u_2
G' : Type u_1
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
n : ℕ
⊢ map f (derivedSeries G n) ≤ derivedSeries G' n

tactic: exact le_top
state_before: case zero
G : Type u_2
G' : Type u_1
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
⊢ map f (derivedSeries G Nat.zero) ≤ derivedSeries G' Nat.zero

tactic: simp only [derivedSeries_succ, map_commutator, commutator_mono, ih]
state_before: case succ
G : Type u_2
G' : Type u_1
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
n : ℕ
ih : map f (derivedSeries G n) ≤ derivedSeries G' n
⊢ map f (derivedSeries G (Nat.succ n)) ≤ derivedSeries G' (Nat.succ n)
Theorem: Polynomial.mirror_natTrailingDegree
File: Mathlib/Data/Polynomial/Mirror.lean

tactic: by_cases hp : p = 0
state_before: R : Type u_1
inst✝ : Semiring R
p q : R[X]
⊢ natTrailingDegree (mirror p) = natTrailingDegree p

tactic: rw [hp, mirror_zero]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
p q : R[X]
hp : p = 0
⊢ natTrailingDegree (mirror p) = natTrailingDegree p

tactic: rw [mirror, natTrailingDegree_mul_X_pow ((mt reverse_eq_zero.mp) hp),
  reverse_natTrailingDegree, zero_add]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
p q : R[X]
hp : ¬p = 0
⊢ natTrailingDegree (mirror p) = natTrailingDegree p
Theorem: iter_deriv_pow
File: Mathlib/Analysis/Calculus/Deriv/ZPow.lean

tactic: simp only [← zpow_ofNat, iter_deriv_zpow, Int.cast_ofNat]
state_before: 𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
⊢ (deriv^[k]) (fun x => x ^ n) x = (∏ i in Finset.range k, (↑n - ↑i)) * x ^ (n - k)

tactic: cases' le_or_lt k n with hkn hnk
state_before: 𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
⊢ (∏ x in Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i in Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)

tactic: rw [Int.ofNat_sub hkn]
state_before: case inl
𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
hkn : k ≤ n
⊢ (∏ x in Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i in Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)

tactic: have : (∏ i in Finset.range k, (n - i : 𝕜)) = 0 :=
  Finset.prod_eq_zero (Finset.mem_range.2 hnk) (sub_self _)
state_before: case inr
𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
hnk : n < k
⊢ (∏ x in Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i in Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)

tactic: simp only [this, MulZeroClass.zero_mul]
state_before: case inr
𝕜 : Type u
inst✝² : NontriviallyNormedField 𝕜
E : Type v
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
x✝ : 𝕜
s : Set 𝕜
m : ℤ
n : ℕ
x : 𝕜
k : ℕ
hnk : n < k
this : ∏ i in Finset.range k, (↑n - ↑i) = 0
⊢ (∏ x in Finset.range k, (↑n - ↑x)) * x ^ (↑n - ↑k) = (∏ i in Finset.range k, (↑n - ↑i)) * x ^ ↑(n - k)
Theorem: uniformity_sum_of_open_aux
File: Mathlib/Topology/UniformSpace/Basic.lean

tactic: cases x
state_before: α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort ?u.178177
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set (α ⊕ β)
hs : IsOpen s
x : α ⊕ β
xs : x ∈ s
⊢ {p | p.fst = x → p.snd ∈ s} ∈ UniformSpace.Core.sum.uniformity

tactic: refine' mem_of_superset
  (union_mem_uniformity_sum (mem_nhds_uniformity_iff_right.1 (hs.1.mem_nhds xs)) univ_mem)
    (union_subset _ _) <;> rintro _ ⟨⟨_, b⟩, h, ⟨⟩⟩ ⟨⟩
state_before: case inl
α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort ?u.178177
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set (α ⊕ β)
hs : IsOpen s
val✝ : α
xs : inl val✝ ∈ s
⊢ {p | p.fst = inl val✝ → p.snd ∈ s} ∈ UniformSpace.Core.sum.uniformity

tactic: exact h rfl
state_before: case inl.refine'_1.intro.mk.intro.refl.refl
α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort ?u.178177
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set (α ⊕ β)
hs : IsOpen s
fst✝ b : α
xs : inl (fst✝, b).fst ∈ s
h : (fst✝, b) ∈ {p | p.fst = (fst✝, b).fst → p.snd ∈ inl ⁻¹' s}
⊢ ((fun p => (inl p.fst, inl p.snd)) (fst✝, b)).snd ∈ s

tactic: refine' mem_of_superset
  (union_mem_uniformity_sum univ_mem (mem_nhds_uniformity_iff_right.1 (hs.2.mem_nhds xs)))
    (union_subset _ _) <;> rintro _ ⟨⟨a, _⟩, h, ⟨⟩⟩ ⟨⟩
state_before: case inr
α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort ?u.178177
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set (α ⊕ β)
hs : IsOpen s
val✝ : β
xs : inr val✝ ∈ s
⊢ {p | p.fst = inr val✝ → p.snd ∈ s} ∈ UniformSpace.Core.sum.uniformity

tactic: exact h rfl
state_before: case inr.refine'_2.intro.mk.intro.refl.refl
α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort ?u.178177
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
s : Set (α ⊕ β)
hs : IsOpen s
a snd✝ : β
xs : inr (a, snd✝).fst ∈ s
h : (a, snd✝) ∈ {p | p.fst = (a, snd✝).fst → p.snd ∈ inr ⁻¹' s}
⊢ ((fun p => (inr p.fst, inr p.snd)) (a, snd✝)).snd ∈ s
Theorem: Polynomial.primPart_mul
File: Mathlib/RingTheory/Polynomial/Content.lean

tactic: rw [Ne.def, ← content_eq_zero_iff, ← C_eq_zero] at h0
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p q : R[X]
h0 : p * q ≠ 0
⊢ primPart (p * q) = primPart p * primPart q

tactic: apply mul_left_cancel₀ h0
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p q : R[X]
h0✝ : ¬p * q = 0
h0 : ¬↑C (content (p * q)) = 0
⊢ primPart (p * q) = primPart p * primPart q

tactic: conv_lhs =>
  rw [← (p * q).eq_C_content_mul_primPart, p.eq_C_content_mul_primPart,
    q.eq_C_content_mul_primPart]
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p q : R[X]
h0✝ : ¬p * q = 0
h0 : ¬↑C (content (p * q)) = 0
⊢ ↑C (content (p * q)) * primPart (p * q) = ↑C (content (p * q)) * (primPart p * primPart q)

tactic: rw [content_mul, RingHom.map_mul]
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p q : R[X]
h0✝ : ¬p * q = 0
h0 : ¬↑C (content (p * q)) = 0
⊢ ↑C (content p) * primPart p * (↑C (content q) * primPart q) = ↑C (content (p * q)) * (primPart p * primPart q)

tactic: ring
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
p q : R[X]
h0✝ : ¬p * q = 0
h0 : ¬↑C (content (p * q)) = 0
⊢ ↑C (content p) * primPart p * (↑C (content q) * primPart q) =
    ↑C (content p) * ↑C (content q) * (primPart p * primPart q)
Theorem: CategoryTheory.SplitEpi.epi
File: Mathlib/CategoryTheory/EpiMono.lean

tactic: replace w := se.section_ ≫= w
state_before: C : Type u₁
inst✝ : Category C
X Y : C
f : X ⟶ Y
se : SplitEpi f
Z✝ : C
g h : Y ⟶ Z✝
w : f ≫ g = f ≫ h
⊢ g = h

tactic: simpa using w
state_before: C : Type u₁
inst✝ : Category C
X Y : C
f : X ⟶ Y
se : SplitEpi f
Z✝ : C
g h : Y ⟶ Z✝
w : se.section_ ≫ f ≫ g = se.section_ ≫ f ≫ h
⊢ g = h
Theorem: WittVector.poly_eq_of_wittPolynomial_bind_eq
File: Mathlib/RingTheory/WittVector/IsPoly.lean

tactic: ext1 n
state_before: p : ℕ
R S : Type u
σ : Type ?u.81838
idx : Type ?u.81841
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Fact (Nat.Prime p)
f g : ℕ → MvPolynomial ℕ ℤ
h : ∀ (n : ℕ), ↑(bind₁ f) (wittPolynomial p ℤ n) = ↑(bind₁ g) (wittPolynomial p ℤ n)
⊢ f = g

tactic: apply MvPolynomial.map_injective (Int.castRingHom ℚ) Int.cast_injective
state_before: case h
p : ℕ
R S : Type u
σ : Type ?u.81838
idx : Type ?u.81841
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Fact (Nat.Prime p)
f g : ℕ → MvPolynomial ℕ ℤ
h : ∀ (n : ℕ), ↑(bind₁ f) (wittPolynomial p ℤ n) = ↑(bind₁ g) (wittPolynomial p ℤ n)
n : ℕ
⊢ f n = g n

tactic: rw [← Function.funext_iff] at h
state_before: case h.a
p : ℕ
R S : Type u
σ : Type ?u.81838
idx : Type ?u.81841
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Fact (Nat.Prime p)
f g : ℕ → MvPolynomial ℕ ℤ
h : ∀ (n : ℕ), ↑(bind₁ f) (wittPolynomial p ℤ n) = ↑(bind₁ g) (wittPolynomial p ℤ n)
n : ℕ
⊢ ↑(MvPolynomial.map (Int.castRingHom ℚ)) (f n) = ↑(MvPolynomial.map (Int.castRingHom ℚ)) (g n)

tactic: replace h :=
  congr_arg (fun fam => bind₁ (MvPolynomial.map (Int.castRingHom ℚ) ∘ fam) (xInTermsOfW p ℚ n)) h
state_before: case h.a
p : ℕ
R S : Type u
σ : Type ?u.81838
idx : Type ?u.81841
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Fact (Nat.Prime p)
f g : ℕ → MvPolynomial ℕ ℤ
h : (fun n => ↑(bind₁ f) (wittPolynomial p ℤ n)) = fun n => ↑(bind₁ g) (wittPolynomial p ℤ n)
n : ℕ
⊢ ↑(MvPolynomial.map (Int.castRingHom ℚ)) (f n) = ↑(MvPolynomial.map (Int.castRingHom ℚ)) (g n)

tactic: simpa only [Function.comp, map_bind₁, map_wittPolynomial, ← bind₁_bind₁,
  bind₁_wittPolynomial_xInTermsOfW, bind₁_X_right] using h
state_before: case h.a
p : ℕ
R S : Type u
σ : Type ?u.81838
idx : Type ?u.81841
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Fact (Nat.Prime p)
f g : ℕ → MvPolynomial ℕ ℤ
n : ℕ
h :
  ((fun fam => ↑(bind₁ (↑(MvPolynomial.map (Int.castRingHom ℚ)) ∘ fam)) (xInTermsOfW p ℚ n)) fun n =>
      ↑(bind₁ f) (wittPolynomial p ℤ n)) =
    (fun fam => ↑(bind₁ (↑(MvPolynomial.map (Int.castRingHom ℚ)) ∘ fam)) (xInTermsOfW p ℚ n)) fun n =>
      ↑(bind₁ g) (wittPolynomial p ℤ n)
⊢ ↑(MvPolynomial.map (Int.castRingHom ℚ)) (f n) = ↑(MvPolynomial.map (Int.castRingHom ℚ)) (g n)
Theorem: Set.two_lt_ncard
File: Mathlib/Data/Set/Ncard.lean

tactic: simp only [two_lt_ncard_iff hs, exists_and_left, exists_prop]
state_before: α : Type u_1
β : Type ?u.158307
s t : Set α
a b x y : α
f : α → β
hs : autoParam (Set.Finite s) _auto✝
⊢ 2 < ncard s ↔ ∃ a, a ∈ s ∧ ∃ b, b ∈ s ∧ ∃ c, c ∈ s ∧ a ≠ b ∧ a ≠ c ∧ b ≠ c
Theorem: Polynomial.Separable.of_pow'
File: Mathlib/FieldTheory/Separable.lean

tactic: rw [pow_succ, pow_succ] at h
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
f : R[X]
n : ℕ
h : Separable (f ^ (n + 2))
⊢ IsUnit f ∨ Separable f ∧ n + 2 = 1 ∨ n + 2 = 0

tactic: exact Or.inl (isCoprime_self.1 h.isCoprime.of_mul_right_left)
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
f : R[X]
n : ℕ
h : Separable (f * (f * f ^ n))
⊢ IsUnit f ∨ Separable f ∧ n + 2 = 1 ∨ n + 2 = 0
Theorem: Finsupp.sigma_sum
File: Mathlib/Data/Finsupp/Basic.lean

tactic: simp only [sum, sigma_support, sum_sigma, split_apply]
state_before: α : Type ?u.744393
β : Type ?u.744396
γ : Type ?u.744399
ι : Type u_2
M : Type u_4
M' : Type ?u.744408
N : Type u_1
P : Type ?u.744414
G : Type ?u.744417
H : Type ?u.744420
R : Type ?u.744423
S : Type ?u.744426
αs : ι → Type u_3
inst✝¹ : Zero M
l : (i : ι) × αs i →₀ M
inst✝ : AddCommMonoid N
f : (i : ι) × αs i → M → N
⊢ sum l f = ∑ i in splitSupport l, sum (split l i) fun a b => f { fst := i, snd := a } b
Theorem: Real.arith_mean_weighted_of_constant
File: Mathlib/Analysis/MeanInequalities.lean

tactic: refine' sum_congr rfl fun i hi => _
state_before: ι : Type u
s : Finset ι
w z : ι → ℝ
x : ℝ
hw' : ∑ i in s, w i = 1
hx : ∀ (i : ι), i ∈ s → w i ≠ 0 → z i = x
⊢ ∑ i in s, w i * z i = ∑ i in s, w i * x

tactic: cases' eq_or_ne (w i) 0 with hwi hwi
state_before: ι : Type u
s : Finset ι
w z : ι → ℝ
x : ℝ
hw' : ∑ i in s, w i = 1
hx : ∀ (i : ι), i ∈ s → w i ≠ 0 → z i = x
i : ι
hi : i ∈ s
⊢ w i * z i = w i * x

tactic: rw [hwi, MulZeroClass.zero_mul, MulZeroClass.zero_mul]
state_before: case inl
ι : Type u
s : Finset ι
w z : ι → ℝ
x : ℝ
hw' : ∑ i in s, w i = 1
hx : ∀ (i : ι), i ∈ s → w i ≠ 0 → z i = x
i : ι
hi : i ∈ s
hwi : w i = 0
⊢ w i * z i = w i * x

tactic: rw [hx i hi hwi]
state_before: case inr
ι : Type u
s : Finset ι
w z : ι → ℝ
x : ℝ
hw' : ∑ i in s, w i = 1
hx : ∀ (i : ι), i ∈ s → w i ≠ 0 → z i = x
i : ι
hi : i ∈ s
hwi : w i ≠ 0
⊢ w i * z i = w i * x

tactic: rw [← sum_mul, hw', one_mul]
state_before: ι : Type u
s : Finset ι
w z : ι → ℝ
x : ℝ
hw' : ∑ i in s, w i = 1
hx : ∀ (i : ι), i ∈ s → w i ≠ 0 → z i = x
⊢ ∑ i in s, w i * x = x
Theorem: Real.logb_nonneg_iff
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

tactic: rw [← not_lt, logb_neg_iff hb hx, not_lt]
state_before: b x y : ℝ
hb : 1 < b
hx : 0 < x
⊢ 0 ≤ logb b x ↔ 1 ≤ x
Theorem: Filter.map₂_neBot_iff
File: Mathlib/Order/Filter/NAry.lean

tactic: simp_rw [neBot_iff]
state_before: α : Type u_2
α' : Type ?u.23464
β : Type u_3
β' : Type ?u.23470
γ : Type u_1
γ' : Type ?u.23476
δ : Type ?u.23479
δ' : Type ?u.23482
ε : Type ?u.23485
ε' : Type ?u.23488
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ NeBot (map₂ m f g) ↔ NeBot f ∧ NeBot g

tactic: exact map₂_eq_bot_iff.not.trans not_or
state_before: α : Type u_2
α' : Type ?u.23464
β : Type u_3
β' : Type ?u.23470
γ : Type u_1
γ' : Type ?u.23476
δ : Type ?u.23479
δ' : Type ?u.23482
ε : Type ?u.23485
ε' : Type ?u.23488
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ map₂ m f g ≠ ⊥ ↔ f ≠ ⊥ ∧ g ≠ ⊥
Theorem: multiplicity.pow_dvd_of_le_multiplicity
File: Mathlib/RingTheory/Multiplicity.lean

tactic: rw [← PartENat.some_eq_natCast]
state_before: α : Type u_1
inst✝¹ : Monoid α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
⊢ ↑k ≤ multiplicity a b → a ^ k ∣ b

tactic: exact
  Nat.casesOn k
    (fun _ => by
      rw [_root_.pow_zero]
      exact one_dvd _)
    fun k ⟨_, h₂⟩ => by_contradiction fun hk => Nat.find_min _ (lt_of_succ_le (h₂ ⟨k, hk⟩)) hk
state_before: α : Type u_1
inst✝¹ : Monoid α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
⊢ ↑k ≤ multiplicity a b → a ^ k ∣ b

tactic: rw [_root_.pow_zero]
state_before: α : Type u_1
inst✝¹ : Monoid α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
x✝ : ↑zero ≤ multiplicity a b
⊢ a ^ zero ∣ b

tactic: exact one_dvd _
state_before: α : Type u_1
inst✝¹ : Monoid α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a b : α
k : ℕ
x✝ : ↑zero ≤ multiplicity a b
⊢ 1 ∣ b
Theorem: ConvexIndependent.comp_embedding
File: Mathlib/Analysis/Convex/Independent.lean

tactic: intro s x hx
state_before: 𝕜 : Type u_3
E : Type u_4
ι : Type u_2
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s t : Set E
ι' : Type u_1
f : ι' ↪ ι
p : ι → E
hc : ConvexIndependent 𝕜 p
⊢ ConvexIndependent 𝕜 (p ∘ ↑f)

tactic: rw [← f.injective.mem_set_image]
state_before: 𝕜 : Type u_3
E : Type u_4
ι : Type u_2
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t : Set E
ι' : Type u_1
f : ι' ↪ ι
p : ι → E
hc : ConvexIndependent 𝕜 p
s : Set ι'
x : ι'
hx : (p ∘ ↑f) x ∈ ↑(convexHull 𝕜).toOrderHom (p ∘ ↑f '' s)
⊢ x ∈ s

tactic: exact hc _ _ (by rwa [Set.image_image])
state_before: 𝕜 : Type u_3
E : Type u_4
ι : Type u_2
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t : Set E
ι' : Type u_1
f : ι' ↪ ι
p : ι → E
hc : ConvexIndependent 𝕜 p
s : Set ι'
x : ι'
hx : (p ∘ ↑f) x ∈ ↑(convexHull 𝕜).toOrderHom (p ∘ ↑f '' s)
⊢ ↑f x ∈ ↑f '' s

tactic: rwa [Set.image_image]
state_before: 𝕜 : Type u_3
E : Type u_4
ι : Type u_2
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t : Set E
ι' : Type u_1
f : ι' ↪ ι
p : ι → E
hc : ConvexIndependent 𝕜 p
s : Set ι'
x : ι'
hx : (p ∘ ↑f) x ∈ ↑(convexHull 𝕜).toOrderHom (p ∘ ↑f '' s)
⊢ p (↑f x) ∈ ↑(convexHull 𝕜).toOrderHom (p '' (↑f '' s))
Theorem: MeasureTheory.withDensity_one
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

tactic: ext1 s hs
state_before: α : Type u_1
β : Type ?u.1765436
γ : Type ?u.1765439
δ : Type ?u.1765442
m : MeasurableSpace α
μ ν : Measure α
⊢ withDensity μ 1 = μ

tactic: simp [withDensity_apply _ hs]
state_before: case h
α : Type u_1
β : Type ?u.1765436
γ : Type ?u.1765439
δ : Type ?u.1765442
m : MeasurableSpace α
μ ν : Measure α
s : Set α
hs : MeasurableSet s
⊢ ↑↑(withDensity μ 1) s = ↑↑μ s
Theorem: Real.le_sSup_iff
File: Mathlib/Data/Real/Basic.lean

tactic: rw [le_iff_forall_pos_lt_add]
state_before: x y : ℝ
s : Set ℝ
h : BddAbove s
h' : Set.Nonempty s
a : ℝ
⊢ a ≤ sSup s ↔ ∀ (ε : ℝ), ε < 0 → ∃ x, x ∈ s ∧ a + ε < x

tactic: refine' ⟨fun H ε ε_neg => _, fun H ε ε_pos => _⟩
state_before: x y : ℝ
s : Set ℝ
h : BddAbove s
h' : Set.Nonempty s
a : ℝ
⊢ (∀ (ε : ℝ), 0 < ε → a < sSup s + ε) ↔ ∀ (ε : ℝ), ε < 0 → ∃ x, x ∈ s ∧ a + ε < x

tactic: exact exists_lt_of_lt_csSup h' (lt_sub_iff_add_lt.mp (H _ (neg_pos.mpr ε_neg)))
state_before: case refine'_1
x y : ℝ
s : Set ℝ
h : BddAbove s
h' : Set.Nonempty s
a : ℝ
H : ∀ (ε : ℝ), 0 < ε → a < sSup s + ε
ε : ℝ
ε_neg : ε < 0
⊢ ∃ x, x ∈ s ∧ a + ε < x

tactic: rcases H _ (neg_lt_zero.mpr ε_pos) with ⟨x, x_in, hx⟩
state_before: case refine'_2
x y : ℝ
s : Set ℝ
h : BddAbove s
h' : Set.Nonempty s
a : ℝ
H : ∀ (ε : ℝ), ε < 0 → ∃ x, x ∈ s ∧ a + ε < x
ε : ℝ
ε_pos : 0 < ε
⊢ a < sSup s + ε

tactic: exact sub_lt_iff_lt_add.mp (lt_csSup_of_lt h x_in hx)
state_before: case refine'_2.intro.intro
x✝ y : ℝ
s : Set ℝ
h : BddAbove s
h' : Set.Nonempty s
a : ℝ
H : ∀ (ε : ℝ), ε < 0 → ∃ x, x ∈ s ∧ a + ε < x
ε : ℝ
ε_pos : 0 < ε
x : ℝ
x_in : x ∈ s
hx : a + -ε < x
⊢ a < sSup s + ε
Theorem: ContinuousMap.continuous_uncurry
File: Mathlib/Topology/CompactOpen.lean

tactic: apply continuous_of_continuous_uncurry
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : LocallyCompactSpace β
⊢ Continuous uncurry

tactic: rw [← (Homeomorph.prodAssoc _ _ _).comp_continuous_iff']
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : LocallyCompactSpace β
⊢ Continuous (Function.uncurry fun x y => ↑(uncurry x) y)

tactic: apply continuous_eval'.comp (continuous_eval'.prod_map continuous_id)
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : LocallyCompactSpace α
inst✝ : LocallyCompactSpace β
⊢ Continuous ((Function.uncurry fun x y => ↑(uncurry x) y) ∘ ↑(Homeomorph.prodAssoc C(α, C(β, γ)) α β))
Theorem: Real.Angle.neg_pi_lt_toReal
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: induction θ using Real.Angle.induction_on
state_before: θ : Angle
⊢ -π < toReal θ

tactic: exact left_lt_toIocMod _ _ _
state_before: case h
x✝ : ℝ
⊢ -π < toReal ↑x✝
Theorem: Polynomial.taylor_eval_sub
File: Mathlib/Data/Polynomial/Taylor.lean

tactic: rw [taylor_eval, sub_add_cancel]
state_before: R✝ : Type ?u.224375
inst✝¹ : Semiring R✝
r✝ : R✝
f✝ : R✝[X]
R : Type u_1
inst✝ : CommRing R
r : R
f : R[X]
s : R
⊢ eval (s - r) (↑(taylor r) f) = eval s f
Theorem: Fin.cast_mk
File: Mathlib/Data/Fin/Basic.lean

tactic: ext
state_before: n m : ℕ
h : n = m
i : ℕ
hn : i < n
⊢ ↑(cast h) { val := i, isLt := hn } = { val := i, isLt := (_ : i < m) }

tactic: simp
state_before: case h
n m : ℕ
h : n = m
i : ℕ
hn : i < n
⊢ ↑(↑(cast h) { val := i, isLt := hn }) = ↑{ val := i, isLt := (_ : i < m) }