ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: LieHom.quotKerEquivRange_toFun
File: Mathlib/Algebra/Lie/Quotient.lean

Proof steps:
state_before: R : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
⊢ ∀ {x y : L ⧸ f.ker},
    { toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun ⁅x, y⁆ =
      ⁅{ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun x,
        { toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun y⁆
state_after: case mk.mk
R : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
x✝ : L ⧸ f.ker
x : L
y✝ : L ⧸ f.ker
y : L
⊢ { toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun ⁅Quot.mk Setoid.r x, Quot.mk Setoid.r y⁆ =
    ⁅{ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r x),
      { toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r y)⁆
tactic: rintro ⟨x⟩ ⟨y⟩
state_before: case mk.mk
R : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
x✝ : L ⧸ f.ker
x : L
y✝ : L ⧸ f.ker
y : L
⊢ { toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun ⁅Quot.mk Setoid.r x, Quot.mk Setoid.r y⁆ =
    ⁅{ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r x),
      { toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r y)⁆
state_after: case mk.mk
R : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
x✝ : L ⧸ f.ker
x : L
y✝ : L ⧸ f.ker
y : L
⊢ ↑({ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun
        ⁅Quot.mk Setoid.r x, Quot.mk Setoid.r y⁆) =
    ⁅↑({ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r x)),
      ↑({ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r y))⁆
tactic: rw [← SetLike.coe_eq_coe, LieSubalgebra.coe_bracket]
state_before: case mk.mk
R : Type u_1
L : Type u_2
L' : Type u_3
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
x✝ : L ⧸ f.ker
x : L
y✝ : L ⧸ f.ker
y : L
⊢ ↑({ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun
        ⁅Quot.mk Setoid.r x, Quot.mk Setoid.r y⁆) =
    ⁅↑({ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r x)),
      ↑({ toFun := ⇑(↑f).quotKerEquivRange, map_add' := ⋯, map_smul' := ⋯ }.toFun (Quot.mk Setoid.r y))⁆
state_after: no goals
tactic: simp only [Submodule.Quotient.quot_mk_eq_mk, LinearMap.quotKerEquivRange_apply_mk, ←
        LieSubmodule.Quotient.mk_bracket, coe_toLinearMap, map_lie]
Theorem: Combinatorics.Line.diagonal_apply
File: Mathlib/Combinatorics/HalesJewett.lean

Proof steps:
state_before: η : Type u_1
α✝ : Type u_2
ι✝ : Type u_3
κ : Type u_4
l : Line α✝ ι✝
i : ι✝
a x✝ : α✝
α : Type u_5
ι : Type u_6
inst✝ : Nonempty ι
x : α
⊢ (fun x i => ((diagonal α ι).idxFun i).getD x) x = fun x_1 => x
state_after: no goals
tactic: simp_rw [Line.diagonal, Option.getD_none]
Theorem: Finset.mem_powerset
File: Mathlib/Data/Finset/Powerset.lean

Proof steps:
state_before: α : Type u_1
s✝ t✝ s t : Finset α
⊢ s ∈ t.powerset ↔ s ⊆ t
state_after: case mk
α : Type u_1
s t✝ t : Finset α
val✝ : Multiset α
nodup✝ : val✝.Nodup
⊢ { val := val✝, nodup := nodup✝ } ∈ t.powerset ↔ { val := val✝, nodup := nodup✝ } ⊆ t
tactic: cases s
state_before: case mk
α : Type u_1
s t✝ t : Finset α
val✝ : Multiset α
nodup✝ : val✝.Nodup
⊢ { val := val✝, nodup := nodup✝ } ∈ t.powerset ↔ { val := val✝, nodup := nodup✝ } ⊆ t
state_after: no goals
tactic: simp [powerset, mem_mk, mem_pmap, mk.injEq, mem_powerset, exists_prop, exists_eq_right,
    ← val_le_iff]
Theorem: Cycle.card_toMultiset
File: Mathlib/Data/List/Cycle.lean

Proof steps:
state_before: α : Type u_1
s : Cycle α
⊢ ∀ (a : List α), Multiset.card (toMultiset (Quotient.mk'' a)) = length (Quotient.mk'' a)
state_after: no goals
tactic: simp
Theorem: Polynomial.Monic.prime_of_degree_eq_one
File: Mathlib/Algebra/Polynomial/RingDivision.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
hp1 : p.degree = 1
hm : p.Monic
⊢ p = X - C (-p.coeff 0)
state_after: no goals
tactic: simpa [hm.leadingCoeff] using eq_X_add_C_of_degree_eq_one hp1
Theorem: CategoryTheory.ProjectiveResolution.pOpcycles_comp_fromLeftDerivedZero'
File: Mathlib/CategoryTheory/Abelian/LeftDerived.lean

Proof steps:
state_before: C : Type u
inst✝⁵ : Category.{v, u} C
D : Type u_1
inst✝⁴ : Category.{u_2, u_1} D
inst✝³ : Abelian C
inst✝² : HasProjectiveResolutions C
inst✝¹ : Abelian D
X : C
P : ProjectiveResolution X
F : C ⥤ D
inst✝ : F.Additive
⊢ ((F.mapHomologicalComplex (ComplexShape.down ℕ)).obj P.complex).pOpcycles 0 ≫ P.fromLeftDerivedZero' F =
    F.map (P.π.f 0)
state_after: no goals
tactic: simp [fromLeftDerivedZero']
Theorem: Submonoid.eq_bot_iff_card
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

Proof steps:
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝¹ : Monoid M
a : M
S : Submonoid M
inst✝ : Fintype ↥S
⊢ S = ⊥ → card ↥S = 1
state_after: M : Type u_1
A : Type u_2
B : Type u_3
inst✝¹ : Monoid M
a : M
inst✝ : Fintype ↥⊥
⊢ card ↥⊥ = 1
tactic: rintro rfl
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝¹ : Monoid M
a : M
inst✝ : Fintype ↥⊥
⊢ card ↥⊥ = 1
state_after: no goals
tactic: exact card_bot
Theorem: MeasureTheory.Measure.lt_iff
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
⊢ ¬ν ≤ μ ↔ ∃ s, MeasurableSet s ∧ μ s < ν s
state_after: no goals
tactic: simp only [le_iff, not_forall, not_le, exists_prop]
Theorem: OrderIso.map_sSup
File: Mathlib/Order/CompleteLattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝¹ : CompleteLattice α
f✝ g s✝ t : ι → α
a b : α
inst✝ : CompleteLattice β
f : α ≃o β
s : Set α
⊢ f (sSup s) = ⨆ a ∈ s, f a
state_after: no goals
tactic: simp only [sSup_eq_iSup, OrderIso.map_iSup]
Theorem: IsGLB.biUnion_Ioi_eq
File: Mathlib/Order/Interval/Set/Disjoint.lean

Proof steps:
state_before: ι : Sort u
α : Type v
β : Type w
inst✝ : LinearOrder α
s : Set α
a : α
f : ι → α
h : IsGLB s a
⊢ ⋃ x ∈ s, Ioi x = Ioi a
state_after: case refine_1
ι : Sort u
α : Type v
β : Type w
inst✝ : LinearOrder α
s : Set α
a : α
f : ι → α
h : IsGLB s a
x : α
hx : x ∈ s
⊢ Ioi x ⊆ Ioi a

case refine_2
ι : Sort u
α : Type v
β : Type w
inst✝ : LinearOrder α
s : Set α
a : α
f : ι → α
h : IsGLB s a
x : α
hx : x ∈ Ioi a
⊢ x ∈ ⋃ i ∈ s, Ioi i
tactic: refine (iUnion₂_subset fun x hx => ?_).antisymm fun x hx => ?_
Theorem: PartENat.lt_add_one
File: Mathlib/Data/Nat/PartENat.lean

Proof steps:
state_before: x : PartENat
hx : x ≠ ⊤
⊢ x < x + 1
state_after: x : PartENat
hx : x ≠ ⊤
⊢ 0 < 1
tactic: rw [PartENat.lt_add_iff_pos_right hx]
state_before: x : PartENat
hx : x ≠ ⊤
⊢ 0 < 1
state_after: no goals
tactic: norm_cast
Theorem: Nat.xor_cancel_left
File: Mathlib/Data/Nat/Bitwise.lean

Proof steps:
state_before: n m : ℕ
⊢ n ^^^ (n ^^^ m) = m
state_after: no goals
tactic: rw [← Nat.xor_assoc, xor_self, zero_xor]
Theorem: cauchySeq_iff
File: Mathlib/Topology/UniformSpace/Cauchy.lean

Proof steps:
state_before: α : Type u
β : Type v
uniformSpace : UniformSpace α
u : ℕ → α
⊢ CauchySeq u ↔ ∀ V ∈ 𝓤 α, ∃ N, ∀ k ≥ N, ∀ l ≥ N, (u k, u l) ∈ V
state_after: no goals
tactic: simp only [cauchySeq_iff', Filter.eventually_atTop_prod_self', mem_preimage, Prod.map_apply]
Theorem: Batteries.LECmp.cmp_iff_ge
File: .lake/packages/batteries/Batteries/Classes/Order.lean

Proof steps:
state_before: α : Type u_1
cmp : α → α → Ordering
x y : α
inst✝¹ : LE α
inst✝ : LECmp cmp
⊢ cmp x y ≠ Ordering.lt ↔ y ≤ x
state_after: no goals
tactic: rw [← OrientedCmp.cmp_ne_gt, LECmp.cmp_iff_le]
Theorem: MeasureTheory.IsAddFundamentalDomain.setLIntegral_eq_tsum'
File: Mathlib/MeasureTheory/Group/FundamentalDomain.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝¹⁰ : Group G
inst✝⁹ : Group H
inst✝⁸ : MulAction G α
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MulAction H β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : NormedAddCommGroup E
s t✝ : Set α
μ : Measure α
inst✝³ : MeasurableSpace G
inst✝² : MeasurableSMul G α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : Countable G
ν : Measure α
h : IsFundamentalDomain G s μ
f : α → ℝ≥0∞
t : Set α
⊢ ∑' (g : G), ∫⁻ (x : α) in t ∩ g⁻¹ • s, f x ∂μ = ∑' (g : G), ∫⁻ (x : α) in g⁻¹ • (g • t ∩ s), f x ∂μ
state_after: no goals
tactic: simp only [smul_set_inter, inv_smul_smul]
Theorem: zpow_mod_orderOf
File: Mathlib/GroupTheory/OrderOfElement.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝ : Group G
x✝ y : G
i : ℤ
x : G
z : ℤ
⊢ x ^ (z % ↑(orderOf x)) = x ^ (z % ↑(orderOf x) + ↑(orderOf x) * (z / ↑(orderOf x)))
state_after: no goals
tactic: simp [zpow_add, zpow_mul, pow_orderOf_eq_one]
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝ : Group G
x✝ y : G
i : ℤ
x : G
z : ℤ
⊢ x ^ (z % ↑(orderOf x) + ↑(orderOf x) * (z / ↑(orderOf x))) = x ^ z
state_after: no goals
tactic: rw [Int.emod_add_ediv]
Theorem: Complex.LogDeriv_exp
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Deriv.lean

Proof steps:
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : E → ℝ
f' : E →L[ℝ] ℝ
x : E
s : Set E
⊢ logDeriv cexp = 1
state_after: case h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : E → ℝ
f' : E →L[ℝ] ℝ
x : E
s : Set E
x✝ : ℂ
⊢ logDeriv cexp x✝ = 1 x✝
tactic: ext
state_before: case h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : E → ℝ
f' : E →L[ℝ] ℝ
x : E
s : Set E
x✝ : ℂ
⊢ logDeriv cexp x✝ = 1 x✝
state_after: no goals
tactic: rw [logDeriv, Complex.deriv_exp, Pi.div_apply, ← exp_sub, sub_self, exp_zero, Pi.one_apply]
Theorem: Inducing.summable_iff_tsum_comp_mem_range
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁶ : CommMonoid α
inst✝⁵ : TopologicalSpace α
f✝ g✝ : β → α
a b : α
s : Finset β
inst✝⁴ : CommMonoid γ
inst✝³ : TopologicalSpace γ
inst✝² : T2Space γ
G : Type u_5
inst✝¹ : FunLike G α γ
inst✝ : MonoidHomClass G α γ
g : G
hg : Inducing ⇑g
f : β → α
⊢ Multipliable f ↔ Multipliable (⇑g ∘ f) ∧ ∏' (i : β), g (f i) ∈ Set.range ⇑g
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁶ : CommMonoid α
inst✝⁵ : TopologicalSpace α
f✝ g✝ : β → α
a b : α
s : Finset β
inst✝⁴ : CommMonoid γ
inst✝³ : TopologicalSpace γ
inst✝² : T2Space γ
G : Type u_5
inst✝¹ : FunLike G α γ
inst✝ : MonoidHomClass G α γ
g : G
hg : Inducing ⇑g
f : β → α
⊢ Multipliable f → Multipliable (⇑g ∘ f) ∧ ∏' (i : β), g (f i) ∈ Set.range ⇑g

case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁶ : CommMonoid α
inst✝⁵ : TopologicalSpace α
f✝ g✝ : β → α
a b : α
s : Finset β
inst✝⁴ : CommMonoid γ
inst✝³ : TopologicalSpace γ
inst✝² : T2Space γ
G : Type u_5
inst✝¹ : FunLike G α γ
inst✝ : MonoidHomClass G α γ
g : G
hg : Inducing ⇑g
f : β → α
⊢ Multipliable (⇑g ∘ f) ∧ ∏' (i : β), g (f i) ∈ Set.range ⇑g → Multipliable f
tactic: constructor
Theorem: WithTop.add_eq_top
File: Mathlib/Algebra/Order/Monoid/Unbundled/WithTop.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝ : Add α
a b c d : WithTop α
x y : α
⊢ a + b = ⊤ ↔ a = ⊤ ∨ b = ⊤
state_after: no goals
tactic: match a, b with
  | ⊤, _ => simp
  | _, ⊤ => simp
  | (a : α), (b : α) => simp only [← coe_add, coe_ne_top, or_false]
Theorem: ContinuousMap.AlgHom.closure_ker_inter
File: Mathlib/Topology/ContinuousFunction/StoneWeierstrass.lean

Proof steps:
state_before: X : Type u_1
inst✝¹⁵ : TopologicalSpace X
𝕜 : Type u_2
inst✝¹⁴ : RCLike 𝕜
F : Type u_3
S : Type u_4
K : Type u_5
A : Type u_6
inst✝¹³ : CommRing K
inst✝¹² : Ring A
inst✝¹¹ : Algebra K A
inst✝¹⁰ : TopologicalSpace K
inst✝⁹ : T1Space K
inst✝⁸ : TopologicalSpace A
inst✝⁷ : ContinuousSub A
inst✝⁶ : ContinuousSMul K A
inst✝⁵ : FunLike F A K
inst✝⁴ : AlgHomClass F K A K
inst✝³ : SetLike S A
inst✝² : OneMemClass S A
inst✝¹ : AddSubgroupClass S A
inst✝ : SMulMemClass S K A
φ : F
hφ : Continuous ⇑φ
s : S
⊢ closure (↑s ∩ ↑(RingHom.ker φ)) = closure ↑s ∩ ↑(RingHom.ker φ)
state_after: case refine_1
X : Type u_1
inst✝¹⁵ : TopologicalSpace X
𝕜 : Type u_2
inst✝¹⁴ : RCLike 𝕜
F : Type u_3
S : Type u_4
K : Type u_5
A : Type u_6
inst✝¹³ : CommRing K
inst✝¹² : Ring A
inst✝¹¹ : Algebra K A
inst✝¹⁰ : TopologicalSpace K
inst✝⁹ : T1Space K
inst✝⁸ : TopologicalSpace A
inst✝⁷ : ContinuousSub A
inst✝⁶ : ContinuousSMul K A
inst✝⁵ : FunLike F A K
inst✝⁴ : AlgHomClass F K A K
inst✝³ : SetLike S A
inst✝² : OneMemClass S A
inst✝¹ : AddSubgroupClass S A
inst✝ : SMulMemClass S K A
φ : F
hφ : Continuous ⇑φ
s : S
⊢ closure (↑s ∩ ↑(RingHom.ker φ)) ⊆ closure ↑s ∩ ↑(RingHom.ker φ)

case refine_2
X : Type u_1
inst✝¹⁵ : TopologicalSpace X
𝕜 : Type u_2
inst✝¹⁴ : RCLike 𝕜
F : Type u_3
S : Type u_4
K : Type u_5
A : Type u_6
inst✝¹³ : CommRing K
inst✝¹² : Ring A
inst✝¹¹ : Algebra K A
inst✝¹⁰ : TopologicalSpace K
inst✝⁹ : T1Space K
inst✝⁸ : TopologicalSpace A
inst✝⁷ : ContinuousSub A
inst✝⁶ : ContinuousSMul K A
inst✝⁵ : FunLike F A K
inst✝⁴ : AlgHomClass F K A K
inst✝³ : SetLike S A
inst✝² : OneMemClass S A
inst✝¹ : AddSubgroupClass S A
inst✝ : SMulMemClass S K A
φ : F
hφ : Continuous ⇑φ
s : S
⊢ closure ↑s ∩ ↑(RingHom.ker φ) ⊆ closure (↑s ∩ ↑(RingHom.ker φ))
tactic: refine subset_antisymm ?_ ?_
Theorem: CategoryTheory.Limits.Types.pushoutCocone_inl_eq_inr_iff_of_isColimit
File: Mathlib/CategoryTheory/Limits/Shapes/Types.lean

Proof steps:
state_before: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c : PushoutCocone f g
hc : IsColimit c
h₁ : Function.Injective f
x₁ : X₁
x₂ : X₂
⊢ c.inl x₁ = c.inr x₂ ↔ ∃ s, f s = x₁ ∧ g s = x₂
state_after: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c : PushoutCocone f g
hc : IsColimit c
h₁ : Function.Injective f
x₁ : X₁
x₂ : X₂
⊢ (Pushout.cocone f g).inl x₁ = (Pushout.cocone f g).inr x₂ ↔ ∃ s, f s = x₁ ∧ g s = x₂
tactic: rw [pushoutCocone_inl_eq_inr_iff_of_iso
    (Cocones.ext (IsColimit.coconePointUniqueUpToIso hc (Pushout.isColimitCocone f g))
    (by aesop_cat))]
state_before: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c : PushoutCocone f g
hc : IsColimit c
h₁ : Function.Injective f
x₁ : X₁
x₂ : X₂
⊢ (Pushout.cocone f g).inl x₁ = (Pushout.cocone f g).inr x₂ ↔ ∃ s, f s = x₁ ∧ g s = x₂
state_after: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c : PushoutCocone f g
hc : IsColimit c
h₁ : Function.Injective f
x₁ : X₁
x₂ : X₂
this : Mono f
⊢ (Pushout.cocone f g).inl x₁ = (Pushout.cocone f g).inr x₂ ↔ ∃ s, f s = x₁ ∧ g s = x₂
tactic: have := (mono_iff_injective f).2 h₁
state_before: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c : PushoutCocone f g
hc : IsColimit c
h₁ : Function.Injective f
x₁ : X₁
x₂ : X₂
this : Mono f
⊢ (Pushout.cocone f g).inl x₁ = (Pushout.cocone f g).inr x₂ ↔ ∃ s, f s = x₁ ∧ g s = x₂
state_after: no goals
tactic: apply Pushout.inl_eq_inr_iff
Theorem: AffineSubspace.nonempty_map
File: Mathlib/LinearAlgebra/AffineSpace/Restrict.lean

Proof steps:
state_before: k : Type u_1
V₁ : Type u_2
P₁ : Type u_3
V₂ : Type u_4
P₂ : Type u_5
inst✝⁶ : Ring k
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : AddCommGroup V₂
inst✝³ : Module k V₁
inst✝² : Module k V₂
inst✝¹ : AddTorsor V₁ P₁
inst✝ : AddTorsor V₂ P₂
E : AffineSubspace k P₁
Ene : Nonempty ↥E
φ : P₁ →ᵃ[k] P₂
⊢ Nonempty ↥(map φ E)
state_after: case intro.mk
k : Type u_1
V₁ : Type u_2
P₁ : Type u_3
V₂ : Type u_4
P₂ : Type u_5
inst✝⁶ : Ring k
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : AddCommGroup V₂
inst✝³ : Module k V₁
inst✝² : Module k V₂
inst✝¹ : AddTorsor V₁ P₁
inst✝ : AddTorsor V₂ P₂
E : AffineSubspace k P₁
Ene : Nonempty ↥E
φ : P₁ →ᵃ[k] P₂
x : P₁
hx : x ∈ E
⊢ Nonempty ↥(map φ E)
tactic: obtain ⟨x, hx⟩ := id Ene
state_before: case intro.mk
k : Type u_1
V₁ : Type u_2
P₁ : Type u_3
V₂ : Type u_4
P₂ : Type u_5
inst✝⁶ : Ring k
inst✝⁵ : AddCommGroup V₁
inst✝⁴ : AddCommGroup V₂
inst✝³ : Module k V₁
inst✝² : Module k V₂
inst✝¹ : AddTorsor V₁ P₁
inst✝ : AddTorsor V₂ P₂
E : AffineSubspace k P₁
Ene : Nonempty ↥E
φ : P₁ →ᵃ[k] P₂
x : P₁
hx : x ∈ E
⊢ Nonempty ↥(map φ E)
state_after: no goals
tactic: exact ⟨⟨φ x, AffineSubspace.mem_map.mpr ⟨x, hx, rfl⟩⟩⟩
Theorem: WeierstrassCurve.Jacobian.dblX_smul
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
u : R
⊢ W'.dblX (u • P) = (u ^ 4) ^ 2 * W'.dblX P
state_after: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
u : R
⊢ (u ^ 4 * W'.dblU P) ^ 2 - W'.a₁ * (u ^ 4 * W'.dblU P) * (u * P z) * (u ^ 3 * P y - u ^ 3 * W'.negY P) -
        W'.a₂ * (u * P z) ^ 2 * (u ^ 3 * P y - u ^ 3 * W'.negY P) ^ 2 -
      2 * (u ^ 2 * P x) * (u ^ 3 * P y - u ^ 3 * W'.negY P) ^ 2 =
    (u ^ 4) ^ 2 *
      (W'.dblU P ^ 2 - W'.a₁ * W'.dblU P * P z * (P y - W'.negY P) - W'.a₂ * P z ^ 2 * (P y - W'.negY P) ^ 2 -
        2 * P x * (P y - W'.negY P) ^ 2)
tactic: simp_rw [dblX, dblU_smul, negY_smul, smul_fin3_ext]
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → R
u : R
⊢ (u ^ 4 * W'.dblU P) ^ 2 - W'.a₁ * (u ^ 4 * W'.dblU P) * (u * P z) * (u ^ 3 * P y - u ^ 3 * W'.negY P) -
        W'.a₂ * (u * P z) ^ 2 * (u ^ 3 * P y - u ^ 3 * W'.negY P) ^ 2 -
      2 * (u ^ 2 * P x) * (u ^ 3 * P y - u ^ 3 * W'.negY P) ^ 2 =
    (u ^ 4) ^ 2 *
      (W'.dblU P ^ 2 - W'.a₁ * W'.dblU P * P z * (P y - W'.negY P) - W'.a₂ * P z ^ 2 * (P y - W'.negY P) ^ 2 -
        2 * P x * (P y - W'.negY P) ^ 2)
state_after: no goals
tactic: ring1
Theorem: closure_iUnion
File: Mathlib/Topology/AlexandrovDiscrete.lean

Proof steps:
state_before: ι : Sort u_1
κ : ι → Sort u_2
α : Type u_3
β : Type u_4
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : AlexandrovDiscrete α
S : Set (Set α)
f✝ f : ι → Set α
⊢ (closure (⋃ i, f i))ᶜ = (⋃ i, closure (f i))ᶜ
state_after: no goals
tactic: simpa only [← interior_compl, compl_iUnion] using interior_iInter fun i ↦ (f i)ᶜ
Theorem: ENNReal.lt_iff_exists_add_pos_lt
File: Mathlib/Data/ENNReal/Basic.lean

Proof steps:
state_before: α : Type u_1
a b c d : ℝ≥0∞
r p q : ℝ≥0
⊢ a < b ↔ ∃ r, 0 < r ∧ a + ↑r < b
state_after: α : Type u_1
a b c d : ℝ≥0∞
r p q : ℝ≥0
hab : a < b
⊢ ∃ r, 0 < r ∧ a + ↑r < b
tactic: refine ⟨fun hab => ?_, fun ⟨r, _, hr⟩ => lt_of_le_of_lt le_self_add hr⟩
state_before: α : Type u_1
a b c d : ℝ≥0∞
r p q : ℝ≥0
hab : a < b
⊢ ∃ r, 0 < r ∧ a + ↑r < b
state_after: case intro.intro
α : Type u_1
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
hab : a < b
c : ℝ≥0
ac : a < ↑c
cb : ↑c < b
⊢ ∃ r, 0 < r ∧ a + ↑r < b
tactic: rcases lt_iff_exists_nnreal_btwn.1 hab with ⟨c, ac, cb⟩
state_before: case intro.intro
α : Type u_1
a b c✝ d : ℝ≥0∞
r p q : ℝ≥0
hab : a < b
c : ℝ≥0
ac : a < ↑c
cb : ↑c < b
⊢ ∃ r, 0 < r ∧ a + ↑r < b
state_after: case intro.intro.intro
α : Type u_1
b c✝ d : ℝ≥0∞
r p q c : ℝ≥0
cb : ↑c < b
a : ℝ≥0
hab : ↑a < b
ac : ↑a < ↑c
⊢ ∃ r, 0 < r ∧ ↑a + ↑r < b
tactic: lift a to ℝ≥0 using ac.ne_top
state_before: case intro.intro.intro
α : Type u_1
b c✝ d : ℝ≥0∞
r p q c : ℝ≥0
cb : ↑c < b
a : ℝ≥0
hab : ↑a < b
ac : ↑a < ↑c
⊢ ∃ r, 0 < r ∧ ↑a + ↑r < b
state_after: case intro.intro.intro
α : Type u_1
b c✝ d : ℝ≥0∞
r p q c : ℝ≥0
cb : ↑c < b
a : ℝ≥0
hab : ↑a < b
ac : a < c
⊢ ∃ r, 0 < r ∧ ↑a + ↑r < b
tactic: rw [coe_lt_coe] at ac
state_before: case intro.intro.intro
α : Type u_1
b c✝ d : ℝ≥0∞
r p q c : ℝ≥0
cb : ↑c < b
a : ℝ≥0
hab : ↑a < b
ac : a < c
⊢ ∃ r, 0 < r ∧ ↑a + ↑r < b
state_after: case intro.intro.intro
α : Type u_1
b c✝ d : ℝ≥0∞
r p q c : ℝ≥0
cb : ↑c < b
a : ℝ≥0
hab : ↑a < b
ac : a < c
⊢ ↑a + ↑(c - a) < b
tactic: refine ⟨c - a, tsub_pos_iff_lt.2 ac, ?_⟩
state_before: case intro.intro.intro
α : Type u_1
b c✝ d : ℝ≥0∞
r p q c : ℝ≥0
cb : ↑c < b
a : ℝ≥0
hab : ↑a < b
ac : a < c
⊢ ↑a + ↑(c - a) < b
state_after: no goals
tactic: rwa [← coe_add, add_tsub_cancel_of_le ac.le]
Theorem: AddSubgroup.relindex_mul_relindex
File: Mathlib/GroupTheory/Index.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
H K L : Subgroup G
hHK : H ≤ K
hKL : K ≤ L
⊢ H.relindex K * K.relindex L = H.relindex L
state_after: G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
H K L : Subgroup G
hHK : H ≤ K
hKL : K ≤ L
⊢ (H.subgroupOf L).relindex (K.subgroupOf L) * K.relindex L = H.relindex L
tactic: rw [← relindex_subgroupOf hKL]
state_before: G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
H K L : Subgroup G
hHK : H ≤ K
hKL : K ≤ L
⊢ (H.subgroupOf L).relindex (K.subgroupOf L) * K.relindex L = H.relindex L
state_after: no goals
tactic: exact relindex_mul_index fun x hx => hHK hx
Theorem: lt_compl_self
File: Mathlib/Order/Heyting/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : HeytingAlgebra α
a b c : α
inst✝ : Nontrivial α
⊢ a < aᶜ ↔ a = ⊥
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : HeytingAlgebra α
a b c : α
inst✝ : Nontrivial α
⊢ a ≤ aᶜ ∧ a ≠ aᶜ ↔ a = ⊥
tactic: rw [lt_iff_le_and_ne]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : HeytingAlgebra α
a b c : α
inst✝ : Nontrivial α
⊢ a ≤ aᶜ ∧ a ≠ aᶜ ↔ a = ⊥
state_after: no goals
tactic: simp
Theorem: SimpleGraph.isEmpty_of_chromaticNumber_eq_zero
File: Mathlib/Combinatorics/SimpleGraph/Coloring.lean

Proof steps:
state_before: V : Type u
G✝ : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G✝.Coloring α
G : SimpleGraph V
inst✝ : Finite V
h : G.chromaticNumber = 0
⊢ IsEmpty V
state_after: V : Type u
G✝ : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G✝.Coloring α
G : SimpleGraph V
inst✝ : Finite V
h : G.chromaticNumber = 0
h' : G.Colorable G.chromaticNumber.toNat
⊢ IsEmpty V
tactic: have h' := G.colorable_chromaticNumber_of_fintype
state_before: V : Type u
G✝ : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G✝.Coloring α
G : SimpleGraph V
inst✝ : Finite V
h : G.chromaticNumber = 0
h' : G.Colorable G.chromaticNumber.toNat
⊢ IsEmpty V
state_after: V : Type u
G✝ : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G✝.Coloring α
G : SimpleGraph V
inst✝ : Finite V
h : G.chromaticNumber = 0
h' : G.Colorable (ENat.toNat 0)
⊢ IsEmpty V
tactic: rw [h] at h'
state_before: V : Type u
G✝ : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G✝.Coloring α
G : SimpleGraph V
inst✝ : Finite V
h : G.chromaticNumber = 0
h' : G.Colorable (ENat.toNat 0)
⊢ IsEmpty V
state_after: no goals
tactic: exact G.isEmpty_of_colorable_zero h'
Theorem: SimpleGraph.dotProduct_adjMatrix
File: Mathlib/Combinatorics/SimpleGraph/AdjMatrix.lean

Proof steps:
state_before: V : Type u_1
α : Type u_2
β : Type u_3
G : SimpleGraph V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype V
inst✝ : NonAssocSemiring α
v : V
vec : V → α
⊢ vec ⬝ᵥ adjMatrix α G v = ∑ u ∈ G.neighborFinset v, vec u
state_after: no goals
tactic: simp [neighborFinset_eq_filter, dotProduct, sum_filter, Finset.sum_apply]
Theorem: Mathlib.Tactic.Monoidal.evalWhiskerLeft_comp
File: Mathlib/Tactic/CategoryTheory/Monoidal.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
f f' g g' h i j : C
η : h ⟶ i
θ : g ⊗ h ⟶ g ⊗ i
ι : f ⊗ g ⊗ h ⟶ f ⊗ g ⊗ i
ι' : f ⊗ g ⊗ h ⟶ (f ⊗ g) ⊗ i
ι'' : (f ⊗ g) ⊗ h ⟶ (f ⊗ g) ⊗ i
pf_θ : g ◁ η = θ
pf_ι : f ◁ θ = ι
pf_ι' : ι ≫ (α_ f g i).inv = ι'
pf_ι'' : (α_ f g h).hom ≫ ι' = ι''
⊢ (f ⊗ g) ◁ η = ι''
state_after: no goals
tactic: simp [pf_θ, pf_ι, pf_ι', pf_ι'']