ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: NormedAddGroupHom.NormNoninc.neg_iff
File: Mathlib/Analysis/Normed/Group/Hom.lean

Proof steps:
state_before: V : Type u_1
W : Type u_2
V₁ : Type u_3
V₂ : Type u_4
V₃ : Type u_5
inst✝⁴ : SeminormedAddCommGroup V
inst✝³ : SeminormedAddCommGroup W
inst✝² : SeminormedAddCommGroup V₁
inst✝¹ : SeminormedAddCommGroup V₂
inst✝ : SeminormedAddCommGroup V₃
f✝ : NormedAddGroupHom V W
f : NormedAddGroupHom V₁ V₂
h : (-f).NormNoninc
x : V₁
⊢ ‖f x‖ ≤ ‖x‖
state_after: no goals
tactic: simpa using h x
Theorem: Ideal.mem_prime_of_mul_mem_pow
File: Mathlib/RingTheory/Ideal/Norm.lean

Proof steps:
state_before: S : Type u_1
inst✝² : CommRing S
inst✝¹ : IsDomain S
P✝ : Ideal S
P_prime✝ : P✝.IsPrime
hP✝ : P✝ ≠ ⊥
inst✝ : IsDedekindDomain S
P : Ideal S
P_prime : P.IsPrime
hP : P ≠ ⊥
i : ℕ
a b : S
a_not_mem : a ∉ P ^ (i + 1)
ab_mem : a * b ∈ P ^ (i + 1)
⊢ b ∈ P
state_after: S : Type u_1
inst✝² : CommRing S
inst✝¹ : IsDomain S
P✝ : Ideal S
P_prime✝ : P✝.IsPrime
hP✝ : P✝ ≠ ⊥
inst✝ : IsDedekindDomain S
P : Ideal S
P_prime : P.IsPrime
hP : P ≠ ⊥
i : ℕ
a b : S
a_not_mem : ¬P ^ i * P ∣ span {a}
ab_mem : P ^ i * P ∣ span {a} * span {b}
⊢ P ∣ span {b}
tactic: simp only [← Ideal.span_singleton_le_iff_mem, ← Ideal.dvd_iff_le, pow_succ, ←
    Ideal.span_singleton_mul_span_singleton] at a_not_mem ab_mem ⊢
state_before: S : Type u_1
inst✝² : CommRing S
inst✝¹ : IsDomain S
P✝ : Ideal S
P_prime✝ : P✝.IsPrime
hP✝ : P✝ ≠ ⊥
inst✝ : IsDedekindDomain S
P : Ideal S
P_prime : P.IsPrime
hP : P ≠ ⊥
i : ℕ
a b : S
a_not_mem : ¬P ^ i * P ∣ span {a}
ab_mem : P ^ i * P ∣ span {a} * span {b}
⊢ P ∣ span {b}
state_after: no goals
tactic: exact (prime_pow_succ_dvd_mul (Ideal.prime_of_isPrime hP P_prime) ab_mem).resolve_left a_not_mem
Theorem: Nat.two_pow_mul_factorial_le_factorial_two_mul
File: Mathlib/Data/Nat/Factorial/Basic.lean

Proof steps:
state_before: n : ℕ
⊢ 2 ^ n * n ! ≤ (2 * n)!
state_after: case zero

⊢ 2 ^ 0 * 0! ≤ (2 * 0)!

case succ
n : ℕ
⊢ 2 ^ (n + 1) * (n + 1)! ≤ (2 * (n + 1))!
tactic: obtain _ | n := n
state_before: case succ
n : ℕ
⊢ 2 ^ (n + 1) * (n + 1)! ≤ (2 * (n + 1))!
state_after: case succ
n : ℕ
⊢ (n + 1)! * 2 ^ (n + 1) ≤ (n + 1 + (n + 1))!
tactic: rw [Nat.mul_comm, Nat.two_mul]
state_before: case succ
n : ℕ
⊢ (n + 1)! * 2 ^ (n + 1) ≤ (n + 1 + (n + 1))!
state_after: no goals
tactic: calc
    _ ≤ (n + 1)! * (n + 2) ^ (n + 1) :=
      Nat.mul_le_mul_left _ (pow_le_pow_of_le_left (le_add_left _ _) _)
    _ ≤ _ := Nat.factorial_mul_pow_le_factorial
Theorem: Polynomial.eval_unique
File: Mathlib/Algebra/Polynomial/AlgebraMap.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type u_1
B : Type u_2
a b : R
n : ℕ
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : CommSemiring A'
inst✝³ : Semiring B
inst✝² : Algebra R A
inst✝¹ : Algebra R A'
inst✝ : Algebra R B
p✝ q : R[X]
x : A
φ : R[X] →ₐ[R] A
p : R[X]
⊢ φ p = eval₂ (algebraMap R A) (φ X) p
state_after: no goals
tactic: rw [← aeval_def, aeval_algHom, aeval_X_left, AlgHom.comp_id]
Theorem: Finset.exists_lt_card_fiber_of_nsmul_lt_card_of_maps_to
File: Mathlib/Combinatorics/Pigeonhole.lean

Proof steps:
state_before: α : Type u
β : Type v
M : Type w
inst✝¹ : DecidableEq β
s : Finset α
t : Finset β
f : α → β
w : α → M
b : M
n : ℕ
inst✝ : LinearOrderedCommSemiring M
hf : ∀ a ∈ s, f a ∈ t
ht : t.card • b < ↑s.card
⊢ ∃ y ∈ t, b < ↑(filter (fun x => f x = y) s).card
state_after: α : Type u
β : Type v
M : Type w
inst✝¹ : DecidableEq β
s : Finset α
t : Finset β
f : α → β
w : α → M
b : M
n : ℕ
inst✝ : LinearOrderedCommSemiring M
hf : ∀ a ∈ s, f a ∈ t
ht : t.card • b < ∑ a ∈ s, 1
⊢ ∃ y ∈ t, b < ∑ a ∈ filter (fun x => f x = y) s, 1
tactic: simp_rw [cast_card] at ht ⊢
state_before: α : Type u
β : Type v
M : Type w
inst✝¹ : DecidableEq β
s : Finset α
t : Finset β
f : α → β
w : α → M
b : M
n : ℕ
inst✝ : LinearOrderedCommSemiring M
hf : ∀ a ∈ s, f a ∈ t
ht : t.card • b < ∑ a ∈ s, 1
⊢ ∃ y ∈ t, b < ∑ a ∈ filter (fun x => f x = y) s, 1
state_after: no goals
tactic: exact exists_lt_sum_fiber_of_maps_to_of_nsmul_lt_sum hf ht
Theorem: FreeAlgebra.lift_ι_apply
File: Mathlib/Algebra/FreeAlgebra.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommSemiring R
X : Type u_2
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : X → A
x : X
⊢ ((lift R) f) (ι R x) = f x
state_after: R : Type u_1
inst✝² : CommSemiring R
X : Type u_2
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : X → A
x : X
⊢ ({ toFun := FreeAlgebra.liftAux R, invFun := fun F => ⇑F ∘ ι R, left_inv := ⋯, right_inv := ⋯ } f)
      (Quot.mk (Rel R X) (Pre.of x)) =
    f x
tactic: rw [ι_def, lift]
state_before: R : Type u_1
inst✝² : CommSemiring R
X : Type u_2
A : Type u_3
inst✝¹ : Semiring A
inst✝ : Algebra R A
f : X → A
x : X
⊢ ({ toFun := FreeAlgebra.liftAux R, invFun := fun F => ⇑F ∘ ι R, left_inv := ⋯, right_inv := ⋯ } f)
      (Quot.mk (Rel R X) (Pre.of x)) =
    f x
state_after: no goals
tactic: rfl
Theorem: ProbabilityTheory.monotone_defaultRatCDF
File: Mathlib/Probability/Kernel/Disintegration/MeasurableStieltjes.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
⊢ Monotone defaultRatCDF
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
⊢ Monotone fun q => if q < 0 then 0 else 1
tactic: unfold defaultRatCDF
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
⊢ Monotone fun q => if q < 0 then 0 else 1
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
⊢ (fun q => if q < 0 then 0 else 1) x ≤ (fun q => if q < 0 then 0 else 1) y
tactic: intro x y hxy
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
⊢ (fun q => if q < 0 then 0 else 1) x ≤ (fun q => if q < 0 then 0 else 1) y
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
⊢ (if x < 0 then 0 else 1) ≤ if y < 0 then 0 else 1
tactic: dsimp only
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
⊢ (if x < 0 then 0 else 1) ≤ if y < 0 then 0 else 1
state_after: case pos
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : x < 0
h_2 : y < 0
⊢ 0 ≤ 0

case neg
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : x < 0
h_2 : ¬y < 0
⊢ 0 ≤ 1

case pos
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : ¬x < 0
h_2 : y < 0
⊢ 1 ≤ 0

case neg
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : ¬x < 0
h_2 : ¬y < 0
⊢ 1 ≤ 1
tactic: split_ifs with h_1 h_2 h_2
state_before: case pos
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : x < 0
h_2 : y < 0
⊢ 0 ≤ 0

case neg
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : x < 0
h_2 : ¬y < 0
⊢ 0 ≤ 1

case pos
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : ¬x < 0
h_2 : y < 0
⊢ 1 ≤ 0

case neg
α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : MeasurableSpace α
x y : ℚ
hxy : x ≤ y
h_1 : ¬x < 0
h_2 : ¬y < 0
⊢ 1 ≤ 1
state_after: no goals
tactic: exacts [le_rfl, zero_le_one, absurd (hxy.trans_lt h_2) h_1, le_rfl]
Theorem: List.splitOnP_first
File: Mathlib/Data/List/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
xs ys : List α
ls : List (List α)
f : List α → List α
h : ∀ (x : α), x ∈ xs → ¬p x = true
sep : α
hsep : p sep = true
as : List α
⊢ splitOnP p (xs ++ sep :: as) = xs :: splitOnP p as
state_after: no goals
tactic: induction xs with
  | nil => simp [hsep]
  | cons hd tl ih => simp [h hd _, ih <| forall_mem_of_forall_mem_cons h]
Theorem: ConvexOn.lt_right_of_left_lt'
File: Mathlib/Analysis/Convex/Function.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
α : Type u_4
β : Type u_5
ι : Type u_6
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommMonoid E
inst✝⁴ : AddCommMonoid F
inst✝³ : LinearOrderedCancelAddCommMonoid β
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f g : E → β
hf : ConvexOn 𝕜 s f
x y : E
a b : 𝕜
hx : x ∈ s
hy : y ∈ s
ha : 0 < a
hb : 0 < b
hab : a + b = 1
hfx : f x < f (a • x + b • y)
⊢ f (a • x + b • y) < f y
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
α : Type u_4
β : Type u_5
ι : Type u_6
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommMonoid E
inst✝⁴ : AddCommMonoid F
inst✝³ : LinearOrderedCancelAddCommMonoid β
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f g : E → β
hf : ConvexOn 𝕜 s f
x y : E
a b : 𝕜
hx : x ∈ s
hy : y ∈ s
ha : 0 < a
hb : 0 < b
hab : b + a = 1
hfx : f x < f (b • y + a • x)
⊢ f (b • y + a • x) < f y
tactic: rw [add_comm] at hab hfx ⊢
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
α : Type u_4
β : Type u_5
ι : Type u_6
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommMonoid E
inst✝⁴ : AddCommMonoid F
inst✝³ : LinearOrderedCancelAddCommMonoid β
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f g : E → β
hf : ConvexOn 𝕜 s f
x y : E
a b : 𝕜
hx : x ∈ s
hy : y ∈ s
ha : 0 < a
hb : 0 < b
hab : b + a = 1
hfx : f x < f (b • y + a • x)
⊢ f (b • y + a • x) < f y
state_after: no goals
tactic: exact hf.lt_left_of_right_lt' hy hx hb ha hab hfx
Theorem: ProbabilityTheory.Kernel.mutuallySingular_singularPart
File: Mathlib/Probability/Kernel/RadonNikodym.lean

Proof steps:
state_before: α : Type u_1
γ : Type u_2
mα : MeasurableSpace α
mγ : MeasurableSpace γ
κ✝ η✝ : Kernel α γ
hαγ : MeasurableSpace.CountableOrCountablyGenerated α γ
κ η : Kernel α γ
inst✝¹ : IsFiniteKernel κ
inst✝ : IsFiniteKernel η
a : α
⊢ (κ.singularPart η) a ⟂ₘ η a
state_after: α : Type u_1
γ : Type u_2
mα : MeasurableSpace α
mγ : MeasurableSpace γ
κ✝ η✝ : Kernel α γ
hαγ : MeasurableSpace.CountableOrCountablyGenerated α γ
κ η : Kernel α γ
inst✝¹ : IsFiniteKernel κ
inst✝ : IsFiniteKernel η
a : α
⊢ η a ⟂ₘ (κ.singularPart η) a
tactic: symm
state_before: α : Type u_1
γ : Type u_2
mα : MeasurableSpace α
mγ : MeasurableSpace γ
κ✝ η✝ : Kernel α γ
hαγ : MeasurableSpace.CountableOrCountablyGenerated α γ
κ η : Kernel α γ
inst✝¹ : IsFiniteKernel κ
inst✝ : IsFiniteKernel η
a : α
⊢ η a ⟂ₘ (κ.singularPart η) a
state_after: no goals
tactic: exact ⟨mutuallySingularSetSlice κ η a, measurableSet_mutuallySingularSetSlice κ η a,
    measure_mutuallySingularSetSlice κ η a, singularPart_compl_mutuallySingularSetSlice κ η a⟩
Theorem: Matrix.det_isEmpty
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

Proof steps:
state_before: m : Type u_1
n : Type u_2
inst✝⁵ : DecidableEq n
inst✝⁴ : Fintype n
inst✝³ : DecidableEq m
inst✝² : Fintype m
R : Type v
inst✝¹ : CommRing R
inst✝ : IsEmpty n
A : Matrix n n R
⊢ A.det = 1
state_after: no goals
tactic: simp [det_apply]
Theorem: Nat.gcd_add_mul_left_right
File: Mathlib/Data/Nat/GCD/Basic.lean

Proof steps:
state_before: m n k : ℕ
⊢ m.gcd (n + m * k) = m.gcd n
state_after: no goals
tactic: simp [gcd_rec m (n + m * k), gcd_rec m n]
Theorem: Submodule.le_div_iff_mul_le
File: Mathlib/Algebra/Algebra/Operations.lean

Proof steps:
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : CommSemiring A
inst✝ : Algebra R A
M N : Submodule R A
m n : A
I J K : Submodule R A
⊢ I ≤ J / K ↔ I * K ≤ J
state_after: no goals
tactic: rw [le_div_iff, mul_le]
Theorem: LieAlgebra.ad_ker_eq_bot_of_hasTrivialRadical
File: Mathlib/Algebra/Lie/Semisimple/Basic.lean

Proof steps:
state_before: R : Type u_1
L : Type u_2
inst✝³ : CommRing R
inst✝² : LieRing L
inst✝¹ : LieAlgebra R L
inst✝ : HasTrivialRadical R L
⊢ (ad R L).ker = ⊥
state_after: no goals
tactic: simp
Theorem: CategoryTheory.ProjectiveResolution.homotopyEquiv_inv_π
File: Mathlib/CategoryTheory/Abelian/ProjectiveResolution.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
X : C
P Q : ProjectiveResolution X
⊢ (P.homotopyEquiv Q).inv ≫ P.π = Q.π
state_after: no goals
tactic: simp [homotopyEquiv]
Theorem: LinearPMap.adjoint_apply_of_dense
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
hT : Dense ↑T.domain
inst✝ : CompleteSpace E
y : ↥T†.domain
⊢ ↑T† y = (adjointAux hT) y
state_after: 𝕜 : 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
hT : Dense ↑T.domain
inst✝ : CompleteSpace E
y : ↥T†.domain
⊢ (if hT : Dense ↑T.domain then adjointAux hT else 0) y = (adjointAux hT) y
tactic: change (if hT : Dense (T.domain : Set E) then adjointAux hT else 0) y = _
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
hT : Dense ↑T.domain
inst✝ : CompleteSpace E
y : ↥T†.domain
⊢ (if hT : Dense ↑T.domain then adjointAux hT else 0) y = (adjointAux hT) y
state_after: no goals
tactic: simp only [hT, dif_pos, LinearMap.coe_mk]
Theorem: MeasureTheory.FiniteMeasure.map_smul
File: Mathlib/MeasureTheory/Measure/FiniteMeasure.lean

Proof steps:
state_before: Ω : Type u_1
Ω' : Type u_2
inst✝¹ : MeasurableSpace Ω
inst✝ : MeasurableSpace Ω'
f : Ω → Ω'
c : ℝ≥0
ν : FiniteMeasure Ω
⊢ (c • ν).map f = c • ν.map f
state_after: case h
Ω : Type u_1
Ω' : Type u_2
inst✝¹ : MeasurableSpace Ω
inst✝ : MeasurableSpace Ω'
f : Ω → Ω'
c : ℝ≥0
ν : FiniteMeasure Ω
s : Set Ω'
a✝ : MeasurableSet s
⊢ ↑((c • ν).map f) s = ↑(c • ν.map f) s
tactic: ext s _
state_before: case h
Ω : Type u_1
Ω' : Type u_2
inst✝¹ : MeasurableSpace Ω
inst✝ : MeasurableSpace Ω'
f : Ω → Ω'
c : ℝ≥0
ν : FiniteMeasure Ω
s : Set Ω'
a✝ : MeasurableSet s
⊢ ↑((c • ν).map f) s = ↑(c • ν.map f) s
state_after: no goals
tactic: simp [toMeasure_smul]
Theorem: infIrred_iff_not_isMax
File: Mathlib/Order/Irreducible.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
inst✝ : LinearOrder α
a x✝¹ x✝ : α
⊢ x✝¹ ⊓ x✝ = a → x✝¹ = a ∨ x✝ = a
state_after: no goals
tactic: simpa only [inf_eq_min, min_eq_iff] using Or.imp And.left And.left
Theorem: mem_closedBall_iff_norm''
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₂ : ℝ
⊢ b ∈ closedBall a r ↔ ‖b / a‖ ≤ r
state_after: no goals
tactic: rw [mem_closedBall, dist_eq_norm_div]
Theorem: DiscreteQuotient.map_comp
File: Mathlib/Topology/DiscreteQuotient.lean

Proof steps:
state_before: α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S : DiscreteQuotient X
f : C(X, Y)
A A' : DiscreteQuotient X
B B' : DiscreteQuotient Y
g : C(Y, Z)
C : DiscreteQuotient Z
h1 : LEComap g B C
h2 : LEComap f A B
⊢ map (g.comp f) ⋯ = map g h1 ∘ map f h2
state_after: case h.mk
α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S : DiscreteQuotient X
f : C(X, Y)
A A' : DiscreteQuotient X
B B' : DiscreteQuotient Y
g : C(Y, Z)
C : DiscreteQuotient Z
h1 : LEComap g B C
h2 : LEComap f A B
x✝ : Quotient A.toSetoid
a✝ : X
⊢ map (g.comp f) ⋯ (Quot.mk Setoid.r a✝) = (map g h1 ∘ map f h2) (Quot.mk Setoid.r a✝)
tactic: ext ⟨⟩
state_before: case h.mk
α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
S : DiscreteQuotient X
f : C(X, Y)
A A' : DiscreteQuotient X
B B' : DiscreteQuotient Y
g : C(Y, Z)
C : DiscreteQuotient Z
h1 : LEComap g B C
h2 : LEComap f A B
x✝ : Quotient A.toSetoid
a✝ : X
⊢ map (g.comp f) ⋯ (Quot.mk Setoid.r a✝) = (map g h1 ∘ map f h2) (Quot.mk Setoid.r a✝)
state_after: no goals
tactic: rfl
Theorem: Function.LeftInverse.eq_rec_eq
File: Mathlib/Logic/Function/Basic.lean

Proof steps:
state_before: α : Sort u_1
β : Sort u_2
γ : β → Sort v
f : α → β
g : β → α
h : LeftInverse g f
C : (a : α) → γ (f a)
a : α
⊢ HEq (C (g (f a))) (C a)
state_after: no goals
tactic: rw [h]
Theorem: Filter.bliminf_true
File: Mathlib/Order/LiminfLimsup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝ : ConditionallyCompleteLattice α
f : Filter β
u : β → α
⊢ (bliminf u f fun x => True) = liminf u f
state_after: no goals
tactic: simp [bliminf_eq, liminf_eq]
Theorem: Set.Ioc_inter_Ioi
File: Mathlib/Order/Interval/Set/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
a a₁ a₂ b b₁ b₂ c d : α
⊢ Ioc a b ∩ Ioi c = Ioc (a ⊔ c) b
state_after: no goals
tactic: rw [← Ioi_inter_Iic, inter_assoc, inter_comm, inter_assoc, Ioi_inter_Ioi, inter_comm,
    Ioi_inter_Iic, sup_comm]
Theorem: Polynomial.natDegree_mul_C
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

Proof steps:
state_before: R : Type u
S : Type v
ι : Type w
a✝ b : R
m n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p q : R[X]
a : R
a0 : a ≠ 0
⊢ (p * C a).natDegree = p.natDegree
state_after: no goals
tactic: simp only [natDegree, degree_mul_C a0]
Theorem: div_sub_same
File: Mathlib/Algebra/Field/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
K : Type u_3
inst✝ : DivisionRing K
a✝ b✝ c d a b : K
h : b ≠ 0
⊢ (a - b) / b = a / b - 1
state_after: no goals
tactic: simpa only [← @div_self _ _ b h] using (div_sub_div_same a b b).symm
Theorem: ContinuousLinearMap.ker_closedComplemented_of_finiteDimensional_range
File: Mathlib/Analysis/Normed/Module/Complemented.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : CompleteSpace 𝕜
f : E →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(range f)
⊢ (ker f).ClosedComplemented
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : CompleteSpace 𝕜
f : E →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(range f)
f' : E →L[𝕜] ↥(range f) := f.codRestrict (range f) ⋯
⊢ (ker f).ClosedComplemented
tactic: set f' : E →L[𝕜] range f := f.codRestrict _ (LinearMap.mem_range_self (f : E →ₗ[𝕜] F))
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : CompleteSpace 𝕜
f : E →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(range f)
f' : E →L[𝕜] ↥(range f) := f.codRestrict (range f) ⋯
⊢ (ker f).ClosedComplemented
state_after: case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : CompleteSpace 𝕜
f : E →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(range f)
f' : E →L[𝕜] ↥(range f) := f.codRestrict (range f) ⋯
g : ↥(range f) →L[𝕜] E
hg : f'.comp g = id 𝕜 ↥(range f)
⊢ (ker f).ClosedComplemented
tactic: rcases f'.exists_right_inverse_of_surjective (f : E →ₗ[𝕜] F).range_rangeRestrict with ⟨g, hg⟩
state_before: case intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : CompleteSpace 𝕜
f : E →L[𝕜] F
inst✝ : FiniteDimensional 𝕜 ↥(range f)
f' : E →L[𝕜] ↥(range f) := f.codRestrict (range f) ⋯
g : ↥(range f) →L[𝕜] E
hg : f'.comp g = id 𝕜 ↥(range f)
⊢ (ker f).ClosedComplemented
state_after: no goals
tactic: simpa only [f', ker_codRestrict]
    using f'.closedComplemented_ker_of_rightInverse g (ContinuousLinearMap.ext_iff.1 hg)
Theorem: Ordnode.Valid'.rotateL_lemma₄
File: Mathlib/Data/Ordmap/Ordset.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Preorder α
a b : ℕ
H3 : 2 * b ≤ 9 * a + 3
⊢ 3 * b ≤ 16 * a + 9
state_after: no goals
tactic: omega
Theorem: Surreal.Multiplication.main
File: Mathlib/SetTheory/Surreal/Multiplication.lean

Proof steps:
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
a : Args
⊢ a.Numeric → P124 a
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
a : Args
⊢ ∀ (x : Args), (∀ (y : Args), ArgsRel y x → y.Numeric → P124 y) → x.Numeric → P124 x
tactic: apply argsRel_wf.induction a
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
a : Args
⊢ ∀ (x : Args), (∀ (y : Args), ArgsRel y x → y.Numeric → P124 y) → x.Numeric → P124 x
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
a✝ a : Args
ih : ∀ (y : Args), ArgsRel y a → y.Numeric → P124 y
ha : a.Numeric
⊢ P124 a
tactic: intros a ih ha
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
a✝ a : Args
ih : ∀ (y : Args), ArgsRel y a → y.Numeric → P124 y
ha : a.Numeric
⊢ P124 a
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
a✝ a : Args
ha : a.Numeric
ih : ∀ (a' : Args), ArgsRel a' a → P124 a'
⊢ P124 a
tactic: replace ih : ∀ a', ArgsRel a' a → P124 a' := fun a' hr ↦ ih a' hr (hr.numeric_closed ha)
Theorem: TopCat.Presheaf.stalkSpecializes_refl
File: Mathlib/Topology/Sheaves/Stalks.lean

Proof steps:
state_before: C✝ : Type u
inst✝³ : Category.{v, u} C✝
inst✝² : HasColimits C✝
X✝ Y Z : TopCat
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasColimits C
X : TopCat
F : Presheaf C X
x : ↑X
⊢ F.stalkSpecializes ⋯ = 𝟙 (F.stalk x)
state_after: case ih
C✝ : Type u
inst✝³ : Category.{v, u} C✝
inst✝² : HasColimits C✝
X✝ Y Z : TopCat
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasColimits C
X : TopCat
F : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : x ∈ U✝
⊢ F.germ ⟨x, hxU✝⟩ ≫ F.stalkSpecializes ⋯ = F.germ ⟨x, hxU✝⟩ ≫ 𝟙 (F.stalk x)
tactic: ext
state_before: case ih
C✝ : Type u
inst✝³ : Category.{v, u} C✝
inst✝² : HasColimits C✝
X✝ Y Z : TopCat
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasColimits C
X : TopCat
F : Presheaf C X
x : ↑X
U✝ : Opens ↑X
hxU✝ : x ∈ U✝
⊢ F.germ ⟨x, hxU✝⟩ ≫ F.stalkSpecializes ⋯ = F.germ ⟨x, hxU✝⟩ ≫ 𝟙 (F.stalk x)
state_after: no goals
tactic: simp
Theorem: Monoid.mem_closure_union_iff
File: Mathlib/Deprecated/Submonoid.lean

Proof steps:
state_before: M✝ : Type u_1
inst✝² : Monoid M✝
s✝ : Set M✝
A : Type u_2
inst✝¹ : AddMonoid A
t✝ : Set A
M : Type u_3
inst✝ : CommMonoid M
s t : Set M
x : M
hx : x ∈ Closure (s ∪ t)
L : List M
HL1✝ : ∀ x ∈ L, x ∈ s ∪ t
HL2 : L.prod = x
hd : M
tl : List M
ih : (∀ x ∈ tl, x ∈ s ∪ t) → ∃ y ∈ Closure s, ∃ z ∈ Closure t, y * z = tl.prod
HL1 : ∀ x ∈ hd :: tl, x ∈ s ∪ t
y : M
hy : y ∈ Closure s
z : M
hz : z ∈ Closure t
hyzx : y * z = tl.prod
hs : hd ∈ s
⊢ hd * y * z = (hd :: tl).prod
state_after: no goals
tactic: rw [mul_assoc, List.prod_cons, ← hyzx]
state_before: M✝ : Type u_1
inst✝² : Monoid M✝
s✝ : Set M✝
A : Type u_2
inst✝¹ : AddMonoid A
t✝ : Set A
M : Type u_3
inst✝ : CommMonoid M
s t : Set M
x : M
hx : x ∈ Closure (s ∪ t)
L : List M
HL1✝ : ∀ x ∈ L, x ∈ s ∪ t
HL2 : L.prod = x
hd : M
tl : List M
ih : (∀ x ∈ tl, x ∈ s ∪ t) → ∃ y ∈ Closure s, ∃ z ∈ Closure t, y * z = tl.prod
HL1 : ∀ x ∈ hd :: tl, x ∈ s ∪ t
y : M
hy : y ∈ Closure s
z : M
hz : z ∈ Closure t
hyzx : y * z = tl.prod
ht : hd ∈ t
⊢ y * (z * hd) = (hd :: tl).prod
state_after: no goals
tactic: rw [← mul_assoc, List.prod_cons, ← hyzx, mul_comm hd]
Theorem: HurwitzZeta.completedCosZeta₀_one_sub
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

Proof steps:
state_before: a : UnitAddCircle
s : ℂ
⊢ completedCosZeta₀ a (1 - s) = completedHurwitzZetaEven₀ a s
state_after: no goals
tactic: rw [← completedHurwitzZetaEven₀_one_sub, sub_sub_cancel]