ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Rat.ofScientific_true_def
File: .lake/packages/batteries/Batteries/Data/Rat/Lemmas.lean

Proof steps:
state_before: m e : Nat
⊢ Rat.ofScientific m true e = mkRat (↑m) (10 ^ e)
state_after: m e : Nat
⊢ (if true = true then normalize (↑m) (10 ^ e) ⋯ else ↑(m * 10 ^ e)) = mkRat (↑m) (10 ^ e)
tactic: unfold Rat.ofScientific
state_before: m e : Nat
⊢ (if true = true then normalize (↑m) (10 ^ e) ⋯ else ↑(m * 10 ^ e)) = mkRat (↑m) (10 ^ e)
state_after: m e : Nat
⊢ (if true = true then mkRat (↑m) (10 ^ e) else ↑(m * 10 ^ e)) = mkRat (↑m) (10 ^ e)
tactic: rw [normalize_eq_mkRat]
state_before: m e : Nat
⊢ (if true = true then mkRat (↑m) (10 ^ e) else ↑(m * 10 ^ e)) = mkRat (↑m) (10 ^ e)
state_after: no goals
tactic: rfl
Theorem: Set.image_sub_const_Ico
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ (fun x => x - a) '' Ico b c = Ico (b - a) (c - a)
state_after: no goals
tactic: simp [sub_eq_neg_add]
Theorem: AlternatingMap.domDomCongr_apply
File: Mathlib/LinearAlgebra/Alternating/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁴ : Semiring R
M : Type u_2
inst✝¹³ : AddCommMonoid M
inst✝¹² : Module R M
N : Type u_3
inst✝¹¹ : AddCommMonoid N
inst✝¹⁰ : Module R N
P : Type u_4
inst✝⁹ : AddCommMonoid P
inst✝⁸ : Module R P
M' : Type u_5
inst✝⁷ : AddCommGroup M'
inst✝⁶ : Module R M'
N' : Type u_6
inst✝⁵ : AddCommGroup N'
inst✝⁴ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝³ : AddCommMonoid M₂
inst✝² : Module R M₂
M₃ : Type u_11
inst✝¹ : AddCommMonoid M₃
inst✝ : Module R M₃
f✝ f' : M [⋀^ι]→ₗ[R] N
g g₂ : M [⋀^ι]→ₗ[R] N'
g' : M' [⋀^ι]→ₗ[R] N'
v✝ : ι → M
v' : ι → M'
σ : ι ≃ ι'
f : M [⋀^ι]→ₗ[R] N
v : ι' → M
i j : ι'
hv : v i = v j
hij : i ≠ j
⊢ (v ∘ ⇑σ) (σ.symm i) = (v ∘ ⇑σ) (σ.symm j)
state_after: no goals
tactic: simpa using hv
Theorem: Set.Finite.card_lt_card
File: Mathlib/Data/Finite/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
⊢ Nat.card ↑s < Nat.card ↑t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
this : Fintype ↑t
⊢ Nat.card ↑s < Nat.card ↑t
tactic: have : Fintype t := Finite.fintype ht
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
this : Fintype ↑t
⊢ Nat.card ↑s < Nat.card ↑t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
this✝ : Fintype ↑t
this : Fintype ↑s
⊢ Nat.card ↑s < Nat.card ↑t
tactic: have : Fintype s := Finite.fintype (subset ht (subset_of_ssubset hsub))
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
this✝ : Fintype ↑t
this : Fintype ↑s
⊢ Nat.card ↑s < Nat.card ↑t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
this✝ : Fintype ↑t
this : Fintype ↑s
⊢ Fintype.card ↑s < Fintype.card ↑t
tactic: simp only [Nat.card_eq_fintype_card]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
hsub : s ⊂ t
this✝ : Fintype ↑t
this : Fintype ↑s
⊢ Fintype.card ↑s < Fintype.card ↑t
state_after: no goals
tactic: exact Set.card_lt_card hsub
Theorem: Nat.cast_add_one_pos
File: Mathlib/Data/Nat/Cast/Order/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝⁴ : AddMonoidWithOne α
inst✝³ : PartialOrder α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : ZeroLEOneClass α
inst✝ : NeZero 1
n : ℕ
⊢ 0 < ↑n + 1
state_after: α : Type u_1
β : Type u_2
inst✝⁴ : AddMonoidWithOne α
inst✝³ : PartialOrder α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : ZeroLEOneClass α
inst✝ : NeZero 1
n : ℕ
⊢ 1 ≤ ↑n + 1
tactic: apply zero_lt_one.trans_le
state_before: α : Type u_1
β : Type u_2
inst✝⁴ : AddMonoidWithOne α
inst✝³ : PartialOrder α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : ZeroLEOneClass α
inst✝ : NeZero 1
n : ℕ
⊢ 1 ≤ ↑n + 1
state_after: no goals
tactic: convert (@mono_cast α _).imp (?_ : 1 ≤ n + 1)
  <;> simp
Theorem: Finset.strongInduction_eq
File: Mathlib/Data/Finset/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s✝ t u : Finset α
f : α → β
n : ℕ
p : Finset α → Sort u_4
H : (s : Finset α) → ((t : Finset α) → t ⊂ s → p t) → p s
s : Finset α
⊢ strongInduction H s = H s fun t x => strongInduction H t
state_after: no goals
tactic: rw [strongInduction]
Theorem: not_mem_tsupport_iff_eventuallyEq
File: Mathlib/Topology/Support.lean

Proof steps:
state_before: X : Type u_1
α : Type u_2
α' : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
M : Type u_7
E : Type u_8
R : Type u_9
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace α'
inst✝² : One β
inst✝¹ : One γ
inst✝ : One δ
g : β → γ
f : α → β
f₂ : α → γ
m : β → γ → δ
x : α
⊢ x ∉ mulTSupport f ↔ f =ᶠ[𝓝 x] 1
state_after: no goals
tactic: simp_rw [mulTSupport, mem_closure_iff_nhds, not_forall, not_nonempty_iff_eq_empty, exists_prop,
    ← disjoint_iff_inter_eq_empty, disjoint_mulSupport_iff, eventuallyEq_iff_exists_mem]
Theorem: WeierstrassCurve.Jacobian.Point.toAffineAddEquiv_apply
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
⊢ Function.LeftInverse fromAffine toAffineLift
state_after: case mk.mk
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
point✝ : PointClass F
P : Fin 3 → F
hP : W.NonsingularLift (Quot.mk Setoid.r P)
⊢ fromAffine (mk hP).toAffineLift = mk hP
tactic: rintro @⟨⟨P⟩, hP⟩
state_before: case mk.mk
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
point✝ : PointClass F
P : Fin 3 → F
hP : W.NonsingularLift (Quot.mk Setoid.r P)
⊢ fromAffine (mk hP).toAffineLift = mk hP
state_after: case pos
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
point✝ : PointClass F
P : Fin 3 → F
hP : W.NonsingularLift (Quot.mk Setoid.r P)
hPz : P z = 0
⊢ fromAffine (mk hP).toAffineLift = mk hP

case neg
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
point✝ : PointClass F
P : Fin 3 → F
hP : W.NonsingularLift (Quot.mk Setoid.r P)
hPz : ¬P z = 0
⊢ fromAffine (mk hP).toAffineLift = mk hP
tactic: by_cases hPz : P z = 0
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
⊢ Function.RightInverse fromAffine toAffineLift
state_after: case zero
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
⊢ (fromAffine Affine.Point.zero).toAffineLift = Affine.Point.zero

case some
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
x✝ y✝ : F
h✝ : W.toAffine.Nonsingular x✝ y✝
⊢ (fromAffine (Affine.Point.some h✝)).toAffineLift = Affine.Point.some h✝
tactic: rintro (_ | _)
Theorem: SimpleGraph.Walk.map_fst_darts
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 : V
p : G.Walk u v
⊢ List.map (fun x => x.toProd.1) p.darts = p.support.dropLast
state_after: no goals
tactic: simpa! using congr_arg List.dropLast (map_fst_darts_append p)
Theorem: dite_ne_right_iff
File: Mathlib/Logic/Basic.lean

Proof steps:
state_before: α : Sort u_1
σ : α → Sort u_2
P Q R : Prop
inst✝¹ : Decidable P
inst✝ : Decidable Q
a b c : α
A : P → α
B : ¬P → α
⊢ (dite P A fun x => b) ≠ b ↔ ∃ h, A h ≠ b
state_after: no goals
tactic: simp only [Ne, dite_eq_right_iff, not_forall]
Theorem: toIcoMod_mem_Ico'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b✝ c : α
n : ℤ
b : α
⊢ toIcoMod hp 0 b ∈ Set.Ico 0 p
state_after: case h.e'_5.h.e'_4
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b✝ c : α
n : ℤ
b : α
⊢ p = 0 + p
tactic: convert toIcoMod_mem_Ico hp 0 b
state_before: case h.e'_5.h.e'_4
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a b✝ c : α
n : ℤ
b : α
⊢ p = 0 + p
state_after: no goals
tactic: exact (zero_add p).symm
Theorem: CategoryTheory.Functor.reprW_app_hom
File: Mathlib/CategoryTheory/Yoneda.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
F : Cᵒᵖ ⥤ Type v₁
hF : F.Representable
X : Cᵒᵖ
f : unop X ⟶ F.reprX
⊢ (F.reprW.app X).hom f = F.map f.op F.reprx
state_after: no goals
tactic: simp only [yoneda_obj_obj, Iso.app_hom, op_unop, reprx, ← FunctorToTypes.naturality,
    yoneda_obj_map, unop_op, Quiver.Hom.unop_op, Category.comp_id]
Theorem: Set.Ioo.one_sub_mem
File: Mathlib/Algebra/Order/Interval/Set/Instances.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : t ∈ Ioo 0 1
⊢ 1 - t ∈ Ioo 0 1
state_after: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 0 < 1 - t ∧ 1 - t < 1
tactic: rw [mem_Ioo] at *
state_before: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 0 < 1 - t ∧ 1 - t < 1
state_after: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 1 - t < 1
tactic: refine ⟨sub_pos.2 ht.2, ?_⟩
state_before: α : Type u_1
inst✝¹ : StrictOrderedSemiring α
β : Type u_2
inst✝ : OrderedRing β
t : β
ht : 0 < t ∧ t < 1
⊢ 1 - t < 1
state_after: no goals
tactic: exact lt_of_le_of_ne ((sub_le_self_iff 1).2 ht.1.le) (mt sub_eq_self.mp ht.1.ne')
Theorem: Matrix.dotProduct_diagonal
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 m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i : m
⊢ v ⬝ᵥ diagonal w i = v i * w i
state_after: 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 m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i : m
this : ∀ (j : m), j ≠ i → v j * diagonal w i j = 0
⊢ v ⬝ᵥ diagonal w i = v i * w i
tactic: have : ∀ j ≠ i, v j * diagonal w i j = 0 := fun j hij => by
    simp [diagonal_apply_ne' _ hij]
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 m
inst✝² : Fintype n
inst✝¹ : DecidableEq m
inst✝ : NonUnitalNonAssocSemiring α
u v w : m → α
i : m
this : ∀ (j : m), j ≠ i → v j * diagonal w i j = 0
⊢ v ⬝ᵥ diagonal w i = v i * w i
state_after: no goals
tactic: convert Finset.sum_eq_single i (fun j _ => this j) _ using 1 <;> simp
Theorem: image_range_addOrderOf
File: Mathlib/GroupTheory/OrderOfElement.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G
inst✝¹ : Fintype G
x : G
n : ℕ
inst✝ : DecidableEq G
⊢ Finset.image (fun i => x ^ i) (Finset.range (orderOf x)) = (↑(zpowers x)).toFinset
state_after: case a
G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G
inst✝¹ : Fintype G
x✝ : G
n : ℕ
inst✝ : DecidableEq G
x : G
⊢ x ∈ Finset.image (fun i => x✝ ^ i) (Finset.range (orderOf x✝)) ↔ x ∈ (↑(zpowers x✝)).toFinset
tactic: ext x
state_before: case a
G : Type u_1
H : Type u_2
A : Type u_3
α : Type u_4
β : Type u_5
inst✝² : Group G
inst✝¹ : Fintype G
x✝ : G
n : ℕ
inst✝ : DecidableEq G
x : G
⊢ x ∈ Finset.image (fun i => x✝ ^ i) (Finset.range (orderOf x✝)) ↔ x ∈ (↑(zpowers x✝)).toFinset
state_after: no goals
tactic: rw [Set.mem_toFinset, SetLike.mem_coe, mem_zpowers_iff_mem_range_orderOf]
Theorem: Finset.sum_erase_eq_sub
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✝¹ : CommGroup β
inst✝ : DecidableEq α
a : α
h : a ∈ s
⊢ ∏ x ∈ s.erase a, f x = (∏ x ∈ s, f x) / f a
state_after: no goals
tactic: rw [eq_div_iff_mul_eq', prod_erase_mul _ _ h]
Theorem: rank_fin_fun
File: Mathlib/LinearAlgebra/Dimension/Constructions.lean

Proof steps:
state_before: R S : Type u
M : Type v
M' : Type v'
M₁ : Type v
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝¹³ : Ring R
inst✝¹² : CommRing S
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : AddCommGroup M'
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : Module R M
inst✝⁷ : Module R M'
inst✝⁶ : Module R M₁
inst✝⁵ : StrongRankCondition R
inst✝⁴ : Module.Free R M
inst✝³ : (i : η) → AddCommGroup (φ i)
inst✝² : (i : η) → Module R (φ i)
inst✝¹ : ∀ (i : η), Module.Free R (φ i)
inst✝ : Fintype η
n : ℕ
⊢ Module.rank R (Fin n → R) = ↑n
state_after: no goals
tactic: simp [rank_fun']
Theorem: Submonoid.induction_of_closure_eq_top_left
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

Proof steps:
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
⊢ p x
state_after: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
this : x ∈ closure s
⊢ p x
tactic: have : x ∈ closure s := by simp [hs]
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : Monoid M
a : M
s : Set M
p : M → Prop
hs : closure s = ⊤
x : M
one : p 1
mul : ∀ x ∈ s, ∀ (y : M), p y → p (x * y)
this : x ∈ closure s
⊢ p x
state_after: no goals
tactic: induction this using closure_induction_left with
  | one => exact one
  | mul_left x hx y _ ih => exact mul x hx y ih
Theorem: MeasureTheory.edist_indicatorConstLp_eq_nnnorm
File: Mathlib/MeasureTheory/Function/LpSpace.lean

Proof steps:
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
s : Set α
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c : E
t : Set α
ht : MeasurableSet t
hμt : μ t ≠ ⊤
⊢ edist (indicatorConstLp p hs hμs c) (indicatorConstLp p ht hμt c) = ↑‖indicatorConstLp p ⋯ ⋯ c‖₊
state_after: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
s : Set α
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c : E
t : Set α
ht : MeasurableSet t
hμt : μ t ≠ ⊤
⊢ edist (Memℒp.toLp (s.indicator fun x => c) ⋯) (Memℒp.toLp (t.indicator fun x => c) ⋯) =
    ↑‖Memℒp.toLp ((s ∆ t).indicator fun x => c) ⋯‖₊
tactic: unfold indicatorConstLp
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
s : Set α
hs : MeasurableSet s
hμs : μ s ≠ ⊤
c : E
t : Set α
ht : MeasurableSet t
hμt : μ t ≠ ⊤
⊢ edist (Memℒp.toLp (s.indicator fun x => c) ⋯) (Memℒp.toLp (t.indicator fun x => c) ⋯) =
    ↑‖Memℒp.toLp ((s ∆ t).indicator fun x => c) ⋯‖₊
state_after: no goals
tactic: rw [Lp.edist_toLp_toLp, eLpNorm_indicator_sub_indicator, Lp.coe_nnnorm_toLp]
Theorem: LinearMap.restrict_sub
File: Mathlib/Algebra/Module/Submodule/LinearMap.lean

Proof steps:
state_before: R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M✝ : Type u_5
M₁✝ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
ι : Type u_9
inst✝¹⁶ : Semiring R✝
inst✝¹⁵ : Semiring R₂
inst✝¹⁴ : Semiring R₃
inst✝¹³ : AddCommMonoid M✝
inst✝¹² : AddCommMonoid M₁✝
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R✝ M✝
inst✝⁸ : Module R✝ M₁✝
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
σ₁₂ : R✝ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R✝ →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
f✝ : M✝ →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
R : Type u_10
M : Type u_11
M₁ : Type u_12
inst✝⁴ : Ring R
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M
inst✝ : Module R M₁
p : Submodule R M
q : Submodule R M₁
f g : M →ₗ[R] M₁
hf : MapsTo ⇑f ↑p ↑q
hg : MapsTo ⇑g ↑p ↑q
hfg : optParam (MapsTo ⇑(f - g) ↑p ↑q) ⋯
⊢ f.restrict hf - g.restrict hg = (f - g).restrict hfg
state_after: case h.a
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M✝ : Type u_5
M₁✝ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
ι : Type u_9
inst✝¹⁶ : Semiring R✝
inst✝¹⁵ : Semiring R₂
inst✝¹⁴ : Semiring R₃
inst✝¹³ : AddCommMonoid M✝
inst✝¹² : AddCommMonoid M₁✝
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R✝ M✝
inst✝⁸ : Module R✝ M₁✝
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
σ₁₂ : R✝ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R✝ →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
f✝ : M✝ →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
R : Type u_10
M : Type u_11
M₁ : Type u_12
inst✝⁴ : Ring R
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M
inst✝ : Module R M₁
p : Submodule R M
q : Submodule R M₁
f g : M →ₗ[R] M₁
hf : MapsTo ⇑f ↑p ↑q
hg : MapsTo ⇑g ↑p ↑q
hfg : optParam (MapsTo ⇑(f - g) ↑p ↑q) ⋯
x✝ : ↥p
⊢ ↑((f.restrict hf - g.restrict hg) x✝) = ↑(((f - g).restrict hfg) x✝)
tactic: ext
state_before: case h.a
R✝ : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M✝ : Type u_5
M₁✝ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
ι : Type u_9
inst✝¹⁶ : Semiring R✝
inst✝¹⁵ : Semiring R₂
inst✝¹⁴ : Semiring R₃
inst✝¹³ : AddCommMonoid M✝
inst✝¹² : AddCommMonoid M₁✝
inst✝¹¹ : AddCommMonoid M₂
inst✝¹⁰ : AddCommMonoid M₃
inst✝⁹ : Module R✝ M✝
inst✝⁸ : Module R✝ M₁✝
inst✝⁷ : Module R₂ M₂
inst✝⁶ : Module R₃ M₃
σ₁₂ : R✝ →+* R₂
σ₂₃ : R₂ →+* R₃
σ₁₃ : R✝ →+* R₃
inst✝⁵ : RingHomCompTriple σ₁₂ σ₂₃ σ₁₃
f✝ : M✝ →ₛₗ[σ₁₂] M₂
g✝ : M₂ →ₛₗ[σ₂₃] M₃
R : Type u_10
M : Type u_11
M₁ : Type u_12
inst✝⁴ : Ring R
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M
inst✝ : Module R M₁
p : Submodule R M
q : Submodule R M₁
f g : M →ₗ[R] M₁
hf : MapsTo ⇑f ↑p ↑q
hg : MapsTo ⇑g ↑p ↑q
hfg : optParam (MapsTo ⇑(f - g) ↑p ↑q) ⋯
x✝ : ↥p
⊢ ↑((f.restrict hf - g.restrict hg) x✝) = ↑(((f - g).restrict hfg) x✝)
state_after: no goals
tactic: simp
Theorem: trans_trichotomous_right
File: Mathlib/Order/RelClasses.lean

Proof steps:
state_before: α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
⊢ r a b → ¬r c b → r a c
state_after: α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
h₁ : r a b
h₂ : ¬r c b
⊢ r a c
tactic: intro h₁ h₂
state_before: α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
h₁ : r a b
h₂ : ¬r c b
⊢ r a c
state_after: case inl
α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
h₁ : r a b
h₂ : ¬r c b
h₃ : r b c
⊢ r a c

case inr.inl
α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b : α
h₁ : r a b
h₂ : ¬r b b
⊢ r a b

case inr.inr
α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
h₁ : r a b
h₂ : ¬r c b
h₃ : r c b
⊢ r a c
tactic: rcases trichotomous_of r b c with (h₃ | rfl | h₃)
state_before: case inl
α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
h₁ : r a b
h₂ : ¬r c b
h₃ : r b c
⊢ r a c

case inr.inl
α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b : α
h₁ : r a b
h₂ : ¬r b b
⊢ r a b

case inr.inr
α : Type u
β : Type v
r : α → α → Prop
s : β → β → Prop
inst✝¹ : IsTrans α r
inst✝ : IsTrichotomous α r
a b c : α
h₁ : r a b
h₂ : ¬r c b
h₃ : r c b
⊢ r a c
state_after: no goals
tactic: exacts [_root_.trans h₁ h₃, h₁, absurd h₃ h₂]
Theorem: Real.tan_int_mul_pi_div_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Arctan.lean

Proof steps:
state_before: n : ℤ
⊢ ∃ k, ↑k * π / 2 = ↑n * π / 2
state_after: no goals
tactic: use n
Theorem: Complex.exp_sub
File: Mathlib/Data/Complex/Exponential.lean

Proof steps:
state_before: x y : ℂ
⊢ cexp (x - y) = cexp x / cexp y
state_after: no goals
tactic: simp [sub_eq_add_neg, exp_add, exp_neg, div_eq_mul_inv]
Theorem: RelSeries.smash_succ_castAdd
File: Mathlib/Order/RelSeries.lean

Proof steps:
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
⊢ (p.smash q h).toFun (Fin.castAdd q.length i).succ = p.toFun i.succ
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
⊢ (if H : ↑(Fin.castAdd q.length i).succ < p.length then p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩
    else q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩) =
    p.toFun i.succ
tactic: rw [smash_toFun]
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
⊢ (if H : ↑(Fin.castAdd q.length i).succ < p.length then p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩
    else q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩) =
    p.toFun i.succ
state_after: case pos
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ↑(Fin.castAdd q.length i).succ < p.length
⊢ p.toFun ⟨↑(Fin.castAdd q.length i).succ, ⋯⟩ = p.toFun i.succ

case neg
α : Type u_1
r : Rel α α
β : Type u_2
s : Rel β β
p q : RelSeries r
h : p.last = q.head
i : Fin p.length
H : ¬↑(Fin.castAdd q.length i).succ < p.length
⊢ q.toFun ⟨↑(Fin.castAdd q.length i).succ - p.length, ⋯⟩ = p.toFun i.succ
tactic: split_ifs with H
Theorem: BoundedVariationOn.sub_le
File: Mathlib/Analysis/BoundedVariation.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : α → ℝ
s : Set α
h : BoundedVariationOn f s
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ f x - f y ≤ (eVariationOn f s).toReal
state_after: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : α → ℝ
s : Set α
h : BoundedVariationOn f s
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ |f x - f y| ≤ (eVariationOn f s).toReal
tactic: apply (le_abs_self _).trans
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : α → ℝ
s : Set α
h : BoundedVariationOn f s
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ |f x - f y| ≤ (eVariationOn f s).toReal
state_after: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : α → ℝ
s : Set α
h : BoundedVariationOn f s
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ dist (f x) (f y) ≤ (eVariationOn f s).toReal
tactic: rw [← Real.dist_eq]
state_before: α : Type u_1
inst✝¹ : LinearOrder α
E : Type u_2
inst✝ : PseudoEMetricSpace E
f : α → ℝ
s : Set α
h : BoundedVariationOn f s
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ dist (f x) (f y) ≤ (eVariationOn f s).toReal
state_after: no goals
tactic: exact h.dist_le hx hy
Theorem: Nat.mul_add_mod_of_lt
File: Mathlib/Data/Nat/Defs.lean

Proof steps:
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
h : c < b
⊢ (a * b + c) % b = c
state_after: no goals
tactic: rw [Nat.mul_add_mod', Nat.mod_eq_of_lt h]
Theorem: Lagrange.X_sub_C_dvd_nodal
File: Mathlib/LinearAlgebra/Lagrange.lean

Proof steps:
state_before: R : Type u_1
inst✝ : CommRing R
ι : Type u_2
s : Finset ι
v✝ v : ι → R
i : ι
hi : i ∈ s
⊢ nodal s v = (X - C (v i)) * ?m.116050
state_after: no goals
tactic: classical exact nodal_eq_mul_nodal_erase hi