ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: _private.Mathlib.Order.Interval.Set.Image.0.Set.image_subtype_val_Ixx_Iix
File: Mathlib/Order/Interval/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
f : α → β
p q r : α → α → Prop
a b : α
c : { x // p a x ∧ q x b }
h : ∀ {x : α}, r x ↑c → q x b
⊢ {x | p a x ∧ q x b} ∩ {y | r y ↑c} = {y | p a y ∧ r y ↑c}
state_after: case h
α : Type u_1
β : Type u_2
f : α → β
p q r : α → α → Prop
a b : α
c : { x // p a x ∧ q x b }
h : ∀ {x : α}, r x ↑c → q x b
x✝ : α
⊢ x✝ ∈ {x | p a x ∧ q x b} ∩ {y | r y ↑c} ↔ x✝ ∈ {y | p a y ∧ r y ↑c}
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
f : α → β
p q r : α → α → Prop
a b : α
c : { x // p a x ∧ q x b }
h : ∀ {x : α}, r x ↑c → q x b
x✝ : α
⊢ x✝ ∈ {x | p a x ∧ q x b} ∩ {y | r y ↑c} ↔ x✝ ∈ {y | p a y ∧ r y ↑c}
state_after: no goals
tactic: simp (config := { contextual := true}) [h]
Theorem: Ordinal.range_familyOfBFamily'
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
ι : Type u
r : ι → ι → Prop
inst✝ : IsWellOrder ι r
o : Ordinal.{u}
ho : type r = o
f : (a : Ordinal.{u}) → a < o → α
⊢ range (familyOfBFamily' r ho f) = o.brange f
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
r : ι → ι → Prop
inst✝ : IsWellOrder ι r
o : Ordinal.{u}
ho : type r = o
f : (a : Ordinal.{u}) → a < o → α
a : α
⊢ a ∈ range (familyOfBFamily' r ho f) → a ∈ o.brange f

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
r : ι → ι → Prop
inst✝ : IsWellOrder ι r
o : Ordinal.{u}
ho : type r = o
f : (a : Ordinal.{u}) → a < o → α
a : α
⊢ a ∈ o.brange f → a ∈ range (familyOfBFamily' r ho f)
tactic: refine Set.ext fun a => ⟨?_, ?_⟩
Theorem: ComplexShape.Embedding.not_boundaryLE_prev
File: Mathlib/Algebra/Homology/Embedding/Boundary.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
⊢ ¬e.BoundaryLE i
state_after: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
⊢ ¬(c'.Rel (e.f i) (c'.next (e.f i)) ∧ ∀ (k : ι), ¬c'.Rel (e.f i) (e.f k))
tactic: dsimp [BoundaryLE]
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
⊢ ¬(c'.Rel (e.f i) (c'.next (e.f i)) ∧ ∀ (k : ι), ¬c'.Rel (e.f i) (e.f k))
state_after: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
⊢ c'.Rel (e.f i) (c'.next (e.f i)) → ∃ x, c'.Rel (e.f i) (e.f x)
tactic: simp only [not_and, not_forall, not_not]
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
⊢ c'.Rel (e.f i) (c'.next (e.f i)) → ∃ x, c'.Rel (e.f i) (e.f x)
state_after: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
a✝ : c'.Rel (e.f i) (c'.next (e.f i))
⊢ ∃ x, c'.Rel (e.f i) (e.f x)
tactic: intro
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hi : c.Rel i j
a✝ : c'.Rel (e.f i) (c'.next (e.f i))
⊢ ∃ x, c'.Rel (e.f i) (e.f x)
state_after: no goals
tactic: exact ⟨j, by simpa only [e.rel_iff] using hi⟩
Theorem: QuotientAddGroup.leftRel_apply
File: Mathlib/GroupTheory/Coset.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Group α
s : Subgroup α
x y : α
⊢ (∃ a, y * ↑a = x) ↔ ∃ a, x⁻¹ * y = ↑a⁻¹
state_after: no goals
tactic: simp only [inv_mul_eq_iff_eq_mul, Subgroup.coe_inv, eq_mul_inv_iff_mul_eq]
state_before: α : Type u_1
inst✝ : Group α
s : Subgroup α
x y : α
⊢ (∃ a, x⁻¹ * y = ↑a⁻¹) ↔ x⁻¹ * y ∈ s
state_after: no goals
tactic: simp [exists_inv_mem_iff_exists_mem]
Theorem: AlgebraicTopology.DoldKan.PInfty_idem
File: Mathlib/AlgebraicTopology/DoldKan/PInfty.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ PInfty ≫ PInfty = PInfty
state_after: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ (PInfty ≫ PInfty).f n = PInfty.f n
tactic: ext n
state_before: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ (PInfty ≫ PInfty).f n = PInfty.f n
state_after: no goals
tactic: exact PInfty_f_idem n
Theorem: AlgebraicGeometry.StructureSheaf.isUnit_toStalk
File: Mathlib/AlgebraicGeometry/StructureSheaf.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
x : ↑(PrimeSpectrum.Top R)
f : ↥x.asIdeal.primeCompl
⊢ IsUnit ((toStalk R x) ↑f)
state_after: R : Type u
inst✝ : CommRing R
x : ↑(PrimeSpectrum.Top R)
f : ↥x.asIdeal.primeCompl
⊢ IsUnit (((structureSheaf R).presheaf.germ ⟨x, ⋯⟩) ((toOpen R (PrimeSpectrum.basicOpen ↑f)) ↑f))
tactic: erw [← germ_toOpen R (PrimeSpectrum.basicOpen (f : R)) ⟨x, f.2⟩ (f : R)]
state_before: R : Type u
inst✝ : CommRing R
x : ↑(PrimeSpectrum.Top R)
f : ↥x.asIdeal.primeCompl
⊢ IsUnit (((structureSheaf R).presheaf.germ ⟨x, ⋯⟩) ((toOpen R (PrimeSpectrum.basicOpen ↑f)) ↑f))
state_after: no goals
tactic: exact RingHom.isUnit_map _ (isUnit_to_basicOpen_self R f)
Theorem: Relation.TransGen.lift
File: Mathlib/Logic/Relation.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a✝ b✝ c d : α
p : β → β → Prop
a b : α
f : α → β
h : ∀ (a b : α), r a b → p (f a) (f b)
hab : TransGen r a b
⊢ TransGen p (f a) (f b)
state_after: no goals
tactic: induction hab with
  | single hac => exact TransGen.single (h a _ hac)
  | tail _ hcd hac => exact TransGen.tail hac (h _ _ hcd)
Theorem: Finsupp.cons_support
File: Mathlib/Data/Finsupp/Fin.lean

Proof steps:
state_before: n : ℕ
i : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
⊢ (cons y s).support ⊆ insert 0 (Finset.map (Fin.succEmb n) s.support)
state_after: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin (n + 1)
hi : i ∈ (cons y s).support
⊢ i ∈ insert 0 (Finset.map (Fin.succEmb n) s.support)
tactic: intro i hi
state_before: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin (n + 1)
hi : i ∈ (cons y s).support
⊢ i ∈ insert 0 (Finset.map (Fin.succEmb n) s.support)
state_after: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin (n + 1)
hi : i ∈ (cons y s).support
⊢ i = 0 ∨ ∃ a, ¬s a = 0 ∧ a.succ = i
tactic: suffices i = 0 ∨ ∃ a, ¬s a = 0 ∧ a.succ = i by simpa
state_before: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin (n + 1)
hi : i ∈ (cons y s).support
⊢ i = 0 ∨ ∃ a, ¬s a = 0 ∧ a.succ = i
state_after: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin (n + 1)
hi : i ∈ (cons y s).support
⊢ ∀ (a : Fin n), i = a.succ → ¬s a = 0 ∧ a.succ = i
tactic: apply (Fin.eq_zero_or_eq_succ i).imp id (Exists.imp _)
state_before: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin (n + 1)
hi : i ∈ (cons y s).support
⊢ ∀ (a : Fin n), i = a.succ → ¬s a = 0 ∧ a.succ = i
state_after: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin n
hi : i.succ ∈ (cons y s).support
⊢ ¬s i = 0 ∧ i.succ = i.succ
tactic: rintro i rfl
state_before: n : ℕ
i✝ : Fin n
M : Type u_1
inst✝ : Zero M
y : M
t : Fin (n + 1) →₀ M
s : Fin n →₀ M
i : Fin n
hi : i.succ ∈ (cons y s).support
⊢ ¬s i = 0 ∧ i.succ = i.succ
state_after: no goals
tactic: simpa [Finsupp.mem_support_iff] using hi
Theorem: List.support_sum_eq
File: Mathlib/Data/Finsupp/BigOperators.lean

Proof steps:
state_before: ι : Type u_1
M : Type u_2
inst✝¹ : DecidableEq ι
inst✝ : AddMonoid M
l : List (ι →₀ M)
hl : Pairwise (_root_.Disjoint on Finsupp.support) l
⊢ l.sum.support = foldr (fun x x_1 => x.support ⊔ x_1) ∅ l
state_after: case nil
ι : Type u_1
M : Type u_2
inst✝¹ : DecidableEq ι
inst✝ : AddMonoid M
hl : Pairwise (_root_.Disjoint on Finsupp.support) []
⊢ [].sum.support = foldr (fun x x_1 => x.support ⊔ x_1) ∅ []

case cons
ι : Type u_1
M : Type u_2
inst✝¹ : DecidableEq ι
inst✝ : AddMonoid M
hd : ι →₀ M
tl : List (ι →₀ M)
IH : Pairwise (_root_.Disjoint on Finsupp.support) tl → tl.sum.support = foldr (fun x x_1 => x.support ⊔ x_1) ∅ tl
hl : Pairwise (_root_.Disjoint on Finsupp.support) (hd :: tl)
⊢ (hd :: tl).sum.support = foldr (fun x x_1 => x.support ⊔ x_1) ∅ (hd :: tl)
tactic: induction' l with hd tl IH
Theorem: PartialHomeomorph.restr_source'
File: Mathlib/Topology/PartialHomeomorph.lean

Proof steps:
state_before: X : Type u_1
X' : Type u_2
Y : Type u_3
Y' : Type u_4
Z : Type u_5
Z' : Type u_6
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace X'
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Y'
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace Z'
e : PartialHomeomorph X Y
s : Set X
hs : IsOpen s
⊢ (e.restr s).source = e.source ∩ s
state_after: no goals
tactic: rw [e.restr_source, hs.interior_eq]
Theorem: smul_le_of_le_one_left
File: Mathlib/Algebra/Order/Module/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
a a₁ a₂ : α
b b₁ b₂ : β
inst✝⁶ : Monoid α
inst✝⁵ : Zero α
inst✝⁴ : Zero β
inst✝³ : MulAction α β
inst✝² : Preorder α
inst✝¹ : Preorder β
inst✝ : SMulPosMono α β
hb : 0 ≤ b
h : a ≤ 1
⊢ a • b ≤ b
state_after: no goals
tactic: simpa only [one_smul] using smul_le_smul_of_nonneg_right h hb
Theorem: CategoryTheory.Dial.braiding_inv_f
File: Mathlib/CategoryTheory/Dialectica/Monoidal.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasFiniteProducts C
inst✝ : HasPullbacks C
X Y : Dial C
⊢ (X.tensorObj Y).rel =
    (Subobject.pullback (prod.map (prod.braiding X.src Y.src).hom (prod.braiding X.tgt Y.tgt).hom)).obj
      (Y.tensorObj X).rel
state_after: no goals
tactic: simp [Subobject.inf_pullback, ← Subobject.pullback_comp, inf_comm]
Theorem: add_sq'
File: Mathlib/Algebra/Ring/Defs.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝ : CommSemiring α
a✝ b✝ c a b : α
⊢ (a + b) ^ 2 = a ^ 2 + b ^ 2 + 2 * a * b
state_after: no goals
tactic: rw [add_sq, add_assoc, add_comm _ (b ^ 2), add_assoc]
Theorem: Ordinal.pred_succ
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
o : Ordinal.{u_4}
⊢ (succ o).pred = o
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
o : Ordinal.{u_4}
h : ∃ a, succ o = succ a
⊢ (succ o).pred = o
tactic: have h : ∃ a, succ o = succ a := ⟨_, rfl⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
o : Ordinal.{u_4}
h : ∃ a, succ o = succ a
⊢ (succ o).pred = o
state_after: no goals
tactic: simpa only [pred, dif_pos h] using (succ_injective <| Classical.choose_spec h).symm
Theorem: CompletelyDistribLattice.MinimalAxioms.iInf_iSup_eq'
File: Mathlib/Order/CompleteBooleanAlgebra.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (a : ι) → κ a → α
⊢ let x := minAx.toCompleteLattice;
  ⨅ i, ⨆ j, f i j = ⨆ g, ⨅ i, f i (g i)
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (a : ι) → κ a → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ let x := minAx.toCompleteLattice;
  ⨅ i, ⨆ j, f i j = ⨆ g, ⨅ i, f i (g i)
tactic: let _ := minAx.toCompleteLattice
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (a : ι) → κ a → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ let x := minAx.toCompleteLattice;
  ⨅ i, ⨆ j, f i j = ⨆ g, ⨅ i, f i (g i)
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (a : ι) → κ a → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ ⨅ i, ⨆ j, f i j ≤ ⨆ g, ⨅ i, f i (g i)
tactic: refine le_antisymm ?_ le_iInf_iSup
Theorem: CochainComplex.mappingCone.mapHomologicalComplexXIso_eq
File: Mathlib/Algebra/Homology/HomotopyCategory/MappingCone.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
inst✝⁴ : Preadditive C
inst✝³ : Preadditive D
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝² : HasHomotopyCofiber φ
H : C ⥤ D
inst✝¹ : H.Additive
inst✝ : HasHomotopyCofiber ((H.mapHomologicalComplex (ComplexShape.up ℤ)).map φ)
n m : ℤ
hnm : n + 1 = m
⊢ mapHomologicalComplexXIso φ H n = mapHomologicalComplexXIso' φ H n m hnm
state_after: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
inst✝⁴ : Preadditive C
inst✝³ : Preadditive D
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝² : HasHomotopyCofiber φ
H : C ⥤ D
inst✝¹ : H.Additive
inst✝ : HasHomotopyCofiber ((H.mapHomologicalComplex (ComplexShape.up ℤ)).map φ)
n : ℤ
⊢ mapHomologicalComplexXIso φ H n = mapHomologicalComplexXIso' φ H n (n + 1) ⋯
tactic: subst hnm
state_before: C : Type u_1
D : Type u_2
inst✝⁶ : Category.{u_4, u_1} C
inst✝⁵ : Category.{u_3, u_2} D
inst✝⁴ : Preadditive C
inst✝³ : Preadditive D
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝² : HasHomotopyCofiber φ
H : C ⥤ D
inst✝¹ : H.Additive
inst✝ : HasHomotopyCofiber ((H.mapHomologicalComplex (ComplexShape.up ℤ)).map φ)
n : ℤ
⊢ mapHomologicalComplexXIso φ H n = mapHomologicalComplexXIso' φ H n (n + 1) ⋯
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Adjunction.projective_of_map_projective
File: Mathlib/CategoryTheory/Preadditive/Projective.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
⊢ ∃ f', f' ≫ g = f
state_after: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
this : PreservesColimitsOfSize.{0, 0, v, v', u, u'} F
⊢ ∃ f', f' ≫ g = f
tactic: haveI := Adjunction.leftAdjointPreservesColimits.{0, 0} adj
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
this : PreservesColimitsOfSize.{0, 0, v, v', u, u'} F
⊢ ∃ f', f' ≫ g = f
state_after: case intro
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
this : PreservesColimitsOfSize.{0, 0, v, v', u, u'} F
f' : F.obj P ⟶ F.obj E✝
hf' : f' ≫ F.map g = F.map f
⊢ ∃ f', f' ≫ g = f
tactic: rcases (@hP).1 (F.map f) (F.map g) with ⟨f', hf'⟩
state_before: case intro
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
this : PreservesColimitsOfSize.{0, 0, v, v', u, u'} F
f' : F.obj P ⟶ F.obj E✝
hf' : f' ≫ F.map g = F.map f
⊢ ∃ f', f' ≫ g = f
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
this : PreservesColimitsOfSize.{0, 0, v, v', u, u'} F
f' : F.obj P ⟶ F.obj E✝
hf' : f' ≫ F.map g = F.map f
⊢ (adj.unit.app P ≫ G.map f' ≫ inv (adj.unit.app E✝)) ≫ g = f
tactic: use adj.unit.app _ ≫ G.map f' ≫ (inv <| adj.unit.app _)
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝¹ : F.Full
inst✝ : F.Faithful
P : C
hP : Projective (F.obj P)
E✝ X✝ : C
f : P ⟶ X✝
g : E✝ ⟶ X✝
x✝ : Epi g
this : PreservesColimitsOfSize.{0, 0, v, v', u, u'} F
f' : F.obj P ⟶ F.obj E✝
hf' : f' ≫ F.map g = F.map f
⊢ (adj.unit.app P ≫ G.map f' ≫ inv (adj.unit.app E✝)) ≫ g = f
state_after: no goals
tactic: exact F.map_injective (by simpa)
Theorem: Polynomial.support_erase
File: Mathlib/Algebra/Polynomial/Basic.lean

Proof steps:
state_before: R : Type u
a b : R
m n✝ : ℕ
inst✝ : Semiring R
p✝ q p : R[X]
n : ℕ
⊢ (erase n p).support = p.support.erase n
state_after: case ofFinsupp
R : Type u
a b : R
m n✝ : ℕ
inst✝ : Semiring R
p q : R[X]
n : ℕ
toFinsupp✝ : R[ℕ]
⊢ (erase n { toFinsupp := toFinsupp✝ }).support = { toFinsupp := toFinsupp✝ }.support.erase n
tactic: rcases p with ⟨⟩
state_before: case ofFinsupp
R : Type u
a b : R
m n✝ : ℕ
inst✝ : Semiring R
p q : R[X]
n : ℕ
toFinsupp✝ : R[ℕ]
⊢ (erase n { toFinsupp := toFinsupp✝ }).support = { toFinsupp := toFinsupp✝ }.support.erase n
state_after: no goals
tactic: simp only [support, erase_def, Finsupp.support_erase]
Theorem: InnerProductGeometry.angle_eq_zero_iff
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Basic.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
⊢ angle x y = 0 ↔ x ≠ 0 ∧ ∃ r, 0 < r ∧ y = r • x
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
⊢ ⟪x, y⟫_ℝ / (‖x‖ * ‖y‖) ≤ 1
tactic: rw [angle, ← real_inner_div_norm_mul_norm_eq_one_iff, Real.arccos_eq_zero, LE.le.le_iff_eq,
    eq_comm]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x✝ y✝ x y : V
⊢ ⟪x, y⟫_ℝ / (‖x‖ * ‖y‖) ≤ 1
state_after: no goals
tactic: exact (abs_le.mp (abs_real_inner_div_norm_mul_norm_le_one x y)).2
Theorem: CategoryTheory.ShortComplex.RightHomologyData.isIso_p
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
hf : S.f = 0
⊢ S.f ≫ 𝟙 S.X₂ = 0
state_after: no goals
tactic: rw [hf, comp_id]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
hf : S.f = 0
⊢ h.descQ (𝟙 S.X₂) ⋯ ≫ h.p = 𝟙 h.Q
state_after: no goals
tactic: simp only [← cancel_epi h.p, p_descQ_assoc, id_comp, comp_id]
Theorem: Multiset.mem_nsmul
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
⊢ a ∈ n • s ↔ n ≠ 0 ∧ a ∈ s
state_after: case refine_1
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
ha : a ∈ n • s
⊢ n ≠ 0

case refine_2
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
h : n ≠ 0 ∧ a ∈ s
⊢ a ∈ n • s
tactic: refine ⟨fun ha ↦ ⟨?_, mem_of_mem_nsmul ha⟩, fun h => ?_⟩
state_before: case refine_2
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
h : n ≠ 0 ∧ a ∈ s
⊢ a ∈ n • s
state_after: case refine_2.intro
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
h : n.succ ≠ 0 ∧ a ∈ s
⊢ a ∈ n.succ • s
tactic: obtain ⟨n, rfl⟩ := exists_eq_succ_of_ne_zero h.1
state_before: case refine_2.intro
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
h : n.succ ≠ 0 ∧ a ∈ s
⊢ a ∈ n.succ • s
state_after: case refine_2.intro
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
h : n.succ ≠ 0 ∧ a ∈ s
⊢ a ∈ n • s ∨ a ∈ s
tactic: rw [succ_nsmul, mem_add]
state_before: case refine_2.intro
α : Type u_1
β : Type v
γ : Type u_2
a : α
s : Multiset α
n : ℕ
h : n.succ ≠ 0 ∧ a ∈ s
⊢ a ∈ n • s ∨ a ∈ s
state_after: no goals
tactic: exact Or.inr h.2
Theorem: Composition.index_embedding
File: Mathlib/Combinatorics/Enumerative/Composition.lean

Proof steps:
state_before: n : ℕ
c : Composition n
i : Fin c.length
j : Fin (c.blocksFun i)
⊢ c.index ((c.embedding i) j) = i
state_after: n : ℕ
c : Composition n
i : Fin c.length
j : Fin (c.blocksFun i)
⊢ i = c.index ((c.embedding i) j)
tactic: symm
state_before: n : ℕ
c : Composition n
i : Fin c.length
j : Fin (c.blocksFun i)
⊢ i = c.index ((c.embedding i) j)
state_after: n : ℕ
c : Composition n
i : Fin c.length
j : Fin (c.blocksFun i)
⊢ (c.embedding i) j ∈ Set.range ⇑(c.embedding i)
tactic: rw [← mem_range_embedding_iff']
state_before: n : ℕ
c : Composition n
i : Fin c.length
j : Fin (c.blocksFun i)
⊢ (c.embedding i) j ∈ Set.range ⇑(c.embedding i)
state_after: no goals
tactic: apply Set.mem_range_self
Theorem: MeasureTheory.AEEqFun.ext_iff
File: Mathlib/MeasureTheory/Function/AEEqFun.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : MeasurableSpace α
μ ν : Measure α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : α →ₘ[μ] β
h : f = g
⊢ ↑f =ᶠ[ae μ] ↑g
state_after: no goals
tactic: rw [h]
Theorem: CategoryTheory.MonoidalCategory.tensor_left_iff
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V W X✝ Y✝ Z X Y : C
f g : X ⟶ Y
⊢ 𝟙 (𝟙_ C) ⊗ f = 𝟙 (𝟙_ C) ⊗ g ↔ f = g
state_after: no goals
tactic: simp
Theorem: AlgebraicGeometry.Scheme.openCoverOfIsIso_map
File: Mathlib/AlgebraicGeometry/Cover/Open.lean

Proof steps:
state_before: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ x ∈ Set.range ⇑((fun x => f) ((fun x => PUnit.unit) x)).val.base
state_after: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ x ∈ Set.univ

X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ Function.Surjective ⇑((fun x => f) ((fun x => PUnit.unit) x)).val.base
tactic: rw [Set.range_iff_surjective.mpr]
state_before: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ x ∈ Set.univ

X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ Function.Surjective ⇑((fun x => f) ((fun x => PUnit.unit) x)).val.base
state_after: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ Function.Surjective ⇑((fun x => f) ((fun x => PUnit.unit) x)).val.base
tactic: all_goals try trivial
state_before: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ Function.Surjective ⇑((fun x => f) ((fun x => PUnit.unit) x)).val.base
state_after: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ Epi ((fun x => f) ((fun x => PUnit.unit) x)).val.base
tactic: rw [← TopCat.epi_iff_surjective]
state_before: X✝ Y✝ Z : Scheme
𝒰 : X✝.OpenCover
f✝ : X✝ ⟶ Z
g : Y✝ ⟶ Z
inst✝¹ : ∀ (x : 𝒰.J), HasPullback (𝒰.map x ≫ f✝) g
X Y : Scheme
f : X ⟶ Y
inst✝ : IsIso f
x : ↑↑Y.toPresheafedSpace
⊢ Epi ((fun x => f) ((fun x => PUnit.unit) x)).val.base
state_after: no goals
tactic: infer_instance