tasksource/leandojo huggingface dataset:
Theorem: Nat.factorization_centralBinom_of_two_mul_self_lt_three_mul
File: Mathlib/Data/Nat/Choose/Factorization.lean

tactic: refine' factorization_choose_of_lt_three_mul _ p_le_n (p_le_n.trans _) big
state_before: p n k : ℕ
n_big : 2 < n
p_le_n : p ≤ n
big : 2 * n < 3 * p
⊢ ↑(factorization (centralBinom n)) p = 0

tactic: rintro rfl
state_before: case refine'_1
p n k : ℕ
n_big : 2 < n
p_le_n : p ≤ n
big : 2 * n < 3 * p
⊢ p ≠ 2

tactic: linarith
state_before: case refine'_1
n k : ℕ
n_big : 2 < n
p_le_n : 2 ≤ n
big : 2 * n < 3 * 2
⊢ False

tactic: rw [two_mul, add_tsub_cancel_left]
state_before: case refine'_2
p n k : ℕ
n_big : 2 < n
p_le_n : p ≤ n
big : 2 * n < 3 * p
⊢ n ≤ 2 * n - n
Theorem: Polynomial.exists_irreducible_of_natDegree_pos
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: contrapose! hf
state_before: R✝ : Type u
S : Type ?u.662441
σ : Type v
M : Type w
inst✝⁶ : CommRing R✝
inst✝⁵ : CommRing S
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
R : Type u
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : WfDvdMonoid R
f : R[X]
hf : 0 < natDegree f
⊢ 0 < degree f

tactic: exact natDegree_le_of_degree_le hf
state_before: R✝ : Type u
S : Type ?u.662441
σ : Type v
M : Type w
inst✝⁶ : CommRing R✝
inst✝⁵ : CommRing S
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
R : Type u
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : WfDvdMonoid R
f : R[X]
hf : degree f ≤ 0
⊢ natDegree f ≤ 0
Theorem: Nat.mul_add_mod
File: Mathlib/Data/Nat/Basic.lean

tactic: simp [Nat.add_mod]
state_before: m n k a b c : ℕ
⊢ (a * b + c) % b = c % b
Theorem: Stirling.stirlingSeq_has_pos_limit_a
File: Mathlib/Analysis/SpecialFunctions/Stirling.lean

tactic: obtain ⟨x, x_pos, hx⟩ := stirlingSeq'_bounded_by_pos_constant
state_before: ⊢ ∃ a, 0 < a ∧ Tendsto stirlingSeq atTop (𝓝 a)

tactic: have hx' : x ∈ lowerBounds (Set.range (stirlingSeq ∘ succ)) := by simpa [lowerBounds] using hx
state_before: case intro.intro
x : ℝ
x_pos : 0 < x
hx : ∀ (n : ℕ), x ≤ stirlingSeq (succ n)
⊢ ∃ a, 0 < a ∧ Tendsto stirlingSeq atTop (𝓝 a)

tactic: refine' ⟨_, lt_of_lt_of_le x_pos (le_csInf (Set.range_nonempty _) hx'), _⟩
state_before: case intro.intro
x : ℝ
x_pos : 0 < x
hx : ∀ (n : ℕ), x ≤ stirlingSeq (succ n)
hx' : x ∈ lowerBounds (Set.range (stirlingSeq ∘ succ))
⊢ ∃ a, 0 < a ∧ Tendsto stirlingSeq atTop (𝓝 a)

tactic: rw [← Filter.tendsto_add_atTop_iff_nat 1]
state_before: case intro.intro
x : ℝ
x_pos : 0 < x
hx : ∀ (n : ℕ), x ≤ stirlingSeq (succ n)
hx' : x ∈ lowerBounds (Set.range (stirlingSeq ∘ succ))
⊢ Tendsto stirlingSeq atTop (𝓝 (sInf (Set.range (stirlingSeq ∘ succ))))

tactic: exact tendsto_atTop_ciInf stirlingSeq'_antitone ⟨x, hx'⟩
state_before: case intro.intro
x : ℝ
x_pos : 0 < x
hx : ∀ (n : ℕ), x ≤ stirlingSeq (succ n)
hx' : x ∈ lowerBounds (Set.range (stirlingSeq ∘ succ))
⊢ Tendsto (fun n => stirlingSeq (n + 1)) atTop (𝓝 (sInf (Set.range (stirlingSeq ∘ succ))))

tactic: simpa [lowerBounds] using hx
state_before: x : ℝ
x_pos : 0 < x
hx : ∀ (n : ℕ), x ≤ stirlingSeq (succ n)
⊢ x ∈ lowerBounds (Set.range (stirlingSeq ∘ succ))
Theorem: conj_cong_is_cong
File: Mathlib/NumberTheory/ModularForms/CongruenceSubgroups.lean

tactic: obtain ⟨N, HN⟩ := h
state_before: N : ℕ
g : ConjAct SL(2, ℤ)
Γ : Subgroup SL(2, ℤ)
h : IsCongruenceSubgroup Γ
⊢ IsCongruenceSubgroup (g • Γ)

tactic: refine' ⟨N, _⟩
state_before: case intro
N✝ : ℕ
g : ConjAct SL(2, ℤ)
Γ : Subgroup SL(2, ℤ)
N : ℕ+
HN : Gamma ↑N ≤ Γ
⊢ IsCongruenceSubgroup (g • Γ)

tactic: rw [← Gamma_cong_eq_self N g, Subgroup.pointwise_smul_le_pointwise_smul_iff]
state_before: case intro
N✝ : ℕ
g : ConjAct SL(2, ℤ)
Γ : Subgroup SL(2, ℤ)
N : ℕ+
HN : Gamma ↑N ≤ Γ
⊢ Gamma ↑N ≤ g • Γ

tactic: exact HN
state_before: case intro
N✝ : ℕ
g : ConjAct SL(2, ℤ)
Γ : Subgroup SL(2, ℤ)
N : ℕ+
HN : Gamma ↑N ≤ Γ
⊢ Gamma ↑N ≤ Γ
Theorem: Ioo_mem_nhdsWithin_Ioi
File: Mathlib/Topology/Order/Basic.lean

tactic: rw [inter_comm, Ioi_inter_Iio]
state_before: α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderClosedTopology α
a✝ b✝ : α
inst✝ : TopologicalSpace γ
a b c : α
H : b ∈ Ico a c
⊢ Iio c ∩ Ioi b ⊆ Ioo a c

tactic: exact Ioo_subset_Ioo_left H.1
state_before: α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderClosedTopology α
a✝ b✝ : α
inst✝ : TopologicalSpace γ
a b c : α
H : b ∈ Ico a c
⊢ Ioo b c ⊆ Ioo a c
Theorem: LinearMap.trace_mul_comm
File: Mathlib/LinearAlgebra/Trace.lean

tactic: let ⟨s, ⟨b⟩⟩ := H
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type ?u.257671
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
⊢ ↑(trace R M) (f * g) = ↑(trace R M) (g * f)

tactic: simp_rw [trace_eq_matrix_trace R b, LinearMap.toMatrix_mul]
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type ?u.257671
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b✝ : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
s : Finset M
b : Basis { x // x ∈ s } R M
⊢ ↑(trace R M) (f * g) = ↑(trace R M) (g * f)

tactic: apply Matrix.trace_mul_comm
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type ?u.257671
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b✝ : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ∃ s, Nonempty (Basis { x // x ∈ s } R M)
s : Finset M
b : Basis { x // x ∈ s } R M
⊢ Matrix.trace (↑(toMatrix b b) f ⬝ ↑(toMatrix b b) g) = Matrix.trace (↑(toMatrix b b) g ⬝ ↑(toMatrix b b) f)

tactic: rw [trace, dif_neg H, LinearMap.zero_apply, LinearMap.zero_apply]
state_before: R : Type u
inst✝⁶ : CommSemiring R
M : Type v
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
ι : Type w
inst✝³ : DecidableEq ι
inst✝² : Fintype ι
κ : Type ?u.257671
inst✝¹ : DecidableEq κ
inst✝ : Fintype κ
b : Basis ι R M
c : Basis κ R M
f g : M →ₗ[R] M
H : ¬∃ s, Nonempty (Basis { x // x ∈ s } R M)
⊢ ↑(trace R M) (f * g) = ↑(trace R M) (g * f)
Theorem: PNat.XgcdType.step_wf
File: Mathlib/Data/PNat/Xgcd.lean

tactic: change u.r - 1 < u.bp
state_before: u : XgcdType
hr : r u ≠ 0
⊢ sizeOf (step u) < sizeOf u

tactic: have h₀ : u.r - 1 + 1 = u.r := Nat.succ_pred_eq_of_pos (Nat.pos_of_ne_zero hr)
state_before: u : XgcdType
hr : r u ≠ 0
⊢ r u - 1 < u.bp

tactic: have h₁ : u.r < u.bp + 1 := Nat.mod_lt (u.ap + 1) u.bp.succ_pos
state_before: u : XgcdType
hr : r u ≠ 0
h₀ : r u - 1 + 1 = r u
⊢ r u - 1 < u.bp

tactic: rw [← h₀] at h₁
state_before: u : XgcdType
hr : r u ≠ 0
h₀ : r u - 1 + 1 = r u
h₁ : r u < u.bp + 1
⊢ r u - 1 < u.bp

tactic: exact lt_of_succ_lt_succ h₁
state_before: u : XgcdType
hr : r u ≠ 0
h₀ : r u - 1 + 1 = r u
h₁ : r u - 1 + 1 < u.bp + 1
⊢ r u - 1 < u.bp
Theorem: Real.sinh_neg
File: Mathlib/Data/Complex/Exponential.lean

tactic: simp [sinh, exp_neg, (neg_div _ _).symm, add_mul]
state_before: x y : ℝ
⊢ sinh (-x) = -sinh x
Theorem: ENNReal.rpow_nat_cast
File: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean

tactic: cases x
state_before: x : ℝ≥0∞
n : ℕ
⊢ x ^ ↑n = x ^ n

tactic: cases n <;> simp [top_rpow_of_pos (Nat.cast_add_one_pos _), top_pow (Nat.succ_pos _)]
state_before: case none
n : ℕ
⊢ none ^ ↑n = none ^ n

tactic: simp [coe_rpow_of_nonneg _ (Nat.cast_nonneg n)]
state_before: case some
n : ℕ
val✝ : ℝ≥0
⊢ Option.some val✝ ^ ↑n = Option.some val✝ ^ n
Theorem: WithTop.wellFounded_gt
File: Mathlib/Order/WithBot.lean

tactic: revert this
state_before: α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a : WithTop α
this : Acc (fun x x_1 => x < x_1) (↑WithTop.toDual a)
⊢ Acc (fun x x_1 => x > x_1) a

tactic: generalize ha : WithBot.toDual a = b
state_before: α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a : WithTop α
⊢ Acc (fun x x_1 => x < x_1) (↑WithTop.toDual a) → Acc (fun x x_1 => x > x_1) a

tactic: intro ac
state_before: α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a : WithTop α
b : WithTop αᵒᵈ
ha : ↑WithBot.toDual a = b
⊢ Acc (fun x x_1 => x < x_1) b → Acc (fun x x_1 => x > x_1) a

tactic: dsimp at ac
state_before: α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a : WithTop α
b : WithTop αᵒᵈ
ha : ↑WithBot.toDual a = b
ac : Acc (fun x x_1 => x < x_1) b
⊢ Acc (fun x x_1 => x > x_1) a

tactic: induction' ac with _ H IH generalizing a
state_before: α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a : WithTop α
b : WithTop αᵒᵈ
ha : ↑WithBot.toDual a = b
ac : Acc (fun x x_1 => x < x_1) b
⊢ Acc (fun x x_1 => x > x_1) a

tactic: subst ha
state_before: case intro
α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a✝ : WithTop α
b : WithTop αᵒᵈ
ha✝ : ↑WithBot.toDual a✝ = b
x✝ : WithTop αᵒᵈ
H : ∀ (y : WithTop αᵒᵈ), y < x✝ → Acc (fun x x_1 => x < x_1) y
IH : ∀ (y : WithTop αᵒᵈ), y < x✝ → ∀ (a : WithTop α), ↑WithBot.toDual a = y → Acc (fun x x_1 => x > x_1) a
a : WithTop α
ha : ↑WithBot.toDual a = x✝
⊢ Acc (fun x x_1 => x > x_1) a

tactic: exact ⟨_, fun a' h => IH (WithTop.toDual a') (toDual_lt_toDual.mpr h) _ rfl⟩
state_before: case intro
α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a✝ : WithTop α
b : WithTop αᵒᵈ
ha : ↑WithBot.toDual a✝ = b
a : WithTop α
H : ∀ (y : WithTop αᵒᵈ), y < ↑WithBot.toDual a → Acc (fun x x_1 => x < x_1) y
IH :
  ∀ (y : WithTop αᵒᵈ), y < ↑WithBot.toDual a → ∀ (a : WithTop α), ↑WithBot.toDual a = y → Acc (fun x x_1 => x > x_1) a
⊢ Acc (fun x x_1 => x > x_1) a

tactic: convert h using 1
state_before: α : Type u_1
β : Type ?u.119578
γ : Type ?u.119581
δ : Type ?u.119584
inst✝ : Preorder α
h : WellFounded fun x x_1 => x > x_1
a : WithTop α
⊢ WellFounded fun x x_1 => x < x_1
Theorem: Filter.frequently_imp_distrib_right
File: Mathlib/Order/Filter/Basic.lean

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
δ : Type ?u.167876
ι : Sort x
f : Filter α
inst✝ : NeBot f
p : α → Prop
q : Prop
⊢ (∃ᶠ (x : α) in f, p x → q) ↔ (∀ᶠ (x : α) in f, p x) → q
Theorem: totallyDisconnectedSpace_iff_connectedComponent_singleton
File: Mathlib/Topology/Connected.lean

tactic: rw [totallyDisconnectedSpace_iff_connectedComponent_subsingleton]
state_before: α : Type u
β : Type v
ι : Type ?u.122829
π : ι → Type ?u.122834
inst✝ : TopologicalSpace α
s t u v : Set α
⊢ TotallyDisconnectedSpace α ↔ ∀ (x : α), connectedComponent x = {x}

tactic: refine forall_congr' fun x => ?_
state_before: α : Type u
β : Type v
ι : Type ?u.122829
π : ι → Type ?u.122834
inst✝ : TopologicalSpace α
s t u v : Set α
⊢ (∀ (x : α), Set.Subsingleton (connectedComponent x)) ↔ ∀ (x : α), connectedComponent x = {x}

tactic: rw [subsingleton_iff_singleton]
state_before: α : Type u
β : Type v
ι : Type ?u.122829
π : ι → Type ?u.122834
inst✝ : TopologicalSpace α
s t u v : Set α
x : α
⊢ Set.Subsingleton (connectedComponent x) ↔ connectedComponent x = {x}

tactic: exact mem_connectedComponent
state_before: α : Type u
β : Type v
ι : Type ?u.122829
π : ι → Type ?u.122834
inst✝ : TopologicalSpace α
s t u v : Set α
x : α
⊢ x ∈ connectedComponent x
Theorem: PGame.add_lf_add_left
File: Mathlib/SetTheory/Game/PGame.lean

tactic: rw [lf_congr add_comm_equiv add_comm_equiv]
state_before: y z : PGame
h : y ⧏ z
x : PGame
⊢ x + y ⧏ x + z

tactic: apply add_lf_add_right h
state_before: y z : PGame
h : y ⧏ z
x : PGame
⊢ y + x ⧏ z + x
Theorem: Submodule.orthogonal_eq_top_iff
File: Mathlib/Analysis/InnerProductSpace/Orthogonal.lean

tactic: refine'
  ⟨_, by
    rintro rfl
    exact bot_orthogonal_eq_top⟩
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.91898
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Kᗮ = ⊤ ↔ K = ⊥

tactic: intro h
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.91898
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ Kᗮ = ⊤ → K = ⊥

tactic: have : K ⊓ Kᗮ = ⊥ := K.orthogonal_disjoint.eq_bot
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.91898
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
h : Kᗮ = ⊤
⊢ K = ⊥

tactic: rwa [h, inf_comm, top_inf_eq] at this
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.91898
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
h : Kᗮ = ⊤
this : K ⊓ Kᗮ = ⊥
⊢ K = ⊥

tactic: rintro rfl
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.91898
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
K : Submodule 𝕜 E
⊢ K = ⊥ → Kᗮ = ⊤

tactic: exact bot_orthogonal_eq_top
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.91898
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace 𝕜 F
⊢ ⊥ᗮ = ⊤
Theorem: CompositionSeries.mem_eraseTop
File: Mathlib/Order/JordanHolder.lean

tactic: simp only [mem_def]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
h : 0 < s.length
⊢ x ∈ eraseTop s ↔ x ≠ top s ∧ x ∈ s

tactic: dsimp only [eraseTop]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
h : 0 < s.length
⊢ x ∈ range (eraseTop s).series ↔ x ≠ top s ∧ x ∈ range s.series

tactic: constructor
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
h : 0 < s.length
⊢ (x ∈ range fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }) ↔ x ≠ top s ∧ x ∈ range s.series

tactic: rintro ⟨i, rfl⟩
state_before: case mp
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
h : 0 < s.length
⊢ (x ∈ range fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }) → x ≠ top s ∧ x ∈ range s.series

tactic: have hi : (i : ℕ) < s.length := by
  conv_rhs => rw [← Nat.succ_sub_one s.length, Nat.succ_sub h]
  exact i.2
state_before: case mp.intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
h : 0 < s.length
i : Fin (s.length - 1 + 1)
⊢ (fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }) i ≠ top s ∧
    (fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }) i ∈ range s.series

tactic: simp [top, Fin.ext_iff, ne_of_lt hi, -Set.mem_range, Set.mem_range_self]
state_before: case mp.intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
h : 0 < s.length
i : Fin (s.length - 1 + 1)
hi : ↑i < s.length
⊢ (fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }) i ≠ top s ∧
    (fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }) i ∈ range s.series

tactic: conv_rhs => rw [← Nat.succ_sub_one s.length, Nat.succ_sub h]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
h : 0 < s.length
i : Fin (s.length - 1 + 1)
⊢ ↑i < s.length

tactic: exact i.2
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
h : 0 < s.length
i : Fin (s.length - 1 + 1)
⊢ ↑i < Nat.succ (s.length - Nat.succ 0)

tactic: intro h
state_before: case mpr
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
h : 0 < s.length
⊢ x ≠ top s ∧ x ∈ range s.series → x ∈ range fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }

tactic: exact mem_eraseTop_of_ne_of_mem h.1 h.2
state_before: case mpr
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
h✝ : 0 < s.length
h : x ≠ top s ∧ x ∈ range s.series
⊢ x ∈ range fun i => series s { val := ↑i, isLt := (_ : ↑i < s.length + 1) }
Theorem: List.reverse_rotate
File: Mathlib/Data/List/Rotate.lean

tactic: rw [← length_reverse l, ← rotate_eq_iff]
state_before: α : Type u
l : List α
n : ℕ
⊢ reverse (rotate l n) = rotate (reverse l) (length l - n % length l)

tactic: induction' n with n hn generalizing l
state_before: α : Type u
l : List α
n : ℕ
⊢ rotate (reverse (rotate l n)) n = reverse l

tactic: simp
state_before: case zero
α : Type u
l✝ l : List α
⊢ rotate (reverse (rotate l zero)) zero = reverse l

tactic: cases' l with hd tl
state_before: case succ
α : Type u
l✝ : List α
n : ℕ
hn : ∀ (l : List α), rotate (reverse (rotate l n)) n = reverse l
l : List α
⊢ rotate (reverse (rotate l (succ n))) (succ n) = reverse l

tactic: simp
state_before: case succ.nil
α : Type u
l : List α
n : ℕ
hn : ∀ (l : List α), rotate (reverse (rotate l n)) n = reverse l
⊢ rotate (reverse (rotate [] (succ n))) (succ n) = reverse []

tactic: rw [rotate_cons_succ, Nat.succ_eq_add_one, ← rotate_rotate, hn]
state_before: case succ.cons
α : Type u
l : List α
n : ℕ
hn : ∀ (l : List α), rotate (reverse (rotate l n)) n = reverse l
hd : α
tl : List α
⊢ rotate (reverse (rotate (hd :: tl) (succ n))) (succ n) = reverse (hd :: tl)

tactic: simp
state_before: case succ.cons
α : Type u
l : List α
n : ℕ
hn : ∀ (l : List α), rotate (reverse (rotate l n)) n = reverse l
hd : α
tl : List α
⊢ rotate (reverse (tl ++ [hd])) 1 = reverse (hd :: tl)
Theorem: Int.bodd_negOfNat
File: Mathlib/Data/Int/Bitwise.lean

tactic: cases n <;> simp
state_before: n : ℕ
⊢ bodd (negOfNat n) = Nat.bodd n

tactic: rfl
state_before: case succ
n✝ : ℕ
⊢ bodd (negOfNat (Nat.succ n✝)) = !Nat.bodd n✝
Theorem: symmDiff_sup_inf
File: Mathlib/Order/SymmDiff.lean

tactic: refine' le_antisymm (sup_le symmDiff_le_sup inf_le_sup) _
state_before: ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ a ∆ b ⊔ a ⊓ b = a ⊔ b

tactic: rw [sup_inf_left, symmDiff]
state_before: ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ a ⊔ b ≤ a ∆ b ⊔ a ⊓ b

tactic: refine' sup_le (le_inf le_sup_right _) (le_inf _ le_sup_right)
state_before: ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ a ⊔ b ≤ (a \ b ⊔ b \ a ⊔ a) ⊓ (a \ b ⊔ b \ a ⊔ b)

tactic: rw [sup_right_comm]
state_before: case refine'_1
ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ a ≤ a \ b ⊔ b \ a ⊔ b

tactic: exact le_sup_of_le_left le_sdiff_sup
state_before: case refine'_1
ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ a ≤ a \ b ⊔ b ⊔ b \ a

tactic: rw [sup_assoc]
state_before: case refine'_2
ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ b ≤ a \ b ⊔ b \ a ⊔ a

tactic: exact le_sup_of_le_right le_sdiff_sup
state_before: case refine'_2
ι : Type ?u.32963
α : Type u_1
β : Type ?u.32969
π : ι → Type ?u.32974
inst✝ : GeneralizedCoheytingAlgebra α
a b c d : α
⊢ b ≤ a \ b ⊔ (b \ a ⊔ a)
Theorem: MvPowerSeries.coeff_add_mul_monomial
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: rw [coeff_mul_monomial, if_pos, add_tsub_cancel_right]
state_before: σ : Type u_2
R : Type u_1
inst✝ : Semiring R
m n : σ →₀ ℕ
φ ψ : MvPowerSeries σ R
a : R
⊢ ↑(coeff R (m + n)) (φ * ↑(monomial R n) a) = ↑(coeff R m) φ * a

tactic: exact le_add_left le_rfl
state_before: case hc
σ : Type u_2
R : Type u_1
inst✝ : Semiring R
m n : σ →₀ ℕ
φ ψ : MvPowerSeries σ R
a : R
⊢ n ≤ m + n
Theorem: CategoryTheory.StrongEpi.iff_of_arrow_iso
File: Mathlib/CategoryTheory/Limits/Shapes/StrongEpi.lean

tactic: constructor <;> intro
state_before: C : Type u
inst✝ : Category C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
⊢ StrongEpi f ↔ StrongEpi g

tactic: exacts [StrongEpi.of_arrow_iso e, StrongEpi.of_arrow_iso e.symm]
state_before: case mp
C : Type u
inst✝ : Category C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
a✝ : StrongEpi f
⊢ StrongEpi g

case mpr
C : Type u
inst✝ : Category C
P Q R : C
f✝ : P ⟶ Q
g✝ : Q ⟶ R
A B A' B' : C
f : A ⟶ B
g : A' ⟶ B'
e : Arrow.mk f ≅ Arrow.mk g
a✝ : StrongEpi g
⊢ StrongEpi f
Theorem: Real.self_le_sinh_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Deriv.lean

tactic: simp
state_before: x y z : ℝ
⊢ x ≤ sinh x ↔ sinh 0 - 0 ≤ sinh x - x
Theorem: MeasureTheory.AnalyticSet.measurablySeparable
File: Mathlib/MeasureTheory/Constructions/Polish.lean

tactic: rw [AnalyticSet] at hs ht
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s t : Set α
hs : AnalyticSet s
ht : AnalyticSet t
h : Disjoint s t
⊢ MeasurablySeparable s t

tactic: rcases hs with (rfl | ⟨f, f_cont, rfl⟩)
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
s t : Set α
hs : s = ∅ ∨ ∃ f, Continuous f ∧ range f = s
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint s t
⊢ MeasurablySeparable s t

tactic: rcases ht with (rfl | ⟨g, g_cont, rfl⟩)
state_before: case inr.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) t
⊢ MeasurablySeparable (range f) t

tactic: exact measurablySeparable_range_of_disjoint f_cont g_cont h
state_before: case inr.intro.intro.inr.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
g : (ℕ → ℕ) → α
g_cont : Continuous g
h : Disjoint (range f) (range g)
⊢ MeasurablySeparable (range f) (range g)

tactic: refine' ⟨∅, Subset.refl _, by simp, MeasurableSet.empty⟩
state_before: case inl
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint ∅ t
⊢ MeasurablySeparable ∅ t

tactic: simp
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint ∅ t
⊢ Disjoint t ∅

tactic: exact ⟨univ, subset_univ _, by simp, MeasurableSet.univ⟩
state_before: case inr.intro.intro.inl
α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) ∅
⊢ MeasurablySeparable (range f) ∅

tactic: simp
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
ι : Type ?u.86140
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : BorelSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) ∅
⊢ Disjoint ∅ univ
Theorem: Filter.eventually_atBot_prod_self
File: Mathlib/Order/Filter/AtTopBot.lean

tactic: simp [← prod_atBot_atBot_eq, (@atBot_basis α _ _).prod_self.eventually_iff]
state_before: ι : Type ?u.290998
ι' : Type ?u.291001
α : Type u_1
β : Type ?u.291007
γ : Type ?u.291010
inst✝¹ : SemilatticeInf α
inst✝ : Nonempty α
p : α × α → Prop
⊢ (∀ᶠ (x : α × α) in atBot, p x) ↔ ∃ a, ∀ (k l : α), k ≤ a → l ≤ a → p (k, l)
Theorem: Num.lxor'_to_nat
File: Mathlib/Data/Num/Lemmas.lean

tactic: apply bitwise'_to_nat PosNum.lxor <;> intros <;> cases_type* Bool <;> rfl
state_before: α : Type ?u.617047
⊢ ∀ (m n : Num), ↑(lxor m n) = Nat.lxor' ↑m ↑n