ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: WithLp.prod_nndist_eq_sup
File: Mathlib/Analysis/Normed/Lp/ProdLp.lean

Proof steps:
state_before: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp : Fact (1 ≤ p)
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
x y : WithLp ⊤ (α × β)
⊢ ↑(nndist x y) = ↑(nndist x.1 y.1 ⊔ nndist x.2 y.2)
state_after: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp : Fact (1 ≤ p)
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
x y : WithLp ⊤ (α × β)
⊢ dist x y = ↑(nndist x.1 y.1 ⊔ nndist x.2 y.2)
tactic: push_cast
state_before: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp : Fact (1 ≤ p)
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
x y : WithLp ⊤ (α × β)
⊢ dist x y = ↑(nndist x.1 y.1 ⊔ nndist x.2 y.2)
state_after: no goals
tactic: exact prod_dist_eq_sup _ _
Theorem: Mathlib.Tactic.Ring.of_lift
File: Mathlib/Tactic/Ring/Basic.lean

Proof steps:
state_before: u✝ : Lean.Level
arg : Q(Type u✝)
sα✝ : Q(CommSemiring «$arg»)
u : Lean.Level
α✝ : Q(Type u)
sα : Q(CommSemiring $α✝)
R : Type u_1
inst✝ : CommSemiring R
a✝ a'✝ a₁ a₂ a₃ b✝ b'✝ b₁ b₂ b₃ c c₁ c₂ : R
α β : Type u_2
inst : CSLift α β
a b : α
a' b' : β
h1 : CSLiftVal a a'
h2 : CSLiftVal b b'
h : a' = b'
⊢ CSLift.lift a = CSLift.lift b
state_after: no goals
tactic: rwa [← h1.1, ← h2.1]
Theorem: CategoryTheory.ConcreteCategory.surjective_eq_epimorphisms_iff
File: Mathlib/CategoryTheory/ConcreteCategory/EpiMono.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
⊢ MorphismProperty.surjective C = epimorphisms C ↔ (forget C).PreservesEpimorphisms
state_after: case mp
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
⊢ MorphismProperty.surjective C = epimorphisms C → (forget C).PreservesEpimorphisms

case mpr
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
⊢ (forget C).PreservesEpimorphisms → MorphismProperty.surjective C = epimorphisms C
tactic: constructor
Theorem: convexHull_empty_iff
File: Mathlib/Analysis/Convex/Hull.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s t : Set E
x y : E
⊢ (convexHull 𝕜) s = ∅ ↔ s = ∅
state_after: case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s t : Set E
x y : E
⊢ (convexHull 𝕜) s = ∅ → s = ∅

case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s t : Set E
x y : E
⊢ s = ∅ → (convexHull 𝕜) s = ∅
tactic: constructor
Theorem: List.tfae_singleton
File: Mathlib/Data/List/TFAE.lean

Proof steps:
state_before: p : Prop
⊢ [p].TFAE
state_after: no goals
tactic: simp [TFAE, -eq_iff_iff]
Theorem: Subtype.coe_eq_bot_iff
File: Mathlib/Order/BoundedOrder.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
p : α → Prop
inst✝² : PartialOrder α
inst✝¹ : OrderBot α
inst✝ : OrderBot (Subtype p)
hbot : p ⊥
x : { x // p x }
⊢ ↑x = ⊥ ↔ x = ⊥
state_after: no goals
tactic: rw [← coe_bot hbot, Subtype.ext_iff]
Theorem: finCongr_eq_equivCast
File: Mathlib/Data/Fin/Basic.lean

Proof steps:
state_before: n m : ℕ
h : n = m
⊢ finCongr h = Equiv.cast ⋯
state_after: n : ℕ
⊢ finCongr ⋯ = Equiv.cast ⋯
tactic: subst h
state_before: n : ℕ
⊢ finCongr ⋯ = Equiv.cast ⋯
state_after: no goals
tactic: simp
Theorem: Polynomial.degree_multiset_prod_le
File: Mathlib/Algebra/Polynomial/BigOperators.lean

Proof steps:
state_before: R : Type u
ι : Type w
s : Finset ι
inst✝ : CommSemiring R
f : ι → R[X]
t : Multiset R[X]
⊢ ∀ (a : List R[X]), (prod ⟦a⟧).degree ≤ (Multiset.map degree ⟦a⟧).sum
state_after: no goals
tactic: simpa using degree_list_prod_le
Theorem: AddMonoid.exponent_ne_zero_iff_range_addOrderOf_finite
File: Mathlib/GroupTheory/Exponent.lean

Proof steps:
state_before: G : Type u
inst✝ : Monoid G
h : ∀ (g : G), 0 < orderOf g
⊢ exponent G ≠ 0 ↔ (Set.range orderOf).Finite
state_after: case refine_1
G : Type u
inst✝ : Monoid G
h : ∀ (g : G), 0 < orderOf g
he : exponent G ≠ 0
⊢ (Set.range orderOf).Finite

case refine_2
G : Type u
inst✝ : Monoid G
h : ∀ (g : G), 0 < orderOf g
he : (Set.range orderOf).Finite
⊢ exponent G ≠ 0
tactic: refine ⟨fun he => ?_, fun he => ?_⟩
Theorem: WithBot.coe_le_iff
File: Mathlib/Order/WithBot.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a b : α
inst✝ : LE α
x : α
⊢ ↑a ≤ ↑x ↔ ∃ b, ↑x = ↑b ∧ a ≤ b
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
a b : α
inst✝ : LE α
⊢ ¬∃ b, ⊥ = ↑b ∧ a ≤ b
state_after: no goals
tactic: simp
Theorem: div_lt_div''
File: Mathlib/Algebra/Order/Group/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
inst✝² : CommGroup α
inst✝¹ : Preorder α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c d : α
hab : a < b
hcd : c < d
⊢ a / d < b / c
state_after: α : Type u
inst✝² : CommGroup α
inst✝¹ : Preorder α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c d : α
hab : a < b
hcd : c < d
⊢ a * c < b * d
tactic: rw [div_eq_mul_inv, div_eq_mul_inv, mul_comm b, mul_inv_lt_inv_mul_iff, mul_comm]
state_before: α : Type u
inst✝² : CommGroup α
inst✝¹ : Preorder α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c d : α
hab : a < b
hcd : c < d
⊢ a * c < b * d
state_after: no goals
tactic: exact mul_lt_mul_of_lt_of_lt hab hcd
Theorem: Function.update_comp_equiv
File: Mathlib/Logic/Equiv/Basic.lean

Proof steps:
state_before: α' : Sort u_1
α : Sort u_2
β : Sort u_3
inst✝¹ : DecidableEq α'
inst✝ : DecidableEq α
f : α → β
g : α' ≃ α
a : α
v : β
⊢ update f a v ∘ ⇑g = update (f ∘ ⇑g) (g.symm a) v
state_after: no goals
tactic: rw [← update_comp_eq_of_injective _ g.injective, g.apply_symm_apply]
Theorem: padicValInt.mul
File: Mathlib/NumberTheory/Padics/PadicVal.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
a b : ℤ
ha : a ≠ 0
hb : b ≠ 0
⊢ padicValInt p (a * b) = padicValInt p a + padicValInt p b
state_after: p : ℕ
hp : Fact (Nat.Prime p)
a b : ℤ
ha : a ≠ 0
hb : b ≠ 0
⊢ padicValNat p (a * b).natAbs = padicValNat p a.natAbs + padicValNat p b.natAbs
tactic: simp_rw [padicValInt]
state_before: p : ℕ
hp : Fact (Nat.Prime p)
a b : ℤ
ha : a ≠ 0
hb : b ≠ 0
⊢ padicValNat p (a * b).natAbs = padicValNat p a.natAbs + padicValNat p b.natAbs
state_after: no goals
tactic: rw [Int.natAbs_mul, padicValNat.mul] <;> rwa [Int.natAbs_ne_zero]
Theorem: subset_of_subset_of_eq
File: Mathlib/Order/RelClasses.lean

Proof steps:
state_before: α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝ : HasSubset α
a b c : α
hab : a ⊆ b
hbc : b = c
⊢ a ⊆ c
state_after: no goals
tactic: rwa [← hbc]
Theorem: SemiNormedGrp.explicitCokernelDesc_comp_eq_desc
File: Mathlib/Analysis/Normed/Group/SemiNormedGrp/Kernels.lean

Proof steps:
state_before: X Y Z W : SemiNormedGrp
f : X ⟶ Y
g : Y ⟶ Z
h : Z ⟶ W
cond' : f ≫ g = 0
⊢ f ≫ g ≫ h = 0
state_after: no goals
tactic: rw [← CategoryTheory.Category.assoc, cond', Limits.zero_comp]
state_before: X Y Z W : SemiNormedGrp
f : X ⟶ Y
g : Y ⟶ Z
h : Z ⟶ W
cond' : f ≫ g = 0
⊢ explicitCokernelDesc cond' ≫ h = explicitCokernelDesc ⋯
state_after: X Y Z W : SemiNormedGrp
f : X ⟶ Y
g : Y ⟶ Z
h : Z ⟶ W
cond' : f ≫ g = 0
⊢ explicitCokernelπ f ≫ explicitCokernelDesc cond' ≫ h = g ≫ h
tactic: refine explicitCokernelDesc_unique _ _ ?_
state_before: X Y Z W : SemiNormedGrp
f : X ⟶ Y
g : Y ⟶ Z
h : Z ⟶ W
cond' : f ≫ g = 0
⊢ explicitCokernelπ f ≫ explicitCokernelDesc cond' ≫ h = g ≫ h
state_after: no goals
tactic: rw [← CategoryTheory.Category.assoc, explicitCokernelπ_desc]
Theorem: LinearMap.rTensor_pow
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] M
n : ℕ
⊢ rTensor N f ^ n = rTensor N (f ^ n)
state_after: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] M
n : ℕ
h : map f id ^ n = map (f ^ n) (id ^ n)
⊢ rTensor N f ^ n = rTensor N (f ^ n)
tactic: have h := TensorProduct.map_pow f (id : N →ₗ[R] N) n
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f✝ : N →ₗ[R] P
f : M →ₗ[R] M
n : ℕ
h : map f id ^ n = map (f ^ n) (id ^ n)
⊢ rTensor N f ^ n = rTensor N (f ^ n)
state_after: no goals
tactic: rwa [id_pow] at h
Theorem: Turing.PartrecToTM2.trNat_zero
File: Mathlib/Computability/TMToPartrec.lean

Proof steps:
state_before: ⊢ trNat 0 = []
state_after: ⊢ trNum 0 = []
tactic: rw [trNat, Nat.cast_zero]
state_before: ⊢ trNum 0 = []
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.ShortComplex.HomologyData.exact_iff
File: Mathlib/Algebra/Homology/ShortComplex/Exact.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.3959, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.HomologyData
⊢ S.Exact ↔ IsZero h.left.H
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.3959, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.HomologyData
this : S.HasHomology
⊢ S.Exact ↔ IsZero h.left.H
tactic: haveI := HasHomology.mk' h
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.3959, u_2} D
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
h : S.HomologyData
this : S.HasHomology
⊢ S.Exact ↔ IsZero h.left.H
state_after: no goals
tactic: exact LeftHomologyData.exact_iff h.left
Theorem: Path.Homotopy.hcomp_apply
File: Mathlib/Topology/Homotopy/Path.lean

Proof steps:
state_before: X : Type u
Y : Type v
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x₀ x₁ x₂ x₃ : X
p₀ q₀ : Path x₀ x₁
p₁ q₁ : Path x₁ x₂
F : p₀.Homotopy q₀
G : p₁.Homotopy q₁
x : ↑I × ↑I
⊢ (if ↑x.2 ≤ 1 / 2 then (F.eval x.1).extend (2 * ↑x.2) else (G.eval x.1).extend (2 * ↑x.2 - 1)) =
    if h : ↑x.2 ≤ 1 / 2 then (F.eval x.1) ⟨2 * ↑x.2, ⋯⟩ else (G.eval x.1) ⟨2 * ↑x.2 - 1, ⋯⟩
state_after: no goals
tactic: split_ifs <;> exact Path.extend_extends _ _
Theorem: MeasureTheory.hitting_eq_sInf
File: Mathlib/Probability/Process/HittingTime.lean

Proof steps:
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
⊢ hitting u s ⊥ ⊤ ω = sInf {i | u i ω ∈ s}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
⊢ (∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)) → ⊤ = sInf {i | u i ω ∈ s}
tactic: simp only [hitting, Set.mem_Icc, bot_le, le_top, and_self_iff, exists_true_left, Set.Icc_bot,
    Set.Iic_top, Set.univ_inter, ite_eq_left_iff, not_exists]
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
⊢ (∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)) → ⊤ = sInf {i | u i ω ∈ s}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)
⊢ ⊤ = sInf {i | u i ω ∈ s}
tactic: intro h_nmem_s
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)
⊢ ⊤ = sInf {i | u i ω ∈ s}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)
⊢ sInf {i | u i ω ∈ s} = ⊤
tactic: symm
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)
⊢ sInf {i | u i ω ∈ s} = ⊤
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)
⊢ ∀ a ∈ {i | u i ω ∈ s}, a = ⊤
tactic: rw [sInf_eq_top]
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), ¬(x ∈ Set.univ ∧ u x ω ∈ s)
⊢ ∀ a ∈ {i | u i ω ∈ s}, a = ⊤
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), u x ω ∉ s
⊢ ∀ a ∈ {i | u i ω ∈ s}, a = ⊤
tactic: simp only [Set.mem_univ, true_and] at h_nmem_s
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : CompleteLattice ι
u : ι → Ω → β
s : Set β
f : Filtration ι m
ω : Ω
h_nmem_s : ∀ (x : ι), u x ω ∉ s
⊢ ∀ a ∈ {i | u i ω ∈ s}, a = ⊤
state_after: no goals
tactic: exact fun i hi_mem_s => absurd hi_mem_s (h_nmem_s i)
Theorem: lowerBounds_insert
File: Mathlib/Order/Bounds/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝¹ : Preorder α
inst✝ : Preorder β
s✝ t : Set α
a✝ b a : α
s : Set α
⊢ lowerBounds (insert a s) = Iic a ∩ lowerBounds s
state_after: no goals
tactic: rw [insert_eq, lowerBounds_union, lowerBounds_singleton]
Theorem: CategoryTheory.Subobject.sInf_le
File: Mathlib/CategoryTheory/Subobject/Lattice.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ sInf s ≤ f
state_after: case f
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ underlying.obj (sInf s) ⟶ underlying.obj f

case w
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ ?f ≫ f.arrow = (sInf s).arrow
tactic: fapply le_of_comm
Theorem: UniqueFactorizationMonoid.normalizedFactors_prod_of_prime
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

Proof steps:
state_before: α : Type u_1
inst✝⁴ : CancelCommMonoidWithZero α
inst✝³ : NormalizationMonoid α
inst✝² : UniqueFactorizationMonoid α
inst✝¹ : Nontrivial α
inst✝ : Unique αˣ
m : Multiset α
h : ∀ p ∈ m, Prime p
⊢ normalizedFactors m.prod = m
state_after: no goals
tactic: simpa only [← Multiset.rel_eq, ← associated_eq_eq] using
    prime_factors_unique prime_of_normalized_factor h
      (normalizedFactors_prod (m.prod_ne_zero_of_prime h))
Theorem: NNReal.lt_rpow_inv_iff
File: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean

Proof steps:
state_before: w x✝ y✝ z✝ : ℝ
x y : ℝ≥0
z : ℝ
hz : 0 < z
⊢ x < y ^ z⁻¹ ↔ x ^ z < y
state_after: no goals
tactic: simp only [← not_le, rpow_inv_le_iff hz]
Theorem: StieltjesFunction.iInf_rat_gt_eq
File: Mathlib/MeasureTheory/Measure/Stieltjes.lean

Proof steps:
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ ⨅ r, ↑f ↑↑r = ↑f x
state_after: f✝ f : StieltjesFunction
x : ℝ
⊢ ⨅ r, ↑f ↑↑r = ⨅ r, ↑f ↑r
tactic: rw [← iInf_Ioi_eq f x]
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ ⨅ r, ↑f ↑↑r = ⨅ r, ↑f ↑r
state_after: f✝ f : StieltjesFunction
x : ℝ
⊢ BddBelow (↑f '' Ioi x)
tactic: refine (Real.iInf_Ioi_eq_iInf_rat_gt _ ?_ f.mono).symm
state_before: f✝ f : StieltjesFunction
x : ℝ
⊢ BddBelow (↑f '' Ioi x)
state_after: f✝ f : StieltjesFunction
x y : ℝ
⊢ y ∈ ↑f '' Ioi x → ↑f x ≤ y
tactic: refine ⟨f x, fun y => ?_⟩
state_before: f✝ f : StieltjesFunction
x y : ℝ
⊢ y ∈ ↑f '' Ioi x → ↑f x ≤ y
state_after: case intro.intro
f✝ f : StieltjesFunction
x y : ℝ
hy_mem : y ∈ Ioi x
⊢ ↑f x ≤ ↑f y
tactic: rintro ⟨y, hy_mem, rfl⟩
state_before: case intro.intro
f✝ f : StieltjesFunction
x y : ℝ
hy_mem : y ∈ Ioi x
⊢ ↑f x ≤ ↑f y
state_after: no goals
tactic: exact f.mono (le_of_lt hy_mem)
Theorem: Filter.Tendsto.exists_within_forall_le
File: Mathlib/Order/Filter/Cofinite.lean

Proof steps:
state_before: ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inl.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a

case inr
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ¬∃ y ∈ s, ∃ x, f y < x
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
tactic: rcases em (∃ y ∈ s, ∃ x, f y < x) with (⟨y, hys, x, hx⟩ | not_all_top)
Theorem: card_nthRoots_subgroup_units
File: Mathlib/RingTheory/IntegralDomain.lean

Proof steps:
state_before: R : Type u_1
G : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : Group G
inst✝¹ : Fintype G
inst✝ : DecidableEq G
f : G →* R
hf : Injective ⇑f
n : ℕ
hn : 0 < n
g₀ : G
⊢ (filter (fun g => g ^ n = g₀) univ).card ≤ Multiset.card (nthRoots n (f g₀))
state_after: R : Type u_1
G : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : Group G
inst✝¹ : Fintype G
inst✝ : DecidableEq G
f : G →* R
hf : Injective ⇑f
n : ℕ
hn : 0 < n
g₀ : G
this : DecidableEq R
⊢ (filter (fun g => g ^ n = g₀) univ).card ≤ Multiset.card (nthRoots n (f g₀))
tactic: haveI : DecidableEq R := Classical.decEq _
state_before: R : Type u_1
G : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : Group G
inst✝¹ : Fintype G
inst✝ : DecidableEq G
f : G →* R
hf : Injective ⇑f
n : ℕ
hn : 0 < n
g₀ : G
this : DecidableEq R
⊢ (filter (fun g => g ^ n = g₀) univ).card ≤ Multiset.card (nthRoots n (f g₀))
state_after: no goals
tactic: calc
    _ ≤ (nthRoots n (f g₀)).toFinset.card := card_le_card_of_injOn f (by aesop) hf.injOn
    _ ≤ _ := (nthRoots n (f g₀)).toFinset_card_le
Theorem: uniformEmbedding_translate_mul
File: Mathlib/Topology/Algebra/UniformGroup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
a : α
⊢ comap (fun x => (x.1 * a, x.2 * a)) (𝓤 α) = 𝓤 α
state_after: α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
a : α
⊢ Function.Injective fun x => (x.1 * a, x.2 * a)
tactic: nth_rw 1 [← uniformity_translate_mul a, comap_map]
state_before: α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
a : α
⊢ Function.Injective fun x => (x.1 * a, x.2 * a)
state_after: case mk.mk
α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
a p₁ p₂ q₁ q₂ : α
⊢ (fun x => (x.1 * a, x.2 * a)) (p₁, p₂) = (fun x => (x.1 * a, x.2 * a)) (q₁, q₂) → (p₁, p₂) = (q₁, q₂)
tactic: rintro ⟨p₁, p₂⟩ ⟨q₁, q₂⟩
state_before: case mk.mk
α : Type u_1
β : Type u_2
inst✝² : UniformSpace α
inst✝¹ : Group α
inst✝ : UniformGroup α
a p₁ p₂ q₁ q₂ : α
⊢ (fun x => (x.1 * a, x.2 * a)) (p₁, p₂) = (fun x => (x.1 * a, x.2 * a)) (q₁, q₂) → (p₁, p₂) = (q₁, q₂)
state_after: no goals
tactic: simp only [Prod.mk.injEq, mul_left_inj, imp_self]
Theorem: Submonoid.mem_iSup
File: Mathlib/Algebra/Group/Submonoid/Basic.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
A : Type u_3
inst✝¹ : MulOneClass M
s : Set M
inst✝ : AddZeroClass A
t : Set A
S : Submonoid M
ι : Sort u_4
p : ι → Submonoid M
m : M
⊢ m ∈ ⨆ i, p i ↔ ∀ (N : Submonoid M), (∀ (i : ι), p i ≤ N) → m ∈ N
state_after: M : Type u_1
N : Type u_2
A : Type u_3
inst✝¹ : MulOneClass M
s : Set M
inst✝ : AddZeroClass A
t : Set A
S : Submonoid M
ι : Sort u_4
p : ι → Submonoid M
m : M
⊢ (∀ (b : Submonoid M), (∀ (i : ι), p i ≤ b) → closure {m} ≤ b) ↔ ∀ (N : Submonoid M), (∀ (i : ι), p i ≤ N) → m ∈ N
tactic: rw [← closure_singleton_le_iff_mem, le_iSup_iff]
state_before: M : Type u_1
N : Type u_2
A : Type u_3
inst✝¹ : MulOneClass M
s : Set M
inst✝ : AddZeroClass A
t : Set A
S : Submonoid M
ι : Sort u_4
p : ι → Submonoid M
m : M
⊢ (∀ (b : Submonoid M), (∀ (i : ι), p i ≤ b) → closure {m} ≤ b) ↔ ∀ (N : Submonoid M), (∀ (i : ι), p i ≤ N) → m ∈ N
state_after: no goals
tactic: simp only [closure_singleton_le_iff_mem]
Theorem: List.get?_inj
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: i : Nat
α✝ : Type u_1
xs : List α✝
j : Nat
h₀ : i < xs.length
h₁ : xs.Nodup
h₂ : xs.get? i = xs.get? j
⊢ i = j
state_after: i : Nat
α✝ : Type u_1
xs : List α✝
j : Nat
h₀ : i < xs.length
h₁ : xs.Nodup
h₂ : xs.get? i = xs.get? j
⊢ xs[i]? = xs[j]?
tactic: apply getElem?_inj h₀ h₁
state_before: i : Nat
α✝ : Type u_1
xs : List α✝
j : Nat
h₀ : i < xs.length
h₁ : xs.Nodup
h₂ : xs.get? i = xs.get? j
⊢ xs[i]? = xs[j]?
state_after: no goals
tactic: simp_all
Theorem: Polynomial.roots_map_of_injective_of_card_eq_natDegree
File: Mathlib/Algebra/Polynomial/Roots.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
A : Type u_1
B : Type u_2
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : IsDomain A
inst✝ : IsDomain B
p : A[X]
f : A →+* B
hf : Function.Injective ⇑f
hroots : Multiset.card p.roots = p.natDegree
⊢ Multiset.map (⇑f) p.roots = (map f p).roots
state_after: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
A : Type u_1
B : Type u_2
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : IsDomain A
inst✝ : IsDomain B
p : A[X]
f : A →+* B
hf : Function.Injective ⇑f
hroots : Multiset.card p.roots = p.natDegree
⊢ Multiset.card (map f p).roots ≤ Multiset.card (Multiset.map (⇑f) p.roots)
tactic: apply Multiset.eq_of_le_of_card_le (map_roots_le_of_injective p hf)
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
A : Type u_1
B : Type u_2
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : IsDomain A
inst✝ : IsDomain B
p : A[X]
f : A →+* B
hf : Function.Injective ⇑f
hroots : Multiset.card p.roots = p.natDegree
⊢ Multiset.card (map f p).roots ≤ Multiset.card (Multiset.map (⇑f) p.roots)
state_after: no goals
tactic: simpa only [Multiset.card_map, hroots] using (card_roots' _).trans (natDegree_map_le f p)
Theorem: Matroid.not_indep_iff
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B B' I J D X : Set α
e f : α
hX : autoParam (X ⊆ M.E) _auto✝
⊢ ¬M.Indep X ↔ M.Dep X
state_after: no goals
tactic: rw [Dep, and_iff_left hX]