ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: MeasureTheory.Measure.measure_eq_zero_of_subset_diff_everywherePosSubset
File: Mathlib/MeasureTheory/Measure/EverywherePos.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
μ ν : Measure α
s k : Set α
hk : IsCompact k
h'k : k ⊆ s \ μ.everywherePosSubset s
⊢ μ k = 0
state_after: case he
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
μ ν : Measure α
s k : Set α
hk : IsCompact k
h'k : k ⊆ s \ μ.everywherePosSubset s
⊢ μ ∅ = 0

case hmono
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
μ ν : Measure α
s k : Set α
hk : IsCompact k
h'k : k ⊆ s \ μ.everywherePosSubset s
⊢ ∀ ⦃s t : Set α⦄, s ⊆ t → μ t = 0 → μ s = 0

case hunion
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
μ ν : Measure α
s k : Set α
hk : IsCompact k
h'k : k ⊆ s \ μ.everywherePosSubset s
⊢ ∀ ⦃s t : Set α⦄, μ s = 0 → μ t = 0 → μ (s ∪ t) = 0

case hnhds
α : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
μ ν : Measure α
s k : Set α
hk : IsCompact k
h'k : k ⊆ s \ μ.everywherePosSubset s
⊢ ∀ x ∈ k, ∃ t ∈ 𝓝[k] x, μ t = 0
tactic: apply hk.induction_on (p := fun t ↦ μ t = 0)
Theorem: Convex.norm_image_sub_le_of_norm_hasDerivWithin_le
File: Mathlib/Analysis/Calculus/MeanValue.lean

Proof steps:
state_before: E : Type u_1
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
F : Type u_2
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
𝕜 : Type u_3
G : Type u_4
inst✝³ : RCLike 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f f' : 𝕜 → G
s : Set 𝕜
x✝ y : 𝕜
C : ℝ
hf : ∀ x ∈ s, HasDerivWithinAt f (f' x) s x
bound : ∀ x ∈ s, ‖f' x‖ ≤ C
hs : Convex ℝ s
xs : x✝ ∈ s
ys : y ∈ s
x : 𝕜
hx : x ∈ s
⊢ ‖smulRight 1 (f' x)‖ ≤ ‖f' x‖
state_after: no goals
tactic: simp
Theorem: Finset.piAntidiag_univ_fin_eq_antidiagonalTuple
File: Mathlib/Algebra/Order/Antidiag/Pi.lean

Proof steps:
state_before: ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝ : DecidableEq ι
n k : ℕ
⊢ univ.piAntidiag n = Nat.antidiagonalTuple k n
state_after: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝ : DecidableEq ι
n k : ℕ
a✝ : Fin k → ℕ
⊢ a✝ ∈ univ.piAntidiag n ↔ a✝ ∈ Nat.antidiagonalTuple k n
tactic: ext
state_before: case a
ι : Type u_1
μ : Type u_2
μ' : Type u_3
inst✝ : DecidableEq ι
n k : ℕ
a✝ : Fin k → ℕ
⊢ a✝ ∈ univ.piAntidiag n ↔ a✝ ∈ Nat.antidiagonalTuple k n
state_after: no goals
tactic: simp [Nat.mem_antidiagonalTuple]
Theorem: List.indexOf_finRange
File: Mathlib/Data/List/Range.lean

Proof steps:
state_before: α : Type u
k : ℕ
i : Fin k
⊢ indexOf i (finRange k) = ↑i
state_after: α : Type u
k : ℕ
i : Fin k
this : indexOf i (finRange k) < (finRange k).length
⊢ indexOf i (finRange k) = ↑i
tactic: have : (finRange k).indexOf i < (finRange k).length := indexOf_lt_length.mpr (by simp)
state_before: α : Type u
k : ℕ
i : Fin k
this : indexOf i (finRange k) < (finRange k).length
⊢ indexOf i (finRange k) = ↑i
state_after: α : Type u
k : ℕ
i : Fin k
this : indexOf i (finRange k) < (finRange k).length
h₁ : (finRange k).get ⟨indexOf i (finRange k), this⟩ = i
⊢ indexOf i (finRange k) = ↑i
tactic: have h₁ : (finRange k).get ⟨(finRange k).indexOf i, this⟩ = i := indexOf_get this
state_before: α : Type u
k : ℕ
i : Fin k
this : indexOf i (finRange k) < (finRange k).length
h₁ : (finRange k).get ⟨indexOf i (finRange k), this⟩ = i
⊢ indexOf i (finRange k) = ↑i
state_after: α : Type u
k : ℕ
i : Fin k
this : indexOf i (finRange k) < (finRange k).length
h₁ : (finRange k).get ⟨indexOf i (finRange k), this⟩ = i
h₂ : (finRange k).get ⟨↑i, ⋯⟩ = i
⊢ indexOf i (finRange k) = ↑i
tactic: have h₂ : (finRange k).get ⟨i, by simp⟩ = i := get_finRange _
state_before: α : Type u
k : ℕ
i : Fin k
this : indexOf i (finRange k) < (finRange k).length
h₁ : (finRange k).get ⟨indexOf i (finRange k), this⟩ = i
h₂ : (finRange k).get ⟨↑i, ⋯⟩ = i
⊢ indexOf i (finRange k) = ↑i
state_after: no goals
tactic: simpa using (Nodup.get_inj_iff (nodup_finRange k)).mp (Eq.trans h₁ h₂.symm)
Theorem: Set.strictMonoOn_iff_strictMono
File: Mathlib/Data/Set/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s s₁ s₂ t t₁ t₂ u : Set α
inst✝¹ : Preorder α
inst✝ : Preorder β
f : α → β
⊢ StrictMonoOn f s ↔ StrictMono fun a => f ↑a
state_after: no goals
tactic: simp [StrictMono, StrictMonoOn]
Theorem: sub_zero
File: Mathlib/Algebra/Group/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivInvOneMonoid G
a : G
⊢ a / 1 = a
state_after: no goals
tactic: simp [div_eq_mul_inv]
Theorem: Polynomial.Chebyshev.T_neg_two
File: Mathlib/RingTheory/Polynomial/Chebyshev.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
⊢ T R (-2) = 2 * X ^ 2 - 1
state_after: no goals
tactic: simp [T_two]
Theorem: SimpleGraph.Walk.support_concat
File: Mathlib/Combinatorics/SimpleGraph/Walk.lean

Proof steps:
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w : V
p : G.Walk u v
h : G.Adj v w
⊢ (p.concat h).support = p.support.concat w
state_after: no goals
tactic: induction p <;> simp [*, concat_nil]
Theorem: pow_lt_pow_right'
File: Mathlib/Algebra/Order/Monoid/Unbundled/Pow.lean

Proof steps:
state_before: β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n m : ℕ
ha : 1 < a
h : n < m
⊢ a ^ n < a ^ m
state_after: case intro
β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
h : n < n.succ + k
⊢ a ^ n < a ^ (n.succ + k)
tactic: rcases Nat.le.dest h with ⟨k, rfl⟩
state_before: case intro
β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
h : n < n.succ + k
⊢ a ^ n < a ^ (n.succ + k)
state_after: case intro
β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
⊢ a ^ n < a ^ (n.succ + k)
tactic: clear h
state_before: case intro
β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
⊢ a ^ n < a ^ (n.succ + k)
state_after: case intro
β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
⊢ a ^ n < a ^ n * a ^ (k + 1)
tactic: rw [pow_add, pow_succ, mul_assoc, ← pow_succ']
state_before: case intro
β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a : M
n : ℕ
ha : 1 < a
k : ℕ
⊢ a ^ n < a ^ n * a ^ (k + 1)
state_after: no goals
tactic: exact lt_mul_of_one_lt_right' _ (one_lt_pow' ha k.succ_ne_zero)
Theorem: MvPolynomial.adjoin_range_X
File: Mathlib/Algebra/MvPolynomial/Basic.lean

Proof steps:
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
⊢ Algebra.adjoin R (range X) = ⊤
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
⊢ S = ⊤
tactic: set S := Algebra.adjoin R (range (X : σ → MvPolynomial σ R))
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
⊢ S = ⊤
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
hp : p ∈ ⊤
⊢ p ∈ S
tactic: refine top_unique fun p hp => ?_
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
hp : p ∈ ⊤
⊢ p ∈ S
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
⊢ p ∈ S
tactic: clear hp
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p✝ q : MvPolynomial σ R
S : Subalgebra R (MvPolynomial σ R) := Algebra.adjoin R (range X)
p : MvPolynomial σ R
⊢ p ∈ S
state_after: no goals
tactic: induction p using MvPolynomial.induction_on with
  | h_C => exact S.algebraMap_mem _
  | h_add p q hp hq => exact S.add_mem hp hq
  | h_X p i hp => exact S.mul_mem hp (Algebra.subset_adjoin <| mem_range_self _)
Theorem: List.exists_of_set
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: α : Type u_1
n : Nat
a' : α
l : List α
h : n < l.length
⊢ ∃ l₁ a l₂, l = l₁ ++ a :: l₂ ∧ l₁.length = n ∧ l.set n a' = l₁ ++ a' :: l₂
state_after: α : Type u_1
n : Nat
a' : α
l : List α
h : n < l.length
⊢ ∃ l₁ a l₂, l = l₁ ++ a :: l₂ ∧ l₁.length = n ∧ modifyNth (fun x => a') n l = l₁ ++ a' :: l₂
tactic: rw [set_eq_modifyNth]
state_before: α : Type u_1
n : Nat
a' : α
l : List α
h : n < l.length
⊢ ∃ l₁ a l₂, l = l₁ ++ a :: l₂ ∧ l₁.length = n ∧ modifyNth (fun x => a') n l = l₁ ++ a' :: l₂
state_after: no goals
tactic: exact exists_of_modifyNth _ h
Theorem: Nat.factorization_le_iff_dvd
File: Mathlib/Data/Nat/Factorization/Defs.lean

Proof steps:
state_before: a b m n✝ p d n : ℕ
hd : d ≠ 0
hn : n ≠ 0
⊢ d.factorization ≤ n.factorization ↔ d ∣ n
state_after: case mp
a b m n✝ p d n : ℕ
hd : d ≠ 0
hn : n ≠ 0
⊢ d.factorization ≤ n.factorization → d ∣ n

case mpr
a b m n✝ p d n : ℕ
hd : d ≠ 0
hn : n ≠ 0
⊢ d ∣ n → d.factorization ≤ n.factorization
tactic: constructor
Theorem: Batteries.HashMap.Imp.erase_WF
File: .lake/packages/batteries/Batteries/Data/HashMap/WF.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : BEq α
inst✝ : Hashable α
m : Imp α β
k : α
h : m.buckets.WF
⊢ (m.erase k).buckets.WF
state_after: α : Type u_1
β : Type u_2
inst✝¹ : BEq α
inst✝ : Hashable α
m : Imp α β
k : α
h : m.buckets.WF
⊢ (match AssocList.contains k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat] with
      | true =>
        { size := m.size - 1,
          buckets :=
            m.buckets.update (mkIdx ⋯ (hash k).toUSize).val
              (AssocList.erase k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat]) ⋯ }
      | false => { size := m.size, buckets := m.buckets }).buckets.WF
tactic: dsimp [erase, cond]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : BEq α
inst✝ : Hashable α
m : Imp α β
k : α
h : m.buckets.WF
⊢ (match AssocList.contains k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat] with
      | true =>
        { size := m.size - 1,
          buckets :=
            m.buckets.update (mkIdx ⋯ (hash k).toUSize).val
              (AssocList.erase k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat]) ⋯ }
      | false => { size := m.size, buckets := m.buckets }).buckets.WF
state_after: case h_1
α : Type u_1
β : Type u_2
inst✝¹ : BEq α
inst✝ : Hashable α
m : Imp α β
k : α
h : m.buckets.WF
c✝ : Bool
heq✝ : AssocList.contains k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat] = true
⊢ { size := m.size - 1,
        buckets :=
          m.buckets.update (mkIdx ⋯ (hash k).toUSize).val
            (AssocList.erase k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat]) ⋯ }.buckets.WF

case h_2
α : Type u_1
β : Type u_2
inst✝¹ : BEq α
inst✝ : Hashable α
m : Imp α β
k : α
h : m.buckets.WF
c✝ : Bool
heq✝ : AssocList.contains k m.buckets.val[(mkIdx ⋯ (hash k).toUSize).val.toNat] = false
⊢ { size := m.size, buckets := m.buckets }.buckets.WF
tactic: split
Theorem: integral_bernoulliFun_eq_zero
File: Mathlib/NumberTheory/ZetaValues.lean

Proof steps:
state_before: k : ℕ
hk : k ≠ 0
⊢ ∫ (x : ℝ) in 0 ..1, bernoulliFun k x = 0
state_after: k : ℕ
hk : k ≠ 0
⊢ bernoulliFun (k + 1) 1 / (↑k + 1) - bernoulliFun (k + 1) 0 / (↑k + 1) = 0
tactic: rw [integral_eq_sub_of_hasDerivAt (fun x _ => antideriv_bernoulliFun k x)
      ((Polynomial.continuous _).intervalIntegrable _ _)]
state_before: k : ℕ
hk : k ≠ 0
⊢ bernoulliFun (k + 1) 1 / (↑k + 1) - bernoulliFun (k + 1) 0 / (↑k + 1) = 0
state_after: k : ℕ
hk : k ≠ 0
⊢ (bernoulliFun (k + 1) 0 + if k + 1 = 1 then 1 else 0) / (↑k + 1) - bernoulliFun (k + 1) 0 / (↑k + 1) = 0
tactic: rw [bernoulliFun_eval_one]
state_before: k : ℕ
hk : k ≠ 0
⊢ (bernoulliFun (k + 1) 0 + if k + 1 = 1 then 1 else 0) / (↑k + 1) - bernoulliFun (k + 1) 0 / (↑k + 1) = 0
state_after: case pos
k : ℕ
hk : k ≠ 0
h : k + 1 = 1
⊢ (bernoulliFun (k + 1) 0 + 1) / (↑k + 1) - bernoulliFun (k + 1) 0 / (↑k + 1) = 0

case neg
k : ℕ
hk : k ≠ 0
h : ¬k + 1 = 1
⊢ (bernoulliFun (k + 1) 0 + 0) / (↑k + 1) - bernoulliFun (k + 1) 0 / (↑k + 1) = 0
tactic: split_ifs with h
Theorem: Nat.size_pow
File: Mathlib/Data/Nat/Size.lean

Proof steps:
state_before: n : ℕ
⊢ 1 < 2
state_after: no goals
tactic: decide
Theorem: Subsemiring.centralizer_centralizer_centralizer
File: Mathlib/Algebra/Ring/Subsemiring/Basic.lean

Proof steps:
state_before: R✝ : Type u
S : Type v
T : Type w
inst✝³ : NonAssocSemiring R✝
M : Submonoid R✝
inst✝² : NonAssocSemiring S
inst✝¹ : NonAssocSemiring T
R : Type u_1
inst✝ : Semiring R
s : Set R
⊢ centralizer s.centralizer.centralizer = centralizer s
state_after: case a
R✝ : Type u
S : Type v
T : Type w
inst✝³ : NonAssocSemiring R✝
M : Submonoid R✝
inst✝² : NonAssocSemiring S
inst✝¹ : NonAssocSemiring T
R : Type u_1
inst✝ : Semiring R
s : Set R
⊢ ↑(centralizer s.centralizer.centralizer) = ↑(centralizer s)
tactic: apply SetLike.coe_injective
state_before: case a
R✝ : Type u
S : Type v
T : Type w
inst✝³ : NonAssocSemiring R✝
M : Submonoid R✝
inst✝² : NonAssocSemiring S
inst✝¹ : NonAssocSemiring T
R : Type u_1
inst✝ : Semiring R
s : Set R
⊢ ↑(centralizer s.centralizer.centralizer) = ↑(centralizer s)
state_after: no goals
tactic: simp only [coe_centralizer, Set.centralizer_centralizer_centralizer]
Theorem: CategoryTheory.leftAdjointMate_comp_evaluation
File: Mathlib/CategoryTheory/Monoidal/Rigid/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
X Y : C
inst✝¹ : HasLeftDual X
inst✝ : HasLeftDual Y
f : X ⟶ Y
⊢ (X ◁ ᘁf) ≫ ε_ (ᘁX) X = f ▷ ᘁY ≫ ε_ (ᘁY) Y
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
X Y : C
inst✝¹ : HasLeftDual X
inst✝ : HasLeftDual Y
f : X ⟶ Y
⊢ (tensorLeftHomEquiv (ᘁY) (ᘁX) X (𝟙_ C)) ((X ◁ ᘁf) ≫ ε_ (ᘁX) X) =
    (tensorLeftHomEquiv (ᘁY) (ᘁX) X (𝟙_ C)) (f ▷ ᘁY ≫ ε_ (ᘁY) Y)
tactic: apply_fun tensorLeftHomEquiv _ (ᘁX) X _
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
X Y : C
inst✝¹ : HasLeftDual X
inst✝ : HasLeftDual Y
f : X ⟶ Y
⊢ (tensorLeftHomEquiv (ᘁY) (ᘁX) X (𝟙_ C)) ((X ◁ ᘁf) ≫ ε_ (ᘁX) X) =
    (tensorLeftHomEquiv (ᘁY) (ᘁX) X (𝟙_ C)) (f ▷ ᘁY ≫ ε_ (ᘁY) Y)
state_after: no goals
tactic: simp
Theorem: Con.orderIsoOp_symm_apply
File: Mathlib/GroupTheory/Congruence/Opposite.lean

Proof steps:
state_before: M : Type u_1
inst✝ : Mul M
c d : Con M
⊢ { toFun := op, invFun := unop, left_inv := ⋯, right_inv := ⋯ } c ≤
      { toFun := op, invFun := unop, left_inv := ⋯, right_inv := ⋯ } d ↔
    c ≤ d
state_after: M : Type u_1
inst✝ : Mul M
c d : Con M
⊢ (∀ {x y : Mᵐᵒᵖ},
      ({ toFun := op, invFun := unop, left_inv := ⋯, right_inv := ⋯ } c) x y →
        ({ toFun := op, invFun := unop, left_inv := ⋯, right_inv := ⋯ } d) x y) ↔
    ∀ {x y : M}, c x y → d x y
tactic: rw [le_def, le_def]
state_before: M : Type u_1
inst✝ : Mul M
c d : Con M
⊢ (∀ {x y : Mᵐᵒᵖ},
      ({ toFun := op, invFun := unop, left_inv := ⋯, right_inv := ⋯ } c) x y →
        ({ toFun := op, invFun := unop, left_inv := ⋯, right_inv := ⋯ } d) x y) ↔
    ∀ {x y : M}, c x y → d x y
state_after: no goals
tactic: constructor <;> intro h _ _ h' <;> exact h h'
Theorem: Ordinal.sub_isLimit
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
l : a.IsLimit
h : b < a
⊢ b + 0 < a
state_after: no goals
tactic: rwa [add_zero]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
l : a.IsLimit
h✝ : b < a
c : Ordinal.{u_4}
h : c < a - b
⊢ succ c < a - b
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
l : a.IsLimit
h✝ : b < a
c : Ordinal.{u_4}
h : c < a - b
⊢ succ (b + c) < a
tactic: rw [lt_sub, add_succ]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_4}
l : a.IsLimit
h✝ : b < a
c : Ordinal.{u_4}
h : c < a - b
⊢ succ (b + c) < a
state_after: no goals
tactic: exact l.2 _ (lt_sub.1 h)
Theorem: spectrum.algebraMap_mem_iff
File: Mathlib/Algebra/Algebra/Spectrum.lean

Proof steps:
state_before: R✝ : Type u
A✝ : Type v
inst✝⁹ : CommSemiring R✝
inst✝⁸ : Ring A✝
inst✝⁷ : Algebra R✝ A✝
S : Type u_1
R : Type u_2
A : Type u_3
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring S
inst✝⁴ : Ring A
inst✝³ : Algebra R S
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
a : A
r : R
⊢ (algebraMap R S) r ∈ spectrum S a ↔ r ∈ σ a
state_after: no goals
tactic: simp only [spectrum.mem_iff, Algebra.algebraMap_eq_smul_one, smul_assoc, one_smul]
Theorem: CategoryTheory.Limits.cokernelIsoOfEq_inv_comp_desc
File: Mathlib/CategoryTheory/Limits/Shapes/Kernels.lean

Proof steps:
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f g : X ⟶ Y
inst✝¹ : HasCokernel f
inst✝ : HasCokernel g
h : f = g
e : Y ⟶ Z
he : f ≫ e = 0
⊢ g ≫ e = 0
state_after: no goals
tactic: simp [← h, he]
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f g : X ⟶ Y
inst✝¹ : HasCokernel f
inst✝ : HasCokernel g
h : f = g
e : Y ⟶ Z
he : f ≫ e = 0
⊢ (cokernelIsoOfEq h).inv ≫ cokernel.desc f e he = cokernel.desc g e ⋯
state_after: case refl
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f : X ⟶ Y
inst✝¹ : HasCokernel f
e : Y ⟶ Z
he : f ≫ e = 0
inst✝ : HasCokernel f
⊢ (cokernelIsoOfEq ⋯).inv ≫ cokernel.desc f e he = cokernel.desc f e ⋯
tactic: cases h
state_before: case refl
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f : X ⟶ Y
inst✝¹ : HasCokernel f
e : Y ⟶ Z
he : f ≫ e = 0
inst✝ : HasCokernel f
⊢ (cokernelIsoOfEq ⋯).inv ≫ cokernel.desc f e he = cokernel.desc f e ⋯
state_after: no goals
tactic: simp
Theorem: List.length_le_length_insertNth
File: Mathlib/Data/List/InsertNth.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a : α
l : List α
x : α
n : ℕ
⊢ l.length ≤ (insertNth n x l).length
state_after: case inl
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a : α
l : List α
x : α
n : ℕ
hn : n ≤ l.length
⊢ l.length ≤ (insertNth n x l).length

case inr
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
a : α
l : List α
x : α
n : ℕ
hn : l.length < n
⊢ l.length ≤ (insertNth n x l).length
tactic: rcases le_or_lt n l.length with hn | hn
Theorem: Mathlib.Meta.NormNum.isInt_emod_zero
File: Mathlib/Tactic/NormNum/DivMod.lean

Proof steps:
state_before: x✝¹ x✝ : ℤ
e : IsInt x✝¹ x✝
⊢ IsInt (x✝¹ % ↑0) x✝
state_after: no goals
tactic: simp [e]
Theorem: iInf_sUnion
File: Mathlib/Data/Set/Lattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
inst✝ : CompleteLattice β
S : Set (Set α)
f : α → β
⊢ ⨅ x ∈ ⋃₀ S, f x = ⨅ s ∈ S, ⨅ x ∈ s, f x
state_after: no goals
tactic: rw [sUnion_eq_iUnion, iInf_iUnion, ← iInf_subtype'']
Theorem: Real.BohrMollerup.ge_logGammaSeq
File: Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean

Proof steps:
state_before: f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ f 1 + logGammaSeq x n ≤ f x
state_after: f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ f 1 + (x * log ↑n + log ↑n ! - ∑ m ∈ Finset.range (n + 1), log (x + ↑m)) ≤ f x
tactic: dsimp [logGammaSeq]
state_before: f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ f 1 + (x * log ↑n + log ↑n ! - ∑ m ∈ Finset.range (n + 1), log (x + ↑m)) ≤ f x
state_after: f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ f 1 + (x * log ↑n + log ↑n !) ≤ f (↑(n + 1) + x)
tactic: rw [← add_sub_assoc, sub_le_iff_le_add, ← f_add_nat_eq (@hf_feq) hx, add_comm x _]
state_before: f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ f 1 + (x * log ↑n + log ↑n !) ≤ f (↑(n + 1) + x)
state_after: case refine_1
f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ f 1 + (x * log ↑n + log ↑n !) = f ↑(n + 1) + x * log (↑(n + 1) - 1)

case refine_2
f : ℝ → ℝ
x : ℝ
n : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hn : n ≠ 0
⊢ 2 ≤ n + 1
tactic: refine le_trans (le_of_eq ?_) (f_add_nat_ge hf_conv @hf_feq ?_ hx)
Theorem: Finsupp.graph_injective
File: Mathlib/Data/Finsupp/Basic.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M✝ : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : Zero M✝
α : Type u_13
M : Type u_14
inst✝ : Zero M
⊢ Injective graph
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M✝ : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : Zero M✝
α : Type u_13
M : Type u_14
inst✝ : Zero M
f g : α →₀ M
h : f.graph = g.graph
⊢ f = g
tactic: intro f g h
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M✝ : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : Zero M✝
α : Type u_13
M : Type u_14
inst✝ : Zero M
f g : α →₀ M
h : f.graph = g.graph
⊢ f = g
state_after: no goals
tactic: classical
    have hsup : f.support = g.support := by rw [← image_fst_graph, h, image_fst_graph]
    refine ext_iff'.2 ⟨hsup, fun x hx => apply_eq_of_mem_graph <| h.symm ▸ ?_⟩
    exact mk_mem_graph _ (hsup ▸ hx)