1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: List.perm_insertNth
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

tactic: induction l generalizing n with
| nil =>
  cases n with
  | zero => rfl
  | succ => cases h
| cons _ _ ih =>
  cases n with
  | zero => simp [insertNth]
  | succ =>
    simp only [insertNth, modifyNthTail]
    refine .trans (.cons _ (ih (Nat.le_of_succ_le_succ h))) (.swap ..)
state_before: α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x : α
l : List α
n : Nat
h : n ≤ l.length
⊢ insertNth n x l ~ x :: l
state_after: no goals

tactic: cases n with
| zero => rfl
| succ => cases h
state_before: case nil
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x : α
n : Nat
h : n ≤ [].length
⊢ insertNth n x [] ~ [x]
state_after: no goals

tactic: rfl
state_before: case nil.zero
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x : α
h : 0 ≤ [].length
⊢ insertNth 0 x [] ~ [x]
state_after: no goals

tactic: cases h
state_before: case nil.succ
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x : α
n✝ : Nat
h : n✝ + 1 ≤ [].length
⊢ insertNth (n✝ + 1) x [] ~ [x]
state_after: no goals

tactic: cases n with
| zero => simp [insertNth]
| succ =>
  simp only [insertNth, modifyNthTail]
  refine .trans (.cons _ (ih (Nat.le_of_succ_le_succ h))) (.swap ..)
state_before: case cons
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x head✝ : α
tail✝ : List α
ih : ∀ {n : Nat}, n ≤ tail✝.length → insertNth n x tail✝ ~ x :: tail✝
n : Nat
h : n ≤ (head✝ :: tail✝).length
⊢ insertNth n x (head✝ :: tail✝) ~ x :: head✝ :: tail✝
state_after: no goals

tactic: simp [insertNth]
state_before: case cons.zero
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x head✝ : α
tail✝ : List α
ih : ∀ {n : Nat}, n ≤ tail✝.length → insertNth n x tail✝ ~ x :: tail✝
h : 0 ≤ (head✝ :: tail✝).length
⊢ insertNth 0 x (head✝ :: tail✝) ~ x :: head✝ :: tail✝
state_after: no goals

tactic: simp only [insertNth, modifyNthTail]
state_before: case cons.succ
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x head✝ : α
tail✝ : List α
ih : ∀ {n : Nat}, n ≤ tail✝.length → insertNth n x tail✝ ~ x :: tail✝
n✝ : Nat
h : n✝ + 1 ≤ (head✝ :: tail✝).length
⊢ insertNth (n✝ + 1) x (head✝ :: tail✝) ~ x :: head✝ :: tail✝
state_after: case cons.succ
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x head✝ : α
tail✝ : List α
ih : ∀ {n : Nat}, n ≤ tail✝.length → insertNth n x tail✝ ~ x :: tail✝
n✝ : Nat
h : n✝ + 1 ≤ (head✝ :: tail✝).length
⊢ head✝ :: modifyNthTail (cons x) n✝ tail✝ ~ x :: head✝ :: tail✝

tactic: refine .trans (.cons _ (ih (Nat.le_of_succ_le_succ h))) (.swap ..)
state_before: case cons.succ
α✝ : Sort ?u.57203
inst✝ : DecidableEq α✝
α : Type u_1
x head✝ : α
tail✝ : List α
ih : ∀ {n : Nat}, n ≤ tail✝.length → insertNth n x tail✝ ~ x :: tail✝
n✝ : Nat
h : n✝ + 1 ≤ (head✝ :: tail✝).length
⊢ head✝ :: modifyNthTail (cons x) n✝ tail✝ ~ x :: head✝ :: tail✝
state_after: no goals
Theorem: Orientation.inner_rotation_pi_div_two_right_smul
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: rw [real_inner_comm, inner_rotation_pi_div_two_left_smul]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
⊢ ⟪r • x, (o.rotation ↑(π / 2)) x⟫_ℝ = 0
state_after: no goals
Theorem: Nat.minFac_one
File: Mathlib/Data/Nat/Prime.lean

tactic: simp [minFac, minFacAux]
state_before: n : ℕ
⊢ minFac 1 = 1
state_after: no goals
Theorem: qrSign.neg_one_pow
File: Mathlib/NumberTheory/LegendreSymbol/JacobiSymbol.lean

tactic: rw [qrSign, pow_mul, ← χ₄_eq_neg_one_pow (odd_iff.mp hm)]
state_before: m n : ℕ
hm : Odd m
hn : Odd n
⊢ qrSign m n = (-1) ^ (m / 2 * (n / 2))
state_after: m n : ℕ
hm : Odd m
hn : Odd n
⊢ J(χ₄ ↑m | n) = χ₄ ↑m ^ (n / 2)

tactic: cases' odd_mod_four_iff.mp (odd_iff.mp hm) with h h
state_before: m n : ℕ
hm : Odd m
hn : Odd n
⊢ J(χ₄ ↑m | n) = χ₄ ↑m ^ (n / 2)
state_after: case inl
m n : ℕ
hm : Odd m
hn : Odd n
h : m % 4 = 1
⊢ J(χ₄ ↑m | n) = χ₄ ↑m ^ (n / 2)

case inr
m n : ℕ
hm : Odd m
hn : Odd n
h : m % 4 = 3
⊢ J(χ₄ ↑m | n) = χ₄ ↑m ^ (n / 2)

tactic: rw [χ₄_nat_one_mod_four h, jacobiSym.one_left, one_pow]
state_before: case inl
m n : ℕ
hm : Odd m
hn : Odd n
h : m % 4 = 1
⊢ J(χ₄ ↑m | n) = χ₄ ↑m ^ (n / 2)
state_after: no goals

tactic: rw [χ₄_nat_three_mod_four h, ← χ₄_eq_neg_one_pow (odd_iff.mp hn), jacobiSym.at_neg_one hn]
state_before: case inr
m n : ℕ
hm : Odd m
hn : Odd n
h : m % 4 = 3
⊢ J(χ₄ ↑m | n) = χ₄ ↑m ^ (n / 2)
state_after: no goals
Theorem: Complex.tan_eq
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Complex.lean

tactic: convert tan_add_mul_I h
state_before: z : ℂ
h :
  ((∀ (k : ℤ), ↑z.re ≠ (2 * ↑k + 1) * ↑π / 2) ∧ ∀ (l : ℤ), ↑z.im * I ≠ (2 * ↑l + 1) * ↑π / 2) ∨
    (∃ k, ↑z.re = (2 * ↑k + 1) * ↑π / 2) ∧ ∃ l, ↑z.im * I = (2 * ↑l + 1) * ↑π / 2
⊢ tan z = (tan ↑z.re + tanh ↑z.im * I) / (1 - tan ↑z.re * tanh ↑z.im * I)
state_after: case h.e'_2.h.e'_1
z : ℂ
h :
  ((∀ (k : ℤ), ↑z.re ≠ (2 * ↑k + 1) * ↑π / 2) ∧ ∀ (l : ℤ), ↑z.im * I ≠ (2 * ↑l + 1) * ↑π / 2) ∨
    (∃ k, ↑z.re = (2 * ↑k + 1) * ↑π / 2) ∧ ∃ l, ↑z.im * I = (2 * ↑l + 1) * ↑π / 2
⊢ z = ↑z.re + ↑z.im * I

tactic: exact (re_add_im z).symm
state_before: case h.e'_2.h.e'_1
z : ℂ
h :
  ((∀ (k : ℤ), ↑z.re ≠ (2 * ↑k + 1) * ↑π / 2) ∧ ∀ (l : ℤ), ↑z.im * I ≠ (2 * ↑l + 1) * ↑π / 2) ∨
    (∃ k, ↑z.re = (2 * ↑k + 1) * ↑π / 2) ∧ ∃ l, ↑z.im * I = (2 * ↑l + 1) * ↑π / 2
⊢ z = ↑z.re + ↑z.im * I
state_after: no goals
Theorem: EuclideanGeometry.dist_div_cos_oangle_left_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: have hs : (∡ p₃ p₁ p₂).sign = 1 := by rw [← oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ dist p₁ p₂ / (∡ p₃ p₁ p₂).cos = dist p₁ p₃
state_after: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₃ p₁ p₂).sign = 1
⊢ dist p₁ p₂ / (∡ p₃ p₁ p₂).cos = dist p₁ p₃

tactic: rw [oangle_eq_angle_of_sign_eq_one hs, angle_comm, Real.Angle.cos_coe, dist_comm p₁ p₃,
  dist_div_cos_angle_of_angle_eq_pi_div_two (angle_rev_eq_pi_div_two_of_oangle_eq_pi_div_two h)
    (Or.inr (left_ne_of_oangle_eq_pi_div_two h))]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₃ p₁ p₂).sign = 1
⊢ dist p₁ p₂ / (∡ p₃ p₁ p₂).cos = dist p₁ p₃
state_after: no goals

tactic: rw [← oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ (∡ p₃ p₁ p₂).sign = 1
state_after: no goals
Theorem: Monoid.CoprodI.induction_left
File: Mathlib/GroupTheory/CoprodI.lean

tactic: induction m using Submonoid.induction_of_closure_eq_top_left mclosure_iUnion_range_of with
| one => exact one
| mul x hx y ihy =>
  obtain ⟨i, m, rfl⟩ : ∃ (i : ι) (m : M i), of m = x := by simpa using hx
  exact mul m y ihy
state_before: ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
C : CoprodI M → Prop
m : CoprodI M
one : C 1
mul : ∀ {i : ι} (m : M i) (x : CoprodI M), C x → C (of m * x)
⊢ C m
state_after: no goals

tactic: exact one
state_before: case one
ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
C : CoprodI M → Prop
one : C 1
mul : ∀ {i : ι} (m : M i) (x : CoprodI M), C x → C (of m * x)
⊢ C 1
state_after: no goals

tactic: obtain ⟨i, m, rfl⟩ : ∃ (i : ι) (m : M i), of m = x := by simpa using hx
state_before: case mul
ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
C : CoprodI M → Prop
one : C 1
mul : ∀ {i : ι} (m : M i) (x : CoprodI M), C x → C (of m * x)
x : CoprodI M
hx : x ∈ ⋃ i, range ⇑of
y : CoprodI M
ihy : C y
⊢ C (x * y)
state_after: case mul.intro.intro
ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
C : CoprodI M → Prop
one : C 1
mul : ∀ {i : ι} (m : M i) (x : CoprodI M), C x → C (of m * x)
y : CoprodI M
ihy : C y
i : ι
m : M i
hx : of m ∈ ⋃ i, range ⇑of
⊢ C (of m * y)

tactic: exact mul m y ihy
state_before: case mul.intro.intro
ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
C : CoprodI M → Prop
one : C 1
mul : ∀ {i : ι} (m : M i) (x : CoprodI M), C x → C (of m * x)
y : CoprodI M
ihy : C y
i : ι
m : M i
hx : of m ∈ ⋃ i, range ⇑of
⊢ C (of m * y)
state_after: no goals

tactic: simpa using hx
state_before: ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
C : CoprodI M → Prop
one : C 1
mul : ∀ {i : ι} (m : M i) (x : CoprodI M), C x → C (of m * x)
x : CoprodI M
hx : x ∈ ⋃ i, range ⇑of
y : CoprodI M
ihy : C y
⊢ ∃ i m, of m = x
state_after: no goals
Theorem: exists_nhds_split_inv
File: Mathlib/Topology/Algebra/Group/Basic.lean

tactic: have : (fun p : G × G => p.1 * p.2⁻¹) ⁻¹' s ∈ 𝓝 ((1, 1) : G × G) :=
  continuousAt_fst.mul continuousAt_snd.inv (by simpa)
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝³ : TopologicalSpace G
inst✝² : Group G
inst✝¹ : TopologicalGroup G
inst✝ : TopologicalSpace α
f : α → G
s✝ : Set α
x : α
s : Set G
hs : s ∈ 𝓝 1
⊢ ∃ V ∈ 𝓝 1, ∀ v ∈ V, ∀ w ∈ V, v / w ∈ s
state_after: G : Type w
H : Type x
α : Type u
β : Type v
inst✝³ : TopologicalSpace G
inst✝² : Group G
inst✝¹ : TopologicalGroup G
inst✝ : TopologicalSpace α
f : α → G
s✝ : Set α
x : α
s : Set G
hs : s ∈ 𝓝 1
this : (fun p => p.1 * p.2⁻¹) ⁻¹' s ∈ 𝓝 (1, 1)
⊢ ∃ V ∈ 𝓝 1, ∀ v ∈ V, ∀ w ∈ V, v / w ∈ s

tactic: simpa only [div_eq_mul_inv, nhds_prod_eq, mem_prod_self_iff, prod_subset_iff, mem_preimage] using
  this
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝³ : TopologicalSpace G
inst✝² : Group G
inst✝¹ : TopologicalGroup G
inst✝ : TopologicalSpace α
f : α → G
s✝ : Set α
x : α
s : Set G
hs : s ∈ 𝓝 1
this : (fun p => p.1 * p.2⁻¹) ⁻¹' s ∈ 𝓝 (1, 1)
⊢ ∃ V ∈ 𝓝 1, ∀ v ∈ V, ∀ w ∈ V, v / w ∈ s
state_after: no goals

tactic: simpa
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝³ : TopologicalSpace G
inst✝² : Group G
inst✝¹ : TopologicalGroup G
inst✝ : TopologicalSpace α
f : α → G
s✝ : Set α
x : α
s : Set G
hs : s ∈ 𝓝 1
⊢ s ∈ 𝓝 ((fun x => x.1 * x.2⁻¹) (1, 1))
state_after: no goals
Theorem: MeasureTheory.IsFundamentalDomain.integral_eq_tsum_of_ac
File: Mathlib/MeasureTheory/Group/FundamentalDomain.lean

tactic: rw [← MeasureTheory.integral_sum_measure, h.sum_restrict_of_ac hν]
state_before: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝¹² : Group G
inst✝¹¹ : Group H
inst✝¹⁰ : MulAction G α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : MulAction H β
inst✝⁷ : MeasurableSpace β
inst✝⁶ : NormedAddCommGroup E
s t : Set α
μ : Measure α
inst✝⁵ : MeasurableSpace G
inst✝⁴ : MeasurableSMul G α
inst✝³ : SMulInvariantMeasure G α μ
inst✝² : Countable G
ν : Measure α
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
h : IsFundamentalDomain G s μ
hν : ν ≪ μ
f : α → E
hf : Integrable f ν
⊢ ∫ (x : α), f x ∂ν = ∑' (g : G), ∫ (x : α) in g • s, f x ∂ν
state_after: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝¹² : Group G
inst✝¹¹ : Group H
inst✝¹⁰ : MulAction G α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : MulAction H β
inst✝⁷ : MeasurableSpace β
inst✝⁶ : NormedAddCommGroup E
s t : Set α
μ : Measure α
inst✝⁵ : MeasurableSpace G
inst✝⁴ : MeasurableSMul G α
inst✝³ : SMulInvariantMeasure G α μ
inst✝² : Countable G
ν : Measure α
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
h : IsFundamentalDomain G s μ
hν : ν ≪ μ
f : α → E
hf : Integrable f ν
⊢ Integrable f (sum fun g => ν.restrict (g • s))

tactic: rw [h.sum_restrict_of_ac hν]
state_before: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝¹² : Group G
inst✝¹¹ : Group H
inst✝¹⁰ : MulAction G α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : MulAction H β
inst✝⁷ : MeasurableSpace β
inst✝⁶ : NormedAddCommGroup E
s t : Set α
μ : Measure α
inst✝⁵ : MeasurableSpace G
inst✝⁴ : MeasurableSMul G α
inst✝³ : SMulInvariantMeasure G α μ
inst✝² : Countable G
ν : Measure α
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
h : IsFundamentalDomain G s μ
hν : ν ≪ μ
f : α → E
hf : Integrable f ν
⊢ Integrable f (sum fun g => ν.restrict (g • s))
state_after: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝¹² : Group G
inst✝¹¹ : Group H
inst✝¹⁰ : MulAction G α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : MulAction H β
inst✝⁷ : MeasurableSpace β
inst✝⁶ : NormedAddCommGroup E
s t : Set α
μ : Measure α
inst✝⁵ : MeasurableSpace G
inst✝⁴ : MeasurableSMul G α
inst✝³ : SMulInvariantMeasure G α μ
inst✝² : Countable G
ν : Measure α
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
h : IsFundamentalDomain G s μ
hν : ν ≪ μ
f : α → E
hf : Integrable f ν
⊢ Integrable f ν

tactic: exact hf
state_before: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝¹² : Group G
inst✝¹¹ : Group H
inst✝¹⁰ : MulAction G α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : MulAction H β
inst✝⁷ : MeasurableSpace β
inst✝⁶ : NormedAddCommGroup E
s t : Set α
μ : Measure α
inst✝⁵ : MeasurableSpace G
inst✝⁴ : MeasurableSMul G α
inst✝³ : SMulInvariantMeasure G α μ
inst✝² : Countable G
ν : Measure α
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
h : IsFundamentalDomain G s μ
hν : ν ≪ μ
f : α → E
hf : Integrable f ν
⊢ Integrable f ν
state_after: no goals
Theorem: Function.Surjective.lieAlgebra_isSolvable
File: Mathlib/Algebra/Lie/Solvable.lean

tactic: obtain ⟨k, hk⟩ := id h₁
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
⊢ IsSolvable R L
state_after: case mk.intro
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
k : ℕ
hk : derivedSeries R L' k = ⊥
⊢ IsSolvable R L

tactic: use k
state_before: case mk.intro
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
k : ℕ
hk : derivedSeries R L' k = ⊥
⊢ IsSolvable R L
state_after: case h
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
k : ℕ
hk : derivedSeries R L' k = ⊥
⊢ derivedSeries R L k = ⊥

tactic: rw [← LieIdeal.derivedSeries_map_eq k h₂, hk]
state_before: case h
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
k : ℕ
hk : derivedSeries R L' k = ⊥
⊢ derivedSeries R L k = ⊥
state_after: case h
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
k : ℕ
hk : derivedSeries R L' k = ⊥
⊢ LieIdeal.map f ⊥ = ⊥

tactic: simp only [LieIdeal.map_eq_bot_iff, bot_le]
state_before: case h
R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
h₁ : IsSolvable R L'
h₂ : Surjective ⇑f
k : ℕ
hk : derivedSeries R L' k = ⊥
⊢ LieIdeal.map f ⊥ = ⊥
state_after: no goals
Theorem: Nat.psub_add
File: Mathlib/Data/Nat/PSub.lean

tactic: induction k with
| zero => simp only [zero_eq, add_zero, psub_zero, Option.bind_eq_bind, Option.bind_some]
| succ n ih => simp only [ih, add_succ, psub_succ, bind_assoc]
state_before: m n k : ℕ
⊢ m.psub (n + k) = do
    let __do_lift ← m.psub n
    __do_lift.psub k
state_after: no goals

tactic: simp only [zero_eq, add_zero, psub_zero, Option.bind_eq_bind, Option.bind_some]
state_before: case zero
m n : ℕ
⊢ m.psub (n + 0) = do
    let __do_lift ← m.psub n
    __do_lift.psub 0
state_after: no goals

tactic: simp only [ih, add_succ, psub_succ, bind_assoc]
state_before: case succ
m n✝ n : ℕ
ih :
  m.psub (n✝ + n) = do
    let __do_lift ← m.psub n✝
    __do_lift.psub n
⊢ m.psub (n✝ + (n + 1)) = do
    let __do_lift ← m.psub n✝
    __do_lift.psub (n + 1)
state_after: no goals
Theorem: Set.image_neg_Ioi
File: Mathlib/Data/Set/Pointwise/Interval.lean

tactic: simp
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ Neg.neg '' Ioi a = Iio (-a)
state_after: no goals
Theorem: Matrix.cons_transpose
File: Mathlib/Data/Matrix/Notation.lean

tactic: ext i j
state_before: α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
v : n' → α
A : Matrix (Fin m) n' α
⊢ (of (vecCons v A))ᵀ = of fun i => vecCons (v i) (Aᵀ i)
state_after: case a
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
v : n' → α
A : Matrix (Fin m) n' α
i : n'
j : Fin m.succ
⊢ (of (vecCons v A))ᵀ i j = of (fun i => vecCons (v i) (Aᵀ i)) i j

tactic: refine Fin.cases ?_ ?_ j <;> simp
state_before: case a
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
v : n' → α
A : Matrix (Fin m) n' α
i : n'
j : Fin m.succ
⊢ (of (vecCons v A))ᵀ i j = of (fun i => vecCons (v i) (Aᵀ i)) i j
state_after: no goals
Theorem: Nat.Prime.dvd_factorial
File: Mathlib/Data/Nat/Prime.lean

tactic: rw [factorial_succ, hp.dvd_mul, Prime.dvd_factorial hp]
state_before: n✝ n p : ℕ
hp : Prime p
⊢ p ∣ (n + 1)! ↔ p ≤ n + 1
state_after: n✝ n p : ℕ
hp : Prime p
⊢ p ∣ n + 1 ∨ p ≤ n ↔ p ≤ n + 1

tactic: exact
  ⟨fun h => h.elim (le_of_dvd (succ_pos _)) le_succ_of_le, fun h =>
    (_root_.lt_or_eq_of_le h).elim (Or.inr ∘ le_of_lt_succ) fun h => Or.inl <| by rw [h]⟩
state_before: n✝ n p : ℕ
hp : Prime p
⊢ p ∣ n + 1 ∨ p ≤ n ↔ p ≤ n + 1
state_after: no goals

tactic: rw [h]
state_before: n✝ n p : ℕ
hp : Prime p
h✝ : p ≤ n + 1
h : p = n + 1
⊢ p ∣ n + 1
state_after: no goals
Theorem: List.get_eq_get_rotate
File: Mathlib/Data/List/Rotate.lean

tactic: rw [get_rotate]
state_before: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ l.get k = (l.rotate n).get ⟨(l.length - n % l.length + ↑k) % l.length, ⋯⟩
state_after: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ l.get k = l.get ⟨(↑⟨(l.length - n % l.length + ↑k) % l.length, ⋯⟩ + n) % l.length, ⋯⟩

tactic: refine congr_arg l.get (Fin.eq_of_val_eq ?_)
state_before: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ l.get k = l.get ⟨(↑⟨(l.length - n % l.length + ↑k) % l.length, ⋯⟩ + n) % l.length, ⋯⟩
state_after: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ ↑k = ↑⟨(↑⟨(l.length - n % l.length + ↑k) % l.length, ⋯⟩ + n) % l.length, ⋯⟩

tactic: simp only [mod_add_mod]
state_before: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ ↑k = ↑⟨(↑⟨(l.length - n % l.length + ↑k) % l.length, ⋯⟩ + n) % l.length, ⋯⟩
state_after: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ ↑k = (l.length - n % l.length + ↑k + n) % l.length

tactic: rw [← add_mod_mod, Nat.add_right_comm, Nat.sub_add_cancel, add_mod_left, mod_eq_of_lt]
state_before: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ ↑k = (l.length - n % l.length + ↑k + n) % l.length
state_after: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ ↑k < l.length

α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ n % l.length ≤ l.length

tactic: exacts [k.2, (mod_lt _ (k.1.zero_le.trans_lt k.2)).le]
state_before: α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ ↑k < l.length

α : Type u
l : List α
n : ℕ
k : Fin l.length
⊢ n % l.length ≤ l.length
state_after: no goals
Theorem: Algebra.trace_comp_trace
File: Mathlib/RingTheory/Trace.lean

tactic: ext
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing T
inst✝¹⁰ : Algebra R S
inst✝⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Algebra K L
ι κ : Type w
inst✝⁵ : Fintype ι
b : Basis ι R S
inst✝⁴ : Algebra K T
inst✝³ : Algebra L T
inst✝² : IsScalarTower K L T
inst✝¹ : FiniteDimensional K L
inst✝ : FiniteDimensional L T
⊢ trace K L ∘ₗ ↑K (trace L T) = trace K T
state_after: case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing T
inst✝¹⁰ : Algebra R S
inst✝⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Algebra K L
ι κ : Type w
inst✝⁵ : Fintype ι
b : Basis ι R S
inst✝⁴ : Algebra K T
inst✝³ : Algebra L T
inst✝² : IsScalarTower K L T
inst✝¹ : FiniteDimensional K L
inst✝ : FiniteDimensional L T
x✝ : T
⊢ (trace K L ∘ₗ ↑K (trace L T)) x✝ = (trace K T) x✝

tactic: rw [LinearMap.comp_apply, LinearMap.restrictScalars_apply, trace_trace]
state_before: case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing T
inst✝¹⁰ : Algebra R S
inst✝⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Algebra K L
ι κ : Type w
inst✝⁵ : Fintype ι
b : Basis ι R S
inst✝⁴ : Algebra K T
inst✝³ : Algebra L T
inst✝² : IsScalarTower K L T
inst✝¹ : FiniteDimensional K L
inst✝ : FiniteDimensional L T
x✝ : T
⊢ (trace K L ∘ₗ ↑K (trace L T)) x✝ = (trace K T) x✝
state_after: no goals
Theorem: Int.ModEq.add_right_cancel
File: Mathlib/Data/Int/ModEq.lean

tactic: rw [add_comm a, add_comm b] at h₂
state_before: m n a b c d : ℤ
h₁ : c ≡ d [ZMOD n]
h₂ : a + c ≡ b + d [ZMOD n]
⊢ a ≡ b [ZMOD n]
state_after: m n a b c d : ℤ
h₁ : c ≡ d [ZMOD n]
h₂ : c + a ≡ d + b [ZMOD n]
⊢ a ≡ b [ZMOD n]

tactic: exact h₁.add_left_cancel h₂
state_before: m n a b c d : ℤ
h₁ : c ≡ d [ZMOD n]
h₂ : c + a ≡ d + b [ZMOD n]
⊢ a ≡ b [ZMOD n]
state_after: no goals
Theorem: Polynomial.eraseLead_monomial
File: Mathlib/Algebra/Polynomial/EraseLead.lean

tactic: by_cases hr : r = 0
state_before: R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
⊢ ((monomial i) r).eraseLead = 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
hr : r = 0
⊢ ((monomial i) r).eraseLead = 0

case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
hr : ¬r = 0
⊢ ((monomial i) r).eraseLead = 0

tactic: subst r
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
hr : r = 0
⊢ ((monomial i) r).eraseLead = 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
⊢ ((monomial i) 0).eraseLead = 0

tactic: simp only [monomial_zero_right, eraseLead_zero]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
⊢ ((monomial i) 0).eraseLead = 0
state_after: no goals

tactic: rw [eraseLead, natDegree_monomial, if_neg hr, erase_monomial]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R[X]
i : ℕ
r : R
hr : ¬r = 0
⊢ ((monomial i) r).eraseLead = 0
state_after: no goals
Theorem: div_pow
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp only [div_eq_mul_inv, mul_pow, inv_pow]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionCommMonoid α
a✝ b✝ c d a b : α
n : ℕ
⊢ (a / b) ^ n = a ^ n / b ^ n
state_after: no goals
Theorem: norm_algebraMap'
File: Mathlib/Analysis/NormedSpace/Basic.lean

tactic: rw [norm_algebraMap, norm_one, mul_one]
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
F : Type u_4
α : Type u_5
inst✝³ : NormedField 𝕜
inst✝² : SeminormedRing 𝕜'
inst✝¹ : NormedAlgebra 𝕜 𝕜'
inst✝ : NormOneClass 𝕜'
x : 𝕜
⊢ ‖(algebraMap 𝕜 𝕜') x‖ = ‖x‖
state_after: no goals