ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Matrix.det_of_card_zero
File: Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean

Proof steps:
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : Fintype.card n = 0
M : Matrix n n R
⊢ M.det = 1
state_after: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : IsEmpty n
M : Matrix n n R
⊢ M.det = 1
tactic: rw [Fintype.card_eq_zero_iff] at h
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : IsEmpty n
M : Matrix n n R
⊢ M.det = 1
state_after: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : IsEmpty n
M : Matrix n n R
⊢ M = 1
tactic: suffices M = 1 by simp [this]
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : IsEmpty n
M : Matrix n n R
⊢ M = 1
state_after: case a
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : IsEmpty n
M : Matrix n n R
i j✝ : n
⊢ M i j✝ = 1 i j✝
tactic: ext i
state_before: case a
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ : Matrix n n R
h : IsEmpty n
M : Matrix n n R
i j✝ : n
⊢ M i j✝ = 1 i j✝
state_after: no goals
tactic: exact h.elim i
Theorem: Set.Icc_mul_Ico_subset'
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b c d : α
⊢ Icc a b * Ico c d ⊆ Ico (a * c) (b * d)
state_after: α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b c d : α
this :
  ∀ (M : Type ?u.3042) (N : Type ?u.3041) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
⊢ Icc a b * Ico c d ⊆ Ico (a * c) (b * d)
tactic: haveI := covariantClass_le_of_lt
state_before: α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b c d : α
this :
  ∀ (M : Type ?u.3042) (N : Type ?u.3041) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
⊢ Icc a b * Ico c d ⊆ Ico (a * c) (b * d)
state_after: case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b c d : α
this :
  ∀ (M : Type ?u.3042) (N : Type ?u.3041) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
y : α
hya : a ≤ y
hyb : y ≤ b
z : α
hzc : c ≤ z
hzd : z < d
⊢ (fun x x_1 => x * x_1) y z ∈ Ico (a * c) (b * d)
tactic: rintro x ⟨y, ⟨hya, hyb⟩, z, ⟨hzc, hzd⟩, rfl⟩
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : Mul α
inst✝² : PartialOrder α
inst✝¹ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
a b c d : α
this :
  ∀ (M : Type ?u.3042) (N : Type ?u.3041) (μ : M → N → N) [inst : PartialOrder N]
    [inst_1 : CovariantClass M N μ fun x x_1 => x < x_1], CovariantClass M N μ fun x x_1 => x ≤ x_1
y : α
hya : a ≤ y
hyb : y ≤ b
z : α
hzc : c ≤ z
hzd : z < d
⊢ (fun x x_1 => x * x_1) y z ∈ Ico (a * c) (b * d)
state_after: no goals
tactic: exact ⟨mul_le_mul' hya hzc, mul_lt_mul_of_le_of_lt hyb hzd⟩
Theorem: Complex.arg_eq_pi_div_two_iff
File: Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean

Proof steps:
state_before: a x z✝ z : ℂ
⊢ z.arg = π / 2 ↔ z.re = 0 ∧ 0 < z.im
state_after: case pos
a x z✝ z : ℂ
h₀ : z = 0
⊢ z.arg = π / 2 ↔ z.re = 0 ∧ 0 < z.im

case neg
a x z✝ z : ℂ
h₀ : ¬z = 0
⊢ z.arg = π / 2 ↔ z.re = 0 ∧ 0 < z.im
tactic: by_cases h₀ : z = 0
state_before: case neg
a x z✝ z : ℂ
h₀ : ¬z = 0
⊢ z.arg = π / 2 ↔ z.re = 0 ∧ 0 < z.im
state_after: case neg.mp
a x z✝ z : ℂ
h₀ : ¬z = 0
⊢ z.arg = π / 2 → z.re = 0 ∧ 0 < z.im

case neg.mpr
a x z✝ z : ℂ
h₀ : ¬z = 0
⊢ z.re = 0 ∧ 0 < z.im → z.arg = π / 2
tactic: constructor
Theorem: Set.Finite.pi
File: Mathlib/Data/Set/Finite.lean

Proof steps:
state_before: α : Type u
β : Type v
ι✝ : Sort w
γ : Type x
ι : Type u_1
inst✝ : Finite ι
κ : ι → Type u_2
t : (i : ι) → Set (κ i)
ht : ∀ (i : ι), (t i).Finite
⊢ (univ.pi t).Finite
state_after: case intro
α : Type u
β : Type v
ι✝ : Sort w
γ : Type x
ι : Type u_1
inst✝ : Finite ι
κ : ι → Type u_2
t : (i : ι) → Set (κ i)
ht : ∀ (i : ι), (t i).Finite
val✝ : Fintype ι
⊢ (univ.pi t).Finite
tactic: cases nonempty_fintype ι
state_before: case intro
α : Type u
β : Type v
ι✝ : Sort w
γ : Type x
ι : Type u_1
inst✝ : Finite ι
κ : ι → Type u_2
t : (i : ι) → Set (κ i)
ht : ∀ (i : ι), (t i).Finite
val✝ : Fintype ι
⊢ (univ.pi t).Finite
state_after: case intro.intro
α : Type u
β : Type v
ι✝ : Sort w
γ : Type x
ι : Type u_1
inst✝ : Finite ι
κ : ι → Type u_2
val✝ : Fintype ι
t : (i : ι) → Finset (κ i)
⊢ (univ.pi fun i => ↑(t i)).Finite
tactic: lift t to ∀ d, Finset (κ d) using ht
state_before: case intro.intro
α : Type u
β : Type v
ι✝ : Sort w
γ : Type x
ι : Type u_1
inst✝ : Finite ι
κ : ι → Type u_2
val✝ : Fintype ι
t : (i : ι) → Finset (κ i)
⊢ (univ.pi fun i => ↑(t i)).Finite
state_after: no goals
tactic: classical
    rw [← Fintype.coe_piFinset]
    apply Finset.finite_toSet
Theorem: Asymptotics.isBigOWith_zero'
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
E' : Type u_6
F' : Type u_7
G' : Type u_8
E'' : Type u_9
F'' : Type u_10
G'' : Type u_11
E''' : Type u_12
R : Type u_13
R' : Type u_14
𝕜 : Type u_15
𝕜' : Type u_16
inst✝¹³ : Norm E
inst✝¹² : Norm F
inst✝¹¹ : Norm G
inst✝¹⁰ : SeminormedAddCommGroup E'
inst✝⁹ : SeminormedAddCommGroup F'
inst✝⁸ : SeminormedAddCommGroup G'
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedAddCommGroup F''
inst✝⁵ : NormedAddCommGroup G''
inst✝⁴ : SeminormedRing R
inst✝³ : SeminormedAddGroup E'''
inst✝² : SeminormedRing R'
inst✝¹ : NormedDivisionRing 𝕜
inst✝ : NormedDivisionRing 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
x : α
⊢ x ∈ {x | (fun x => ‖0‖ ≤ 0 * ‖g x‖) x}
state_after: no goals
tactic: simp
Theorem: LucasLehmer.ω_pow_eq_one
File: Mathlib/NumberTheory/LucasLehmer.lean

Proof steps:
state_before: p' : ℕ
h : lucasLehmerResidue (p' + 2) = 0
⊢ ω ^ 2 ^ (p' + 2) = (ω ^ 2 ^ (p' + 1)) ^ 2
state_after: no goals
tactic: rw [← pow_mul, ← Nat.pow_succ]
state_before: p' : ℕ
h : lucasLehmerResidue (p' + 2) = 0
⊢ (ω ^ 2 ^ (p' + 1)) ^ 2 = (-1) ^ 2
state_after: no goals
tactic: rw [ω_pow_eq_neg_one p' h]
state_before: p' : ℕ
h : lucasLehmerResidue (p' + 2) = 0
⊢ (-1) ^ 2 = 1
state_after: no goals
tactic: simp
Theorem: Set.mulIndicator_preimage_of_not_mem
File: Mathlib/Algebra/Group/Indicator.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
M : Type u_4
N : Type u_5
inst✝¹ : One M
inst✝ : One N
s✝ t✝ : Set α
f✝ g : α → M
a : α
s : Set α
f : α → M
t : Set M
ht : 1 ∉ t
⊢ s.mulIndicator f ⁻¹' t = f ⁻¹' t ∩ s
state_after: no goals
tactic: simp [mulIndicator_preimage, Pi.one_def, Set.preimage_const_of_not_mem ht]
Theorem: eq_on_inv₀
File: Mathlib/Algebra/GroupWithZero/Units/Lemmas.lean

Proof steps:
state_before: α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁷ : MonoidWithZero M₀
inst✝⁶ : GroupWithZero G₀
inst✝⁵ : Nontrivial M₀
inst✝⁴ : MonoidWithZero M₀'
inst✝³ : FunLike F G₀ M₀
inst✝² : MonoidWithZeroHomClass F G₀ M₀
inst✝¹ : FunLike F' G₀ M₀'
f✝ : F
a : G₀
inst✝ : MonoidWithZeroHomClass F' G₀ M₀'
f g : F'
h : f a = g a
⊢ f a⁻¹ = g a⁻¹
state_after: case inl
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁷ : MonoidWithZero M₀
inst✝⁶ : GroupWithZero G₀
inst✝⁵ : Nontrivial M₀
inst✝⁴ : MonoidWithZero M₀'
inst✝³ : FunLike F G₀ M₀
inst✝² : MonoidWithZeroHomClass F G₀ M₀
inst✝¹ : FunLike F' G₀ M₀'
f✝ : F
inst✝ : MonoidWithZeroHomClass F' G₀ M₀'
f g : F'
h : f 0 = g 0
⊢ f 0⁻¹ = g 0⁻¹

case inr
α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝⁷ : MonoidWithZero M₀
inst✝⁶ : GroupWithZero G₀
inst✝⁵ : Nontrivial M₀
inst✝⁴ : MonoidWithZero M₀'
inst✝³ : FunLike F G₀ M₀
inst✝² : MonoidWithZeroHomClass F G₀ M₀
inst✝¹ : FunLike F' G₀ M₀'
f✝ : F
a : G₀
inst✝ : MonoidWithZeroHomClass F' G₀ M₀'
f g : F'
h : f a = g a
ha : a ≠ 0
⊢ f a⁻¹ = g a⁻¹
tactic: rcases eq_or_ne a 0 with (rfl | ha)
Theorem: MeasureTheory.Integrable.add'
File: Mathlib/MeasureTheory/Function/L1Space.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝² : MeasurableSpace δ
inst✝¹ : NormedAddCommGroup β
inst✝ : NormedAddCommGroup γ
f g : α → β
hf : Integrable f μ
hg : Integrable g μ
a : α
⊢ ↑‖f a + g a‖₊ ≤ ↑‖f a‖₊ + ↑‖g a‖₊
state_after: no goals
tactic: exact mod_cast nnnorm_add_le _ _
Theorem: Module.Baer.ExtensionOfMaxAdjoin.extendIdealTo_wd
File: Mathlib/Algebra/Module/Injective.lean

Proof steps:
state_before: R : Type u
inst✝⁷ : Ring R
Q : Type v
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M : Type u_1
N : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ⇑i)
h : Baer R Q
y : N
r r' : R
eq1 : r • y = r' • y
⊢ (extendIdealTo i f h y) r = (extendIdealTo i f h y) r'
state_after: R : Type u
inst✝⁷ : Ring R
Q : Type v
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M : Type u_1
N : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ⇑i)
h : Baer R Q
y : N
r r' : R
eq1 : r • y = r' • y
⊢ (extendIdealTo i f h y) (r - r') = 0
tactic: rw [← sub_eq_zero, ← map_sub]
state_before: R : Type u
inst✝⁷ : Ring R
Q : Type v
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M : Type u_1
N : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ⇑i)
h : Baer R Q
y : N
r r' : R
eq1 : r • y = r' • y
⊢ (extendIdealTo i f h y) (r - r') = 0
state_after: case convert_2
R : Type u
inst✝⁷ : Ring R
Q : Type v
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M : Type u_1
N : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ⇑i)
h : Baer R Q
y : N
r r' : R
eq1 : r • y = r' • y
⊢ (r - r') • y = 0
tactic: convert ExtensionOfMaxAdjoin.extendIdealTo_wd' i f h (r - r') _
state_before: case convert_2
R : Type u
inst✝⁷ : Ring R
Q : Type v
inst✝⁶ : AddCommGroup Q
inst✝⁵ : Module R Q
M : Type u_1
N : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : AddCommGroup N
inst✝² : Module R M
inst✝¹ : Module R N
i : M →ₗ[R] N
f : M →ₗ[R] Q
inst✝ : Fact (Function.Injective ⇑i)
h : Baer R Q
y : N
r r' : R
eq1 : r • y = r' • y
⊢ (r - r') • y = 0
state_after: no goals
tactic: rw [sub_smul, sub_eq_zero, eq1]
Theorem: List.join_filter_ne_nil
File: Mathlib/Data/List/Join.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidablePred fun l => l ≠ []
L : List (List α)
⊢ (filter (fun l => decide (l ≠ [])) L).join = L.join
state_after: no goals
tactic: simp [join_filter_not_isEmpty, ← isEmpty_iff_eq_nil]
Theorem: List.or_exists_of_exists_mem_cons
File: Mathlib/Data/List/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
a : α
l : List α
x✝ : ∃ x, x ∈ a :: l ∧ p x
x : α
xal : x ∈ a :: l
px : p x
h : x = a
⊢ p a ∨ ∃ x, x ∈ l ∧ p x
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
a : α
l : List α
x✝ : ∃ x, x ∈ a :: l ∧ p x
x : α
xal : x ∈ a :: l
px : p x
h : x = a
⊢ p x ∨ ∃ x, x ∈ l ∧ p x
tactic: rw [← h]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
a : α
l : List α
x✝ : ∃ x, x ∈ a :: l ∧ p x
x : α
xal : x ∈ a :: l
px : p x
h : x = a
⊢ p x ∨ ∃ x, x ∈ l ∧ p x
state_after: case h
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
a : α
l : List α
x✝ : ∃ x, x ∈ a :: l ∧ p x
x : α
xal : x ∈ a :: l
px : p x
h : x = a
⊢ p x
tactic: left
state_before: case h
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Prop
a : α
l : List α
x✝ : ∃ x, x ∈ a :: l ∧ p x
x : α
xal : x ∈ a :: l
px : p x
h : x = a
⊢ p x
state_after: no goals
tactic: exact px
Theorem: Matrix.compl_apply
File: Mathlib/Combinatorics/SimpleGraph/AdjMatrix.lean

Proof steps:
state_before: V : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : DecidableEq α
inst✝² : DecidableEq V
A : Matrix V V α
inst✝¹ : Zero α
inst✝ : One α
i j : V
⊢ A.compl i j = 0 ∨ A.compl i j = 1
state_after: V : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : DecidableEq α
inst✝² : DecidableEq V
A : Matrix V V α
inst✝¹ : Zero α
inst✝ : One α
i j : V
⊢ (if i = j then 0 else if A i j = 0 then 1 else 0) = 0 ∨ (if i = j then 0 else if A i j = 0 then 1 else 0) = 1
tactic: unfold compl
state_before: V : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : DecidableEq α
inst✝² : DecidableEq V
A : Matrix V V α
inst✝¹ : Zero α
inst✝ : One α
i j : V
⊢ (if i = j then 0 else if A i j = 0 then 1 else 0) = 0 ∨ (if i = j then 0 else if A i j = 0 then 1 else 0) = 1
state_after: no goals
tactic: split_ifs <;> simp
Theorem: Finset.prod_pair
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✝¹ : CommMonoid β
inst✝ : DecidableEq α
a b : α
h : a ≠ b
⊢ ∏ x ∈ {a, b}, f x = f a * f b
state_after: no goals
tactic: rw [prod_insert (not_mem_singleton.2 h), prod_singleton]
Theorem: Computation.bind_assoc
File: Mathlib/Data/Seq/Computation.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
s : Computation α
f : α → Computation β
g : β → Computation γ
⊢ (s.bind f).bind g = s.bind fun x => (f x).bind g
state_after: case bisim
α : Type u
β : Type v
γ : Type w
s : Computation α
f : α → Computation β
g : β → Computation γ
⊢ IsBisimulation fun c₁ c₂ => c₁ = c₂ ∨ ∃ s, c₁ = (s.bind f).bind g ∧ c₂ = s.bind fun x => (f x).bind g

case r
α : Type u
β : Type v
γ : Type w
s : Computation α
f : α → Computation β
g : β → Computation γ
⊢ ((s.bind f).bind g = s.bind fun x => (f x).bind g) ∨
    ∃ s_1, (s.bind f).bind g = (s_1.bind f).bind g ∧ (s.bind fun x => (f x).bind g) = s_1.bind fun x => (f x).bind g
tactic: apply
    eq_of_bisim fun c₁ c₂ =>
      c₁ = c₂ ∨ ∃ s, c₁ = bind (bind s f) g ∧ c₂ = bind s fun x : α => bind (f x) g
Theorem: Sat.Valuation.mk_implies
File: Mathlib/Tactic/Sat/FromLRAT.lean

Proof steps:
state_before: p : Prop
as ps as₁ : List Prop
⊢ as = as₁.reverseAux ps → (mk as).implies p ps as₁.length → p
state_after: no goals
tactic: induction ps generalizing as₁ with
  | nil => exact fun _ ↦ id
  | cons a as ih =>
    refine fun e H ↦ @ih (a::as₁) e (H ?_)
    subst e; clear ih H
    suffices ∀ n n', n' = List.length as₁ + n →
      ∀ bs, mk (as₁.reverseAux bs) n' ↔ mk bs n from this 0 _ rfl (a::as)
    induction as₁ with simp
    | cons b as₁ ih => exact fun n bs ↦ ih (n+1) _ (Nat.succ_add ..) _
Theorem: Ideal.IsIntegralClosure.eq_bot_of_comap_eq_bot
File: Mathlib/RingTheory/Ideal/Over.lean

Proof steps:
state_before: R : Type u_1
inst✝⁹ : CommRing R
S : Type u_2
inst✝⁸ : CommRing S
f : R →+* S
I✝ J : Ideal S
inst✝⁷ : Algebra R S
A : Type u_3
inst✝⁶ : CommRing A
inst✝⁵ : Algebra R A
inst✝⁴ : Algebra A S
inst✝³ : IsScalarTower R A S
inst✝² : IsIntegralClosure A R S
inst✝¹ : IsDomain A
inst✝ : Nontrivial R
I : Ideal A
⊢ comap (algebraMap R A) I = ⊥ → I = ⊥
state_after: R : Type u_1
inst✝⁹ : CommRing R
S : Type u_2
inst✝⁸ : CommRing S
f : R →+* S
I✝ J : Ideal S
inst✝⁷ : Algebra R S
A : Type u_3
inst✝⁶ : CommRing A
inst✝⁵ : Algebra R A
inst✝⁴ : Algebra A S
inst✝³ : IsScalarTower R A S
inst✝² : IsIntegralClosure A R S
inst✝¹ : IsDomain A
inst✝ : Nontrivial R
I : Ideal A
⊢ ¬I = ⊥ → ¬comap (algebraMap R A) I = ⊥
tactic: contrapose
state_before: R : Type u_1
inst✝⁹ : CommRing R
S : Type u_2
inst✝⁸ : CommRing S
f : R →+* S
I✝ J : Ideal S
inst✝⁷ : Algebra R S
A : Type u_3
inst✝⁶ : CommRing A
inst✝⁵ : Algebra R A
inst✝⁴ : Algebra A S
inst✝³ : IsScalarTower R A S
inst✝² : IsIntegralClosure A R S
inst✝¹ : IsDomain A
inst✝ : Nontrivial R
I : Ideal A
⊢ ¬I = ⊥ → ¬comap (algebraMap R A) I = ⊥
state_after: no goals
tactic: exact (IsIntegralClosure.comap_ne_bot S)
Theorem: TopologicalSpace.Opens.ne_bot_iff_nonempty
File: Mathlib/Topology/Sets/Opens.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
U : Opens α
⊢ U ≠ ⊥ ↔ (↑U).Nonempty
state_after: no goals
tactic: rw [Ne, ← not_nonempty_iff_eq_bot, not_not]
Theorem: max_zero_add_max_neg_zero_eq_abs_self
File: Mathlib/Algebra/Order/Group/Abs.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b c d a : α
⊢ max a 0 + max (-a) 0 = |a|
state_after: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b c d a : α
⊢ |a| = max a 0 + max (-a) 0
tactic: symm
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
a✝ b c d a : α
⊢ |a| = max a 0 + max (-a) 0
state_after: no goals
tactic: rcases le_total 0 a with (ha | ha) <;> simp [ha]
Theorem: nhds_le_nhdsSet_iff
File: Mathlib/Topology/Separation.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s : Set X
x : X
⊢ 𝓝 x ≤ 𝓝ˢ s ↔ x ∈ s
state_after: no goals
tactic: rw [← nhdsSet_singleton, nhdsSet_le_iff, singleton_subset_iff]
Theorem: CategoryTheory.Linear.rightComp_apply
File: Mathlib/CategoryTheory/Linear/Basic.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type w
inst✝¹ : Semiring R
inst✝ : Linear R C
X Y Z : C
g : Y ⟶ Z
⊢ ∀ (x y : X ⟶ Y), (fun f => f ≫ g) (x + y) = (fun f => f ≫ g) x + (fun f => f ≫ g) y
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type w
inst✝¹ : Semiring R
inst✝ : Linear R C
X Y Z : C
g : Y ⟶ Z
⊢ ∀ (m : R) (x : X ⟶ Y),
    { toFun := fun f => f ≫ g, map_add' := ⋯ }.toFun (m • x) =
      (RingHom.id R) m • { toFun := fun f => f ≫ g, map_add' := ⋯ }.toFun x
state_after: no goals
tactic: simp
Theorem: oneOneReducible_refl
File: Mathlib/Computability/Reduce.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Primcodable α
p : α → Prop
⊢ ∀ (a : α), p a ↔ p (id a)
state_after: no goals
tactic: simp
Theorem: QuotientAddGroup.equivIocMod_symm_apply
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 : ℤ
a : α
b : α ⧸ AddSubgroup.zmultiples p
⊢ (fun x => ↑↑x) ((fun b => ⟨⋯.lift b, ⋯⟩) b) = b
state_after: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ (fun x => ↑↑x) ((fun b => ⟨⋯.lift b, ⋯⟩) ↑z✝) = ↑z✝
tactic: induction b using QuotientAddGroup.induction_on'
state_before: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ (fun x => ↑↑x) ((fun b => ⟨⋯.lift b, ⋯⟩) ↑z✝) = ↑z✝
state_after: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ ↑(toIocMod hp a z✝) = ↑z✝
tactic: dsimp
state_before: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ ↑(toIocMod hp a z✝) = ↑z✝
state_after: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ -toIocDiv hp a z✝ • p ∈ AddSubgroup.zmultiples p
tactic: rw [QuotientAddGroup.eq_iff_sub_mem, toIocMod_sub_self]
state_before: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ -toIocDiv hp a z✝ • p ∈ AddSubgroup.zmultiples p
state_after: no goals
tactic: apply AddSubgroup.zsmul_mem_zmultiples
Theorem: Basis.repr_sum_self
File: Mathlib/LinearAlgebra/Basis.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁵ : Semiring R
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
inst✝² : AddCommMonoid M'
inst✝¹ : Module R M'
inst✝ : Fintype ι
b : Basis ι R M
c : ι → R
⊢ ⇑(b.repr (∑ i : ι, c i • b i)) = c
state_after: no goals
tactic: simp_rw [← b.equivFun_symm_apply, ← b.equivFun_apply, b.equivFun.apply_symm_apply]
Theorem: Finset.weightedVSubVSubWeights_apply_left
File: Mathlib/LinearAlgebra/AffineSpace/Combination.lean

Proof steps:
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq ι
i j : ι
h : i ≠ j
⊢ weightedVSubVSubWeights k i j i = 1
state_after: no goals
tactic: simp [weightedVSubVSubWeights, h]
Theorem: Polynomial.coeff_C_mul_X_pow
File: Mathlib/Algebra/Polynomial/Coeff.lean

Proof steps:
state_before: R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k n : ℕ
⊢ (C x * X ^ k).coeff n = if n = k then x else 0
state_after: R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k n : ℕ
⊢ (if k = n then x else 0) = if n = k then x else 0
tactic: rw [C_mul_X_pow_eq_monomial, coeff_monomial]
state_before: R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k n : ℕ
⊢ (if k = n then x else 0) = if n = k then x else 0
state_after: case e_c
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k n : ℕ
⊢ (k = n) = (n = k)
tactic: congr 1
state_before: case e_c
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
x : R
k n : ℕ
⊢ (k = n) = (n = k)
state_after: no goals
tactic: simp [eq_comm]
Theorem: Finset.Ico_subset_Ico_iff
File: Mathlib/Order/Interval/Finset/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LocallyFiniteOrder α
a b a₁ b₁ a₂ b₂ : α
h : a₁ < b₁
⊢ Ico a₁ b₁ ⊆ Ico a₂ b₂ ↔ a₂ ≤ a₁ ∧ b₁ ≤ b₂
state_after: no goals
tactic: rw [← coe_subset, coe_Ico, coe_Ico, Set.Ico_subset_Ico_iff h]
Theorem: Polynomial.monomial_one_eq_iff
File: Mathlib/Algebra/Polynomial/Monomial.lean

Proof steps:
state_before: R : Type u
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Nontrivial R
i j : ℕ
⊢ (monomial i) 1 = (monomial j) 1 ↔ i = j
state_after: R : Type u
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Nontrivial R
i j : ℕ
⊢ Finsupp.single i 1 = Finsupp.single j 1 ↔ i = j
tactic: simp_rw [← ofFinsupp_single, ofFinsupp.injEq]
state_before: R : Type u
a b : R
m n : ℕ
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Nontrivial R
i j : ℕ
⊢ Finsupp.single i 1 = Finsupp.single j 1 ↔ i = j
state_after: no goals
tactic: exact AddMonoidAlgebra.of_injective.eq_iff