ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Set.InjOn.image_subset_image_iff
File: Mathlib/Data/Set/Function.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
h : InjOn f s
h₁ : s₁ ⊆ s
h₂ : s₂ ⊆ s
⊢ f '' s₁ ⊆ f '' s₂ ↔ s₁ ⊆ s₂
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
h : InjOn f s
h₁ : s₁ ⊆ s
h₂ : s₂ ⊆ s
h' : f '' s₁ ⊆ f '' s₂
⊢ s₁ ⊆ s₂
tactic: refine ⟨fun h' ↦ ?_, image_subset _⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
h : InjOn f s
h₁ : s₁ ⊆ s
h₂ : s₂ ⊆ s
h' : f '' s₁ ⊆ f '' s₂
⊢ s₁ ⊆ s₂
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
h : InjOn f s
h₁ : s₁ ⊆ s
h₂ : s₂ ⊆ s
h' : f '' s₁ ⊆ f '' s₂
⊢ f ⁻¹' (f '' s₁) ∩ s ⊆ f ⁻¹' (f '' s₂) ∩ s
tactic: rw [← h.preimage_image_inter h₁, ← h.preimage_image_inter h₂]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
h : InjOn f s
h₁ : s₁ ⊆ s
h₂ : s₂ ⊆ s
h' : f '' s₁ ⊆ f '' s₂
⊢ f ⁻¹' (f '' s₁) ∩ s ⊆ f ⁻¹' (f '' s₂) ∩ s
state_after: no goals
tactic: exact inter_subset_inter_left _ (preimage_mono h')
Theorem: LinearPMap.IsFormalAdjoint.symm
File: Mathlib/Analysis/InnerProductSpace/LinearPMap.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁴ : RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
T : E →ₗ.[𝕜] F
S : F →ₗ.[𝕜] E
h : T.IsFormalAdjoint S
y : ↥S.domain
x✝ : ↥T.domain
⊢ ⟪↑S y, ↑x✝⟫_𝕜 = ⟪↑y, ↑T x✝⟫_𝕜
state_after: no goals
tactic: rw [← inner_conj_symm, ← inner_conj_symm (y : F), h]
Theorem: ChartedSpaceCore.open_target
File: Mathlib/Geometry/Manifold/ChartedSpace.lean

Proof steps:
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
c : ChartedSpaceCore H M
e : PartialEquiv M H
he : e ∈ c.atlas
⊢ IsOpen e.target
state_after: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
c : ChartedSpaceCore H M
e : PartialEquiv M H
he : e ∈ c.atlas
E : e.target ∩ ↑e.symm ⁻¹' e.source = e.target
⊢ IsOpen e.target
tactic: have E : e.target ∩ e.symm ⁻¹' e.source = e.target :=
    Subset.antisymm inter_subset_left fun x hx ↦
      ⟨hx, PartialEquiv.target_subset_preimage_source _ hx⟩
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
c : ChartedSpaceCore H M
e : PartialEquiv M H
he : e ∈ c.atlas
E : e.target ∩ ↑e.symm ⁻¹' e.source = e.target
⊢ IsOpen e.target
state_after: no goals
tactic: simpa [PartialEquiv.trans_source, E] using c.open_source e e he he
Theorem: Complex.hasFPowerSeriesOnBall_of_differentiable_off_countable
File: Mathlib/Analysis/Complex/CauchyIntegral.lean

Proof steps:
state_before: E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ≥0
c : ℂ
f : ℂ → E
s : Set ℂ
hs : s.Countable
hc : ContinuousOn f (closedBall c ↑R)
hd : ∀ z ∈ ball c ↑R \ s, DifferentiableAt ℂ f z
hR : 0 < R
w : ℂ
hw : w ∈ EMetric.ball 0 ↑R
⊢ HasSum (fun n => (cauchyPowerSeries f c (↑R) n) fun x => w) (f (c + w))
state_after: E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ≥0
c : ℂ
f : ℂ → E
s : Set ℂ
hs : s.Countable
hc : ContinuousOn f (closedBall c ↑R)
hd : ∀ z ∈ ball c ↑R \ s, DifferentiableAt ℂ f z
hR : 0 < R
w : ℂ
hw : w ∈ EMetric.ball 0 ↑R
hw' : c + w ∈ ball c ↑R
⊢ HasSum (fun n => (cauchyPowerSeries f c (↑R) n) fun x => w) (f (c + w))
tactic: have hw' : c + w ∈ ball c R := by
      simpa only [add_mem_ball_iff_norm, ← coe_nnnorm, mem_emetric_ball_zero_iff,
        NNReal.coe_lt_coe, ENNReal.coe_lt_coe] using hw
state_before: E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ≥0
c : ℂ
f : ℂ → E
s : Set ℂ
hs : s.Countable
hc : ContinuousOn f (closedBall c ↑R)
hd : ∀ z ∈ ball c ↑R \ s, DifferentiableAt ℂ f z
hR : 0 < R
w : ℂ
hw : w ∈ EMetric.ball 0 ↑R
hw' : c + w ∈ ball c ↑R
⊢ HasSum (fun n => (cauchyPowerSeries f c (↑R) n) fun x => w) (f (c + w))
state_after: E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ≥0
c : ℂ
f : ℂ → E
s : Set ℂ
hs : s.Countable
hc : ContinuousOn f (closedBall c ↑R)
hd : ∀ z ∈ ball c ↑R \ s, DifferentiableAt ℂ f z
hR : 0 < R
w : ℂ
hw : w ∈ EMetric.ball 0 ↑R
hw' : c + w ∈ ball c ↑R
⊢ HasSum (fun n => (cauchyPowerSeries f c (↑R) n) fun x => w)
    ((2 * ↑π * I)⁻¹ • ∮ (z : ℂ) in C(c, ↑R), (z - (c + w))⁻¹ • f z)
tactic: rw [← two_pi_I_inv_smul_circleIntegral_sub_inv_smul_of_differentiable_on_off_countable
      hs hw' hc hd]
state_before: E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ≥0
c : ℂ
f : ℂ → E
s : Set ℂ
hs : s.Countable
hc : ContinuousOn f (closedBall c ↑R)
hd : ∀ z ∈ ball c ↑R \ s, DifferentiableAt ℂ f z
hR : 0 < R
w : ℂ
hw : w ∈ EMetric.ball 0 ↑R
hw' : c + w ∈ ball c ↑R
⊢ HasSum (fun n => (cauchyPowerSeries f c (↑R) n) fun x => w)
    ((2 * ↑π * I)⁻¹ • ∮ (z : ℂ) in C(c, ↑R), (z - (c + w))⁻¹ • f z)
state_after: no goals
tactic: exact (hasFPowerSeriesOn_cauchy_integral
      ((hc.mono sphere_subset_closedBall).circleIntegrable R.2) hR).hasSum hw
Theorem: is_bot_adic_iff
File: Mathlib/Topology/Algebra/Nonarchimedean/AdicTopology.lean

Proof steps:
state_before: R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalRing R
A : Type u_2
inst✝² : CommRing A
inst✝¹ : TopologicalSpace A
inst✝ : TopologicalRing A
⊢ IsAdic ⊥ ↔ DiscreteTopology A
state_after: R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalRing R
A : Type u_2
inst✝² : CommRing A
inst✝¹ : TopologicalSpace A
inst✝ : TopologicalRing A
⊢ ((∀ (n : ℕ), IsOpen ↑(⊥ ^ n)) ∧ ∀ s ∈ 𝓝 0, ∃ n, ↑(⊥ ^ n) ⊆ s) ↔ DiscreteTopology A
tactic: rw [isAdic_iff]
state_before: R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalRing R
A : Type u_2
inst✝² : CommRing A
inst✝¹ : TopologicalSpace A
inst✝ : TopologicalRing A
⊢ ((∀ (n : ℕ), IsOpen ↑(⊥ ^ n)) ∧ ∀ s ∈ 𝓝 0, ∃ n, ↑(⊥ ^ n) ⊆ s) ↔ DiscreteTopology A
state_after: case mp
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalRing R
A : Type u_2
inst✝² : CommRing A
inst✝¹ : TopologicalSpace A
inst✝ : TopologicalRing A
⊢ ((∀ (n : ℕ), IsOpen ↑(⊥ ^ n)) ∧ ∀ s ∈ 𝓝 0, ∃ n, ↑(⊥ ^ n) ⊆ s) → DiscreteTopology A

case mpr
R : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : TopologicalSpace R
inst✝³ : TopologicalRing R
A : Type u_2
inst✝² : CommRing A
inst✝¹ : TopologicalSpace A
inst✝ : TopologicalRing A
⊢ DiscreteTopology A → (∀ (n : ℕ), IsOpen ↑(⊥ ^ n)) ∧ ∀ s ∈ 𝓝 0, ∃ n, ↑(⊥ ^ n) ⊆ s
tactic: constructor
Theorem: PFunctor.W.dest_mk
File: Mathlib/Data/PFunctor/Univariate/Basic.lean

Proof steps:
state_before: P : PFunctor.{u}
α : Type v₁
β : Type v₂
γ : Type v₃
p : ↑P P.W
⊢ (mk p).dest = p
state_after: case mk
P : PFunctor.{u}
α : Type v₁
β : Type v₂
γ : Type v₃
fst✝ : P.A
snd✝ : P.B fst✝ → P.W
⊢ (mk ⟨fst✝, snd✝⟩).dest = ⟨fst✝, snd✝⟩
tactic: cases p
state_before: case mk
P : PFunctor.{u}
α : Type v₁
β : Type v₂
γ : Type v₃
fst✝ : P.A
snd✝ : P.B fst✝ → P.W
⊢ (mk ⟨fst✝, snd✝⟩).dest = ⟨fst✝, snd✝⟩
state_after: no goals
tactic: rfl
Theorem: le_schnirelmannDensity_iff
File: Mathlib/Combinatorics/Schnirelmann.lean

Proof steps:
state_before: A : Set ℕ
inst✝ : DecidablePred fun x => x ∈ A
x x✝¹ : ℝ
x✝ : x✝¹ ∈ Set.range fun n => ↑(filter (fun x => x ∈ A) (Ioc 0 ↑n)).card / ↑↑n
w✝ : { n // 0 < n }
hx : (fun n => ↑(filter (fun x => x ∈ A) (Ioc 0 ↑n)).card / ↑↑n) w✝ = x✝¹
⊢ 0 ≤ (fun n => ↑(filter (fun x => x ∈ A) (Ioc 0 ↑n)).card / ↑↑n) w✝
state_after: no goals
tactic: positivity
Theorem: Real.sin_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: ⊢ sin π = 0
state_after: ⊢ sin (π / 2) * 0 + 0 * sin (π / 2) = 0
tactic: rw [← mul_div_cancel_left₀ π (two_ne_zero' ℝ), two_mul, add_div, sin_add, cos_pi_div_two]
state_before: ⊢ sin (π / 2) * 0 + 0 * sin (π / 2) = 0
state_after: no goals
tactic: simp
Theorem: Sym2.filter_image_mk_not_isDiag
File: Mathlib/Data/Sym/Sym2.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
⊢ filter (fun a => ¬a.IsDiag) (image Sym2.mk (s ×ˢ s)) = image Sym2.mk s.offDiag
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
z : Sym2 α
⊢ z ∈ filter (fun a => ¬a.IsDiag) (image Sym2.mk (s ×ˢ s)) ↔ z ∈ image Sym2.mk s.offDiag
tactic: ext z
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
z : Sym2 α
⊢ z ∈ filter (fun a => ¬a.IsDiag) (image Sym2.mk (s ×ˢ s)) ↔ z ∈ image Sym2.mk s.offDiag
state_after: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ s(x✝, y✝) ∈ filter (fun a => ¬a.IsDiag) (image Sym2.mk (s ×ˢ s)) ↔ s(x✝, y✝) ∈ image Sym2.mk s.offDiag
tactic: induction z
state_before: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ s(x✝, y✝) ∈ filter (fun a => ¬a.IsDiag) (image Sym2.mk (s ×ˢ s)) ↔ s(x✝, y✝) ∈ image Sym2.mk s.offDiag
state_after: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ ¬s(x✝, y✝).IsDiag ↔
    ∃ a b, (a ∈ s ∧ b ∈ s ∧ a ≠ b) ∧ s(a, b) = s(x✝, y✝)
tactic: simp only [mem_image, mem_offDiag, mem_filter, Prod.exists, mem_product]
state_before: case a.h
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ ¬s(x✝, y✝).IsDiag ↔
    ∃ a b, (a ∈ s ∧ b ∈ s ∧ a ≠ b) ∧ s(a, b) = s(x✝, y✝)
state_after: case a.h.mp
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ ¬s(x✝, y✝).IsDiag →
    ∃ a b, (a ∈ s ∧ b ∈ s ∧ a ≠ b) ∧ s(a, b) = s(x✝, y✝)

case a.h.mpr
α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
f : α → β
inst✝ : DecidableEq α
s : Finset α
x✝ y✝ : α
⊢ (∃ a b, (a ∈ s ∧ b ∈ s ∧ a ≠ b) ∧ s(a, b) = s(x✝, y✝)) →
    (∃ a b, (a ∈ s ∧ b ∈ s) ∧ s(a, b) = s(x✝, y✝)) ∧ ¬s(x✝, y✝).IsDiag
tactic: constructor
Theorem: CategoryTheory.Discrete.monoidal_associator
File: Mathlib/CategoryTheory/Monoidal/Discrete.lean

Proof steps:
state_before: M : Type u
inst✝ : Monoid M
X x✝¹ x✝ : Discrete M
f : x✝¹ ⟶ x✝
⊢ (fun X Y => { as := X.as * Y.as }) X x✝¹ = (fun X Y => { as := X.as * Y.as }) X x✝
state_after: M : Type u
inst✝ : Monoid M
X x✝¹ x✝ : Discrete M
f : x✝¹ ⟶ x✝
⊢ { as := X.as * x✝¹.as } = { as := X.as * x✝.as }
tactic: dsimp
state_before: M : Type u
inst✝ : Monoid M
X x✝¹ x✝ : Discrete M
f : x✝¹ ⟶ x✝
⊢ { as := X.as * x✝¹.as } = { as := X.as * x✝.as }
state_after: no goals
tactic: rw [eq_of_hom f]
state_before: M : Type u
inst✝ : Monoid M
X₁✝ X₂✝ : Discrete M
f : X₁✝ ⟶ X₂✝
X : Discrete M
⊢ (fun X Y => { as := X.as * Y.as }) X₁✝ X = (fun X Y => { as := X.as * Y.as }) X₂✝ X
state_after: M : Type u
inst✝ : Monoid M
X₁✝ X₂✝ : Discrete M
f : X₁✝ ⟶ X₂✝
X : Discrete M
⊢ { as := X₁✝.as * X.as } = { as := X₂✝.as * X.as }
tactic: dsimp
state_before: M : Type u
inst✝ : Monoid M
X₁✝ X₂✝ : Discrete M
f : X₁✝ ⟶ X₂✝
X : Discrete M
⊢ { as := X₁✝.as * X.as } = { as := X₂✝.as * X.as }
state_after: no goals
tactic: rw [eq_of_hom f]
state_before: M : Type u
inst✝ : Monoid M
X₁✝ Y₁✝ X₂✝ Y₂✝ : Discrete M
f : X₁✝ ⟶ Y₁✝
g : X₂✝ ⟶ Y₂✝
⊢ (fun X Y => { as := X.as * Y.as }) X₁✝ X₂✝ = (fun X Y => { as := X.as * Y.as }) Y₁✝ Y₂✝
state_after: M : Type u
inst✝ : Monoid M
X₁✝ Y₁✝ X₂✝ Y₂✝ : Discrete M
f : X₁✝ ⟶ Y₁✝
g : X₂✝ ⟶ Y₂✝
⊢ { as := X₁✝.as * X₂✝.as } = { as := Y₁✝.as * Y₂✝.as }
tactic: dsimp
state_before: M : Type u
inst✝ : Monoid M
X₁✝ Y₁✝ X₂✝ Y₂✝ : Discrete M
f : X₁✝ ⟶ Y₁✝
g : X₂✝ ⟶ Y₂✝
⊢ { as := X₁✝.as * X₂✝.as } = { as := Y₁✝.as * Y₂✝.as }
state_after: no goals
tactic: rw [eq_of_hom f, eq_of_hom g]
Theorem: ConvexBody.iInter_smul_eq_self
File: Mathlib/Analysis/Convex/Body.lean

Proof steps:
state_before: V : Type u_1
inst✝² : SeminormedAddCommGroup V
inst✝¹ : NormedSpace ℝ V
K✝ L : ConvexBody V
inst✝ : T2Space V
u : ℕ → ℝ≥0
K : ConvexBody V
h_zero : 0 ∈ K
hu : Tendsto u atTop (𝓝 0)
⊢ ⋂ n, (1 + ↑(u n)) • ↑K = ↑K
state_after: case h
V : Type u_1
inst✝² : SeminormedAddCommGroup V
inst✝¹ : NormedSpace ℝ V
K✝ L : ConvexBody V
inst✝ : T2Space V
u : ℕ → ℝ≥0
K : ConvexBody V
h_zero : 0 ∈ K
hu : Tendsto u atTop (𝓝 0)
x : V
⊢ x ∈ ⋂ n, (1 + ↑(u n)) • ↑K ↔ x ∈ ↑K
tactic: ext x
state_before: case h
V : Type u_1
inst✝² : SeminormedAddCommGroup V
inst✝¹ : NormedSpace ℝ V
K✝ L : ConvexBody V
inst✝ : T2Space V
u : ℕ → ℝ≥0
K : ConvexBody V
h_zero : 0 ∈ K
hu : Tendsto u atTop (𝓝 0)
x : V
⊢ x ∈ ⋂ n, (1 + ↑(u n)) • ↑K ↔ x ∈ ↑K
state_after: case h.refine_1
V : Type u_1
inst✝² : SeminormedAddCommGroup V
inst✝¹ : NormedSpace ℝ V
K✝ L : ConvexBody V
inst✝ : T2Space V
u : ℕ → ℝ≥0
K : ConvexBody V
h_zero : 0 ∈ K
hu : Tendsto u atTop (𝓝 0)
x : V
h : x ∈ ⋂ n, (1 + ↑(u n)) • ↑K
⊢ x ∈ ↑K

case h.refine_2
V : Type u_1
inst✝² : SeminormedAddCommGroup V
inst✝¹ : NormedSpace ℝ V
K✝ L : ConvexBody V
inst✝ : T2Space V
u : ℕ → ℝ≥0
K : ConvexBody V
h_zero : 0 ∈ K
hu : Tendsto u atTop (𝓝 0)
x : V
h : x ∈ ↑K
⊢ x ∈ ⋂ n, (1 + ↑(u n)) • ↑K
tactic: refine ⟨fun h => ?_, fun h => ?_⟩
Theorem: CategoryTheory.Adjunction.faithful_R_of_epi_counit_app
File: Mathlib/CategoryTheory/Adjunction/FullyFaithful.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
inst✝ : ∀ (X : D), Epi (h.counit.app X)
X Y : D
f g : X ⟶ Y
hfg : R.map f = R.map g
⊢ f = g
state_after: case a
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
inst✝ : ∀ (X : D), Epi (h.counit.app X)
X Y : D
f g : X ⟶ Y
hfg : R.map f = R.map g
⊢ h.counit.app X ≫ f = h.counit.app X ≫ g
tactic: apply Epi.left_cancellation (f := h.counit.app X)
state_before: case a
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
inst✝ : ∀ (X : D), Epi (h.counit.app X)
X Y : D
f g : X ⟶ Y
hfg : R.map f = R.map g
⊢ h.counit.app X ≫ f = h.counit.app X ≫ g
state_after: case a.a
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
inst✝ : ∀ (X : D), Epi (h.counit.app X)
X Y : D
f g : X ⟶ Y
hfg : R.map f = R.map g
⊢ (h.homEquiv (R.obj X) Y) (h.counit.app X ≫ f) = (h.homEquiv (R.obj X) Y) (h.counit.app X ≫ g)
tactic: apply (h.homEquiv (R.obj X) Y).injective
state_before: case a.a
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
inst✝ : ∀ (X : D), Epi (h.counit.app X)
X Y : D
f g : X ⟶ Y
hfg : R.map f = R.map g
⊢ (h.homEquiv (R.obj X) Y) (h.counit.app X ≫ f) = (h.homEquiv (R.obj X) Y) (h.counit.app X ≫ g)
state_after: no goals
tactic: simpa using hfg
Theorem: Function.IsPeriodicPt.const_mul
File: Mathlib/Dynamics/PeriodicPts.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
f fa : α → α
fb : β → β
x y : α
m n✝ : ℕ
hm : IsPeriodicPt f m x
n : ℕ
⊢ IsPeriodicPt f (n * m) x
state_after: no goals
tactic: simp only [mul_comm n, hm.mul_const n]
Theorem: MeasureTheory.Measure.restrict_union_le
File: Mathlib/MeasureTheory/Measure/Restrict.lean

Proof steps:
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s'✝ t✝ s s' t : Set α
ht : MeasurableSet t
⊢ (μ.restrict (s ∪ s')) t ≤ (μ.restrict s + μ.restrict s') t
state_after: no goals
tactic: simpa [ht, inter_union_distrib_left] using measure_union_le (t ∩ s) (t ∩ s')
Theorem: MvPolynomial.supported_univ
File: Mathlib/Algebra/MvPolynomial/Supported.lean

Proof steps:
state_before: σ : Type u_1
τ : Type u_2
R : Type u
S : Type v
r : R
e : ℕ
n m : σ
inst✝ : CommSemiring R
p q : MvPolynomial σ R
s t : Set σ
⊢ supported R Set.univ = ⊤
state_after: no goals
tactic: simp [Algebra.eq_top_iff, mem_supported]
Theorem: IsGδ.sInter
File: Mathlib/Topology/GDelta.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
ι : Type u_3
ι' : Sort u_4
inst✝ : TopologicalSpace X
S : Set (Set X)
h : ∀ s ∈ S, IsGδ s
hS : S.Countable
⊢ IsGδ (⋂₀ S)
state_after: no goals
tactic: simpa only [sInter_eq_biInter] using IsGδ.biInter hS h
Theorem: Real.contDiffOn_log
File: Mathlib/Analysis/SpecialFunctions/Log/Deriv.lean

Proof steps:
state_before: x : ℝ
n : ℕ∞
⊢ ContDiffOn ℝ n log {0}ᶜ
state_after: x : ℝ
n : ℕ∞
⊢ ContDiffOn ℝ ⊤ log {0}ᶜ
tactic: suffices ContDiffOn ℝ ⊤ log {0}ᶜ from this.of_le le_top
state_before: x : ℝ
n : ℕ∞
⊢ ContDiffOn ℝ ⊤ log {0}ᶜ
state_after: x : ℝ
n : ℕ∞
⊢ DifferentiableOn ℝ log {0}ᶜ ∧ ContDiffOn ℝ ⊤ (deriv log) {0}ᶜ
tactic: refine (contDiffOn_top_iff_deriv_of_isOpen isOpen_compl_singleton).2 ?_
state_before: x : ℝ
n : ℕ∞
⊢ DifferentiableOn ℝ log {0}ᶜ ∧ ContDiffOn ℝ ⊤ (deriv log) {0}ᶜ
state_after: no goals
tactic: simp [differentiableOn_log, contDiffOn_inv]
Theorem: LieIdeal.incl_idealRange
File: Mathlib/Algebra/Lie/Submodule.lean

Proof steps:
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
⊢ I.incl.idealRange = I
state_after: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
⊢ ∃ N, ↑N = ↑I
tactic: rw [LieHom.idealRange_eq_lieSpan_range, ← LieSubalgebra.coe_to_submodule, ←
    LieSubmodule.coe_toSubmodule_eq_iff, incl_range, coe_to_lieSubalgebra_to_submodule,
    LieSubmodule.coe_lieSpan_submodule_eq_iff]
state_before: R : Type u
L : Type v
L' : Type w₂
M : Type w
M' : Type w₁
inst✝¹² : CommRing R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra R L
inst✝⁹ : LieRing L'
inst✝⁸ : LieAlgebra R L'
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : LieRingModule L M
inst✝⁴ : LieModule R L M
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
inst✝¹ : LieRingModule L M'
inst✝ : LieModule R L M'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
⊢ ∃ N, ↑N = ↑I
state_after: no goals
tactic: use I
Theorem: dvd_sub_left
File: Mathlib/Algebra/Ring/Divisibility/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : NonUnitalRing α
a b c : α
h : a ∣ c
⊢ a ∣ b - c ↔ a ∣ b
state_after: no goals
tactic: simpa only [← sub_eq_add_neg] using dvd_add_left ((dvd_neg (α := α)).2 h)
Theorem: zero_geom_sum
File: Mathlib/Algebra/GeomSum.lean

Proof steps:
state_before: α : Type u
inst✝ : Semiring α
⊢ ∑ i ∈ range 0, 0 ^ i = if 0 = 0 then 0 else 1
state_after: no goals
tactic: simp
state_before: α : Type u
inst✝ : Semiring α
⊢ ∑ i ∈ range 1, 0 ^ i = if 1 = 0 then 0 else 1
state_after: no goals
tactic: simp
state_before: α : Type u
inst✝ : Semiring α
n : ℕ
⊢ ∑ i ∈ range (n + 2), 0 ^ i = if n + 2 = 0 then 0 else 1
state_after: α : Type u
inst✝ : Semiring α
n : ℕ
⊢ 0 ^ (n + 1) + ∑ i ∈ range (n + 1), 0 ^ i = if n + 2 = 0 then 0 else 1
tactic: rw [geom_sum_succ']
state_before: α : Type u
inst✝ : Semiring α
n : ℕ
⊢ 0 ^ (n + 1) + ∑ i ∈ range (n + 1), 0 ^ i = if n + 2 = 0 then 0 else 1
state_after: no goals
tactic: simp [zero_geom_sum]
Theorem: Complex.sin_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: ⊢ sin ↑π = 0
state_after: ⊢ ↑0 = 0
tactic: rw [← ofReal_sin, Real.sin_pi]
state_before: ⊢ ↑0 = 0
state_after: no goals
tactic: simp
Theorem: derivWithin_const_sub
File: Mathlib/Analysis/Calculus/Deriv/Add.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type v
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type w
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L : Filter 𝕜
hxs : UniqueDiffWithinAt 𝕜 s x
c : F
⊢ derivWithin (fun y => c - f y) s x = -derivWithin f s x
state_after: no goals
tactic: simp [derivWithin, fderivWithin_const_sub hxs]
Theorem: LinearMap.rank_le_of_surjective
File: Mathlib/LinearAlgebra/Dimension/Basic.lean

Proof steps:
state_before: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝⁹ : Ring R
inst✝⁸ : Ring R'
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M₁
inst✝⁴ : Module R M
inst✝³ : Module R M'
inst✝² : Module R M₁
inst✝¹ : Module R' M'
inst✝ : Module R' M₁
f : M →ₗ[R] M₁
h : Surjective ⇑f
⊢ Module.rank R M₁ ≤ Module.rank R M
state_after: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝⁹ : Ring R
inst✝⁸ : Ring R'
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M₁
inst✝⁴ : Module R M
inst✝³ : Module R M'
inst✝² : Module R M₁
inst✝¹ : Module R' M'
inst✝ : Module R' M₁
f : M →ₗ[R] M₁
h : Surjective ⇑f
⊢ Module.rank R ↥(range f) ≤ Module.rank R M
tactic: rw [← rank_range_of_surjective f h]
state_before: R : Type u
R' : Type u'
M M₁ : Type v
M' : Type v'
inst✝⁹ : Ring R
inst✝⁸ : Ring R'
inst✝⁷ : AddCommGroup M
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M₁
inst✝⁴ : Module R M
inst✝³ : Module R M'
inst✝² : Module R M₁
inst✝¹ : Module R' M'
inst✝ : Module R' M₁
f : M →ₗ[R] M₁
h : Surjective ⇑f
⊢ Module.rank R ↥(range f) ≤ Module.rank R M
state_after: no goals
tactic: apply rank_range_le