ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: ball_one_div_singleton
File: Mathlib/Analysis/Normed/Group/Pointwise.lean

Proof steps:
state_before: E : Type u_1
inst✝ : SeminormedCommGroup E
ε δ : ℝ
s t : Set E
x y : E
⊢ ball 1 δ / {x} = ball x⁻¹ δ
state_after: no goals
tactic: rw [ball_div_singleton, one_div]
Theorem: CategoryTheory.MonoidalOpposite.unmopBraidedFunctor_map
File: Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝⁸ : Category.{v₁, u₁} C
inst✝⁷ : MonoidalCategory C
inst✝⁶ : BraidedCategory C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
inst✝⁴ : MonoidalCategory D
inst✝³ : BraidedCategory D
E : Type u₃
inst✝² : Category.{v₃, u₃} E
inst✝¹ : MonoidalCategory E
inst✝ : BraidedCategory E
X Y Z : Cᴹᵒᵖ
⊢ (fun X Y => (β_ X.unmop Y.unmop).hom) X Y ▷ __spread✝⁻⁰.obj Z ≫
      (fun X Y => (β_ X.unmop Y.unmop).hom) (X ⊗ Y) Z ≫ __spread✝⁻⁰.map (α_ X Y Z).hom =
    (α_ (__spread✝⁻⁰.obj X) (__spread✝⁻⁰.obj Y) (__spread✝⁻⁰.obj Z)).hom ≫
      __spread✝⁻⁰.obj X ◁ (fun X Y => (β_ X.unmop Y.unmop).hom) Y Z ≫ (fun X Y => (β_ X.unmop Y.unmop).hom) X (Y ⊗ Z)
state_after: no goals
tactic: simp [← yang_baxter_assoc]
Theorem: IsGLB.biUnion_Ici_eq_Ici
File: Mathlib/Order/Interval/Set/Disjoint.lean

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

case refine_2
ι : Sort u
α : Type v
β : Type w
inst✝ : LinearOrder α
s : Set α
a : α
f : ι → α
a_glb : IsGLB s a
a_mem : a ∈ s
x : α
hx : x ∈ Ici a
⊢ x ∈ ⋃ i ∈ s, Ici i
tactic: refine (iUnion₂_subset fun x hx => ?_).antisymm fun x hx => ?_
Theorem: CategoryTheory.Bifunctor.diagonal
File: Mathlib/CategoryTheory/Products/Bifunctor.lean

Proof steps:
state_before: C : Type u₁
D : Type u₂
E : Type u₃
inst✝² : Category.{v₁, u₁} C
inst✝¹ : Category.{v₂, u₂} D
inst✝ : Category.{v₃, u₃} E
F : C × D ⥤ E
X X' : C
f : X ⟶ X'
Y Y' : D
g : Y ⟶ Y'
⊢ F.map (𝟙 X, g) ≫ F.map (f, 𝟙 Y') = F.map (f, g)
state_after: no goals
tactic: rw [← Functor.map_comp, prod_comp, Category.id_comp, Category.comp_id]
Theorem: orthonormal_subtype_range
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
⊢ Orthonormal 𝕜 Subtype.val ↔ Orthonormal 𝕜 v
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
⊢ Orthonormal 𝕜 Subtype.val ↔ Orthonormal 𝕜 v
tactic: let f : ι ≃ Set.range v := Equiv.ofInjective v hv
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
⊢ Orthonormal 𝕜 Subtype.val ↔ Orthonormal 𝕜 v
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 Subtype.val
tactic: refine ⟨fun h => h.comp f f.injective, fun h => ?_⟩
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 Subtype.val
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 (v ∘ ⇑(Equiv.ofInjective v hv).symm)
tactic: rw [← Equiv.self_comp_ofInjective_symm hv]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 (v ∘ ⇑(Equiv.ofInjective v hv).symm)
state_after: no goals
tactic: exact h.comp f.symm f.symm.injective
Theorem: PartialHomeomorph.continuousAt_extend_symm
File: Mathlib/Geometry/Manifold/SmoothManifoldWithCorners.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : PartialHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
s t : Set M
x : M
h : x ∈ f.source
⊢ x ∈ (f.extend I).source
state_after: no goals
tactic: rwa [f.extend_source]
Theorem: EReal.abs_neg
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: x : ℝ
⊢ (-↑x).abs = (↑x).abs
state_after: no goals
tactic: rw [abs_def, ← coe_neg, abs_def, abs_neg]
Theorem: Behrend.threeAPFree_sphere
File: Mathlib/Combinatorics/Additive/AP/Three/Behrend.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
⊢ ThreeAPFree ↑(sphere n d k)
state_after: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
⊢ ThreeAPFree ↑(sphere n d k)
tactic: set f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) :=
    { toFun := fun f => ((↑) : ℕ → ℝ) ∘ f
      map_zero' := funext fun _ => cast_zero
      map_add' := fun _ _ => funext fun _ => cast_add _ _ }
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
⊢ ThreeAPFree ↑(sphere n d k)
state_after: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
⊢ ThreeAPFree (⇑f '' ↑(sphere n d k))
tactic: refine ThreeAPFree.of_image (AddMonoidHomClass.isAddFreimanHom f (Set.mapsTo_image _ _))
    cast_injective.comp_left.injOn (Set.subset_univ _) ?_
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
⊢ ThreeAPFree (⇑f '' ↑(sphere n d k))
state_after: α : Type u_1
β : Type u_2
n d k N : ℕ
x✝ : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
x : Fin n → ℕ
⊢ x ∈ ↑(sphere n d k) → x ∈ ⇑f ⁻¹' Metric.sphere 0 √↑k
tactic: refine (threeAPFree_sphere 0 (√↑k)).mono (Set.image_subset_iff.2 fun x => ?_)
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x✝ : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
x : Fin n → ℕ
⊢ x ∈ ↑(sphere n d k) → x ∈ ⇑f ⁻¹' Metric.sphere 0 √↑k
state_after: α : Type u_1
β : Type u_2
n d k N : ℕ
x✝ : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
x : Fin n → ℕ
⊢ x ∈ ↑(sphere n d k) → ‖f x‖ = √↑k
tactic: rw [Set.mem_preimage, mem_sphere_zero_iff_norm]
state_before: α : Type u_1
β : Type u_2
n d k N : ℕ
x✝ : Fin n → ℕ
f : (Fin n → ℕ) →+ EuclideanSpace ℝ (Fin n) := { toFun := fun f => Nat.cast ∘ f, map_zero' := ⋯, map_add' := ⋯ }
x : Fin n → ℕ
⊢ x ∈ ↑(sphere n d k) → ‖f x‖ = √↑k
state_after: no goals
tactic: exact norm_of_mem_sphere
Theorem: Ideal.isMaximal_iff_isMaximal_disjoint
File: Mathlib/RingTheory/Jacobson.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
y : R
inst✝¹ : Algebra R S
inst✝ : Away y S
H : IsJacobson R
J : Ideal S
⊢ J.IsMaximal ↔ (comap (algebraMap R S) J).IsMaximal ∧ y ∉ comap (algebraMap R S) J
state_after: case mp
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
y : R
inst✝¹ : Algebra R S
inst✝ : Away y S
H : IsJacobson R
J : Ideal S
⊢ J.IsMaximal → (comap (algebraMap R S) J).IsMaximal ∧ y ∉ comap (algebraMap R S) J

case mpr
R : Type u_1
S : Type u_2
inst✝³ : CommRing R
inst✝² : CommRing S
I : Ideal R
y : R
inst✝¹ : Algebra R S
inst✝ : Away y S
H : IsJacobson R
J : Ideal S
⊢ (comap (algebraMap R S) J).IsMaximal ∧ y ∉ comap (algebraMap R S) J → J.IsMaximal
tactic: constructor
Theorem: TopCat.isoOfHomeo_inv
File: Mathlib/Topology/Category/TopCat/Basic.lean

Proof steps:
state_before: X Y : TopCat
f : ↑X ≃ₜ ↑Y
⊢ f.toContinuousMap ≫ f.symm.toContinuousMap = 𝟙 X
state_after: case w
X Y : TopCat
f : ↑X ≃ₜ ↑Y
x✝ : (forget TopCat).obj X
⊢ (f.toContinuousMap ≫ f.symm.toContinuousMap) x✝ = (𝟙 X) x✝
tactic: ext
state_before: case w
X Y : TopCat
f : ↑X ≃ₜ ↑Y
x✝ : (forget TopCat).obj X
⊢ (f.toContinuousMap ≫ f.symm.toContinuousMap) x✝ = (𝟙 X) x✝
state_after: no goals
tactic: exact f.symm_apply_apply _
state_before: X Y : TopCat
f : ↑X ≃ₜ ↑Y
⊢ f.symm.toContinuousMap ≫ f.toContinuousMap = 𝟙 Y
state_after: case w
X Y : TopCat
f : ↑X ≃ₜ ↑Y
x✝ : (forget TopCat).obj Y
⊢ (f.symm.toContinuousMap ≫ f.toContinuousMap) x✝ = (𝟙 Y) x✝
tactic: ext
state_before: case w
X Y : TopCat
f : ↑X ≃ₜ ↑Y
x✝ : (forget TopCat).obj Y
⊢ (f.symm.toContinuousMap ≫ f.toContinuousMap) x✝ = (𝟙 Y) x✝
state_after: no goals
tactic: exact f.apply_symm_apply _
Theorem: padicValNat.padicValNat_eq_maxPowDiv
File: Mathlib/NumberTheory/Padics/PadicVal.lean

Proof steps:
state_before: p : ℕ
⊢ padicValNat = maxPowDiv
state_after: case h.h
p✝ p n : ℕ
⊢ padicValNat p n = p.maxPowDiv n
tactic: ext p n
state_before: case h.h
p✝ p n : ℕ
⊢ padicValNat p n = p.maxPowDiv n
state_after: case pos
p✝ p n : ℕ
h : 1 < p ∧ 0 < n
⊢ padicValNat p n = p.maxPowDiv n

case neg
p✝ p n : ℕ
h : ¬(1 < p ∧ 0 < n)
⊢ padicValNat p n = p.maxPowDiv n
tactic: by_cases h : 1 < p ∧ 0 < n
Theorem: Finset.sum_subtype_of_mem
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝¹ : CommMonoid β
f : α → β
p : α → Prop
inst✝ : DecidablePred p
h : ∀ x ∈ s, p x
⊢ ∏ x ∈ Finset.subtype p s, f ↑x = ∏ x ∈ s, f x
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝¹ : CommMonoid β
f : α → β
p : α → Prop
inst✝ : DecidablePred p
h : ∀ x ∈ s, p x
⊢ ∀ x ∈ s, p x
tactic: rw [prod_subtype_eq_prod_filter, filter_true_of_mem]
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝¹ : CommMonoid β
f : α → β
p : α → Prop
inst✝ : DecidablePred p
h : ∀ x ∈ s, p x
⊢ ∀ x ∈ s, p x
state_after: no goals
tactic: simpa using h
Theorem: CategoryTheory.Pretriangulated.Opposite.rotate_distinguished_triangle
File: Mathlib/CategoryTheory/Triangulated/Opposite.lean

Proof steps:
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : HasShift C ℤ
inst✝³ : HasZeroObject C
inst✝² : Preadditive C
inst✝¹ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝ : Pretriangulated C
T : Triangle Cᵒᵖ
⊢ T ∈ distinguishedTriangles C ↔ T.rotate ∈ distinguishedTriangles C
state_after: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : HasShift C ℤ
inst✝³ : HasZeroObject C
inst✝² : Preadditive C
inst✝¹ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝ : Pretriangulated C
T : Triangle Cᵒᵖ
⊢ Opposite.unop ((triangleOpEquivalence C).inverse.obj T) ∈ Pretriangulated.distinguishedTriangles ↔
    (Opposite.unop ((triangleOpEquivalence C).inverse.obj T.rotate)).rotate ∈ Pretriangulated.distinguishedTriangles
tactic: simp only [mem_distinguishedTriangles_iff, Pretriangulated.rotate_distinguished_triangle
    ((triangleOpEquivalence C).inverse.obj (T.rotate)).unop]
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : HasShift C ℤ
inst✝³ : HasZeroObject C
inst✝² : Preadditive C
inst✝¹ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝ : Pretriangulated C
T : Triangle Cᵒᵖ
⊢ Opposite.unop ((triangleOpEquivalence C).inverse.obj T) ∈ Pretriangulated.distinguishedTriangles ↔
    (Opposite.unop ((triangleOpEquivalence C).inverse.obj T.rotate)).rotate ∈ Pretriangulated.distinguishedTriangles
state_after: no goals
tactic: exact distinguished_iff_of_iso (rotateTriangleOpEquivalenceInverseObjRotateUnopIso T).symm
Theorem: LieIdeal.comap_bracket_incl_of_le
File: Mathlib/Algebra/Lie/IdealOperations.lean

Proof steps:
state_before: R : Type u
L : Type v
L' : Type w₂
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
I₁ I₂ : LieIdeal R L
h₁ : I₁ ≤ I
h₂ : I₂ ≤ I
⊢ ⁅comap I.incl I₁, comap I.incl I₂⁆ = comap I.incl ⁅I₁, I₂⁆
state_after: R : Type u
L : Type v
L' : Type w₂
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
I₁ I₂ : LieIdeal R L
h₁ : I₁ ≤ I
h₂ : I₂ ≤ I
⊢ comap I.incl ⁅I ⊓ I₁, I ⊓ I₂⁆ = comap I.incl ⁅I₁, I₂⁆
tactic: rw [comap_bracket_incl]
state_before: R : Type u
L : Type v
L' : Type w₂
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
I₁ I₂ : LieIdeal R L
h₁ : I₁ ≤ I
h₂ : I₂ ≤ I
⊢ comap I.incl ⁅I ⊓ I₁, I ⊓ I₂⁆ = comap I.incl ⁅I₁, I₂⁆
state_after: R : Type u
L : Type v
L' : Type w₂
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
I₁ I₂ : LieIdeal R L
h₁ : I ⊓ I₁ = I₁
h₂ : I ⊓ I₂ = I₂
⊢ comap I.incl ⁅I ⊓ I₁, I ⊓ I₂⁆ = comap I.incl ⁅I₁, I₂⁆
tactic: rw [← inf_eq_right] at h₁ h₂
state_before: R : Type u
L : Type v
L' : Type w₂
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
f : L →ₗ⁅R⁆ L'
I : LieIdeal R L
J : LieIdeal R L'
I₁ I₂ : LieIdeal R L
h₁ : I ⊓ I₁ = I₁
h₂ : I ⊓ I₂ = I₂
⊢ comap I.incl ⁅I ⊓ I₁, I ⊓ I₂⁆ = comap I.incl ⁅I₁, I₂⁆
state_after: no goals
tactic: rw [h₁, h₂]
Theorem: HasDerivAt.comp_of_eq
File: Mathlib/Analysis/Calculus/Deriv/Comp.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hh₂ : HasDerivAt h₂ h₂' y
hh : HasDerivAt h h' x
hy : y = h x
⊢ HasDerivAt (h₂ ∘ h) (h₂' * h') x
state_after: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hh₂ : HasDerivAt h₂ h₂' (h x)
hh : HasDerivAt h h' x
hy : y = h x
⊢ HasDerivAt (h₂ ∘ h) (h₂' * h') x
tactic: rw [hy] at hh₂
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hh₂ : HasDerivAt h₂ h₂' (h x)
hh : HasDerivAt h h' x
hy : y = h x
⊢ HasDerivAt (h₂ ∘ h) (h₂' * h') x
state_after: no goals
tactic: exact hh₂.comp x hh
Theorem: not_mulDissociated
File: Mathlib/Combinatorics/Additive/Dissociation.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : CommGroup α
inst✝ : CommGroup β
s : Set α
t u : Finset α
d : ℕ
a : α
⊢ ¬MulDissociated s ↔ ∃ t, ↑t ⊆ s ∧ ∃ u, ↑u ⊆ s ∧ t ≠ u ∧ ∏ x ∈ t, x = ∏ x ∈ u, x
state_after: α : Type u_1
β : Type u_2
inst✝¹ : CommGroup α
inst✝ : CommGroup β
s : Set α
t u : Finset α
d : ℕ
a : α
⊢ (∃ x, ↑x ⊆ s ∧ ∃ x_1, ↑x_1 ⊆ s ∧ ∏ x ∈ x, x = ∏ x ∈ x_1, x ∧ ¬x = x_1) ↔
    ∃ t, ↑t ⊆ s ∧ ∃ u, ↑u ⊆ s ∧ ¬t = u ∧ ∏ x ∈ t, x = ∏ x ∈ u, x
tactic: simp [MulDissociated, InjOn]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : CommGroup α
inst✝ : CommGroup β
s : Set α
t u : Finset α
d : ℕ
a : α
⊢ (∃ x, ↑x ⊆ s ∧ ∃ x_1, ↑x_1 ⊆ s ∧ ∏ x ∈ x, x = ∏ x ∈ x_1, x ∧ ¬x = x_1) ↔
    ∃ t, ↑t ⊆ s ∧ ∃ u, ↑u ⊆ s ∧ ¬t = u ∧ ∏ x ∈ t, x = ∏ x ∈ u, x
state_after: no goals
tactic: aesop
Theorem: Associates.factors'_cong
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
⊢ factors' a = factors' b
state_after: case inl
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a : α
h : a ~ᵤ 0
⊢ factors' a = factors' 0

case inr
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
hb : b ≠ 0
⊢ factors' a = factors' b
tactic: obtain rfl | hb := eq_or_ne b 0
state_before: case inr
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
hb : b ≠ 0
⊢ factors' a = factors' b
state_after: case inr
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
hb : b ≠ 0
ha : a ≠ 0
⊢ factors' a = factors' b
tactic: have ha : a ≠ 0 := by
    contrapose! hb with ha
    rw [← associated_zero_iff_eq_zero, ← ha]
    exact h.symm
state_before: case inr
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
hb : b ≠ 0
ha : a ≠ 0
⊢ factors' a = factors' b
state_after: case inr
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
hb : b ≠ 0
ha : a ≠ 0
⊢ Rel Associated (factors a) (factors b)
tactic: rw [← Multiset.map_eq_map Subtype.coe_injective, map_subtype_coe_factors',
    map_subtype_coe_factors', ← rel_associated_iff_map_eq_map]
state_before: case inr
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a b : α
h : a ~ᵤ b
hb : b ≠ 0
ha : a ≠ 0
⊢ Rel Associated (factors a) (factors b)
state_after: no goals
tactic: exact
    factors_unique irreducible_of_factor irreducible_of_factor
      ((factors_prod ha).trans <| h.trans <| (factors_prod hb).symm)
Theorem: FundamentalGroupoidFunctor.piToPiTop_map
File: Mathlib/AlgebraicTopology/FundamentalGroupoid/Product.lean

Proof steps:
state_before: I : Type u
X : I → TopCat
x : (i : I) → ↑(π.obj (X i))
⊢ { obj := fun g => { as := fun i => (g i).as }, map := fun {X_1 Y} p => Path.Homotopic.pi p }.map (𝟙 x) =
    𝟙 ({ obj := fun g => { as := fun i => (g i).as }, map := fun {X_1 Y} p => Path.Homotopic.pi p }.obj x)
state_after: I : Type u
X : I → TopCat
x : (i : I) → ↑(π.obj (X i))
⊢ (Path.Homotopic.pi fun i => ⟦Path.refl (x i).as⟧) =
    𝟙 ({ obj := fun g => { as := fun i => (g i).as }, map := fun {X_1 Y} p => Path.Homotopic.pi p }.obj x)
tactic: change (Path.Homotopic.pi fun i => ⟦_⟧) = _
state_before: I : Type u
X : I → TopCat
x : (i : I) → ↑(π.obj (X i))
⊢ (Path.Homotopic.pi fun i => ⟦Path.refl (x i).as⟧) =
    𝟙 ({ obj := fun g => { as := fun i => (g i).as }, map := fun {X_1 Y} p => Path.Homotopic.pi p }.obj x)
state_after: I : Type u
X : I → TopCat
x : (i : I) → ↑(π.obj (X i))
⊢ ⟦Path.pi fun i => Path.refl (x i).as⟧ = 𝟙 { as := fun i => (x i).as }
tactic: simp only [FundamentalGroupoid.id_eq_path_refl, Path.Homotopic.pi_lift]
state_before: I : Type u
X : I → TopCat
x : (i : I) → ↑(π.obj (X i))
⊢ ⟦Path.pi fun i => Path.refl (x i).as⟧ = 𝟙 { as := fun i => (x i).as }
state_after: no goals
tactic: rfl
Theorem: Even.sub_odd
File: Mathlib/Algebra/Ring/Parity.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : Ring α
a b : α
n : ℕ
ha : Even a
hb : Odd b
⊢ Odd (a - b)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : Ring α
a b : α
n : ℕ
ha : Even a
hb : Odd b
⊢ Odd (a + -b)
tactic: rw [sub_eq_add_neg]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : Ring α
a b : α
n : ℕ
ha : Even a
hb : Odd b
⊢ Odd (a + -b)
state_after: no goals
tactic: exact ha.add_odd hb.neg
Theorem: Matroid.Indep.basis_setOf_insert_basis
File: Mathlib/Data/Matroid/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
B I J X Y : Set α
e : α
hI : M.Indep I
⊢ M.Basis I {x | M.Basis I (insert x I)}
state_after: case refine_1
α : Type u_1
M : Matroid α
B I J X Y : Set α
e✝ : α
hI : M.Indep I
e : α
he : e ∈ I
⊢ M.Basis I (insert e I)

case refine_2
α : Type u_1
M : Matroid α
B I J X Y : Set α
e✝ : α
hI : M.Indep I
e : α
he : e ∈ {x | M.Basis I (insert x I)} \ I
hu : M.Indep (insert e I)
⊢ e ∈ I
tactic: refine hI.basis_of_forall_insert (fun e he ↦ (?_ : M.Basis _ _))
    (fun e he ↦ ⟨fun hu ↦ he.2 ?_, he.1.subset_ground⟩)
state_before: case refine_2
α : Type u_1
M : Matroid α
B I J X Y : Set α
e✝ : α
hI : M.Indep I
e : α
he : e ∈ {x | M.Basis I (insert x I)} \ I
hu : M.Indep (insert e I)
⊢ e ∈ I
state_after: no goals
tactic: simpa using (hu.eq_of_basis he.1).symm
Theorem: SimpleGraph.Connected.ofBoxProdLeft
File: Mathlib/Combinatorics/SimpleGraph/Prod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
h : (G □ H).Connected
⊢ G.Connected
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
h : (G □ H).Connected
this : Nonempty α
⊢ G.Connected
tactic: haveI := (nonempty_prod.1 h.nonempty).1
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
h : (G □ H).Connected
this : Nonempty α
⊢ G.Connected
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
h : (G □ H).Connected
this✝ : Nonempty α
this : Nonempty β
⊢ G.Connected
tactic: haveI := (nonempty_prod.1 h.nonempty).2
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
h : (G □ H).Connected
this✝ : Nonempty α
this : Nonempty β
⊢ G.Connected
state_after: no goals
tactic: exact ⟨h.preconnected.ofBoxProdLeft⟩
Theorem: Finsupp.some_single_none
File: Mathlib/Data/Finsupp/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
m : M
⊢ (single none m).some = 0
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
m : M
a✝ : α
⊢ (single none m).some a✝ = 0 a✝
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝ : Zero M
m : M
a✝ : α
⊢ (single none m).some a✝ = 0 a✝
state_after: no goals
tactic: simp