ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: MvPolynomial.optionEquivRight_X_none
File: Mathlib/Algebra/MvPolynomial/Equiv.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 : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
⊢ (optionEquivRight R S₁) (X none) = C Polynomial.X
state_after: no goals
tactic: simp [optionEquivRight_apply, aeval_X]
Theorem: Set.le_ncard_of_inj_on_range
File: Mathlib/Data/Set/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s t : Set α
f✝ : α → β
n : ℕ
f : ℕ → α
hf : ∀ i < n, f i ∈ s
f_inj : ∀ i < n, ∀ j < n, f i = f j → i = j
hs : autoParam s.Finite _auto✝
⊢ n ≤ s.ncard
state_after: α : Type u_1
β : Type u_2
s t : Set α
f✝ : α → β
n : ℕ
f : ℕ → α
hf : ∀ i < n, f i ∈ s
f_inj : ∀ i < n, ∀ j < n, f i = f j → i = j
hs : autoParam s.Finite _auto✝
⊢ n ≤ (Finite.toFinset hs).card
tactic: rw [ncard_eq_toFinset_card _ hs]
state_before: α : Type u_1
β : Type u_2
s t : Set α
f✝ : α → β
n : ℕ
f : ℕ → α
hf : ∀ i < n, f i ∈ s
f_inj : ∀ i < n, ∀ j < n, f i = f j → i = j
hs : autoParam s.Finite _auto✝
⊢ n ≤ (Finite.toFinset hs).card
state_after: no goals
tactic: apply Finset.le_card_of_inj_on_range <;> simpa
Theorem: AddMonoidHom.ker_eq_bot_of_cancel
File: Mathlib/Algebra/Category/Grp/EpiMono.lean

Proof steps:
state_before: A : Type u
B : Type v
inst✝¹ : Group A
inst✝ : Group B
f : A →* B
h : ∀ (u v : ↥f.ker →* A), f.comp u = f.comp v → u = v
⊢ f.ker = ⊥
state_after: no goals
tactic: simpa using congr_arg range (h f.ker.subtype 1 (by aesop_cat))
Theorem: CongruenceSubgroup.ModularGroup_T_pow_mem_Gamma
File: Mathlib/NumberTheory/ModularForms/CongruenceSubgroups.lean

Proof steps:
state_before: N✝ : ℕ
N M : ℤ
hNM : N ∣ M
⊢ ModularGroup.T ^ M ∈ Gamma N.natAbs
state_after: N✝ : ℕ
N M : ℤ
hNM : N ∣ M
⊢ ↑M = 0
tactic: simp only [Gamma_mem, Fin.isValue, ModularGroup.coe_T_zpow, of_apply, cons_val', cons_val_zero,
    empty_val', cons_val_fin_one, Int.cast_one, cons_val_one, head_cons, head_fin_const,
    Int.cast_zero, and_self, and_true, true_and]
state_before: N✝ : ℕ
N M : ℤ
hNM : N ∣ M
⊢ ↑M = 0
state_after: N✝ : ℕ
N M : ℤ
hNM : N ∣ M
⊢ ↑N.natAbs ∣ M
tactic: refine Iff.mpr (ZMod.intCast_zmod_eq_zero_iff_dvd M (Int.natAbs N)) ?_
state_before: N✝ : ℕ
N M : ℤ
hNM : N ∣ M
⊢ ↑N.natAbs ∣ M
state_after: no goals
tactic: simp only [Int.natCast_natAbs, abs_dvd, hNM]
Theorem: MeasureTheory.integral_fintype
File: Mathlib/MeasureTheory/Integral/Bochner.lean

Proof steps:
state_before: α : Type u_1
E : Type u_2
F : Type u_3
𝕜 : Type u_4
inst✝¹³ : NormedAddCommGroup E
inst✝¹² : NormedSpace ℝ E
hE : CompleteSpace E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : SMulCommClass ℝ 𝕜 E
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
G : Type u_5
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
f✝ g : α → E
m : MeasurableSpace α
μ : Measure α
X : Type u_6
inst✝³ : TopologicalSpace X
inst✝² : FirstCountableTopology X
ν : Measure α
inst✝¹ : MeasurableSingletonClass α
inst✝ : Fintype α
f : α → E
hf : Integrable f μ
⊢ ∫ (x : α), f x ∂μ = ∑ x : α, (μ {x}).toReal • f x
state_after: case hf
α : Type u_1
E : Type u_2
F : Type u_3
𝕜 : Type u_4
inst✝¹³ : NormedAddCommGroup E
inst✝¹² : NormedSpace ℝ E
hE : CompleteSpace E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : SMulCommClass ℝ 𝕜 E
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
G : Type u_5
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
f✝ g : α → E
m : MeasurableSpace α
μ : Measure α
X : Type u_6
inst✝³ : TopologicalSpace X
inst✝² : FirstCountableTopology X
ν : Measure α
inst✝¹ : MeasurableSingletonClass α
inst✝ : Fintype α
f : α → E
hf : Integrable f μ
⊢ Integrable f (μ.restrict ↑Finset.univ)
tactic: rw [← integral_finset .univ, Finset.coe_univ, Measure.restrict_univ]
state_before: case hf
α : Type u_1
E : Type u_2
F : Type u_3
𝕜 : Type u_4
inst✝¹³ : NormedAddCommGroup E
inst✝¹² : NormedSpace ℝ E
hE : CompleteSpace E
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedSpace 𝕜 E
inst✝⁹ : SMulCommClass ℝ 𝕜 E
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
G : Type u_5
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : NormedSpace ℝ G
f✝ g : α → E
m : MeasurableSpace α
μ : Measure α
X : Type u_6
inst✝³ : TopologicalSpace X
inst✝² : FirstCountableTopology X
ν : Measure α
inst✝¹ : MeasurableSingletonClass α
inst✝ : Fintype α
f : α → E
hf : Integrable f μ
⊢ Integrable f (μ.restrict ↑Finset.univ)
state_after: no goals
tactic: simp only [Finset.coe_univ, Measure.restrict_univ, hf]
Theorem: Ordinal.le_add_right
File: Mathlib/SetTheory/Ordinal/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
a b : Ordinal.{u_3}
⊢ a ≤ a + b
state_after: no goals
tactic: simpa only [add_zero] using add_le_add_left (Ordinal.zero_le b) a
Theorem: _private.Mathlib.AlgebraicGeometry.EllipticCurve.Weierstrass.0.EllipticCurve.two_or_three_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
E : EllipticCurve R
F : Type u
inst✝ : Field F
j : F
⊢ Nat.Coprime 2 3
state_after: no goals
tactic: decide
Theorem: Nat.multiplicity_two_factorial_lt
File: Mathlib/Data/Nat/Multiplicity.lean

Proof steps:
state_before: ⊢ ∀ {n : ℕ}, n ≠ 0 → multiplicity 2 n ! < ↑n
state_after: h2 : _root_.Prime 2
⊢ ∀ {n : ℕ}, n ≠ 0 → multiplicity 2 n ! < ↑n
tactic: have h2 := prime_two.prime
state_before: h2 : _root_.Prime 2
⊢ ∀ {n : ℕ}, n ≠ 0 → multiplicity 2 n ! < ↑n
state_after: case refine_1
h2 : _root_.Prime 2
⊢ 0 ≠ 0 → multiplicity 2 0! < ↑0

case refine_2
h2 : _root_.Prime 2
⊢ ∀ (b : Bool) (n : ℕ), (n ≠ 0 → multiplicity 2 n ! < ↑n) → bit b n ≠ 0 → multiplicity 2 (bit b n)! < ↑(bit b n)
tactic: refine binaryRec ?_ ?_
Theorem: CategoryTheory.CosimplicialObject.δ_comp_σ_self
File: Mathlib/AlgebraicTopology/SimplicialObject.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X : CosimplicialObject C
n : ℕ
i : Fin (n + 1)
⊢ X.δ i.castSucc ≫ X.σ i = 𝟙 (X.obj [n])
state_after: C : Type u
inst✝ : Category.{v, u} C
X : CosimplicialObject C
n : ℕ
i : Fin (n + 1)
⊢ X.map (SimplexCategory.δ i.castSucc) ≫ X.map (SimplexCategory.σ i) = 𝟙 (X.obj [n])
tactic: dsimp [δ, σ]
state_before: C : Type u
inst✝ : Category.{v, u} C
X : CosimplicialObject C
n : ℕ
i : Fin (n + 1)
⊢ X.map (SimplexCategory.δ i.castSucc) ≫ X.map (SimplexCategory.σ i) = 𝟙 (X.obj [n])
state_after: no goals
tactic: simp only [← X.map_comp, SimplexCategory.δ_comp_σ_self, X.map_id]
Theorem: ENNReal.nhds_top
File: Mathlib/Topology/Instances/ENNReal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ⨅ l, ⨅ (_ : l < ⊤), 𝓟 (Ioi l) = ⨅ a, ⨅ (_ : a ≠ ⊤), 𝓟 (Ioi a)
state_after: no goals
tactic: simp [lt_top_iff_ne_top, Ioi]
Theorem: LiouvilleNumber.remainder_summable
File: Mathlib/NumberTheory/Liouville/LiouvilleNumber.lean

Proof steps:
state_before: m : ℝ
hm : 1 < m
k : ℕ
⊢ Summable fun i => 1 / m ^ (i + (k + 1))!
state_after: no goals
tactic: convert (summable_nat_add_iff (k + 1)).2 (LiouvilleNumber.summable hm)
Theorem: LieSubmodule.lie_bot
File: Mathlib/Algebra/Lie/IdealOperations.lean

Proof steps:
state_before: R : Type u
L : Type v
M : Type w
M₂ : Type w₁
inst✝¹⁰ : CommRing R
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₂
N N' : LieSubmodule R L M
I J : LieIdeal R L
N₂ : LieSubmodule R L M₂
⊢ ⁅I, ⊥⁆ = ⊥
state_after: R : Type u
L : Type v
M : Type w
M₂ : Type w₁
inst✝¹⁰ : CommRing R
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₂
N N' : LieSubmodule R L M
I J : LieIdeal R L
N₂ : LieSubmodule R L M₂
⊢ ∀ m ∈ ⁅I, ⊥⁆, m = 0
tactic: rw [eq_bot_iff]
state_before: R : Type u
L : Type v
M : Type w
M₂ : Type w₁
inst✝¹⁰ : CommRing R
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₂
N N' : LieSubmodule R L M
I J : LieIdeal R L
N₂ : LieSubmodule R L M₂
⊢ ∀ m ∈ ⁅I, ⊥⁆, m = 0
state_after: no goals
tactic: apply lie_le_right
Theorem: MeasureTheory.Measure.toSignedMeasure_congr
File: Mathlib/MeasureTheory/Measure/VectorMeasure.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν : Measure α
inst✝¹ : IsFiniteMeasure μ
inst✝ : IsFiniteMeasure ν
h : μ = ν
⊢ μ.toSignedMeasure = ν.toSignedMeasure
state_after: no goals
tactic: congr
Theorem: SimplicialObject.Splitting.IndexSet.eqId_iff_len_le
File: Mathlib/AlgebraicTopology/SplitSimplicialObject.lean

Proof steps:
state_before: C : Type u_1
inst✝ : Category.{?u.3951, u_1} C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ A.EqId ↔ (unop Δ).len ≤ (unop A.fst).len
state_after: C : Type u_1
inst✝ : Category.{?u.3951, u_1} C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (unop A.fst).len = (unop Δ).len ↔ (unop Δ).len ≤ (unop A.fst).len
tactic: rw [eqId_iff_len_eq]
state_before: C : Type u_1
inst✝ : Category.{?u.3951, u_1} C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (unop A.fst).len = (unop Δ).len ↔ (unop Δ).len ≤ (unop A.fst).len
state_after: case mp
C : Type u_1
inst✝ : Category.{?u.3951, u_1} C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (unop A.fst).len = (unop Δ).len → (unop Δ).len ≤ (unop A.fst).len

case mpr
C : Type u_1
inst✝ : Category.{?u.3951, u_1} C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (unop Δ).len ≤ (unop A.fst).len → (unop A.fst).len = (unop Δ).len
tactic: constructor
Theorem: Subgroup.comap_normalizer_eq_of_surjective
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
⊢ (comap f H).normalizer ≤ comap f H.normalizer
state_after: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : x ∈ (comap f H).normalizer
⊢ x ∈ comap f H.normalizer
tactic: intro x hx
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : x ∈ (comap f H).normalizer
⊢ x ∈ comap f H.normalizer
state_after: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
⊢ ∀ (h : G), h ∈ H ↔ f x * h * (f x)⁻¹ ∈ H
tactic: simp only [mem_comap, mem_normalizer_iff] at *
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
⊢ ∀ (h : G), h ∈ H ↔ f x * h * (f x)⁻¹ ∈ H
state_after: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
n : G
⊢ n ∈ H ↔ f x * n * (f x)⁻¹ ∈ H
tactic: intro n
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
n : G
⊢ n ∈ H ↔ f x * n * (f x)⁻¹ ∈ H
state_after: case intro
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
y : N
⊢ f y ∈ H ↔ f x * f y * (f x)⁻¹ ∈ H
tactic: rcases hf n with ⟨y, rfl⟩
state_before: case intro
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
N : Type u_5
inst✝ : Group N
f✝ : G →* N
H : Subgroup G
f : N →* G
hf : Surjective ⇑f
x : N
hx : ∀ (h : N), f h ∈ H ↔ f (x * h * x⁻¹) ∈ H
y : N
⊢ f y ∈ H ↔ f x * f y * (f x)⁻¹ ∈ H
state_after: no goals
tactic: simp [hx y]
Theorem: LiouvilleWith.rat_mul_iff
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

Proof steps:
state_before: p q x y : ℝ
r : ℚ
m : ℤ
n : ℕ
hr : r ≠ 0
⊢ LiouvilleWith p (↑r * x) ↔ LiouvilleWith p x
state_after: no goals
tactic: rw [mul_comm, mul_rat_iff hr]
Theorem: Con.quotientKerEquivOfRightInverse_symm_apply
File: Mathlib/GroupTheory/Congruence/Basic.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : MulOneClass P
c : Con M
x✝ y : M
f✝ f : M →* P
g : P → M
hf : Function.RightInverse g ⇑f
x : (ker f).Quotient
⊢ (kerLift f) ((toQuotient ∘ g) ((kerLift f) x)) = (kerLift f) x
state_after: no goals
tactic: rw [Function.comp_apply, kerLift_mk, hf]
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : MulOneClass P
c : Con M
x✝ y : M
f✝ f : M →* P
g : P → M
hf : Function.RightInverse g ⇑f
x : P
⊢ (kerLift f) ((toQuotient ∘ g) x) = x
state_after: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : MulOneClass P
c : Con M
x✝ y : M
f✝ f : M →* P
g : P → M
hf : Function.RightInverse g ⇑f
x : P
⊢ (kerLift f) ((toQuotient ∘ g) x) = f (g x)
tactic: (conv_rhs => rw [← hf x])
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : MulOneClass M
inst✝¹ : MulOneClass N
inst✝ : MulOneClass P
c : Con M
x✝ y : M
f✝ f : M →* P
g : P → M
hf : Function.RightInverse g ⇑f
x : P
⊢ (kerLift f) ((toQuotient ∘ g) x) = f (g x)
state_after: no goals
tactic: rfl
Theorem: Set.einfsep_lt_top
File: Mathlib/Topology/MetricSpace/Infsep.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : EDist α
x y : α
s t : Set α
⊢ s.einfsep < ⊤ ↔ ∃ x ∈ s, ∃ y ∈ s, x ≠ y ∧ edist x y < ⊤
state_after: no goals
tactic: simp_rw [einfsep, iInf_lt_iff, exists_prop]
Theorem: CategoryTheory.Arrow.isIso_of_isIso_left_of_isIso_right
File: Mathlib/CategoryTheory/Comma/Arrow.lean

Proof steps:
state_before: T : Type u
inst✝² : Category.{v, u} T
f g : Arrow T
ff : f ⟶ g
inst✝¹ : IsIso ff.left
inst✝ : IsIso ff.right
⊢ ∃ inv, ff ≫ inv = 𝟙 f ∧ inv ≫ ff = 𝟙 g
state_after: T : Type u
inst✝² : Category.{v, u} T
f g : Arrow T
ff : f ⟶ g
inst✝¹ : IsIso ff.left
inst✝ : IsIso ff.right
inverse : g ⟶ f := { left := inv ff.left, right := inv ff.right, w := ⋯ }
⊢ ∃ inv, ff ≫ inv = 𝟙 f ∧ inv ≫ ff = 𝟙 g
tactic: let inverse : g ⟶ f := ⟨inv ff.left, inv ff.right, (by simp)⟩
state_before: T : Type u
inst✝² : Category.{v, u} T
f g : Arrow T
ff : f ⟶ g
inst✝¹ : IsIso ff.left
inst✝ : IsIso ff.right
inverse : g ⟶ f := { left := inv ff.left, right := inv ff.right, w := ⋯ }
⊢ ∃ inv, ff ≫ inv = 𝟙 f ∧ inv ≫ ff = 𝟙 g
state_after: T : Type u
inst✝² : Category.{v, u} T
f g : Arrow T
ff : f ⟶ g
inst✝¹ : IsIso ff.left
inst✝ : IsIso ff.right
inverse : g ⟶ f := { left := inv ff.left, right := inv ff.right, w := ⋯ }
⊢ ff ≫ inverse = 𝟙 f ∧ inverse ≫ ff = 𝟙 g
tactic: apply Exists.intro inverse
state_before: T : Type u
inst✝² : Category.{v, u} T
f g : Arrow T
ff : f ⟶ g
inst✝¹ : IsIso ff.left
inst✝ : IsIso ff.right
inverse : g ⟶ f := { left := inv ff.left, right := inv ff.right, w := ⋯ }
⊢ ff ≫ inverse = 𝟙 f ∧ inverse ≫ ff = 𝟙 g
state_after: no goals
tactic: aesop_cat
Theorem: _private.Mathlib.Data.Sign.0.SignType.mul_comm
File: Mathlib/Data/Sign.lean

Proof steps:
state_before: ⊢ ∀ (a b : SignType), a * b = b * a
state_after: no goals
tactic: rintro ⟨⟩ ⟨⟩ <;> rfl
Theorem: CategoryTheory.μ_naturality₂
File: Mathlib/CategoryTheory/Monoidal/End.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n m' n' : M
f : m ⟶ m'
g : n ⟶ n'
X : C
⊢ (F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n m' n' : M
f : m ⟶ m'
g : n ⟶ n'
X : C
this : ((F.map f ⊗ F.map g) ≫ F.μ m' n').app X = (F.μ m n ≫ F.map (f ⊗ g)).app X
⊢ (F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
tactic: have := congr_app (F.toLaxMonoidalFunctor.μ_natural f g) X
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n m' n' : M
f : m ⟶ m'
g : n ⟶ n'
X : C
this : ((F.map f ⊗ F.map g) ≫ F.μ m' n').app X = (F.μ m n ≫ F.map (f ⊗ g)).app X
⊢ (F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
state_after: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n m' n' : M
f : m ⟶ m'
g : n ⟶ n'
X : C
this :
  ((F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X)) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
⊢ (F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
tactic: dsimp at this
state_before: C : Type u
inst✝² : Category.{v, u} C
M : Type u_1
inst✝¹ : Category.{u_2, u_1} M
inst✝ : MonoidalCategory M
F : MonoidalFunctor M (C ⥤ C)
m n m' n' : M
f : m ⟶ m'
g : n ⟶ n'
X : C
this :
  ((F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X)) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
⊢ (F.map g).app ((F.obj m).obj X) ≫ (F.obj n').map ((F.map f).app X) ≫ (F.μ m' n').app X =
    (F.μ m n).app X ≫ (F.map (f ⊗ g)).app X
state_after: no goals
tactic: simpa using this
Theorem: Multiset.support_sum_subset
File: Mathlib/Data/Finsupp/BigOperators.lean

Proof steps:
state_before: ι : Type u_1
M : Type u_2
inst✝¹ : DecidableEq ι
inst✝ : AddCommMonoid M
s : Multiset (ι →₀ M)
⊢ s.sum.support ⊆ (map Finsupp.support s).sup
state_after: case h
ι : Type u_1
M : Type u_2
inst✝¹ : DecidableEq ι
inst✝ : AddCommMonoid M
a✝ : List (ι →₀ M)
⊢ (sum (Quot.mk Setoid.r a✝)).support ⊆ (map Finsupp.support (Quot.mk Setoid.r a✝)).sup
tactic: induction s using Quot.inductionOn
state_before: case h
ι : Type u_1
M : Type u_2
inst✝¹ : DecidableEq ι
inst✝ : AddCommMonoid M
a✝ : List (ι →₀ M)
⊢ (sum (Quot.mk Setoid.r a✝)).support ⊆ (map Finsupp.support (Quot.mk Setoid.r a✝)).sup
state_after: no goals
tactic: simpa only [Multiset.quot_mk_to_coe'', Multiset.sum_coe, Multiset.map_coe, Multiset.sup_coe,
    List.foldr_map] using List.support_sum_subset _
Theorem: iUnion_Ioc_add_zsmul
File: Mathlib/Algebra/Order/ToIntervalMod.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a : α
⊢ ⋃ n, Ioc (a + n • p) (a + (n + 1) • p) = univ
state_after: α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
⊢ ∃ i, b ∈ Ioc (a + i • p) (a + (i + 1) • p)
tactic: refine eq_univ_iff_forall.mpr fun b => mem_iUnion.mpr ?_
state_before: α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
⊢ ∃ i, b ∈ Ioc (a + i • p) (a + (i + 1) • p)
state_after: case intro
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ ∃ i, b ∈ Ioc (a + i • p) (a + (i + 1) • p)
tactic: rcases sub_toIocDiv_zsmul_mem_Ioc hp a b with ⟨hl, hr⟩
state_before: case intro
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ ∃ i, b ∈ Ioc (a + i • p) (a + (i + 1) • p)
state_after: case intro
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ b ≤ a + (toIocDiv hp a b + 1) • p
tactic: refine ⟨toIocDiv hp a b, ⟨lt_sub_iff_add_lt.mp hl, ?_⟩⟩
state_before: case intro
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ b ≤ a + (toIocDiv hp a b + 1) • p
state_after: case intro
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ b ≤ a + toIocDiv hp a b • p + p
tactic: rw [add_smul, one_smul, ← add_assoc]
state_before: case intro
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ b ≤ a + toIocDiv hp a b • p + p
state_after: case h.e'_4
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ a + toIocDiv hp a b • p + p = a + p + toIocDiv hp a b • p
tactic: convert sub_le_iff_le_add.mp hr using 1
state_before: case h.e'_4
α : Type u_1
inst✝¹ : LinearOrderedAddCommGroup α
inst✝ : Archimedean α
p : α
hp : 0 < p
a b : α
hl : a < b - toIocDiv hp a b • p
hr : b - toIocDiv hp a b • p ≤ a + p
⊢ a + toIocDiv hp a b • p + p = a + p + toIocDiv hp a b • p
state_after: no goals
tactic: abel
Theorem: not_isLeftRegular_zero_iff
File: Mathlib/Algebra/Regular/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝ : MulZeroClass R
a b : R
⊢ ¬IsLeftRegular 0 ↔ Nontrivial R
state_after: R : Type u_1
inst✝ : MulZeroClass R
a b : R
⊢ (¬∃ x y, x ≠ y) ↔ ∀ (x y : R), x = y
tactic: rw [nontrivial_iff, not_iff_comm, isLeftRegular_zero_iff_subsingleton, subsingleton_iff]
state_before: R : Type u_1
inst✝ : MulZeroClass R
a b : R
⊢ (¬∃ x y, x ≠ y) ↔ ∀ (x y : R), x = y
state_after: R : Type u_1
inst✝ : MulZeroClass R
a b : R
⊢ (∀ (x y : R), x = y) ↔ ∀ (x y : R), x = y
tactic: push_neg
state_before: R : Type u_1
inst✝ : MulZeroClass R
a b : R
⊢ (∀ (x y : R), x = y) ↔ ∀ (x y : R), x = y
state_after: no goals
tactic: exact Iff.rfl
Theorem: MeasureTheory.setLaverage_const
File: Mathlib/MeasureTheory/Integral/Average.lean

Proof steps:
state_before: α : Type u_1
E : Type u_2
F : Type u_3
m0 : MeasurableSpace α
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : CompleteSpace E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
μ ν : Measure α
s t : Set α
f g : α → ℝ≥0∞
hs₀ : μ s ≠ 0
hs : μ s ≠ ⊤
c : ℝ≥0∞
⊢ ⨍⁻ (_x : α) in s, c ∂μ = c
state_after: no goals
tactic: simp only [setLaverage_eq, lintegral_const, Measure.restrict_apply, MeasurableSet.univ,
    univ_inter, div_eq_mul_inv, mul_assoc, ENNReal.mul_inv_cancel hs₀ hs, mul_one]