ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Ideal.map.isMaximal
File: Mathlib/RingTheory/Ideal/Maps.lean

Proof steps:
state_before: R : Type u
S : Type v
F : Type u_1
inst✝³ : Ring R
inst✝² : Ring S
inst✝¹ : FunLike F R S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ⇑f
I : Ideal R
H : I.IsMaximal
⊢ (map f I).IsMaximal
state_after: R : Type u
S : Type v
F : Type u_1
inst✝³ : Ring R
inst✝² : Ring S
inst✝¹ : FunLike F R S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ⇑f
I : Ideal R
H : I.IsMaximal
h : map f I = ⊤
⊢ I = ⊤
tactic: refine
    or_iff_not_imp_left.1 (map_eq_top_or_isMaximal_of_surjective f hf.right H) fun h => H.1.1 ?_
state_before: R : Type u
S : Type v
F : Type u_1
inst✝³ : Ring R
inst✝² : Ring S
inst✝¹ : FunLike F R S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ⇑f
I : Ideal R
H : I.IsMaximal
h : map f I = ⊤
⊢ I = ⊤
state_after: no goals
tactic: calc
    I = comap f (map f I) := ((relIsoOfBijective f hf).right_inv I).symm
    _ = comap f ⊤ := by rw [h]
    _ = ⊤ := by rw [comap_top]
Theorem: Equiv.subRight_symm_apply
File: Mathlib/Algebra/Group/Units/Equiv.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M : Type u_6
N : Type u_7
P : Type u_8
Q : Type u_9
G : Type u_10
H : Type u_11
inst✝ : Group G
a b : G
⊢ (fun b => b * a) ((fun b => b / a) b) = b
state_after: no goals
tactic: simp [div_eq_mul_inv]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
A : Type u_4
B : Type u_5
M : Type u_6
N : Type u_7
P : Type u_8
Q : Type u_9
G : Type u_10
H : Type u_11
inst✝ : Group G
a b : G
⊢ (fun b => b / a) ((fun b => b * a) b) = b
state_after: no goals
tactic: simp [div_eq_mul_inv]
Theorem: Matrix.exp_blockDiagonal
File: Mathlib/Analysis/NormedSpace/MatrixExponential.lean

Proof steps:
state_before: 𝕂 : Type u_1
m : Type u_2
n : Type u_3
p : Type u_4
n' : m → Type u_5
𝔸 : Type u_6
inst✝¹¹ : Fintype m
inst✝¹⁰ : DecidableEq m
inst✝⁹ : Fintype n
inst✝⁸ : DecidableEq n
inst✝⁷ : (i : m) → Fintype (n' i)
inst✝⁶ : (i : m) → DecidableEq (n' i)
inst✝⁵ : Field 𝕂
inst✝⁴ : Ring 𝔸
inst✝³ : TopologicalSpace 𝔸
inst✝² : TopologicalRing 𝔸
inst✝¹ : Algebra 𝕂 𝔸
inst✝ : T2Space 𝔸
v : m → Matrix n n 𝔸
⊢ exp 𝕂 (blockDiagonal v) = blockDiagonal (exp 𝕂 v)
state_after: no goals
tactic: simp_rw [exp_eq_tsum, ← blockDiagonal_pow, ← blockDiagonal_smul, ← blockDiagonal_tsum]
Theorem: negSucc_zsmul
File: Mathlib/Algebra/Group/Defs.lean

Proof steps:
state_before: G✝ : Type u_1
inst✝¹ : DivInvMonoid G✝
a✝ b : G✝
G : Type u_2
inst✝ : SubNegMonoid G
a : G
n : ℕ
⊢ Int.negSucc n • a = -((n + 1) • a)
state_after: G✝ : Type u_1
inst✝¹ : DivInvMonoid G✝
a✝ b : G✝
G : Type u_2
inst✝ : SubNegMonoid G
a : G
n : ℕ
⊢ Int.negSucc n • a = -(↑(n + 1) • a)
tactic: rw [← natCast_zsmul]
state_before: G✝ : Type u_1
inst✝¹ : DivInvMonoid G✝
a✝ b : G✝
G : Type u_2
inst✝ : SubNegMonoid G
a : G
n : ℕ
⊢ Int.negSucc n • a = -(↑(n + 1) • a)
state_after: no goals
tactic: exact SubNegMonoid.zsmul_neg' n a
Theorem: Int.gcd_mul_right
File: Mathlib/Data/Int/GCD.lean

Proof steps:
state_before: i j k : ℤ
⊢ (i * j).gcd (k * j) = i.gcd k * j.natAbs
state_after: i j k : ℤ
⊢ (i.natAbs * j.natAbs).gcd (k.natAbs * j.natAbs) = i.natAbs.gcd k.natAbs * j.natAbs
tactic: rw [Int.gcd, Int.gcd, natAbs_mul, natAbs_mul]
state_before: i j k : ℤ
⊢ (i.natAbs * j.natAbs).gcd (k.natAbs * j.natAbs) = i.natAbs.gcd k.natAbs * j.natAbs
state_after: no goals
tactic: apply Nat.gcd_mul_right
Theorem: TensorPower.mul_algebraMap₀
File: Mathlib/LinearAlgebra/TensorPower.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
n : ℕ
r : R
a : ⨂[R]^n M
⊢ (cast R M ⋯) (GradedMonoid.GMul.mul a (algebraMap₀ r)) = r • a
state_after: no goals
tactic: rw [gMul_eq_coe_linearMap, algebraMap₀_eq_smul_one, LinearMap.map_smul,
    LinearEquiv.map_smul, ← gMul_eq_coe_linearMap, mul_one]
Theorem: IsConformalMap.injective
File: Mathlib/Analysis/NormedSpace/ConformalLinearMap.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
N : Type u_3
G : Type u_4
M' : Type u_5
inst✝⁸ : NormedField R
inst✝⁷ : SeminormedAddCommGroup M
inst✝⁶ : SeminormedAddCommGroup N
inst✝⁵ : SeminormedAddCommGroup G
inst✝⁴ : NormedSpace R M
inst✝³ : NormedSpace R N
inst✝² : NormedSpace R G
inst✝¹ : NormedAddCommGroup M'
inst✝ : NormedSpace R M'
f✝ : M →L[R] N
g : N →L[R] G
c : R
f : M' →L[R] N
h : IsConformalMap f
⊢ Injective ⇑f
state_after: case intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
G : Type u_4
M' : Type u_5
inst✝⁸ : NormedField R
inst✝⁷ : SeminormedAddCommGroup M
inst✝⁶ : SeminormedAddCommGroup N
inst✝⁵ : SeminormedAddCommGroup G
inst✝⁴ : NormedSpace R M
inst✝³ : NormedSpace R N
inst✝² : NormedSpace R G
inst✝¹ : NormedAddCommGroup M'
inst✝ : NormedSpace R M'
f : M →L[R] N
g : N →L[R] G
c✝ c : R
hc : c ≠ 0
li : M' →ₗᵢ[R] N
⊢ Injective ⇑(c • li.toContinuousLinearMap)
tactic: rcases h with ⟨c, hc, li, rfl⟩
state_before: case intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
G : Type u_4
M' : Type u_5
inst✝⁸ : NormedField R
inst✝⁷ : SeminormedAddCommGroup M
inst✝⁶ : SeminormedAddCommGroup N
inst✝⁵ : SeminormedAddCommGroup G
inst✝⁴ : NormedSpace R M
inst✝³ : NormedSpace R N
inst✝² : NormedSpace R G
inst✝¹ : NormedAddCommGroup M'
inst✝ : NormedSpace R M'
f : M →L[R] N
g : N →L[R] G
c✝ c : R
hc : c ≠ 0
li : M' →ₗᵢ[R] N
⊢ Injective ⇑(c • li.toContinuousLinearMap)
state_after: no goals
tactic: exact (smul_right_injective _ hc).comp li.injective
Theorem: Int.bodd_bit
File: Mathlib/Data/Int/Bitwise.lean

Proof steps:
state_before: b : Bool
n : ℤ
⊢ (bit b n).bodd = b
state_after: b : Bool
n : ℤ
⊢ (2 * n + bif b then 1 else 0).bodd = b
tactic: rw [bit_val]
state_before: b : Bool
n : ℤ
⊢ (2 * n + bif b then 1 else 0).bodd = b
state_after: no goals
tactic: cases b <;> cases bodd n <;> simp [(show bodd 2 = false by rfl)]
Theorem: List.subperm_append_diff_self_of_count_le
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
⊢ l₁ ++ l₂.diff l₁ ~ l₂
state_after: no goals
tactic: induction l₁ generalizing l₂ with
  | nil => simp
  | cons hd tl IH =>
    have : hd ∈ l₂ := by
      rw [← count_pos_iff_mem]
      exact Nat.lt_of_lt_of_le (count_pos_iff_mem.mpr (.head _)) (h hd (.head _))
    have := perm_cons_erase this
    refine Perm.trans ?_ this.symm
    rw [cons_append, diff_cons, perm_cons]
    refine IH fun x hx => ?_
    specialize h x (.tail _ hx)
    rw [perm_iff_count.mp this] at h
    if hx : x = hd then subst hd; simpa [Nat.succ_le_succ_iff] using h
    else simpa [hx] using h
Theorem: List.reduceOption_cons_of_none
File: Mathlib/Data/List/ReduceOption.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
l : List (Option α)
⊢ (none :: l).reduceOption = l.reduceOption
state_after: no goals
tactic: simp only [reduceOption, filterMap, id]
Theorem: HasDerivAt.norm_sq
File: Mathlib/Analysis/InnerProductSpace/Calculus.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
inst✝² : NormedSpace ℝ E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
f✝ g : G → E
f'✝ g' : G →L[ℝ] E
s : Set G
x✝ : G
n : ℕ∞
f : ℝ → F
f' : F
x : ℝ
hf : HasDerivAt f f' x
⊢ HasDerivAt (fun x => ‖f x‖ ^ 2) (2 * ⟪f x, f'⟫_ℝ) x
state_after: no goals
tactic: simpa using hf.hasFDerivAt.norm_sq.hasDerivAt
Theorem: WittVector.coeff_p_zero
File: Mathlib/RingTheory/WittVector/Identities.lean

Proof steps:
state_before: p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CharP R p
⊢ (↑p).coeff 0 = 0
state_after: case hnc
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CharP R p
⊢ ¬0 = 1
tactic: rw [coeff_p, if_neg]
state_before: case hnc
p : ℕ
R : Type u_1
hp : Fact (Nat.Prime p)
inst✝¹ : CommRing R
inst✝ : CharP R p
⊢ ¬0 = 1
state_after: no goals
tactic: exact zero_ne_one
Theorem: Submodule.finrank_eq_zero
File: Mathlib/LinearAlgebra/Dimension/Finite.lean

Proof steps:
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝¹¹ : Ring R
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : AddCommGroup M'
inst✝⁸ : AddCommGroup M₁
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
inst✝⁵ : Module R M₁
inst✝⁴ : Nontrivial R
inst✝³ : NoZeroSMulDivisors R M
inst✝² : StrongRankCondition R
inst✝¹ : NoZeroSMulDivisors R M
S : Submodule R M
inst✝ : Module.Finite R ↥S
⊢ finrank R ↥S = 0 ↔ S = ⊥
state_after: no goals
tactic: rw [← Submodule.rank_eq_zero, ← finrank_eq_rank, ← @Nat.cast_zero Cardinal, Cardinal.natCast_inj]
Theorem: CategoryTheory.OverPresheafAux.unitForward_naturality₁
File: Mathlib/CategoryTheory/Comma/Presheaf.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
A F G : Cᵒᵖ ⥤ Type v
η : F ⟶ A
μ : G ⟶ A
ε : F ⟶ G
hε : ε ≫ μ = η
X : C
p : YonedaCollection (restrictedYonedaObj η) X
⊢ unitForward μ X (YonedaCollection.map₁ (restrictedYonedaObjMap₁ ε hε) p) = ε.app (op X) (unitForward η X p)
state_after: no goals
tactic: simp [unitForward]
Theorem: HasStrictDerivAt.complexToReal_fderiv
File: Mathlib/Analysis/Complex/RealDeriv.lean

Proof steps:
state_before: e : ℂ → ℂ
e' : ℂ
z : ℝ
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → ℂ
f' x : ℂ
h : HasStrictDerivAt f f' x
⊢ HasStrictFDerivAt f (f' • 1) x
state_after: no goals
tactic: simpa only [Complex.restrictScalars_one_smulRight] using h.hasStrictFDerivAt.restrictScalars ℝ
Theorem: one_lt_pow
File: Mathlib/Algebra/Order/Ring/Basic.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n✝ m : ℕ
ha : 1 < a
n : ℕ
x✝ : n + 1 ≠ 0
⊢ 1 < a ^ (n + 1)
state_after: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n✝ m : ℕ
ha : 1 < a
n : ℕ
x✝ : n + 1 ≠ 0
⊢ 1 < a * a ^ n
tactic: rw [pow_succ']
state_before: α : Type u_1
M : Type u_2
R : Type u_3
inst✝ : OrderedSemiring R
a b x y : R
n✝ m : ℕ
ha : 1 < a
n : ℕ
x✝ : n + 1 ≠ 0
⊢ 1 < a * a ^ n
state_after: no goals
tactic: exact one_lt_mul_of_lt_of_le ha (one_le_pow_of_one_le ha.le _)
Theorem: PosSMulMono.lift
File: Mathlib/Algebra/Order/Module/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
a✝ a₁ a₂ : α
b b₁✝ b₂✝ : β
γ : Type u_3
inst✝⁸ : Zero α
inst✝⁷ : Preorder α
inst✝⁶ : Zero β
inst✝⁵ : Preorder β
inst✝⁴ : Zero γ
inst✝³ : Preorder γ
inst✝² : SMul α β
inst✝¹ : SMul α γ
f : β → γ
inst✝ : PosSMulMono α γ
hf : ∀ {b₁ b₂ : β}, f b₁ ≤ f b₂ ↔ b₁ ≤ b₂
smul : ∀ (a : α) (b : β), f (a • b) = a • f b
a : α
ha : 0 ≤ a
b₁ b₂ : β
hb : b₁ ≤ b₂
⊢ a • b₁ ≤ a • b₂
state_after: α : Type u_1
β : Type u_2
a✝ a₁ a₂ : α
b b₁✝ b₂✝ : β
γ : Type u_3
inst✝⁸ : Zero α
inst✝⁷ : Preorder α
inst✝⁶ : Zero β
inst✝⁵ : Preorder β
inst✝⁴ : Zero γ
inst✝³ : Preorder γ
inst✝² : SMul α β
inst✝¹ : SMul α γ
f : β → γ
inst✝ : PosSMulMono α γ
a : α
ha : 0 ≤ a
b₁ b₂ : β
hf : ∀ {b₁ b₂ : β}, True
smul : α → β → True
hb : f b₁ ≤ f b₂
⊢ a • f b₁ ≤ a • f b₂
tactic: simp only [← hf, smul] at *
state_before: α : Type u_1
β : Type u_2
a✝ a₁ a₂ : α
b b₁✝ b₂✝ : β
γ : Type u_3
inst✝⁸ : Zero α
inst✝⁷ : Preorder α
inst✝⁶ : Zero β
inst✝⁵ : Preorder β
inst✝⁴ : Zero γ
inst✝³ : Preorder γ
inst✝² : SMul α β
inst✝¹ : SMul α γ
f : β → γ
inst✝ : PosSMulMono α γ
a : α
ha : 0 ≤ a
b₁ b₂ : β
hf : ∀ {b₁ b₂ : β}, True
smul : α → β → True
hb : f b₁ ≤ f b₂
⊢ a • f b₁ ≤ a • f b₂
state_after: no goals
tactic: exact smul_le_smul_of_nonneg_left hb ha
Theorem: lowerSemicontinuousOn_iff_le_liminf
File: Mathlib/Topology/Semicontinuous.lean

Proof steps:
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
β : Type u_2
inst✝² : Preorder β
f✝ g : α → β
x : α
s t : Set α
y z : β
γ : Type u_3
inst✝¹ : CompleteLinearOrder γ
inst✝ : DenselyOrdered γ
f : α → γ
⊢ LowerSemicontinuousOn f s ↔ ∀ x ∈ s, f x ≤ liminf f (𝓝[s] x)
state_after: no goals
tactic: simp only [← lowerSemicontinuousWithinAt_iff_le_liminf, LowerSemicontinuousOn]
Theorem: CategoryTheory.BinaryCofan.isPullback_initial_to_of_isVanKampen
File: Mathlib/CategoryTheory/Limits/VanKampen.lean

Proof steps:
state_before: J : Type v'
inst✝⁴ : Category.{u', v'} J
C : Type u
inst✝³ : Category.{v, u} C
K : Type u_1
inst✝² : Category.{?u.283606, u_1} K
D : Type u_2
inst✝¹ : Category.{?u.283613, u_2} D
X Y : C
inst✝ : HasInitial C
c : BinaryCofan X Y
h : IsVanKampenColimit c
⊢ IsPullback (initial.to ((pair X Y).obj { as := WalkingPair.left }))
    (initial.to ((pair X Y).obj { as := WalkingPair.right })) c.inl c.inr
state_after: case refine_1
J : Type v'
inst✝⁴ : Category.{u', v'} J
C : Type u
inst✝³ : Category.{v, u} C
K : Type u_1
inst✝² : Category.{?u.283606, u_1} K
D : Type u_2
inst✝¹ : Category.{?u.283613, u_2} D
X Y : C
inst✝ : HasInitial C
c : BinaryCofan X Y
h : IsVanKampenColimit c
⊢ mapPair (initial.to X) (𝟙 Y) ≫ c.ι =
    (BinaryCofan.mk (initial.to Y) (𝟙 Y)).ι ≫ (Functor.const (Discrete WalkingPair)).map c.inr

case refine_2
J : Type v'
inst✝⁴ : Category.{u', v'} J
C : Type u
inst✝³ : Category.{v, u} C
K : Type u_1
inst✝² : Category.{?u.283606, u_1} K
D : Type u_2
inst✝¹ : Category.{?u.283613, u_2} D
X Y : C
inst✝ : HasInitial C
c : BinaryCofan X Y
h : IsVanKampenColimit c
⊢ IsColimit (BinaryCofan.mk (initial.to Y) (𝟙 Y))
tactic: refine ((h (BinaryCofan.mk (initial.to Y) (𝟙 Y)) (mapPair (initial.to X) (𝟙 Y)) c.inr ?_
      (mapPair_equifibered _)).mp ⟨?_⟩ ⟨WalkingPair.left⟩).flip
Theorem: HahnSeries.order_smul_not_lt
File: Mathlib/RingTheory/HahnSeries/Addition.lean

Proof steps:
state_before: Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
V : Type u_3
inst✝² : Zero V
inst✝¹ : SMulZeroClass R V
inst✝ : Zero Γ
r : R
x : HahnSeries Γ V
h : r • x ≠ 0
⊢ ¬(r • x).order < x.order
state_after: Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
V : Type u_3
inst✝² : Zero V
inst✝¹ : SMulZeroClass R V
inst✝ : Zero Γ
r : R
x : HahnSeries Γ V
h : r • x ≠ 0
hx : x ≠ 0
⊢ ¬(r • x).order < x.order
tactic: have hx : x ≠ 0 := right_ne_zero_of_smul h
state_before: Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
V : Type u_3
inst✝² : Zero V
inst✝¹ : SMulZeroClass R V
inst✝ : Zero Γ
r : R
x : HahnSeries Γ V
h : r • x ≠ 0
hx : x ≠ 0
⊢ ¬(r • x).order < x.order
state_after: Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
V : Type u_3
inst✝² : Zero V
inst✝¹ : SMulZeroClass R V
inst✝ : Zero Γ
r : R
x : HahnSeries Γ V
h : r • x ≠ 0
hx : x ≠ 0
⊢ ¬⋯.min ⋯ < ⋯.min ⋯
tactic: simp_all only [order, dite_false]
state_before: Γ : Type u_1
R : Type u_2
inst✝³ : PartialOrder Γ
V : Type u_3
inst✝² : Zero V
inst✝¹ : SMulZeroClass R V
inst✝ : Zero Γ
r : R
x : HahnSeries Γ V
h : r • x ≠ 0
hx : x ≠ 0
⊢ ¬⋯.min ⋯ < ⋯.min ⋯
state_after: no goals
tactic: exact Set.IsWF.min_of_subset_not_lt_min (Function.support_smul_subset_right (fun _ => r) x.coeff)
Theorem: Complex.IsExpCmpFilter.isLittleO_im_pow_exp_re
File: Mathlib/Analysis/SpecialFunctions/CompareExp.lean

Proof steps:
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
⊢ (fun z => (z.im ^ n) ^ 2) = fun z => z.im ^ (2 * n)
state_after: no goals
tactic: simp only [pow_mul']
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
⊢ (fun z => Real.exp z.re) = fun z => Real.exp z.re ^ 1
state_after: no goals
tactic: simp only [pow_one]
Theorem: CategoryTheory.ShortComplex.LeftHomologyData.leftHomologyIso_hom_naturality
File: Mathlib/Algebra/Homology/ShortComplex/Homology.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ✝ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ h₁.homologyIso.hom ≫ leftHomologyMap' φ h₁ h₂ = homologyMap φ ≫ h₂.homologyIso.hom
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ✝ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ (leftHomologyMap' (𝟙 S₁) S₁.homologyData.left S₁.leftHomologyData ≫ leftHomologyMap' (𝟙 S₁) S₁.leftHomologyData h₁) ≫
      leftHomologyMap' φ h₁ h₂ =
    leftHomologyMap' φ S₁.homologyData.left S₂.homologyData.left ≫
      leftHomologyMap' (𝟙 S₂) S₂.homologyData.left S₂.leftHomologyData ≫ leftHomologyMap' (𝟙 S₂) S₂.leftHomologyData h₂
tactic: dsimp [homologyIso, ShortComplex.leftHomologyIso, homologyMap, homologyMap', leftHomologyIso]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
S S₁ S₂ S₃ S₄ : ShortComplex C
φ✝ : S₁ ⟶ S₂
h₁✝ : S₁.HomologyData
h₂✝ : S₂.HomologyData
inst✝¹ : S₁.HasHomology
inst✝ : S₂.HasHomology
φ : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ (leftHomologyMap' (𝟙 S₁) S₁.homologyData.left S₁.leftHomologyData ≫ leftHomologyMap' (𝟙 S₁) S₁.leftHomologyData h₁) ≫
      leftHomologyMap' φ h₁ h₂ =
    leftHomologyMap' φ S₁.homologyData.left S₂.homologyData.left ≫
      leftHomologyMap' (𝟙 S₂) S₂.homologyData.left S₂.leftHomologyData ≫ leftHomologyMap' (𝟙 S₂) S₂.leftHomologyData h₂
state_after: no goals
tactic: simp only [← leftHomologyMap'_comp, id_comp, comp_id]
Theorem: ArithmeticFunction.vonMangoldt_mul_zeta
File: Mathlib/NumberTheory/VonMangoldt.lean

Proof steps:
state_before: ⊢ Λ * ↑ζ = log
state_after: case h
n : ℕ
⊢ (Λ * ↑ζ) n = log n
tactic: ext n
state_before: case h
n : ℕ
⊢ (Λ * ↑ζ) n = log n
state_after: case h
n : ℕ
⊢ Real.log ↑n = log n
tactic: rw [coe_mul_zeta_apply, vonMangoldt_sum]
state_before: case h
n : ℕ
⊢ Real.log ↑n = log n
state_after: no goals
tactic: rfl
Theorem: Multiset.prod_eq_one
File: Mathlib/Algebra/BigOperators/Group/Multiset.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
h : ∀ x ∈ s, x = 1
⊢ s.prod = 1
state_after: case h
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
l : List α
h : ∀ x ∈ ⟦l⟧, x = 1
⊢ prod ⟦l⟧ = 1
tactic: induction' s using Quotient.inductionOn with l
state_before: case h
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : CommMonoid α
inst✝ : CommMonoid β
s t : Multiset α
a : α
m : Multiset ι
f g : ι → α
l : List α
h : ∀ x ∈ ⟦l⟧, x = 1
⊢ prod ⟦l⟧ = 1
state_after: no goals
tactic: simp [List.prod_eq_one h]
Theorem: Option.elim_comp₂
File: Mathlib/Data/Option/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
h : α → β → γ
f : γ → α
x : α
g : γ → β
y : β
i : Option γ
⊢ (i.elim (h x y) fun j => h (f j) (g j)) = h (i.elim x f) (i.elim y g)
state_after: no goals
tactic: cases i <;> rfl
Theorem: isConformalMap_id
File: Mathlib/Analysis/NormedSpace/ConformalLinearMap.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
N : Type u_3
G : Type u_4
M' : Type u_5
inst✝⁸ : NormedField R
inst✝⁷ : SeminormedAddCommGroup M
inst✝⁶ : SeminormedAddCommGroup N
inst✝⁵ : SeminormedAddCommGroup G
inst✝⁴ : NormedSpace R M
inst✝³ : NormedSpace R N
inst✝² : NormedSpace R G
inst✝¹ : NormedAddCommGroup M'
inst✝ : NormedSpace R M'
f : M →L[R] N
g : N →L[R] G
c : R
⊢ ContinuousLinearMap.id R M = 1 • LinearIsometry.id.toContinuousLinearMap
state_after: no goals
tactic: simp
Theorem: CategoryTheory.Iso.cancel_iso_hom_left
File: Mathlib/CategoryTheory/Iso.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y✝ Z✝ X Y Z : C
f : X ≅ Y
g g' : Y ⟶ Z
⊢ f.hom ≫ g = f.hom ≫ g' ↔ g = g'
state_after: no goals
tactic: simp only [cancel_epi]
Theorem: AddAction.orbitRel.Quotient.mem_orbit
File: Mathlib/GroupTheory/GroupAction/Basic.lean

Proof steps:
state_before: G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
a : α
x : Quotient G α
⊢ a ∈ x.orbit ↔ Quotient.mk'' a = x
state_after: case h
G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
a a✝ : α
⊢ a ∈ orbit (Quotient.mk'' a✝) ↔ Quotient.mk'' a = Quotient.mk'' a✝
tactic: induction x using Quotient.inductionOn'
state_before: case h
G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
a a✝ : α
⊢ a ∈ orbit (Quotient.mk'' a✝) ↔ Quotient.mk'' a = Quotient.mk'' a✝
state_after: case h
G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
a a✝ : α
⊢ a ∈ orbit (Quotient.mk'' a✝) ↔ Setoid.r a a✝
tactic: rw [Quotient.eq'']
state_before: case h
G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
a a✝ : α
⊢ a ∈ orbit (Quotient.mk'' a✝) ↔ Setoid.r a a✝
state_after: no goals
tactic: rfl
Theorem: Equiv.Perm.isCycle_of_prime_order
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h1 : Nat.Prime (orderOf σ)
h2 : σ.support.card < 2 * orderOf σ
⊢ σ.IsCycle
state_after: case intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h1 : Nat.Prime (orderOf σ)
h2 : σ.support.card < 2 * orderOf σ
n : ℕ
hn : σ.cycleType = Multiset.replicate (n + 1) (orderOf σ)
⊢ σ.IsCycle
tactic: obtain ⟨n, hn⟩ := cycleType_prime_order h1
state_before: case intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h1 : Nat.Prime (orderOf σ)
h2 : σ.support.card < 2 * orderOf σ
n : ℕ
hn : σ.cycleType = Multiset.replicate (n + 1) (orderOf σ)
⊢ σ.IsCycle
state_after: case intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h1 : Nat.Prime (orderOf σ)
n : ℕ
h2 : n = 0
hn : σ.cycleType = Multiset.replicate (n + 1) (orderOf σ)
⊢ σ.IsCycle
tactic: rw [← σ.sum_cycleType, hn, Multiset.sum_replicate, nsmul_eq_mul, Nat.cast_id,
    mul_lt_mul_right (orderOf_pos σ), Nat.succ_lt_succ_iff, Nat.lt_succ_iff, Nat.le_zero] at h2
state_before: case intro
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
h1 : Nat.Prime (orderOf σ)
n : ℕ
h2 : n = 0
hn : σ.cycleType = Multiset.replicate (n + 1) (orderOf σ)
⊢ σ.IsCycle
state_after: no goals
tactic: rw [← card_cycleType_eq_one, hn, card_replicate, h2]
Theorem: Set.unbounded_lt_inter_le
File: Mathlib/Order/Bounded.lean

Proof steps:
state_before: α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Unbounded (fun x x_1 => x < x_1) (s ∩ {b | a ≤ b}) ↔ Unbounded (fun x x_1 => x < x_1) s
state_after: case h.e'_1.h.e'_3.h.e'_4.h.e'_2.h.a
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a x✝ : α
⊢ a ≤ x✝ ↔ ¬x✝ < a
tactic: convert @unbounded_lt_inter_not_lt _ s _ a
state_before: case h.e'_1.h.e'_3.h.e'_4.h.e'_2.h.a
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a x✝ : α
⊢ a ≤ x✝ ↔ ¬x✝ < a
state_after: no goals
tactic: exact not_lt.symm
Theorem: SimpleGraph.Walk.darts_append
File: Mathlib/Combinatorics/SimpleGraph/Walk.lean

Proof steps:
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w : V
p : G.Walk u v
p' : G.Walk v w
⊢ (p.append p').darts = p.darts ++ p'.darts
state_after: no goals
tactic: induction p <;> simp [*]
Theorem: Nat.Primrec'.prim_iff₁
File: Mathlib/Computability/Primrec.lean

Proof steps:
state_before: f : ℕ → ℕ
h : Primrec fun v => f v.head
v : ℕ
⊢ f (ofFn fun i => id v).head = f v
state_after: no goals
tactic: simp