ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: IsLinearMap.isLinearMap_smul
File: Mathlib/Algebra/Module/LinearMap/Defs.lean

Proof steps:
state_before: R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
S₃ : Type u_7
T : Type u_8
M✝ : Type u_9
M₁ : Type u_10
M₂ : Type u_11
M₃ : Type u_12
N₁ : Type u_13
N₂ : Type u_14
N₃ : Type u_15
ι : Type u_16
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R✝ M✝
inst✝³ : Module R✝ M₂
R : Type u_17
M : Type u_18
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
c : R
⊢ IsLinearMap R fun z => c • z
state_after: R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
S₃ : Type u_7
T : Type u_8
M✝ : Type u_9
M₁ : Type u_10
M₂ : Type u_11
M₃ : Type u_12
N₁ : Type u_13
N₂ : Type u_14
N₃ : Type u_15
ι : Type u_16
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R✝ M✝
inst✝³ : Module R✝ M₂
R : Type u_17
M : Type u_18
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
c : R
⊢ ∀ (c_1 : R) (x : M), c • c_1 • x = c_1 • c • x
tactic: refine IsLinearMap.mk (smul_add c) ?_
state_before: R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
S₃ : Type u_7
T : Type u_8
M✝ : Type u_9
M₁ : Type u_10
M₂ : Type u_11
M₃ : Type u_12
N₁ : Type u_13
N₂ : Type u_14
N₃ : Type u_15
ι : Type u_16
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R✝ M✝
inst✝³ : Module R✝ M₂
R : Type u_17
M : Type u_18
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
c : R
⊢ ∀ (c_1 : R) (x : M), c • c_1 • x = c_1 • c • x
state_after: R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
S₃ : Type u_7
T : Type u_8
M✝ : Type u_9
M₁ : Type u_10
M₂ : Type u_11
M₃ : Type u_12
N₁ : Type u_13
N₂ : Type u_14
N₃ : Type u_15
ι : Type u_16
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R✝ M✝
inst✝³ : Module R✝ M₂
R : Type u_17
M : Type u_18
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
c c✝ : R
x✝ : M
⊢ c • c✝ • x✝ = c✝ • c • x✝
tactic: intro _ _
state_before: R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
k : Type u_5
S : Type u_6
S₃ : Type u_7
T : Type u_8
M✝ : Type u_9
M₁ : Type u_10
M₂ : Type u_11
M₃ : Type u_12
N₁ : Type u_13
N₂ : Type u_14
N₃ : Type u_15
ι : Type u_16
inst✝⁷ : Semiring R✝
inst✝⁶ : AddCommMonoid M✝
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R✝ M✝
inst✝³ : Module R✝ M₂
R : Type u_17
M : Type u_18
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
c c✝ : R
x✝ : M
⊢ c • c✝ • x✝ = c✝ • c • x✝
state_after: no goals
tactic: simp only [smul_smul, mul_comm]
Theorem: CategoryTheory.Adjunction.toComonad_δ
File: Mathlib/CategoryTheory/Monad/Adjunction.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ (whiskerRight (whiskerLeft R h.unit) L).app X ≫ (R ⋙ L).map ((whiskerRight (whiskerLeft R h.unit) L).app X) =
    (whiskerRight (whiskerLeft R h.unit) L).app X ≫ (whiskerRight (whiskerLeft R h.unit) L).app ((R ⋙ L).obj X)
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X)) ≫ L.map (R.map (L.map (h.unit.app (R.obj X)))) =
    L.map (h.unit.app (R.obj X)) ≫ L.map (h.unit.app (R.obj (L.obj (R.obj X))))
tactic: dsimp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X)) ≫ L.map (R.map (L.map (h.unit.app (R.obj X)))) =
    L.map (h.unit.app (R.obj X)) ≫ L.map (h.unit.app (R.obj (L.obj (R.obj X))))
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X) ≫ R.map (L.map (h.unit.app (R.obj X)))) =
    L.map (h.unit.app (R.obj X)) ≫ L.map (h.unit.app (R.obj (L.obj (R.obj X))))
tactic: rw [← L.map_comp]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X) ≫ R.map (L.map (h.unit.app (R.obj X)))) =
    L.map (h.unit.app (R.obj X)) ≫ L.map (h.unit.app (R.obj (L.obj (R.obj X))))
state_after: no goals
tactic: simp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ (whiskerRight (whiskerLeft R h.unit) L).app X ≫ (R ⋙ L).map (h.counit.app X) = 𝟙 ((R ⋙ L).obj X)
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X)) ≫ L.map (R.map (h.counit.app X)) = 𝟙 (L.obj (R.obj X))
tactic: dsimp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X)) ≫ L.map (R.map (h.counit.app X)) = 𝟙 (L.obj (R.obj X))
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X) ≫ R.map (h.counit.app X)) = 𝟙 (L.obj (R.obj X))
tactic: rw [← L.map_comp]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
L : C ⥤ D
R : D ⥤ C
h : L ⊣ R
X : D
⊢ L.map (h.unit.app (R.obj X) ≫ R.map (h.counit.app X)) = 𝟙 (L.obj (R.obj X))
state_after: no goals
tactic: simp
Theorem: Finset.tprod_subtype
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 a₁ a₂ : α
s : Finset β
f : β → α
⊢ ∏' (x : { x // x ∈ s }), f ↑x = ∏ x ∈ s, f x
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : TopologicalSpace α
f✝ g : β → α
a a₁ a₂ : α
s : Finset β
f : β → α
⊢ ∏' (x : { x // x ∈ s }), f ↑x = ∏ x ∈ s.attach, f ↑x
tactic: rw [← prod_attach]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : CommMonoid α
inst✝ : TopologicalSpace α
f✝ g : β → α
a a₁ a₂ : α
s : Finset β
f : β → α
⊢ ∏' (x : { x // x ∈ s }), f ↑x = ∏ x ∈ s.attach, f ↑x
state_after: no goals
tactic: exact tprod_fintype _
Theorem: Zspan.volume_fundamentalDomain
File: Mathlib/Algebra/Module/Zlattice/Basic.lean

Proof steps:
state_before: E : Type u_1
ι : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
b✝ : Basis ι ℝ E
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : Basis ι ℝ (ι → ℝ)
⊢ volume (fundamentalDomain b) = ENNReal.ofReal |(Matrix.of ⇑b).det|
state_after: E : Type u_1
ι : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
b✝ : Basis ι ℝ E
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : Basis ι ℝ (ι → ℝ)
⊢ ENNReal.ofReal |(Pi.basisFun ℝ ι).det ⇑b| = ENNReal.ofReal |(Matrix.of ⇑b).transpose.det|
tactic: rw [measure_fundamentalDomain b volume (b₀ := Pi.basisFun ℝ ι), fundamentalDomain_pi_basisFun,
    volume_pi, Measure.pi_pi, Real.volume_Ico, sub_zero, ENNReal.ofReal_one, Finset.prod_const_one,
    mul_one, ← Matrix.det_transpose]
state_before: E : Type u_1
ι : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
b✝ : Basis ι ℝ E
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
b : Basis ι ℝ (ι → ℝ)
⊢ ENNReal.ofReal |(Pi.basisFun ℝ ι).det ⇑b| = ENNReal.ofReal |(Matrix.of ⇑b).transpose.det|
state_after: no goals
tactic: rfl
Theorem: IntermediateField.bot_eq_top_of_finrank_adjoin_le_one
File: Mathlib/FieldTheory/Adjoin.lean

Proof steps:
state_before: F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
α : E
S : Set E
K L : IntermediateField F E
inst✝ : FiniteDimensional F E
h : ∀ (x : E), finrank F ↥F⟮x⟯ ≤ 1
⊢ ⊥ = ⊤
state_after: case h
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
α : E
S : Set E
K L : IntermediateField F E
inst✝ : FiniteDimensional F E
h : ∀ (x : E), finrank F ↥F⟮x⟯ ≤ 1
⊢ ∀ (x : E), finrank F ↥F⟮x⟯ = 1
tactic: apply bot_eq_top_of_finrank_adjoin_eq_one
state_before: case h
F : Type u_1
inst✝³ : Field F
E : Type u_2
inst✝² : Field E
inst✝¹ : Algebra F E
α : E
S : Set E
K L : IntermediateField F E
inst✝ : FiniteDimensional F E
h : ∀ (x : E), finrank F ↥F⟮x⟯ ≤ 1
⊢ ∀ (x : E), finrank F ↥F⟮x⟯ = 1
state_after: no goals
tactic: exact fun x => by linarith [h x, show 0 < finrank F F⟮x⟯ from finrank_pos]
Theorem: LieModule.traceForm_apply_lie_apply
File: Mathlib/Algebra/Lie/TraceForm.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : Module.Free R M
inst✝ : Module.Finite R M
x y z : L
⊢ ((traceForm R L M) ⁅x, y⁆) z = ((traceForm R L M) x) ⁅y, z⁆
state_after: case calc_1
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : Module.Free R M
inst✝ : Module.Finite R M
x y z : L
⊢ (trace R M) (φ ⁅x, y⁆ ∘ₗ φ z) = (trace R M) ((φ x * φ y - φ y * φ x) * φ z)

case calc_2
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : Module.Free R M
inst✝ : Module.Finite R M
x y z : L
⊢ (trace R M) ((φ x * φ y - φ y * φ x) * φ z) = (trace R M) (φ x * (φ y * φ z)) - (trace R M) (φ y * (φ x * φ z))

case calc_3
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : Module.Free R M
inst✝ : Module.Finite R M
x y z : L
⊢ (trace R M) (φ x * (φ y * φ z)) - (trace R M) (φ y * (φ x * φ z)) =
    (trace R M) (φ x * (φ y * φ z)) - (trace R M) (φ x * (φ z * φ y))

case calc_4
R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁸ : CommRing R
inst✝⁷ : LieRing L
inst✝⁶ : LieAlgebra R L
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : LieRingModule L M
inst✝² : LieModule R L M
inst✝¹ : Module.Free R M
inst✝ : Module.Finite R M
x y z : L
⊢ (trace R M) (φ x * (φ y * φ z)) - (trace R M) (φ x * (φ z * φ y)) = ((traceForm R L M) x) ⁅y, z⁆
tactic: calc traceForm R L M ⁅x, y⁆ z
      = trace R _ (φ ⁅x, y⁆ ∘ₗ φ z) := by simp only [traceForm_apply_apply]
    _ = trace R _ ((φ x * φ y - φ y * φ x) * φ z) := ?_
    _ = trace R _ (φ x * (φ y * φ z)) - trace R _ (φ y * (φ x * φ z)) := ?_
    _ = trace R _ (φ x * (φ y * φ z)) - trace R _ (φ x * (φ z * φ y)) := ?_
    _ = traceForm R L M x ⁅y, z⁆ := ?_
Theorem: FreeAlgebra.adjoin_range_ι
File: Mathlib/Algebra/FreeAlgebra.lean

Proof steps:
state_before: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
⊢ Algebra.adjoin R (Set.range (ι R)) = ⊤
state_after: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
S : Subalgebra R (FreeAlgebra R X) := Algebra.adjoin R (Set.range (ι R))
⊢ S = ⊤
tactic: set S := Algebra.adjoin R (Set.range (ι R : X → FreeAlgebra R X))
state_before: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
S : Subalgebra R (FreeAlgebra R X) := Algebra.adjoin R (Set.range (ι R))
⊢ S = ⊤
state_after: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
S : Subalgebra R (FreeAlgebra R X) := Algebra.adjoin R (Set.range (ι R))
x : FreeAlgebra R X
hx : x ∈ ⊤
⊢ x ∈ S
tactic: refine top_unique fun x hx => ?_
state_before: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
S : Subalgebra R (FreeAlgebra R X) := Algebra.adjoin R (Set.range (ι R))
x : FreeAlgebra R X
hx : x ∈ ⊤
⊢ x ∈ S
state_after: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
S : Subalgebra R (FreeAlgebra R X) := Algebra.adjoin R (Set.range (ι R))
x : FreeAlgebra R X
⊢ x ∈ S
tactic: clear hx
state_before: R : Type u_1
inst✝ : CommSemiring R
X : Type u_2
S : Subalgebra R (FreeAlgebra R X) := Algebra.adjoin R (Set.range (ι R))
x : FreeAlgebra R X
⊢ x ∈ S
state_after: no goals
tactic: induction x with
  | h_grade0 => exact S.algebraMap_mem _
  | h_add x y hx hy => exact S.add_mem hx hy
  | h_mul x y hx hy => exact S.mul_mem hx hy
  | h_grade1 x => exact Algebra.subset_adjoin (Set.mem_range_self _)
Theorem: hyperoperation_ge_three_one
File: Mathlib/Data/Nat/Hyperoperation.lean

Proof steps:
state_before: n : ℕ
⊢ ∀ (k : ℕ), hyperoperation (n + 3) 1 k = 1
state_after: case zero

⊢ ∀ (k : ℕ), hyperoperation (0 + 3) 1 k = 1

case succ
nn : ℕ
nih : ∀ (k : ℕ), hyperoperation (nn + 3) 1 k = 1
⊢ ∀ (k : ℕ), hyperoperation (nn + 1 + 3) 1 k = 1
tactic: induction' n with nn nih
Theorem: MonoidHom.range_le_ker_iff
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N : Type u_5
P : Type u_6
inst✝² : Group N
inst✝¹ : Group P
K : Subgroup G
M : Type u_7
inst✝ : MulOneClass M
f : G →* G'
g : G' →* G''
⊢ g.comp f = 1 → f.range ≤ g.ker
state_after: case intro
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N : Type u_5
P : Type u_6
inst✝² : Group N
inst✝¹ : Group P
K : Subgroup G
M : Type u_7
inst✝ : MulOneClass M
f : G →* G'
g : G' →* G''
h : g.comp f = 1
y : G
⊢ f y ∈ g.ker
tactic: rintro h _ ⟨y, rfl⟩
state_before: case intro
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N : Type u_5
P : Type u_6
inst✝² : Group N
inst✝¹ : Group P
K : Subgroup G
M : Type u_7
inst✝ : MulOneClass M
f : G →* G'
g : G' →* G''
h : g.comp f = 1
y : G
⊢ f y ∈ g.ker
state_after: no goals
tactic: exact DFunLike.congr_fun h y
Theorem: Nat.disjoint_primeFactors
File: Mathlib/Data/Nat/PrimeFin.lean

Proof steps:
state_before: a b k m n p : ℕ
ha : a ≠ 0
hb : b ≠ 0
⊢ Disjoint a.primeFactors b.primeFactors ↔ a.Coprime b
state_after: no goals
tactic: simp [disjoint_iff_inter_eq_empty, coprime_iff_gcd_eq_one, ← primeFactors_gcd, gcd_ne_zero_left,
    ha, hb]
Theorem: Complex.cos_mul_I
File: Mathlib/Data/Complex/Exponential.lean

Proof steps:
state_before: x y : ℂ
⊢ cos (x * I) = cosh x
state_after: x y : ℂ
⊢ cosh (x * I * I) = cosh x
tactic: rw [← cosh_mul_I]
state_before: x y : ℂ
⊢ cosh (x * I * I) = cosh x
state_after: x y : ℂ
⊢ cosh (x * I ^ 2) = cosh x
tactic: ring_nf
state_before: x y : ℂ
⊢ cosh (x * I ^ 2) = cosh x
state_after: no goals
tactic: simp
Theorem: antivaryOn_neg
File: Mathlib/Algebra/Order/Monovary.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : OrderedCommGroup α
inst✝ : OrderedCommGroup β
s : Set ι
f f₁ f₂ : ι → α
g g₁ g₂ : ι → β
⊢ AntivaryOn f⁻¹ g⁻¹ s ↔ AntivaryOn f g s
state_after: no goals
tactic: simp
Theorem: insert_mem_nhds_iff
File: Mathlib/Topology/ContinuousOn.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : TopologicalSpace α
a : α
s : Set α
⊢ insert a s ∈ 𝓝 a ↔ s ∈ 𝓝[≠] a
state_after: no goals
tactic: simp only [nhdsWithin, mem_inf_principal, mem_compl_iff, mem_singleton_iff, or_iff_not_imp_left,
    insert_def]
Theorem: Stream'.even_cons_cons
File: Mathlib/Data/Stream/Init.lean

Proof steps:
state_before: α : Type u
β : Type v
δ : Type w
a₁ a₂ : α
s : Stream' α
⊢ (a₁ :: a₂ :: s).even = a₁ :: s.even
state_after: α : Type u
β : Type v
δ : Type w
a₁ a₂ : α
s : Stream' α
⊢ corec (fun s => s.head) (fun s => s.tail.tail) (a₁ :: a₂ :: s) =
    a₁ :: corec (fun s => s.head) (fun s => s.tail.tail) s
tactic: unfold even
state_before: α : Type u
β : Type v
δ : Type w
a₁ a₂ : α
s : Stream' α
⊢ corec (fun s => s.head) (fun s => s.tail.tail) (a₁ :: a₂ :: s) =
    a₁ :: corec (fun s => s.head) (fun s => s.tail.tail) s
state_after: α : Type u
β : Type v
δ : Type w
a₁ a₂ : α
s : Stream' α
⊢ (a₁ :: a₂ :: s).head :: corec (fun s => s.head) (fun s => s.tail.tail) (a₁ :: a₂ :: s).tail.tail =
    a₁ :: corec (fun s => s.head) (fun s => s.tail.tail) s
tactic: rw [corec_eq]
state_before: α : Type u
β : Type v
δ : Type w
a₁ a₂ : α
s : Stream' α
⊢ (a₁ :: a₂ :: s).head :: corec (fun s => s.head) (fun s => s.tail.tail) (a₁ :: a₂ :: s).tail.tail =
    a₁ :: corec (fun s => s.head) (fun s => s.tail.tail) s
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Presheaf.coconeOfRepresentable_pt
File: Mathlib/CategoryTheory/Limits/Presheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ (functorToRepresentables P).map f ≫ (fun x => yonedaEquiv.symm (Opposite.unop x).snd) x₂ =
    (fun x => yonedaEquiv.symm (Opposite.unop x).snd) x₁ ≫ ((Functor.const P.Elementsᵒᵖ).obj P).map f
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ yoneda.map (↑f.unop).unop ≫ yonedaEquiv.symm (Opposite.unop x₂).snd = yonedaEquiv.symm (Opposite.unop x₁).snd ≫ 𝟙 P
tactic: dsimp
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ yoneda.map (↑f.unop).unop ≫ yonedaEquiv.symm (Opposite.unop x₂).snd = yonedaEquiv.symm (Opposite.unop x₁).snd ≫ 𝟙 P
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ yoneda.map (↑f.unop).unop ≫ yonedaEquiv.symm (Opposite.unop x₂).snd = yonedaEquiv.symm (Opposite.unop x₁).snd
tactic: rw [comp_id]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ yoneda.map (↑f.unop).unop ≫ yonedaEquiv.symm (Opposite.unop x₂).snd = yonedaEquiv.symm (Opposite.unop x₁).snd
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ yonedaEquiv.symm (P.map (↑f.unop) (Opposite.unop x₂).snd) = yonedaEquiv.symm (Opposite.unop x₁).snd
tactic: erw [← yonedaEquiv_symm_map]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ yonedaEquiv.symm (P.map (↑f.unop) (Opposite.unop x₂).snd) = yonedaEquiv.symm (Opposite.unop x₁).snd
state_after: case h.e_6.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ P.map (↑f.unop) (Opposite.unop x₂).snd = (Opposite.unop x₁).snd
tactic: congr 1
state_before: case h.e_6.h
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
ℰ : Type u₂
inst✝ : Category.{v₁, u₂} ℰ
A : C ⥤ ℰ
P : Cᵒᵖ ⥤ Type v₁
x₁ x₂ : P.Elementsᵒᵖ
f : x₁ ⟶ x₂
⊢ P.map (↑f.unop) (Opposite.unop x₂).snd = (Opposite.unop x₁).snd
state_after: no goals
tactic: rw [f.unop.2]
Theorem: Finset.image_comm
File: Mathlib/Data/Finset/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : DecidableEq β
f✝ g✝ : α → β
s : Finset α
t : Finset β
a : α
b c : β
β' : Type u_4
inst✝¹ : DecidableEq β'
inst✝ : DecidableEq γ
f : β → γ
g : α → β
f' : α → β'
g' : β' → γ
h_comm : ∀ (a : α), f (g a) = g' (f' a)
⊢ image f (image g s) = image g' (image f' s)
state_after: no goals
tactic: simp_rw [image_image, comp, h_comm]
Theorem: Fin.append_cast_right
File: Mathlib/Data/Fin/Tuple/Basic.lean

Proof steps:
state_before: m✝ n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
n m : ℕ
α : Type u_1
xs : Fin n → α
ys : Fin m → α
m' : ℕ
h : m' = m
⊢ n + m' = n + m
state_after: no goals
tactic: rw [h]
state_before: m✝ n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
n m : ℕ
α : Type u_1
xs : Fin n → α
ys : Fin m → α
m' : ℕ
h : m' = m
⊢ append xs (ys ∘ cast h) = append xs ys ∘ cast ⋯
state_after: m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
n : ℕ
α : Type u_1
xs : Fin n → α
m' : ℕ
ys : Fin m' → α
⊢ append xs (ys ∘ cast ⋯) = append xs ys ∘ cast ⋯
tactic: subst h
state_before: m n✝ : ℕ
α✝ : Fin (n✝ + 1) → Type u
x : α✝ 0
q : (i : Fin (n✝ + 1)) → α✝ i
p : (i : Fin n✝) → α✝ i.succ
i : Fin n✝
y : α✝ i.succ
z : α✝ 0
n : ℕ
α : Type u_1
xs : Fin n → α
m' : ℕ
ys : Fin m' → α
⊢ append xs (ys ∘ cast ⋯) = append xs ys ∘ cast ⋯
state_after: no goals
tactic: simp
Theorem: CategoryTheory.Endofunctor.Coalgebra.equivOfNatIso_inverse
File: Mathlib/CategoryTheory/Endofunctor/Algebra.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ C
V V₀ V₁ V₂ : Coalgebra F✝
f : V₀ ⟶ V₁
g : V₁ ⟶ V₂
F G : C ⥤ C
α : F ≅ G
⊢ 𝟙 F = α.hom ≫ α.inv
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ C
V V₀ V₁ V₂ : Coalgebra F✝
f : V₀ ⟶ V₁
g : V₁ ⟶ V₂
F G : C ⥤ C
α : F ≅ G
⊢ α.inv ≫ α.hom = 𝟙 G
state_after: no goals
tactic: simp
Theorem: AdjoinRoot.equiv'_symm_apply
File: Mathlib/RingTheory/AdjoinRoot.lean

Proof steps:
state_before: R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
x : AdjoinRoot g
⊢ (pb.lift (root g) h₁) ((liftHom g pb.gen h₂) x) = x
state_after: case ih
R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
p✝ : R[X]
⊢ (pb.lift (root g) h₁) ((liftHom g pb.gen h₂) ((mk g) p✝)) = (mk g) p✝
tactic: induction x using AdjoinRoot.induction_on
state_before: case ih
R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
p✝ : R[X]
⊢ (pb.lift (root g) h₁) ((liftHom g pb.gen h₂) ((mk g) p✝)) = (mk g) p✝
state_after: no goals
tactic: rw [liftHom_mk, pb.lift_aeval, aeval_eq]
state_before: R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
x : S
⊢ (liftHom g pb.gen h₂) ((pb.lift (root g) h₁) x) = x
state_after: R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
x : S
a✝ : Nontrivial S
⊢ (liftHom g pb.gen h₂) ((pb.lift (root g) h₁) x) = x
tactic: nontriviality S
state_before: R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
x : S
a✝ : Nontrivial S
⊢ (liftHom g pb.gen h₂) ((pb.lift (root g) h₁) x) = x
state_after: case intro.intro
R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
a✝ : Nontrivial S
f : R[X]
_hf : f.natDegree < pb.dim
⊢ (liftHom g pb.gen h₂) ((pb.lift (root g) h₁) ((aeval pb.gen) f)) = (aeval pb.gen) f
tactic: obtain ⟨f, _hf, rfl⟩ := pb.exists_eq_aeval x
state_before: case intro.intro
R : Type u
S : Type v
K : Type w
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : Algebra R S
g : R[X]
pb : PowerBasis R S
h₁ : (aeval (root g)) (minpoly R pb.gen) = 0
h₂ : (aeval pb.gen) g = 0
a✝ : Nontrivial S
f : R[X]
_hf : f.natDegree < pb.dim
⊢ (liftHom g pb.gen h₂) ((pb.lift (root g) h₁) ((aeval pb.gen) f)) = (aeval pb.gen) f
state_after: no goals
tactic: rw [pb.lift_aeval, aeval_eq, liftHom_mk]