ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: HasStrictFDerivAt.tendsto_implicitFunction
File: Mathlib/Analysis/Calculus/Implicit.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : CompleteSpace 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : CompleteSpace E
F : Type u_3
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
inst✝ : FiniteDimensional 𝕜 F
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
hf' : range f' = ⊤
α : Type u_4
l : Filter α
g₁ : α → F
g₂ : α → ↥(LinearMap.ker f')
h₁ : Tendsto g₁ l (𝓝 (f a))
h₂ : Tendsto g₂ l (𝓝 0)
⊢ Tendsto (fun t => implicitFunction f f' hf hf' (g₁ t) (g₂ t)) l (𝓝 a)
state_after: 𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : CompleteSpace 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : CompleteSpace E
F : Type u_3
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
inst✝ : FiniteDimensional 𝕜 F
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
hf' : range f' = ⊤
α : Type u_4
l : Filter α
g₁ : α → F
g₂ : α → ↥(LinearMap.ker f')
h₁ : Tendsto g₁ l (𝓝 (f a))
h₂ : Tendsto g₂ l (𝓝 0)
⊢ Tendsto (fun t => (g₁ t, g₂ t)) l (𝓝 (↑(implicitToPartialHomeomorph f f' hf hf') a))
tactic: refine ((hf.implicitToPartialHomeomorph f f' hf').tendsto_symm
    (hf.mem_implicitToPartialHomeomorph_source hf')).comp ?_
state_before: 𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : CompleteSpace 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : CompleteSpace E
F : Type u_3
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
inst✝ : FiniteDimensional 𝕜 F
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
hf' : range f' = ⊤
α : Type u_4
l : Filter α
g₁ : α → F
g₂ : α → ↥(LinearMap.ker f')
h₁ : Tendsto g₁ l (𝓝 (f a))
h₂ : Tendsto g₂ l (𝓝 0)
⊢ Tendsto (fun t => (g₁ t, g₂ t)) l (𝓝 (↑(implicitToPartialHomeomorph f f' hf hf') a))
state_after: 𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : CompleteSpace 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : CompleteSpace E
F : Type u_3
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
inst✝ : FiniteDimensional 𝕜 F
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
hf' : range f' = ⊤
α : Type u_4
l : Filter α
g₁ : α → F
g₂ : α → ↥(LinearMap.ker f')
h₁ : Tendsto g₁ l (𝓝 (f a))
h₂ : Tendsto g₂ l (𝓝 0)
⊢ Tendsto (fun t => (g₁ t, g₂ t)) l (𝓝 (f a, 0))
tactic: rw [implicitToPartialHomeomorph_self]
state_before: 𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
inst✝⁶ : CompleteSpace 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : CompleteSpace E
F : Type u_3
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace 𝕜 F
inst✝ : FiniteDimensional 𝕜 F
f : E → F
f' : E →L[𝕜] F
a : E
hf : HasStrictFDerivAt f f' a
hf' : range f' = ⊤
α : Type u_4
l : Filter α
g₁ : α → F
g₂ : α → ↥(LinearMap.ker f')
h₁ : Tendsto g₁ l (𝓝 (f a))
h₂ : Tendsto g₂ l (𝓝 0)
⊢ Tendsto (fun t => (g₁ t, g₂ t)) l (𝓝 (f a, 0))
state_after: no goals
tactic: exact h₁.prod_mk_nhds h₂
Theorem: integrableOn_Ioi_rpow_of_lt
File: Mathlib/Analysis/SpecialFunctions/ImproperIntegrals.lean

Proof steps:
state_before: a : ℝ
ha : a < -1
c : ℝ
hc : 0 < c
⊢ IntegrableOn (fun t => t ^ a) (Ioi c) volume
state_after: a : ℝ
ha : a < -1
c : ℝ
hc : 0 < c
hd : ∀ x ∈ Ici c, HasDerivAt (fun t => t ^ (a + 1) / (a + 1)) (x ^ a) x
⊢ IntegrableOn (fun t => t ^ a) (Ioi c) volume
tactic: have hd : ∀ x ∈ Ici c, HasDerivAt (fun t => t ^ (a + 1) / (a + 1)) (x ^ a) x := by
    intro x hx
    -- Porting note: helped `convert` with explicit arguments
    convert (hasDerivAt_rpow_const (p := a + 1) (Or.inl (hc.trans_le hx).ne')).div_const _ using 1
    field_simp [show a + 1 ≠ 0 from ne_of_lt (by linarith), mul_comm]
state_before: a : ℝ
ha : a < -1
c : ℝ
hc : 0 < c
hd : ∀ x ∈ Ici c, HasDerivAt (fun t => t ^ (a + 1) / (a + 1)) (x ^ a) x
⊢ IntegrableOn (fun t => t ^ a) (Ioi c) volume
state_after: a : ℝ
ha : a < -1
c : ℝ
hc : 0 < c
hd : ∀ x ∈ Ici c, HasDerivAt (fun t => t ^ (a + 1) / (a + 1)) (x ^ a) x
ht : Tendsto (fun t => t ^ (a + 1) / (a + 1)) atTop (𝓝 (0 / (a + 1)))
⊢ IntegrableOn (fun t => t ^ a) (Ioi c) volume
tactic: have ht : Tendsto (fun t => t ^ (a + 1) / (a + 1)) atTop (𝓝 (0 / (a + 1))) := by
    apply Tendsto.div_const
    simpa only [neg_neg] using tendsto_rpow_neg_atTop (by linarith : 0 < -(a + 1))
state_before: a : ℝ
ha : a < -1
c : ℝ
hc : 0 < c
hd : ∀ x ∈ Ici c, HasDerivAt (fun t => t ^ (a + 1) / (a + 1)) (x ^ a) x
ht : Tendsto (fun t => t ^ (a + 1) / (a + 1)) atTop (𝓝 (0 / (a + 1)))
⊢ IntegrableOn (fun t => t ^ a) (Ioi c) volume
state_after: no goals
tactic: exact
    integrableOn_Ioi_deriv_of_nonneg' hd (fun t ht => rpow_nonneg (hc.trans ht).le a) ht
Theorem: gcd_mul_left
File: Mathlib/Algebra/GCDMonoid/Basic.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
a b c : α
⊢ a = 0 → gcd (a * b) (a * c) = normalize a * gcd b c
state_after: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
b c : α
⊢ gcd (0 * b) (0 * c) = normalize 0 * gcd b c
tactic: rintro rfl
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
b c : α
⊢ gcd (0 * b) (0 * c) = normalize 0 * gcd b c
state_after: no goals
tactic: simp only [zero_mul, gcd_zero_left, normalize_zero]
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
a b c : α
ha : a ≠ 0
this : gcd (a * b) (a * c) = normalize (a * gcd b c)
⊢ gcd (a * b) (a * c) = normalize a * gcd b c
state_after: no goals
tactic: simpa
Theorem: MeasureTheory.SignedMeasure.singularPart_mutuallySingular
File: Mathlib/MeasureTheory/Decomposition/SignedLebesgue.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
⊢ s.toJordanDecomposition.posPart.singularPart μ ⟂ₘ s.toJordanDecomposition.negPart.singularPart μ
state_after: case pos
α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
hl : s.HaveLebesgueDecomposition μ
⊢ s.toJordanDecomposition.posPart.singularPart μ ⟂ₘ s.toJordanDecomposition.negPart.singularPart μ

case neg
α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ✝ ν : Measure α
s : SignedMeasure α
μ : Measure α
hl : ¬s.HaveLebesgueDecomposition μ
⊢ s.toJordanDecomposition.posPart.singularPart μ ⟂ₘ s.toJordanDecomposition.negPart.singularPart μ
tactic: by_cases hl : s.HaveLebesgueDecomposition μ
Theorem: MeasureTheory.eventually_div_right_iff
File: Mathlib/MeasureTheory/Group/Measure.lean

Proof steps:
state_before: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝⁴ : MeasurableSpace G
inst✝³ : MeasurableSpace H
inst✝² : Group G
inst✝¹ : MeasurableMul G
μ : Measure G
inst✝ : μ.IsMulRightInvariant
t : G
p : G → Prop
⊢ (∀ᵐ (x : G) ∂μ, p (x / t)) ↔ ∀ᵐ (x : G) ∂μ, p x
state_after: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝⁴ : MeasurableSpace G
inst✝³ : MeasurableSpace H
inst✝² : Group G
inst✝¹ : MeasurableMul G
μ : Measure G
inst✝ : μ.IsMulRightInvariant
t : G
p : G → Prop
⊢ (∀ᵐ (x : G) ∂μ, p (x / t)) ↔ {x | p x} ∈ Filter.map (fun t_1 => t_1 / t) (ae μ)
tactic: conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]
state_before: 𝕜 : Type u_1
G : Type u_2
H : Type u_3
inst✝⁴ : MeasurableSpace G
inst✝³ : MeasurableSpace H
inst✝² : Group G
inst✝¹ : MeasurableMul G
μ : Measure G
inst✝ : μ.IsMulRightInvariant
t : G
p : G → Prop
⊢ (∀ᵐ (x : G) ∂μ, p (x / t)) ↔ {x | p x} ∈ Filter.map (fun t_1 => t_1 / t) (ae μ)
state_after: no goals
tactic: rfl
Theorem: IsSimpleGroup.comm_iff_isSolvable
File: Mathlib/GroupTheory/Solvable.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
inst✝² : Group G
inst✝¹ : Group G'
f : G →* G'
inst✝ : IsSimpleGroup G
x✝ : IsSolvable G
n : ℕ
hn : derivedSeries G n = ⊥
⊢ ∀ (a b : G), a * b = b * a
state_after: case zero
G : Type u_1
G' : Type u_2
inst✝² : Group G
inst✝¹ : Group G'
f : G →* G'
inst✝ : IsSimpleGroup G
x✝ : IsSolvable G
hn : derivedSeries G 0 = ⊥
⊢ ∀ (a b : G), a * b = b * a

case succ
G : Type u_1
G' : Type u_2
inst✝² : Group G
inst✝¹ : Group G'
f : G →* G'
inst✝ : IsSimpleGroup G
x✝ : IsSolvable G
n✝ : ℕ
hn : derivedSeries G (n✝ + 1) = ⊥
⊢ ∀ (a b : G), a * b = b * a
tactic: cases n
Theorem: AlgebraicGeometry.PresheafedSpace.stalkMap.congr_point
File: Mathlib/Geometry/RingedSpace/Stalks.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : PresheafedSpace C
α : X ⟶ Y
x x' : ↑↑X
h : x = x'
⊢ X.presheaf.stalk x = X.presheaf.stalk x'
state_after: no goals
tactic: rw [h]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : PresheafedSpace C
α : X ⟶ Y
x x' : ↑↑X
h : x = x'
⊢ Y.presheaf.stalk (α.base x) = Y.presheaf.stalk (α.base x')
state_after: no goals
tactic: rw [h]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasColimits C
X Y : PresheafedSpace C
α : X ⟶ Y
x x' : ↑↑X
h : x = x'
⊢ Hom.stalkMap α x ≫ eqToHom ⋯ = eqToHom ⋯ ≫ Hom.stalkMap α x'
state_after: no goals
tactic: rw [stalkMap.congr α α rfl x x' h]
Theorem: PartENat.casesOn
File: Mathlib/Data/Nat/PartENat.lean

Proof steps:
state_before: P : PartENat → Prop
⊢ ∀ (a : PartENat), P ⊤ → (∀ (n : ℕ), P ↑n) → P a
state_after: no goals
tactic: exact PartENat.casesOn'
Theorem: Filter.HasBasis.uniformity_of_nhds_one
File: Mathlib/Topology/Algebra/UniformGroup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
ι : Sort u_3
p : ι → Prop
U : ι → Set α
h : (𝓝 1).HasBasis p U
⊢ (𝓤 α).HasBasis p fun i => {x | x.2 / x.1 ∈ U i}
state_after: α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
ι : Sort u_3
p : ι → Prop
U : ι → Set α
h : (𝓝 1).HasBasis p U
⊢ (Filter.comap (fun x => x.2 / x.1) (𝓝 1)).HasBasis p fun i => {x | x.2 / x.1 ∈ U i}
tactic: rw [uniformity_eq_comap_nhds_one]
state_before: α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
ι : Sort u_3
p : ι → Prop
U : ι → Set α
h : (𝓝 1).HasBasis p U
⊢ (Filter.comap (fun x => x.2 / x.1) (𝓝 1)).HasBasis p fun i => {x | x.2 / x.1 ∈ U i}
state_after: no goals
tactic: exact h.comap _
Theorem: BoundedContinuousFunction.algebraMap_apply
File: Mathlib/Topology/ContinuousFunction/Bounded.lean

Proof steps:
state_before: F : Type u_1
α : Type u
β : Type v
γ : Type w
𝕜 : Type u_2
inst✝⁵ : NormedField 𝕜
inst✝⁴ : TopologicalSpace α
inst✝³ : SeminormedAddCommGroup β
inst✝² : NormedSpace 𝕜 β
inst✝¹ : NormedRing γ
inst✝ : NormedAlgebra 𝕜 γ
f g : α →ᵇ γ
x : α
c k : 𝕜
a : α
⊢ ((algebraMap 𝕜 (α →ᵇ γ)) k) a = k • 1
state_after: no goals
tactic: simp only [Algebra.algebraMap_eq_smul_one, coe_smul, coe_one, Pi.one_apply]
Theorem: Equiv.Perm.support_inv
File: Mathlib/GroupTheory/Perm/Support.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g σ : Perm α
⊢ σ⁻¹.support = σ.support
state_after: no goals
tactic: simp_rw [Finset.ext_iff, mem_support, not_iff_not, inv_eq_iff_eq.trans eq_comm, imp_true_iff]
Theorem: id_compRel
File: Mathlib/Topology/UniformSpace/Basic.lean

Proof steps:
state_before: α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort u_1
r : Set (α × α)
x✝ : α × α
a b : α
⊢ (a, b) ∈ idRel ○ r ↔ (a, b) ∈ r
state_after: no goals
tactic: simp
Theorem: RingQuot.zero_quot
File: Mathlib/Algebra/RingQuot.lean

Proof steps:
state_before: R : Type uR
inst✝³ : Semiring R
S : Type uS
inst✝² : CommSemiring S
T : Type uT
A : Type uA
inst✝¹ : Semiring A
inst✝ : Algebra S A
r : R → R → Prop
⊢ { toQuot := Quot.mk (Rel r) 0 } = RingQuot.zero r
state_after: no goals
tactic: rw [zero_def]
Theorem: inv_mul_lt_of_lt_mul₀
File: Mathlib/Algebra/Order/GroupWithZero/Canonical.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedCommGroupWithZero α
a b c d : α
m n : ℕ
h : a < b * c
⊢ b⁻¹ * a < c
state_after: α : Type u_1
inst✝ : LinearOrderedCommGroupWithZero α
a b c d : α
m n : ℕ
h : a < c * b
⊢ a * b⁻¹ < c
tactic: rw [mul_comm] at *
state_before: α : Type u_1
inst✝ : LinearOrderedCommGroupWithZero α
a b c d : α
m n : ℕ
h : a < c * b
⊢ a * b⁻¹ < c
state_after: no goals
tactic: exact mul_inv_lt_of_lt_mul₀ h
Theorem: Cardinal.mk_compl_eq_mk_compl_infinite
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Infinite α
s t : Set α
hs : #↑s < #α
ht : #↑t < #α
⊢ #↑sᶜ = #↑tᶜ
state_after: no goals
tactic: rw [mk_compl_of_infinite s hs, mk_compl_of_infinite t ht]
Theorem: Set.image_comp_eq
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s t : Set α
g : β → γ
⊢ image (g ∘ f) = image g ∘ image f
state_after: case h.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s t : Set α
g : β → γ
x✝¹ : Set α
x✝ : γ
⊢ x✝ ∈ g ∘ f '' x✝¹ ↔ x✝ ∈ (image g ∘ image f) x✝¹
tactic: ext
state_before: case h.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s t : Set α
g : β → γ
x✝¹ : Set α
x✝ : γ
⊢ x✝ ∈ g ∘ f '' x✝¹ ↔ x✝ ∈ (image g ∘ image f) x✝¹
state_after: no goals
tactic: simp
Theorem: Finset.exists_subset_or_subset_of_two_mul_lt_card
File: Mathlib/Data/Finset/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
tactic: have h₁ : (X ∩ (Y \ X)).card = 0 := Finset.card_eq_zero.mpr (Finset.inter_sdiff_self X Y)
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
tactic: have h₂ : (X ∪ Y).card = X.card + (Y \ X).card := by
    rw [← card_union_add_card_inter X (Y \ X), Finset.union_sdiff_self_eq_union, h₁, add_zero]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : 2 * n < (X ∪ Y).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
tactic: rw [h₂, Nat.two_mul] at hXY
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
state_after: case inl
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
h : n < X.card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)

case inr
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n✝ : ℕ
inst✝ : DecidableEq α
X Y : Finset α
n : ℕ
hXY : n + n < X.card + (Y \ X).card
h₁ : (X ∩ (Y \ X)).card = 0
h₂ : (X ∪ Y).card = X.card + (Y \ X).card
h : n < (Y \ X).card
⊢ ∃ C, n < C.card ∧ (C ⊆ X ∨ C ⊆ Y)
tactic: obtain h | h : n < X.card ∨ n < (Y \ X).card := by contrapose! hXY; omega
Theorem: Algebra.algebraMapSubmonoid_map_eq
File: Mathlib/Algebra/Algebra/Hom.lean

Proof steps:
state_before: R : Type u
A : Type v
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
M : Submonoid R
B : Type w
inst✝¹ : CommRing B
inst✝ : Algebra R B
f : A →ₐ[R] B
⊢ Submonoid.map f (algebraMapSubmonoid A M) = algebraMapSubmonoid B M
state_after: case h
R : Type u
A : Type v
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
M : Submonoid R
B : Type w
inst✝¹ : CommRing B
inst✝ : Algebra R B
f : A →ₐ[R] B
x : B
⊢ x ∈ Submonoid.map f (algebraMapSubmonoid A M) ↔ x ∈ algebraMapSubmonoid B M
tactic: ext x
state_before: case h
R : Type u
A : Type v
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
M : Submonoid R
B : Type w
inst✝¹ : CommRing B
inst✝ : Algebra R B
f : A →ₐ[R] B
x : B
⊢ x ∈ Submonoid.map f (algebraMapSubmonoid A M) ↔ x ∈ algebraMapSubmonoid B M
state_after: case h.mp
R : Type u
A : Type v
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
M : Submonoid R
B : Type w
inst✝¹ : CommRing B
inst✝ : Algebra R B
f : A →ₐ[R] B
x : B
⊢ x ∈ Submonoid.map f (algebraMapSubmonoid A M) → x ∈ algebraMapSubmonoid B M

case h.mpr
R : Type u
A : Type v
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
M : Submonoid R
B : Type w
inst✝¹ : CommRing B
inst✝ : Algebra R B
f : A →ₐ[R] B
x : B
⊢ x ∈ algebraMapSubmonoid B M → x ∈ Submonoid.map f (algebraMapSubmonoid A M)
tactic: constructor
Theorem: FractionalIdeal.map_one_div
File: Mathlib/RingTheory/FractionalIdeal/Operations.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝³ : IsDomain R₁
I✝ J : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
I : FractionalIdeal R₁⁰ K
h : K ≃ₐ[R₁] K'
⊢ map (↑h) (1 / I) = 1 / map (↑h) I
state_after: no goals
tactic: rw [map_div, map_one]
Theorem: List.ofFn_fin_repeat
File: Mathlib/Data/List/OfFn.lean

Proof steps:
state_before: α : Type u
m : ℕ
a : Fin m → α
n : ℕ
⊢ ofFn (Fin.repeat n a) = (replicate n (ofFn a)).join
state_after: no goals
tactic: simp_rw [ofFn_mul, ← ofFn_const, Fin.repeat, Fin.modNat, Nat.add_comm,
    Nat.add_mul_mod_self_right, Nat.mod_eq_of_lt (Fin.is_lt _)]
Theorem: List.Sorted.insertionSort_eq
File: Mathlib/Data/List/Sort.lean

Proof steps:
state_before: α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l : List α
h : Sorted r (a :: b :: l)
⊢ insertionSort r (a :: b :: l) = a :: b :: l
state_after: case hc
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l : List α
h : Sorted r (a :: b :: l)
⊢ r a b

α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l : List α
h : Sorted r (a :: b :: l)
⊢ Sorted r (b :: l)
tactic: rw [insertionSort, Sorted.insertionSort_eq, orderedInsert, if_pos]
state_before: case hc
α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l : List α
h : Sorted r (a :: b :: l)
⊢ r a b

α : Type u
r : α → α → Prop
inst✝ : DecidableRel r
a b : α
l : List α
h : Sorted r (a :: b :: l)
⊢ Sorted r (b :: l)
state_after: no goals
tactic: exacts [rel_of_sorted_cons h _ (mem_cons_self _ _), h.tail]
Theorem: Real.log_neg_natCast_nonneg
File: Mathlib/Analysis/SpecialFunctions/Log/Basic.lean

Proof steps:
state_before: x y : ℝ
n : ℕ
⊢ 0 ≤ log (-↑n)
state_after: x y : ℝ
n : ℕ
⊢ 0 ≤ log ↑n
tactic: rw [← log_neg_eq_log, neg_neg]
state_before: x y : ℝ
n : ℕ
⊢ 0 ≤ log ↑n
state_after: no goals
tactic: exact log_natCast_nonneg _
Theorem: List.sublists'_map
File: Mathlib/Data/List/Sublists.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
f : α → β
⊢ (map f []).sublists' = map (map f) [].sublists'
state_after: no goals
tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
f : α → β
a : α
l : List α
⊢ (map f (a :: l)).sublists' = map (map f) (a :: l).sublists'
state_after: no goals
tactic: simp [map_cons, sublists'_cons, sublists'_map f l, Function.comp]
Theorem: Cubic.equiv_symm_apply_a
File: Mathlib/Algebra/CubicDiscriminant.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P✝ Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
P : Cubic R
⊢ (fun f => { a := (↑f).coeff 3, b := (↑f).coeff 2, c := (↑f).coeff 1, d := (↑f).coeff 0 })
      ((fun P => ⟨P.toPoly, ⋯⟩) P) =
    P
state_after: no goals
tactic: ext <;> simp only [Subtype.coe_mk, coeffs]
state_before: R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
f : { p // p.degree ≤ 3 }
⊢ (fun P => ⟨P.toPoly, ⋯⟩)
      ((fun f => { a := (↑f).coeff 3, b := (↑f).coeff 2, c := (↑f).coeff 1, d := (↑f).coeff 0 }) f) =
    f
state_after: case a.a.succ.succ.succ.succ
R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
f : { p // p.degree ≤ 3 }
n : ℕ
⊢ { a := (↑f).coeff 3, b := (↑f).coeff 2, c := (↑f).coeff 1, d := (↑f).coeff 0 }.toPoly.coeff (4 + n) =
    (↑f).coeff (4 + n)
tactic: ext (_ | _ | _ | _ | n) <;> simp only [Nat.zero_eq, Nat.succ_eq_add_one] <;> ring_nf
      <;> try simp only [coeffs]
state_before: case a.a.succ.succ.succ.succ
R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
f : { p // p.degree ≤ 3 }
n : ℕ
⊢ { a := (↑f).coeff 3, b := (↑f).coeff 2, c := (↑f).coeff 1, d := (↑f).coeff 0 }.toPoly.coeff (4 + n) =
    (↑f).coeff (4 + n)
state_after: case a.a.succ.succ.succ.succ
R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
f : { p // p.degree ≤ 3 }
n : ℕ
h3 : 3 < 4 + n
⊢ { a := (↑f).coeff 3, b := (↑f).coeff 2, c := (↑f).coeff 1, d := (↑f).coeff 0 }.toPoly.coeff (4 + n) =
    (↑f).coeff (4 + n)
tactic: have h3 : 3 < 4 + n := by linarith only
state_before: case a.a.succ.succ.succ.succ
R : Type u_1
S : Type u_2
F : Type u_3
K : Type u_4
P Q : Cubic R
a b c d a' b' c' d' : R
inst✝ : Semiring R
f : { p // p.degree ≤ 3 }
n : ℕ
h3 : 3 < 4 + n
⊢ { a := (↑f).coeff 3, b := (↑f).coeff 2, c := (↑f).coeff 1, d := (↑f).coeff 0 }.toPoly.coeff (4 + n) =
    (↑f).coeff (4 + n)
state_after: no goals
tactic: rw [coeff_eq_zero h3,
      (degree_le_iff_coeff_zero (f : R[X]) 3).mp f.2 _ <| WithBot.coe_lt_coe.mpr (by exact h3)]