ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Sequential.isoOfHomeo_hom
File: Mathlib/Topology/Category/Sequential.lean

Proof steps:
state_before: X✝ : Type u
inst✝¹ : TopologicalSpace X✝
inst✝ : SequentialSpace X✝
X Y : Sequential
f : ↑X.toTop ≃ₜ ↑Y.toTop
⊢ { toFun := ⇑f, continuous_toFun := ⋯ } ≫ { toFun := ⇑f.symm, continuous_toFun := ⋯ } = 𝟙 X
state_after: case w
X✝ : Type u
inst✝¹ : TopologicalSpace X✝
inst✝ : SequentialSpace X✝
X Y : Sequential
f : ↑X.toTop ≃ₜ ↑Y.toTop
x : (forget Sequential).obj X
⊢ ({ toFun := ⇑f, continuous_toFun := ⋯ } ≫ { toFun := ⇑f.symm, continuous_toFun := ⋯ }) x = (𝟙 X) x
tactic: ext x
state_before: case w
X✝ : Type u
inst✝¹ : TopologicalSpace X✝
inst✝ : SequentialSpace X✝
X Y : Sequential
f : ↑X.toTop ≃ₜ ↑Y.toTop
x : (forget Sequential).obj X
⊢ ({ toFun := ⇑f, continuous_toFun := ⋯ } ≫ { toFun := ⇑f.symm, continuous_toFun := ⋯ }) x = (𝟙 X) x
state_after: no goals
tactic: exact f.symm_apply_apply x
state_before: X✝ : Type u
inst✝¹ : TopologicalSpace X✝
inst✝ : SequentialSpace X✝
X Y : Sequential
f : ↑X.toTop ≃ₜ ↑Y.toTop
⊢ { toFun := ⇑f.symm, continuous_toFun := ⋯ } ≫ { toFun := ⇑f, continuous_toFun := ⋯ } = 𝟙 Y
state_after: case w
X✝ : Type u
inst✝¹ : TopologicalSpace X✝
inst✝ : SequentialSpace X✝
X Y : Sequential
f : ↑X.toTop ≃ₜ ↑Y.toTop
x : (forget Sequential).obj Y
⊢ ({ toFun := ⇑f.symm, continuous_toFun := ⋯ } ≫ { toFun := ⇑f, continuous_toFun := ⋯ }) x = (𝟙 Y) x
tactic: ext x
state_before: case w
X✝ : Type u
inst✝¹ : TopologicalSpace X✝
inst✝ : SequentialSpace X✝
X Y : Sequential
f : ↑X.toTop ≃ₜ ↑Y.toTop
x : (forget Sequential).obj Y
⊢ ({ toFun := ⇑f.symm, continuous_toFun := ⋯ } ≫ { toFun := ⇑f, continuous_toFun := ⋯ }) x = (𝟙 Y) x
state_after: no goals
tactic: exact f.apply_symm_apply x
Theorem: CategoryTheory.Limits.MonoFactorisation.ofArrowIso_I
File: Mathlib/CategoryTheory/Limits/Shapes/Images.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y : C
f✝ : X ⟶ Y
f g : Arrow C
F : MonoFactorisation f.hom
sq : f ⟶ g
inst✝ : IsIso sq
⊢ (inv sq.left ≫ F.e) ≫ F.m ≫ sq.right = g.hom
state_after: no goals
tactic: simp only [fac_assoc, Arrow.w, IsIso.inv_comp_eq, Category.assoc]
Theorem: HomologicalComplex.pOpcycles_opcyclesToCycles_iCycles
File: Mathlib/Algebra/Homology/HomologySequence.lean

Proof steps:
state_before: C : Type u_1
ι : Type u_2
inst✝⁵ : Category.{u_3, u_1} C
inst✝⁴ : HasZeroMorphisms C
c : ComplexShape ι
K L : HomologicalComplex C c
φ : K ⟶ L
i j : ι
inst✝³ : K.HasHomology i
inst✝² : K.HasHomology j
inst✝¹ : L.HasHomology i
inst✝ : L.HasHomology j
⊢ K.pOpcycles i ≫ K.opcyclesToCycles i j ≫ K.iCycles j = K.d i j
state_after: no goals
tactic: simp [opcyclesToCycles]
Theorem: SimpleGraph.map_symm
File: Mathlib/Combinatorics/SimpleGraph/Maps.lean

Proof steps:
state_before: V : Type u_1
W : Type u_2
X : Type u_3
G✝ : SimpleGraph V
G' : SimpleGraph W
u v : V
G : SimpleGraph W
e : V ≃ W
⊢ SimpleGraph.map e.symm.toEmbedding G = SimpleGraph.comap (⇑e.toEmbedding) G
state_after: no goals
tactic: rw [← comap_symm, e.symm_symm]
Theorem: MeasureTheory.Measure.ext_iff
File: Mathlib/MeasureTheory/Measure/MeasureSpaceDef.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
inst✝ : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
⊢ μ₁ = μ₂ → ∀ (s : Set α), MeasurableSet s → μ₁ s = μ₂ s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
inst✝ : MeasurableSpace α
μ μ₁ : Measure α
s✝ s₁ s₂ t s : Set α
_hs : MeasurableSet s
⊢ μ₁ s = μ₁ s
tactic: rintro rfl s _hs
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
inst✝ : MeasurableSpace α
μ μ₁ : Measure α
s✝ s₁ s₂ t s : Set α
_hs : MeasurableSet s
⊢ μ₁ s = μ₁ s
state_after: no goals
tactic: rfl
Theorem: Cardinal.iSup_lt_of_isRegular
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
ι : Type u_2
f : ι → Cardinal.{u_2}
c : Cardinal.{u_2}
hc : c.IsRegular
hι : #ι < c
⊢ #ι < c.ord.cof
state_after: no goals
tactic: rwa [hc.cof_eq]
Theorem: PartialHomeomorph.isOpen_symm_image_iff_of_subset_target
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
t : Set Y
hs : t ⊆ e.target
⊢ IsOpen (↑e.symm '' t) ↔ IsOpen t
state_after: 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
t : Set Y
hs : t ⊆ e.target
h : IsOpen (↑e.symm '' t)
⊢ IsOpen t
tactic: refine ⟨fun h ↦ ?_, fun h ↦ e.symm.isOpen_image_of_subset_source h hs⟩
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
t : Set Y
hs : t ⊆ e.target
h : IsOpen (↑e.symm '' t)
⊢ IsOpen t
state_after: 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
t : Set Y
hs : t ⊆ e.target
h : IsOpen (↑e.symm '' t)
hs' : ↑e.symm '' t ⊆ e.source
⊢ IsOpen t
tactic: have hs' : e.symm '' t ⊆ e.source := by
    rw [e.symm_image_eq_source_inter_preimage hs]
    apply Set.inter_subset_left
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
t : Set Y
hs : t ⊆ e.target
h : IsOpen (↑e.symm '' t)
hs' : ↑e.symm '' t ⊆ e.source
⊢ IsOpen t
state_after: 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
t : Set Y
hs : t ⊆ e.target
h : IsOpen (↑e.symm '' t)
hs' : ↑e.symm '' t ⊆ e.source
⊢ IsOpen (↑e.toPartialEquiv '' (↑e.symm '' t))
tactic: rw [← e.image_symm_image_of_subset_target hs]
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
t : Set Y
hs : t ⊆ e.target
h : IsOpen (↑e.symm '' t)
hs' : ↑e.symm '' t ⊆ e.source
⊢ IsOpen (↑e.toPartialEquiv '' (↑e.symm '' t))
state_after: no goals
tactic: exact e.isOpen_image_of_subset_source h hs'
Theorem: CategoryTheory.MonoidalPreadditive.tensor_zero
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

Proof steps:
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : MonoidalCategory C
inst✝ : MonoidalPreadditive C
W X Y Z : C
f : W ⟶ X
⊢ f ⊗ 0 = 0
state_after: no goals
tactic: simp [tensorHom_def]
Theorem: IsUltrametricDist.isClosed_ball
File: Mathlib/Topology/MetricSpace/Ultra/Basic.lean

Proof steps:
state_before: X : Type u_1
inst✝¹ : PseudoMetricSpace X
inst✝ : IsUltrametricDist X
x✝ y z : X
r✝ s : ℝ
x : X
r : ℝ
⊢ IsClosed (ball x r)
state_after: no goals
tactic: cases le_or_lt r 0 with
  | inl hr =>
    simp [ball_eq_empty.mpr hr]
  | inr h =>
    rw [← isOpen_compl_iff, isOpen_iff]
    simp only [Set.mem_compl_iff, not_lt, gt_iff_lt]
    intro y hy
    cases ball_eq_or_disjoint x y r with
    | inl hd =>
      rw [hd] at hy
      simp [h.not_le] at hy
    | inr hd =>
      use r
      simp [h, hy, ← Set.le_iff_subset, le_compl_iff_disjoint_left, hd]
Theorem: Subsemiring.map_comap_eq_self_of_surjective
File: Mathlib/Algebra/Ring/Subsemiring/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
inst✝² : NonAssocSemiring R
M : Submonoid R
inst✝¹ : NonAssocSemiring S
inst✝ : NonAssocSemiring T
f : R →+* S
hf : Function.Surjective ⇑f
t : Subsemiring S
⊢ t ≤ f.rangeS
state_after: no goals
tactic: simp [hf]
Theorem: List.reverse_concat'
File: Mathlib/Data/List/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
a : α
⊢ (l ++ [a]).reverse = a :: l.reverse
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
a : α
⊢ [a].reverse ++ l.reverse = a :: l.reverse
tactic: rw [reverse_append]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
a : α
⊢ [a].reverse ++ l.reverse = a :: l.reverse
state_after: no goals
tactic: rfl
Theorem: map_extChartAt_nhdsWithin'
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
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).source
state_after: no goals
tactic: rwa [← extChartAt_source I]
Theorem: RingHom.map_geom_sum
File: Mathlib/Algebra/GeomSum.lean

Proof steps:
state_before: α : Type u
β : Type u_1
inst✝¹ : Semiring α
inst✝ : Semiring β
x : α
n : ℕ
f : α →+* β
⊢ f (∑ i ∈ range n, x ^ i) = ∑ i ∈ range n, f x ^ i
state_after: no goals
tactic: simp [map_sum f]
Theorem: RCLike.hasSum_ofReal
File: Mathlib/Analysis/Complex/Basic.lean

Proof steps:
state_before: α : Type u_1
𝕜 : Type u_2
inst✝ : RCLike 𝕜
f : α → ℝ
x : ℝ
h : HasSum (fun x => ↑(f x)) ↑x
⊢ HasSum f x
state_after: no goals
tactic: simpa only [RCLike.reCLM_apply, RCLike.ofReal_re] using reCLM.hasSum h
Theorem: Equiv.pointReflection_vsub_right
File: Mathlib/Algebra/AddTorsor.lean

Proof steps:
state_before: G : Type u_1
P : Type u_2
inst✝¹ : AddGroup G
inst✝ : AddTorsor G P
x y : P
⊢ (pointReflection x) y -ᵥ y = 2 • (x -ᵥ y)
state_after: no goals
tactic: simp [pointReflection, two_nsmul, vadd_vsub_assoc]
Theorem: RingHom.map_matrix_mul
File: Mathlib/Data/Matrix/Basic.lean

Proof steps:
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
m' : o → Type u_5
n' : o → Type u_6
R : Type u_7
S : Type u_8
α : Type v
β : Type w
γ : Type u_9
inst✝² : Fintype n
inst✝¹ : NonAssocSemiring α
inst✝ : NonAssocSemiring β
M : Matrix m n α
N : Matrix n o α
i : m
j : o
f : α →+* β
⊢ f ((M * N) i j) = (M.map ⇑f * N.map ⇑f) i j
state_after: no goals
tactic: simp [Matrix.mul_apply, map_sum]
Theorem: Real.summable_abs_int_rpow
File: Mathlib/Analysis/PSeries.lean

Proof steps:
state_before: b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑n| ^ (-b)
state_after: case hf₁
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑↑n| ^ (-b)

case hf₂
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑(-↑n)| ^ (-b)
tactic: apply Summable.of_nat_of_neg
state_before: case hf₁
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑↑n| ^ (-b)

case hf₂
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑(-↑n)| ^ (-b)
state_after: case hf₁
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑↑n| ^ (-b)

case hf₂
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑↑n| ^ (-b)
tactic: on_goal 2 => simp_rw [Int.cast_neg, abs_neg]
state_before: case hf₁
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑↑n| ^ (-b)

case hf₂
b : ℝ
hb : 1 < b
⊢ Summable fun n => |↑↑n| ^ (-b)
state_after: no goals
tactic: all_goals
    simp_rw [Int.cast_natCast, fun n : ℕ => abs_of_nonneg (n.cast_nonneg : 0 ≤ (n : ℝ))]
    rwa [summable_nat_rpow, neg_lt_neg_iff]
Theorem: CategoryTheory.IsFiltered.of_cocone_nonempty
File: Mathlib/CategoryTheory/Filtered/Basic.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
h : ∀ {J : Type w} [inst : SmallCategory J] [inst_1 : FinCategory J] (F : J ⥤ C), Nonempty (Cocone F)
⊢ IsFiltered C
state_after: C : Type u
inst✝ : Category.{v, u} C
h : ∀ {J : Type w} [inst : SmallCategory J] [inst_1 : FinCategory J] (F : J ⥤ C), Nonempty (Cocone F)
this : Nonempty C
⊢ IsFiltered C
tactic: have : Nonempty C := by
    obtain ⟨c⟩ := h (Functor.empty _)
    exact ⟨c.pt⟩
state_before: C : Type u
inst✝ : Category.{v, u} C
h : ∀ {J : Type w} [inst : SmallCategory J] [inst_1 : FinCategory J] (F : J ⥤ C), Nonempty (Cocone F)
this✝ : Nonempty C
this : IsFilteredOrEmpty C
⊢ IsFiltered C
state_after: no goals
tactic: apply IsFiltered.mk
Theorem: Polynomial.eq_zero_of_dvd_of_natDegree_lt
File: Mathlib/Algebra/Polynomial/RingDivision.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h₁ : p ∣ q
h₂ : q.natDegree < p.natDegree
⊢ q = 0
state_after: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h₁ : p ∣ q
h₂ : q.natDegree < p.natDegree
hc : ¬q = 0
⊢ False
tactic: by_contra hc
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h₁ : p ∣ q
h₂ : q.natDegree < p.natDegree
hc : ¬q = 0
⊢ False
state_after: no goals
tactic: exact (lt_iff_not_ge _ _).mp h₂ (natDegree_le_of_dvd h₁ hc)
Theorem: Con.inv
File: Mathlib/GroupTheory/Congruence/Basic.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Group M
inst✝¹ : Group N
inst✝ : Group P
c : Con M
x✝ y : M
h : c x✝ y
x : M
⊢ c (x⁻¹ * x) 1
state_after: no goals
tactic: simp only [mul_left_inv, c.refl 1]
Theorem: RelEmbedding.exists_not_acc_lt_of_not_acc
File: Mathlib/Order/OrderIsoNat.lean

Proof steps:
state_before: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ¬Acc r a
⊢ ∃ b, ¬Acc r b ∧ r b a
state_after: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ∀ (b : α), ¬Acc r b → ¬r b a
⊢ Acc r a
tactic: contrapose! h
state_before: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ∀ (b : α), ¬Acc r b → ¬r b a
⊢ Acc r a
state_after: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ∀ (b : α), ¬Acc r b → ¬r b a
b : α
hr : r b a
⊢ Acc r b
tactic: refine ⟨_, fun b hr => ?_⟩
state_before: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ∀ (b : α), ¬Acc r b → ¬r b a
b : α
hr : r b a
⊢ Acc r b
state_after: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ∀ (b : α), ¬Acc r b → ¬r b a
b : α
hr : r b a
hb : ¬Acc r b
⊢ False
tactic: by_contra hb
state_before: α : Type u_1
r✝ : α → α → Prop
inst✝ : IsStrictOrder α r✝
a : α
r : α → α → Prop
h : ∀ (b : α), ¬Acc r b → ¬r b a
b : α
hr : r b a
hb : ¬Acc r b
⊢ False
state_after: no goals
tactic: exact h b hb hr
Theorem: AlgebraicGeometry.Scheme.Opens.ι_app_self
File: Mathlib/AlgebraicGeometry/Restrict.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X : Scheme
U : X.Opens
⊢ U.ι ''ᵁ unop (op (U.ι ⁻¹ᵁ U)) = U
state_after: no goals
tactic: simp
Theorem: RCLike.one_re
File: Mathlib/Analysis/RCLike/Basic.lean

Proof steps:
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
⊢ re 1 = 1
state_after: no goals
tactic: rw [← ofReal_one, ofReal_re]
Theorem: FreeAbelianGroup.lift_comp
File: Mathlib/GroupTheory/FreeAbelianGroup.lean

Proof steps:
state_before: α✝ : Type u
β✝ : Type v
γ✝ : Type w
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : AddCommGroup γ
f : α → β
g : β → γ
x : FreeAbelianGroup α
⊢ (lift (g ∘ f)) x = (lift g) ((map f) x)
state_after: case C0
α✝ : Type u
β✝ : Type v
γ✝ : Type w
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : AddCommGroup γ
f : α → β
g : β → γ
x : FreeAbelianGroup α
⊢ (lift (g ∘ f)) 0 = (lift g) ((map f) 0)

case C1
α✝ : Type u
β✝ : Type v
γ✝ : Type w
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : AddCommGroup γ
f : α → β
g : β → γ
x : FreeAbelianGroup α
⊢ ∀ (x : α), (lift (g ∘ f)) (of x) = (lift g) ((map f) (of x))

case Cn
α✝ : Type u
β✝ : Type v
γ✝ : Type w
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : AddCommGroup γ
f : α → β
g : β → γ
x : FreeAbelianGroup α
⊢ ∀ (x : α), (lift (g ∘ f)) (of x) = (lift g) ((map f) (of x)) → (lift (g ∘ f)) (-of x) = (lift g) ((map f) (-of x))

case Cp
α✝ : Type u
β✝ : Type v
γ✝ : Type w
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : AddCommGroup γ
f : α → β
g : β → γ
x : FreeAbelianGroup α
⊢ ∀ (x y : FreeAbelianGroup α),
    (lift (g ∘ f)) x = (lift g) ((map f) x) →
      (lift (g ∘ f)) y = (lift g) ((map f) y) → (lift (g ∘ f)) (x + y) = (lift g) ((map f) (x + y))
tactic: apply FreeAbelianGroup.induction_on (C := fun x ↦ lift (g ∘ f) x = lift g (map f x)) x
Theorem: AddSubmonoid.LocalizationMap.mk'_spec
File: Mathlib/GroupTheory/MonoidLocalization/Basic.lean

Proof steps:
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
x : M
y : ↥S
⊢ f.toMap x * ↑((IsUnit.liftRight (f.toMap.restrict S) ⋯) y)⁻¹ * f.toMap ↑y = f.toMap x
state_after: no goals
tactic: rw [mul_assoc, mul_comm _ (f.toMap y), ← mul_assoc, mul_inv_left, mul_comm]
Theorem: Finset.sum_apply_dite
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 β
s : Finset α
p : α → Prop
hp : DecidablePred p
inst✝ : DecidablePred fun x => ¬p x
f : (x : α) → p x → γ
g : (x : α) → ¬p x → γ
h : γ → β
x : { x // x ∈ filter p s }
⊢ p ↑x
state_after: no goals
tactic: simpa using (mem_filter.mp x.2).2
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 β
s : Finset α
p : α → Prop
hp : DecidablePred p
inst✝ : DecidablePred fun x => ¬p x
f : (x : α) → p x → γ
g : (x : α) → ¬p x → γ
h : γ → β
x : { x // x ∈ filter (fun x => ¬p x) s }
⊢ ¬p ↑x
state_after: no goals
tactic: simpa using (mem_filter.mp x.2).2
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 β
s : Finset α
p : α → Prop
hp : DecidablePred p
inst✝ : DecidablePred fun x => ¬p x
f : (x : α) → p x → γ
g : (x : α) → ¬p x → γ
h : γ → β
x : { x // x ∈ filter p s }
⊢ p ↑x
state_after: no goals
tactic: simpa using (mem_filter.mp x.2).2
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 β
s : Finset α
p : α → Prop
hp : DecidablePred p
inst✝ : DecidablePred fun x => ¬p x
f : (x : α) → p x → γ
g : (x : α) → ¬p x → γ
h : γ → β
x : { x // x ∈ filter (fun x => ¬p x) s }
⊢ ¬p ↑x
state_after: no goals
tactic: simpa using (mem_filter.mp x.2).2
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 β
s : Finset α
p : α → Prop
hp : DecidablePred p
inst✝ : DecidablePred fun x => ¬p x
f : (x : α) → p x → γ
g : (x : α) → ¬p x → γ
h : γ → β
x : { x // x ∈ filter p s }
_hx : x ∈ (filter p s).attach
⊢ p ↑x
state_after: no goals
tactic: simpa using (mem_filter.mp x.2).2
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 β
s : Finset α
p : α → Prop
hp : DecidablePred p
inst✝ : DecidablePred fun x => ¬p x
f : (x : α) → p x → γ
g : (x : α) → ¬p x → γ
h : γ → β
x : { x // x ∈ filter (fun x => ¬p x) s }
_hx : x ∈ (filter (fun x => ¬p x) s).attach
⊢ ¬p ↑x
state_after: no goals
tactic: simpa using (mem_filter.mp x.2).2
Theorem: Set.Countable.biUnion_iff
File: Mathlib/Data/Set/Countable.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
t : (a : α) → a ∈ s → Set β
hs : s.Countable
⊢ (⋃ a, ⋃ (h : a ∈ s), t a h).Countable ↔ ∀ (a : α) (ha : a ∈ s), (t a ha).Countable
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
t : (a : α) → a ∈ s → Set β
hs : s.Countable
this : Countable ↑s
⊢ (⋃ a, ⋃ (h : a ∈ s), t a h).Countable ↔ ∀ (a : α) (ha : a ∈ s), (t a ha).Countable
tactic: have := hs.to_subtype
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
t : (a : α) → a ∈ s → Set β
hs : s.Countable
this : Countable ↑s
⊢ (⋃ a, ⋃ (h : a ∈ s), t a h).Countable ↔ ∀ (a : α) (ha : a ∈ s), (t a ha).Countable
state_after: no goals
tactic: rw [biUnion_eq_iUnion, countable_iUnion_iff, SetCoe.forall']
Theorem: AddSubgroup.fg_iff_mul_fg
File: Mathlib/GroupTheory/Finiteness.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
inst✝³ : Monoid M
inst✝² : AddMonoid N
G : Type u_3
H : Type u_4
inst✝¹ : Group G
inst✝ : AddGroup H
P : AddSubgroup H
⊢ P.FG ↔ (toSubgroup P).FG
state_after: no goals
tactic: exact AddSubmonoid.fg_iff_mul_fg (AddSubgroup.toAddSubmonoid P)
Theorem: Polynomial.Monic.comp_X_sub_C
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]
hp : p.Monic
r : R
⊢ (p.comp (X - C r)).Monic
state_after: no goals
tactic: simpa using hp.comp_X_add_C (-r)
Theorem: SimpleGraph.CliqueFree.replaceVertex
File: Mathlib/Combinatorics/SimpleGraph/Clique.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
h : G.CliqueFree n
s t : α
⊢ (G.replaceVertex s t).CliqueFree n
state_after: α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
⊢ ¬G.CliqueFree n
tactic: contrapose h
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
⊢ ¬G.CliqueFree n
state_after: case mk
α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
φ : Fin n ↪ α
hφ : ∀ {a b : Fin n}, (G.replaceVertex s t).Adj (φ a) (φ b) ↔ ⊤.Adj a b
⊢ ¬G.CliqueFree n
tactic: obtain ⟨φ, hφ⟩ := topEmbeddingOfNotCliqueFree h
state_before: case mk
α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
φ : Fin n ↪ α
hφ : ∀ {a b : Fin n}, (G.replaceVertex s t).Adj (φ a) (φ b) ↔ ⊤.Adj a b
⊢ ¬G.CliqueFree n
state_after: case mk
α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
φ : Fin n ↪ α
hφ : ∀ {a b : Fin n}, (G.replaceVertex s t).Adj (φ a) (φ b) ↔ ⊤.Adj a b
⊢ Nonempty (⊤ ↪g G)
tactic: rw [not_cliqueFree_iff]
state_before: case mk
α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
φ : Fin n ↪ α
hφ : ∀ {a b : Fin n}, (G.replaceVertex s t).Adj (φ a) (φ b) ↔ ⊤.Adj a b
⊢ Nonempty (⊤ ↪g G)
state_after: case pos
α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
φ : Fin n ↪ α
hφ : ∀ {a b : Fin n}, (G.replaceVertex s t).Adj (φ a) (φ b) ↔ ⊤.Adj a b
mt : t ∈ Set.range ⇑φ
⊢ Nonempty (⊤ ↪g G)

case neg
α : Type u_1
β : Type u_2
G H : SimpleGraph α
m n : ℕ
s✝ : Finset α
inst✝ : DecidableEq α
s t : α
h : ¬(G.replaceVertex s t).CliqueFree n
φ : Fin n ↪ α
hφ : ∀ {a b : Fin n}, (G.replaceVertex s t).Adj (φ a) (φ b) ↔ ⊤.Adj a b
mt : t ∉ Set.range ⇑φ
⊢ Nonempty (⊤ ↪g G)
tactic: by_cases mt : t ∈ Set.range φ