ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: SimpleGraph.edist_triangle
File: Mathlib/Combinatorics/SimpleGraph/Metric.lean

Proof steps:
state_before: V : Type u_1
G : SimpleGraph V
u v w : V
⊢ G.edist u w ≤ G.edist u v + G.edist v w
state_after: case inl
V : Type u_1
G : SimpleGraph V
u v w : V
huv : G.edist u v = ⊤
⊢ G.edist u w ≤ G.edist u v + G.edist v w

case inr
V : Type u_1
G : SimpleGraph V
u v w : V
huv : G.edist u v ≠ ⊤
⊢ G.edist u w ≤ G.edist u v + G.edist v w
tactic: rcases eq_or_ne (G.edist u v) ⊤ with huv | huv
state_before: case inl
V : Type u_1
G : SimpleGraph V
u v w : V
huv : G.edist u v = ⊤
⊢ G.edist u w ≤ G.edist u v + G.edist v w

case inr
V : Type u_1
G : SimpleGraph V
u v w : V
huv : G.edist u v ≠ ⊤
⊢ G.edist u w ≤ G.edist u v + G.edist v w
state_after: case inr
V : Type u_1
G : SimpleGraph V
u v w : V
huv : G.edist u v ≠ ⊤
⊢ G.edist u w ≤ G.edist u v + G.edist v w
tactic: case inl => simp [huv]
state_before: case inr
V : Type u_1
G : SimpleGraph V
u v w : V
huv : G.edist u v ≠ ⊤
⊢ G.edist u w ≤ G.edist u v + G.edist v w
state_after: no goals
tactic: case inr =>
    rcases eq_or_ne (G.edist v w) ⊤ with hvw | hvw
    case inl => simp [hvw]
    case inr =>
      obtain ⟨p, hp⟩ := exists_walk_of_edist_ne_top huv
      obtain ⟨q, hq⟩ := exists_walk_of_edist_ne_top hvw
      rw [← hp, ← hq, ← Nat.cast_add, ← Walk.length_append]
      exact edist_le _
Theorem: CategoryTheory.MonoidalCategory.inv_hom_id_tensor
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V✝ W✝ X✝ Y✝ Z✝ V W X Y Z : C
f : V ≅ W
g : X ⟶ Y
h : Y ⟶ Z
⊢ (f.inv ⊗ g) ≫ (f.hom ⊗ h) = (𝟙 W ⊗ g) ≫ (𝟙 W ⊗ h)
state_after: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V✝ W✝ X✝ Y✝ Z✝ V W X Y Z : C
f : V ≅ W
g : X ⟶ Y
h : Y ⟶ Z
⊢ 𝟙 W ⊗ g ≫ h = (𝟙 W ⊗ g) ≫ (𝟙 W ⊗ h)
tactic: rw [← tensor_comp, f.inv_hom_id]
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V✝ W✝ X✝ Y✝ Z✝ V W X Y Z : C
f : V ≅ W
g : X ⟶ Y
h : Y ⟶ Z
⊢ 𝟙 W ⊗ g ≫ h = (𝟙 W ⊗ g) ≫ (𝟙 W ⊗ h)
state_after: no goals
tactic: simp [id_tensorHom]
Theorem: MulHom.cancel_left
File: Mathlib/Algebra/Group/Hom/Defs.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
H : Type u_8
F : Type u_9
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
g : N →ₙ* P
f₁ f₂ : M →ₙ* N
hg : Function.Injective ⇑g
h : g.comp f₁ = g.comp f₂
x : M
⊢ g (f₁ x) = g (f₂ x)
state_after: no goals
tactic: rw [← MulHom.comp_apply, h, MulHom.comp_apply]
Theorem: Monoid.CoprodI.Word.prod_smul
File: Mathlib/GroupTheory/CoprodI.lean

Proof steps:
state_before: ι : Type u_1
M : ι → Type u_2
inst✝³ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝² : Monoid N
inst✝¹ : (i : ι) → DecidableEq (M i)
inst✝ : DecidableEq ι
m : CoprodI M
⊢ ∀ (w : Word M), (m • w).prod = m * w.prod
state_after: no goals
tactic: induction m using CoprodI.induction_on with
  | h_one =>
    intro
    rw [one_smul, one_mul]
  | h_of _ =>
    intros
    rw [of_smul_def, prod_rcons, of.map_mul, mul_assoc, ← prod_rcons, ← equivPair_symm,
      Equiv.symm_apply_apply]
  | h_mul x y hx hy =>
    intro w
    rw [mul_smul, hx, hy, mul_assoc]
Theorem: Rat.not_countably_generated_cocompact
File: Mathlib/Topology/Instances/RatLemmas.lean

Proof steps:
state_before: p q : ℚ
s t : Set ℚ
⊢ ¬(cocompact ℚ).IsCountablyGenerated
state_after: p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
⊢ False
tactic: intro H
state_before: p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
⊢ False
state_after: case intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hx : Tendsto x atTop (cocompact ℚ ⊓ 𝓝 0)
⊢ False
tactic: rcases exists_seq_tendsto (cocompact ℚ ⊓ 𝓝 0) with ⟨x, hx⟩
state_before: case intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hx : Tendsto x atTop (cocompact ℚ ⊓ 𝓝 0)
⊢ False
state_after: case intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hx : Tendsto x atTop (cocompact ℚ) ∧ Tendsto x atTop (𝓝 0)
⊢ False
tactic: rw [tendsto_inf] at hx
state_before: case intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hx : Tendsto x atTop (cocompact ℚ) ∧ Tendsto x atTop (𝓝 0)
⊢ False
state_after: case intro.intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hxc : Tendsto x atTop (cocompact ℚ)
hx0 : Tendsto x atTop (𝓝 0)
⊢ False
tactic: rcases hx with ⟨hxc, hx0⟩
state_before: case intro.intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hxc : Tendsto x atTop (cocompact ℚ)
hx0 : Tendsto x atTop (𝓝 0)
⊢ False
state_after: case intro.intro.intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hxc : Tendsto x atTop (cocompact ℚ)
hx0 : Tendsto x atTop (𝓝 0)
n : ℕ
hn : x n ∉ insert 0 (range x)
⊢ False
tactic: obtain ⟨n, hn⟩ : ∃ n : ℕ, x n ∉ insert (0 : ℚ) (range x) :=
    (hxc.eventually hx0.isCompact_insert_range.compl_mem_cocompact).exists
state_before: case intro.intro.intro
p q : ℚ
s t : Set ℚ
H : (cocompact ℚ).IsCountablyGenerated
x : ℕ → ℚ
hxc : Tendsto x atTop (cocompact ℚ)
hx0 : Tendsto x atTop (𝓝 0)
n : ℕ
hn : x n ∉ insert 0 (range x)
⊢ False
state_after: no goals
tactic: exact hn (Or.inr ⟨n, rfl⟩)
Theorem: Polynomial.eval₂_reflect_eq_zero_iff
File: Mathlib/Algebra/Polynomial/Reverse.lean

Proof steps:
state_before: R : Type u_1
inst✝² : Semiring R
f✝ : R[X]
S : Type u_2
inst✝¹ : CommSemiring S
i : R →+* S
x : S
inst✝ : Invertible x
N : ℕ
f : R[X]
hf : f.natDegree ≤ N
⊢ eval₂ i (⅟x) (reflect N f) = 0 ↔ eval₂ i x f = 0
state_after: R : Type u_1
inst✝² : Semiring R
f✝ : R[X]
S : Type u_2
inst✝¹ : CommSemiring S
i : R →+* S
x : S
inst✝ : Invertible x
N : ℕ
f : R[X]
hf : f.natDegree ≤ N
⊢ eval₂ i (⅟x) (reflect N f) = 0 ↔ eval₂ i (⅟x) (reflect N f) * x ^ N = 0
tactic: conv_rhs => rw [← eval₂_reflect_mul_pow i x N f hf]
state_before: R : Type u_1
inst✝² : Semiring R
f✝ : R[X]
S : Type u_2
inst✝¹ : CommSemiring S
i : R →+* S
x : S
inst✝ : Invertible x
N : ℕ
f : R[X]
hf : f.natDegree ≤ N
⊢ eval₂ i (⅟x) (reflect N f) = 0 ↔ eval₂ i (⅟x) (reflect N f) * x ^ N = 0
state_after: case mp
R : Type u_1
inst✝² : Semiring R
f✝ : R[X]
S : Type u_2
inst✝¹ : CommSemiring S
i : R →+* S
x : S
inst✝ : Invertible x
N : ℕ
f : R[X]
hf : f.natDegree ≤ N
⊢ eval₂ i (⅟x) (reflect N f) = 0 → eval₂ i (⅟x) (reflect N f) * x ^ N = 0

case mpr
R : Type u_1
inst✝² : Semiring R
f✝ : R[X]
S : Type u_2
inst✝¹ : CommSemiring S
i : R →+* S
x : S
inst✝ : Invertible x
N : ℕ
f : R[X]
hf : f.natDegree ≤ N
⊢ eval₂ i (⅟x) (reflect N f) * x ^ N = 0 → eval₂ i (⅟x) (reflect N f) = 0
tactic: constructor
Theorem: Equiv.piEquivPiSubtypeProd_apply
File: Mathlib/Logic/Equiv/Basic.lean

Proof steps:
state_before: α : Type u_1
p : α → Prop
β : α → Type u_2
inst✝ : DecidablePred p
⊢ Function.RightInverse (fun f x => if h : p x then f.1 ⟨x, h⟩ else f.2 ⟨x, h⟩) fun f => (fun x => f ↑x, fun x => f ↑x)
state_after: case mk
α : Type u_1
p : α → Prop
β : α → Type u_2
inst✝ : DecidablePred p
f : (i : { x // p x }) → β ↑i
g : (i : { x // ¬p x }) → β ↑i
⊢ (fun f => (fun x => f ↑x, fun x => f ↑x)) ((fun f x => if h : p x then f.1 ⟨x, h⟩ else f.2 ⟨x, h⟩) (f, g)) = (f, g)
tactic: rintro ⟨f, g⟩
state_before: α : Type u_1
p : α → Prop
β : α → Type u_2
inst✝ : DecidablePred p
f : (i : α) → β i
⊢ (fun f x => if h : p x then f.1 ⟨x, h⟩ else f.2 ⟨x, h⟩) ((fun f => (fun x => f ↑x, fun x => f ↑x)) f) = f
state_after: case h
α : Type u_1
p : α → Prop
β : α → Type u_2
inst✝ : DecidablePred p
f : (i : α) → β i
x : α
⊢ (fun f x => if h : p x then f.1 ⟨x, h⟩ else f.2 ⟨x, h⟩) ((fun f => (fun x => f ↑x, fun x => f ↑x)) f) x = f x
tactic: ext x
Theorem: Set.Nonempty.csSup_mem
File: Mathlib/Order/ConditionallyCompleteLattice/Finset.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : ConditionallyCompleteLinearOrder α
s t : Set α
a b : α
h : s.Nonempty
hs : s.Finite
⊢ sSup s ∈ s
state_after: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : ConditionallyCompleteLinearOrder α
t : Set α
a b : α
s : Finset α
h : (↑s).Nonempty
⊢ sSup ↑s ∈ ↑s
tactic: lift s to Finset α using hs
state_before: case intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : ConditionallyCompleteLinearOrder α
t : Set α
a b : α
s : Finset α
h : (↑s).Nonempty
⊢ sSup ↑s ∈ ↑s
state_after: no goals
tactic: exact Finset.Nonempty.csSup_mem h
Theorem: ProbabilityTheory.Kernel.withDensity_absolutelyContinuous
File: Mathlib/Probability/Kernel/WithDensity.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
f✝ : α → β → ℝ≥0∞
inst✝ : IsSFiniteKernel κ
f : α → β → ℝ≥0∞
a : α
⊢ (κ.withDensity f) a ≪ κ a
state_after: case pos
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
f✝ : α → β → ℝ≥0∞
inst✝ : IsSFiniteKernel κ
f : α → β → ℝ≥0∞
a : α
hf : Measurable (Function.uncurry f)
⊢ (κ.withDensity f) a ≪ κ a

case neg
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
f✝ : α → β → ℝ≥0∞
inst✝ : IsSFiniteKernel κ
f : α → β → ℝ≥0∞
a : α
hf : ¬Measurable (Function.uncurry f)
⊢ (κ.withDensity f) a ≪ κ a
tactic: by_cases hf : Measurable (Function.uncurry f)
Theorem: AddCommute.add_neg_cancel_assoc
File: Mathlib/Algebra/Group/Commute/Defs.lean

Proof steps:
state_before: G : Type u_1
M : Type u_2
S : Type u_3
inst✝ : Group G
a b : G
h : Commute a b
⊢ a * (b * a⁻¹) = b
state_after: no goals
tactic: rw [← mul_assoc, h.mul_inv_cancel]
Theorem: dist_lineMap_left
File: Mathlib/Analysis/NormedSpace/AddTorsor.lean

Proof steps:
state_before: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁸ : SeminormedAddCommGroup V
inst✝⁷ : PseudoMetricSpace P
inst✝⁶ : NormedAddTorsor V P
inst✝⁵ : NormedAddCommGroup W
inst✝⁴ : MetricSpace Q
inst✝³ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝² : NormedField 𝕜
inst✝¹ : NormedSpace 𝕜 V
inst✝ : NormedSpace 𝕜 W
p₁ p₂ : P
c : 𝕜
⊢ dist ((lineMap p₁ p₂) c) p₁ = ‖c‖ * dist p₁ p₂
state_after: no goals
tactic: simpa only [lineMap_apply_zero, dist_zero_right] using dist_lineMap_lineMap p₁ p₂ c 0
Theorem: ContinuousMonoidHom.range_toContinuousMap
File: Mathlib/Topology/Algebra/ContinuousMonoidHom.lean

Proof steps:
state_before: F : Type u_1
A : Type u_2
B : Type u_3
C : Type u_4
D : Type u_5
E : Type u_6
inst✝¹⁰ : Monoid A
inst✝⁹ : Monoid B
inst✝⁸ : Monoid C
inst✝⁷ : Monoid D
inst✝⁶ : CommGroup E
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : TopologicalSpace C
inst✝² : TopologicalSpace D
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalGroup E
⊢ Set.range toContinuousMap = {f | f 1 = 1 ∧ ∀ (x y : A), f (x * y) = f x * f y}
state_after: F : Type u_1
A : Type u_2
B : Type u_3
C : Type u_4
D : Type u_5
E : Type u_6
inst✝¹⁰ : Monoid A
inst✝⁹ : Monoid B
inst✝⁸ : Monoid C
inst✝⁷ : Monoid D
inst✝⁶ : CommGroup E
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : TopologicalSpace C
inst✝² : TopologicalSpace D
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalGroup E
⊢ {f | f 1 = 1 ∧ ∀ (x y : A), f (x * y) = f x * f y} ⊆ Set.range toContinuousMap
tactic: refine Set.Subset.antisymm (Set.range_subset_iff.2 fun f ↦ ⟨map_one f, map_mul f⟩) ?_
state_before: F : Type u_1
A : Type u_2
B : Type u_3
C : Type u_4
D : Type u_5
E : Type u_6
inst✝¹⁰ : Monoid A
inst✝⁹ : Monoid B
inst✝⁸ : Monoid C
inst✝⁷ : Monoid D
inst✝⁶ : CommGroup E
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : TopologicalSpace C
inst✝² : TopologicalSpace D
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalGroup E
⊢ {f | f 1 = 1 ∧ ∀ (x y : A), f (x * y) = f x * f y} ⊆ Set.range toContinuousMap
state_after: case intro
F : Type u_1
A : Type u_2
B : Type u_3
C : Type u_4
D : Type u_5
E : Type u_6
inst✝¹⁰ : Monoid A
inst✝⁹ : Monoid B
inst✝⁸ : Monoid C
inst✝⁷ : Monoid D
inst✝⁶ : CommGroup E
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : TopologicalSpace C
inst✝² : TopologicalSpace D
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalGroup E
f : C(A, B)
h1 : f 1 = 1
hmul : ∀ (x y : A), f (x * y) = f x * f y
⊢ f ∈ Set.range toContinuousMap
tactic: rintro f ⟨h1, hmul⟩
state_before: case intro
F : Type u_1
A : Type u_2
B : Type u_3
C : Type u_4
D : Type u_5
E : Type u_6
inst✝¹⁰ : Monoid A
inst✝⁹ : Monoid B
inst✝⁸ : Monoid C
inst✝⁷ : Monoid D
inst✝⁶ : CommGroup E
inst✝⁵ : TopologicalSpace A
inst✝⁴ : TopologicalSpace B
inst✝³ : TopologicalSpace C
inst✝² : TopologicalSpace D
inst✝¹ : TopologicalSpace E
inst✝ : TopologicalGroup E
f : C(A, B)
h1 : f 1 = 1
hmul : ∀ (x y : A), f (x * y) = f x * f y
⊢ f ∈ Set.range toContinuousMap
state_after: no goals
tactic: exact ⟨{ f with map_one' := h1, map_mul' := hmul }, rfl⟩
Theorem: Real.hasStrictDerivAt_arctan
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/ArctanDeriv.lean

Proof steps:
state_before: x : ℝ
⊢ HasStrictDerivAt arctan (1 / (1 + x ^ 2)) x
state_after: x : ℝ
A : cos (arctan x) ≠ 0
⊢ HasStrictDerivAt arctan (1 / (1 + x ^ 2)) x
tactic: have A : cos (arctan x) ≠ 0 := (cos_arctan_pos x).ne'
state_before: x : ℝ
A : cos (arctan x) ≠ 0
⊢ HasStrictDerivAt arctan (1 / (1 + x ^ 2)) x
state_after: no goals
tactic: simpa [cos_sq_arctan] using
    tanPartialHomeomorph.hasStrictDerivAt_symm trivial (by simpa) (hasStrictDerivAt_tan A)
Theorem: LocalRing.CotangentSpace.span_image_eq_top_iff
File: Mathlib/RingTheory/Ideal/Cotangent.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsNoetherianRing R
s : Set ↥(maximalIdeal R)
⊢ Submodule.span (ResidueField R) (⇑(maximalIdeal R).toCotangent '' s) = ⊤ ↔ Submodule.span R s = ⊤
state_after: R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsNoetherianRing R
s : Set ↥(maximalIdeal R)
⊢ Submodule.span R (⇑(maximalIdeal R).toCotangent '' s) = Submodule.restrictScalars R ⊤ ↔
    Submodule.map (maximalIdeal R).toCotangent (Submodule.span R s) = ⊤

case hsur
R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsNoetherianRing R
s : Set ↥(maximalIdeal R)
⊢ Function.Surjective ⇑(algebraMap R (ResidueField R))
tactic: rw [← map_eq_top_iff, ← (Submodule.restrictScalars_injective R ..).eq_iff,
    Submodule.restrictScalars_span]
Theorem: Int.floor_eq_zero_iff
File: Mathlib/Algebra/Order/Floor.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z : ℤ
a : α
⊢ ⌊a⌋ = 0 ↔ a ∈ Ico 0 1
state_after: no goals
tactic: simp [floor_eq_iff]
Theorem: sSupHom.cancel_left
File: Mathlib/Order/Hom/CompleteLattice.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
ι : Sort u_6
κ : ι → Sort u_7
inst✝⁴ : FunLike F α β
inst✝³ : SupSet α
inst✝² : SupSet β
inst✝¹ : SupSet γ
inst✝ : SupSet δ
g : sSupHom β γ
f₁ f₂ : sSupHom α β
hg : Injective ⇑g
h : g.comp f₁ = g.comp f₂
a : α
⊢ g (f₁ a) = g (f₂ a)
state_after: no goals
tactic: rw [← comp_apply, h, comp_apply]
Theorem: CochainComplex.HomComplex.Cochain.leftShift_v
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplexShift.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a n' : ℤ
hn' : n + a = n'
p q : ℤ
hpq : p + n' = q
p' : ℤ
hp' : p' + n = q
⊢ p' = p + a
state_after: no goals
tactic: rw [← add_left_inj n, hp', add_assoc, add_comm a, hn', hpq]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a n' : ℤ
hn' : n + a = n'
p q : ℤ
hpq : p + n' = q
p' : ℤ
hp' : p' + n = q
⊢ (γ.leftShift a n' hn').v p q hpq =
    (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p p' ⋯).hom ≫ γ.v p' q hp'
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a n' : ℤ
hn' : n + a = n'
p q : ℤ
hpq : p + n' = q
hp' : p + a + n = q
⊢ (γ.leftShift a n' hn').v p q hpq =
    (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p (p + a) ⋯).hom ≫ γ.v (p + a) q hp'
tactic: obtain rfl : p' = p + a := by omega
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a n' : ℤ
hn' : n + a = n'
p q : ℤ
hpq : p + n' = q
hp' : p + a + n = q
⊢ (γ.leftShift a n' hn').v p q hpq =
    (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p (p + a) ⋯).hom ≫ γ.v (p + a) q hp'
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a n' : ℤ
hn' : n + a = n'
p q : ℤ
hpq : p + n' = q
hp' : p + a + n = q
⊢ (mk fun p q hpq =>
          (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p (p + a) ⋯).hom ≫ γ.v (p + a) q ⋯).v
      p q hpq =
    (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p (p + a) ⋯).hom ≫ γ.v (p + a) q hp'
tactic: dsimp only [leftShift]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a n' : ℤ
hn' : n + a = n'
p q : ℤ
hpq : p + n' = q
hp' : p + a + n = q
⊢ (mk fun p q hpq =>
          (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p (p + a) ⋯).hom ≫ γ.v (p + a) q ⋯).v
      p q hpq =
    (a * n' + a * (a - 1) / 2).negOnePow • (K.shiftFunctorObjXIso a p (p + a) ⋯).hom ≫ γ.v (p + a) q hp'
state_after: no goals
tactic: simp only [mk_v]
Theorem: Finset.mem_image
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 : β
⊢ b ∈ image f s ↔ ∃ a ∈ s, f a = b
state_after: no goals
tactic: simp only [mem_def, image_val, mem_dedup, Multiset.mem_map, exists_prop]
Theorem: Rat.normalize_num_den
File: .lake/packages/batteries/Batteries/Data/Rat/Lemmas.lean

Proof steps:
state_before: n : Int
d : Nat
z : d ≠ 0
n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
h : normalize n d z = { num := n', den := d', den_nz := z', reduced := c }
⊢ ∃ m, m ≠ 0 ∧ n = n' * ↑m ∧ d = d' * m
state_after: n : Int
d : Nat
z : d ≠ 0
n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
h : normalize n d z = { num := n', den := d', den_nz := z', reduced := c }
this : ∃ d_1, d_1 ≠ 0 ∧ n = (normalize n d z).num * ↑d_1 ∧ d = (normalize n d z).den * d_1
⊢ ∃ m, m ≠ 0 ∧ n = n' * ↑m ∧ d = d' * m
tactic: have := normalize_num_den' n d z
state_before: n : Int
d : Nat
z : d ≠ 0
n' : Int
d' : Nat
z' : d' ≠ 0
c : n'.natAbs.Coprime d'
h : normalize n d z = { num := n', den := d', den_nz := z', reduced := c }
this : ∃ d_1, d_1 ≠ 0 ∧ n = (normalize n d z).num * ↑d_1 ∧ d = (normalize n d z).den * d_1
⊢ ∃ m, m ≠ 0 ∧ n = n' * ↑m ∧ d = d' * m
state_after: no goals
tactic: rwa [h] at this
Theorem: ENNReal.inv_lt_top
File: Mathlib/Data/ENNReal/Inv.lean

Proof steps:
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
x : ℝ≥0∞
⊢ x⁻¹ < ⊤ ↔ 0 < x
state_after: no goals
tactic: simp only [lt_top_iff_ne_top, inv_ne_top, pos_iff_ne_zero]
Theorem: Finset.coe_pair
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a✝ b✝ a b : α
⊢ ↑{a, b} = {a, b}
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a✝ b✝ a b x✝ : α
⊢ x✝ ∈ ↑{a, b} ↔ x✝ ∈ {a, b}
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s t u v : Finset α
a✝ b✝ a b x✝ : α
⊢ x✝ ∈ ↑{a, b} ↔ x✝ ∈ {a, b}
state_after: no goals
tactic: simp
Theorem: Function.update_eq_self_iff
File: Mathlib/Logic/Function/Basic.lean

Proof steps:
state_before: α : Sort u
β : α → Sort v
α' : Sort w
inst✝¹ : DecidableEq α
inst✝ : DecidableEq α'
f g : (a : α) → β a
a : α
b : β a
⊢ update f a b = f ↔ b = f a
state_after: no goals
tactic: simp [update_eq_iff]
Theorem: integrableOn_Ioi_rpow_iff
File: Mathlib/Analysis/SpecialFunctions/ImproperIntegrals.lean

Proof steps:
state_before: s t : ℝ
ht : 0 < t
⊢ IntegrableOn (fun x => x ^ s) (Ioi t) volume ↔ s < -1
state_after: s t : ℝ
ht : 0 < t
h : IntegrableOn (fun x => x ^ s) (Ioi t) volume
⊢ s < -1
tactic: refine ⟨fun h ↦ ?_, fun h ↦ integrableOn_Ioi_rpow_of_lt h ht⟩
state_before: s t : ℝ
ht : 0 < t
h : IntegrableOn (fun x => x ^ s) (Ioi t) volume
⊢ s < -1
state_after: s t : ℝ
ht : 0 < t
h : -1 ≤ s
⊢ ¬IntegrableOn (fun x => x ^ s) (Ioi t) volume
tactic: contrapose! h
state_before: s t : ℝ
ht : 0 < t
h : -1 ≤ s
⊢ ¬IntegrableOn (fun x => x ^ s) (Ioi t) volume
state_after: s t : ℝ
ht : 0 < t
h : -1 ≤ s
H : IntegrableOn (fun x => x ^ s) (Ioi t) volume
⊢ False
tactic: intro H
state_before: s t : ℝ
ht : 0 < t
h : -1 ≤ s
H : IntegrableOn (fun x => x ^ s) (Ioi t) volume
⊢ False
state_after: s t : ℝ
ht : 0 < t
h : -1 ≤ s
H : IntegrableOn (fun x => x ^ s) (Ioi t) volume
H' : IntegrableOn (fun x => x ^ s) (Ioi (max 1 t)) volume
⊢ False
tactic: have H' : IntegrableOn (fun x ↦ x ^ s) (Ioi (max 1 t)) :=
    H.mono (Set.Ioi_subset_Ioi (le_max_right _ _)) le_rfl
state_before: s t : ℝ
ht : 0 < t
h : -1 ≤ s
H : IntegrableOn (fun x => x ^ s) (Ioi t) volume
H' : IntegrableOn (fun x => x ^ s) (Ioi (max 1 t)) volume
⊢ False
state_after: s t : ℝ
ht : 0 < t
h : -1 ≤ s
H : IntegrableOn (fun x => x ^ s) (Ioi t) volume
H' : IntegrableOn (fun x => x ^ s) (Ioi (max 1 t)) volume
this : IntegrableOn (fun x => x⁻¹) (Ioi (max 1 t)) volume
⊢ False
tactic: have : IntegrableOn (fun x ↦ x⁻¹) (Ioi (max 1 t)) := by
    apply H'.mono' measurable_inv.aestronglyMeasurable
    filter_upwards [ae_restrict_mem measurableSet_Ioi] with x hx
    have x_one : 1 ≤ x := ((le_max_left _ _).trans_lt (mem_Ioi.1 hx)).le
    simp only [norm_inv, Real.norm_eq_abs, abs_of_nonneg (zero_le_one.trans x_one)]
    rw [← Real.rpow_neg_one x]
    exact Real.rpow_le_rpow_of_exponent_le x_one h
state_before: s t : ℝ
ht : 0 < t
h : -1 ≤ s
H : IntegrableOn (fun x => x ^ s) (Ioi t) volume
H' : IntegrableOn (fun x => x ^ s) (Ioi (max 1 t)) volume
this : IntegrableOn (fun x => x⁻¹) (Ioi (max 1 t)) volume
⊢ False
state_after: no goals
tactic: exact not_IntegrableOn_Ioi_inv this
Theorem: ENNReal.coe_smul
File: Mathlib/Data/ENNReal/Operations.lean

Proof steps:
state_before: a b c d : ℝ≥0∞
r✝ p q : ℝ≥0
R : Type u_1
r : R
s : ℝ≥0
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ≥0∞
⊢ ↑(r • s) = r • ↑s
state_after: no goals
tactic: rw [← smul_one_smul ℝ≥0 r (s : ℝ≥0∞), smul_def, smul_eq_mul, ← ENNReal.coe_mul, smul_mul_assoc,
    one_mul]
Theorem: List.head!_le_of_lt
File: Mathlib/Data/List/Lex.lean

Proof steps:
state_before: α : Type u
inst✝¹ : Preorder α
inst✝ : Inhabited α
l l' : List α
hl' : l' ≠ []
h : Lex (fun x x_1 => x < x_1) l' l
⊢ l'.head! ≤ l.head!
state_after: case pos
α : Type u
inst✝¹ : Preorder α
inst✝ : Inhabited α
l l' : List α
hl' : l' ≠ []
h : Lex (fun x x_1 => x < x_1) l' l
hl : l = []
⊢ l'.head! ≤ l.head!

case neg
α : Type u
inst✝¹ : Preorder α
inst✝ : Inhabited α
l l' : List α
hl' : l' ≠ []
h : Lex (fun x x_1 => x < x_1) l' l
hl : ¬l = []
⊢ l'.head! ≤ l.head!
tactic: by_cases hl : l = []