1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Ordinal.opow_mul_add_lt_opow_succ
File: Mathlib/SetTheory/Ordinal/Exponential.lean

tactic: convert (opow_mul_add_lt_opow_mul_succ v hw).trans_le (mul_le_mul_left' (succ_le_of_lt hvb) _)
  using 1
state_before: b u v w : Ordinal.{u_1}
hvb : v < b
hw : w < b ^ u
⊢ b ^ u * v + w < b ^ succ u
state_after: case h.e'_4
b u v w : Ordinal.{u_1}
hvb : v < b
hw : w < b ^ u
⊢ b ^ succ u = b ^ u * b

tactic: exact opow_succ b u
state_before: case h.e'_4
b u v w : Ordinal.{u_1}
hvb : v < b
hw : w < b ^ u
⊢ b ^ succ u = b ^ u * b
state_after: no goals
Theorem: Polynomial.Monic.add_of_left
File: Mathlib/Algebra/Polynomial/Monic.lean

tactic: rwa [Monic, add_comm, leadingCoeff_add_of_degree_lt hpq]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝ : Semiring R
p q r : R[X]
hp : p.Monic
hpq : q.degree < p.degree
⊢ (p + q).Monic
state_after: no goals
Theorem: Nat.a_id_helper
File: Mathlib/NumberTheory/FermatPsp.lean

tactic: change 1 < _
state_before: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
⊢ 2 ≤ (a ^ b - 1) / (a - 1)
state_after: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
⊢ 1 < (a ^ b - 1) / (a - 1)

tactic: have h₁ : a - 1 ∣ a ^ b - 1 := by simpa only [one_pow] using nat_sub_dvd_pow_sub_pow a 1 b
state_before: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
⊢ 1 < (a ^ b - 1) / (a - 1)
state_after: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
h₁ : a - 1 ∣ a ^ b - 1
⊢ 1 < (a ^ b - 1) / (a - 1)

tactic: rw [Nat.lt_div_iff_mul_lt h₁, mul_one, tsub_lt_tsub_iff_right (Nat.le_of_succ_le ha)]
state_before: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
h₁ : a - 1 ∣ a ^ b - 1
⊢ 1 < (a ^ b - 1) / (a - 1)
state_after: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
h₁ : a - 1 ∣ a ^ b - 1
⊢ a < a ^ b

tactic: exact lt_self_pow (Nat.lt_of_succ_le ha) hb
state_before: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
h₁ : a - 1 ∣ a ^ b - 1
⊢ a < a ^ b
state_after: no goals

tactic: simpa only [one_pow] using nat_sub_dvd_pow_sub_pow a 1 b
state_before: a b : ℕ
ha : 2 ≤ a
hb : 2 ≤ b
⊢ a - 1 ∣ a ^ b - 1
state_after: no goals
Theorem: CategoryTheory.Cat.associator_inv_app
File: Mathlib/CategoryTheory/Category/Cat.lean

tactic: simp
state_before: B C D E : Cat
F : B ⟶ C
G : C ⟶ D
H : D ⟶ E
X : ↑B
⊢ (F ≫ G ≫ H).obj X = ((F ≫ G) ≫ H).obj X
state_after: no goals
Theorem: Fin.succ_castPred_le_iff
File: Mathlib/Data/Fin/Basic.lean

tactic: rw [succ_castPred_eq_castPred_succ ha, castpred_succ_le_iff]
state_before: n m : ℕ
a b : Fin (n + 1)
ha : a ≠ last n
⊢ (a.castPred ha).succ ≤ b ↔ a < b
state_after: no goals
Theorem: continuous_preStoneCechUnit
File: Mathlib/Topology/StoneCech.lean

tactic: have : (g.map pure).toFilter ≤ 𝓝 g := by
  rw [ultrafilter_converges_iff, ← bind_pure g]
  rfl
state_before: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
⊢ Tendsto preStoneCechUnit (↑g) (𝓝 (preStoneCechUnit x))
state_after: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
this : ↑(Ultrafilter.map pure g) ≤ 𝓝 g
⊢ Tendsto preStoneCechUnit (↑g) (𝓝 (preStoneCechUnit x))

tactic: have : (map preStoneCechUnit g : Filter (PreStoneCech α)) ≤ 𝓝 (Quot.mk _ g) :=
  (map_mono this).trans (continuous_quot_mk.tendsto _)
state_before: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
this : ↑(Ultrafilter.map pure g) ≤ 𝓝 g
⊢ Tendsto preStoneCechUnit (↑g) (𝓝 (preStoneCechUnit x))
state_after: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
this✝ : ↑(Ultrafilter.map pure g) ≤ 𝓝 g
this : map preStoneCechUnit ↑g ≤ 𝓝 (Quot.mk (fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x) g)
⊢ Tendsto preStoneCechUnit (↑g) (𝓝 (preStoneCechUnit x))

tactic: convert this
state_before: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
this✝ : ↑(Ultrafilter.map pure g) ≤ 𝓝 g
this : map preStoneCechUnit ↑g ≤ 𝓝 (Quot.mk (fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x) g)
⊢ Tendsto preStoneCechUnit (↑g) (𝓝 (preStoneCechUnit x))
state_after: case h.e'_1.h.e'_3.h
α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
this✝ : ↑(Ultrafilter.map pure g) ≤ 𝓝 g
this : map preStoneCechUnit ↑g ≤ 𝓝 (Quot.mk (fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x) g)
e_1✝ : PreStoneCech α = Quot fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x
⊢ preStoneCechUnit x = Quot.mk (fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x) g

tactic: exact Quot.sound ⟨x, pure_le_nhds x, gx⟩
state_before: case h.e'_1.h.e'_3.h
α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
this✝ : ↑(Ultrafilter.map pure g) ≤ 𝓝 g
this : map preStoneCechUnit ↑g ≤ 𝓝 (Quot.mk (fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x) g)
e_1✝ : PreStoneCech α = Quot fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x
⊢ preStoneCechUnit x = Quot.mk (fun F G => ∃ x, ↑F ≤ 𝓝 x ∧ ↑G ≤ 𝓝 x) g
state_after: no goals

tactic: rw [ultrafilter_converges_iff, ← bind_pure g]
state_before: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
⊢ ↑(Ultrafilter.map pure g) ≤ 𝓝 g
state_after: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
⊢ g >>= pure = joinM (Ultrafilter.map pure (g >>= pure))

tactic: rfl
state_before: α : Type u
inst✝ : TopologicalSpace α
x : α
g : Ultrafilter α
gx : ↑g ≤ 𝓝 x
⊢ g >>= pure = joinM (Ultrafilter.map pure (g >>= pure))
state_after: no goals
Theorem: SimpleGraph.induce_union_connected
File: Mathlib/Combinatorics/SimpleGraph/Connectivity/Subgraph.lean

tactic: rw [connected_induce_iff] at sconn tconn ⊢
state_before: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
s t : Set V
sconn : (induce s G).Connected
tconn : (induce t G).Connected
sintert : (s ∩ t).Nonempty
⊢ (induce (s ∪ t) G).Connected
state_after: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
s t : Set V
sconn : (⊤.induce s).Connected
tconn : (⊤.induce t).Connected
sintert : (s ∩ t).Nonempty
⊢ (⊤.induce (s ∪ t)).Connected

tactic: exact Subgraph.induce_union_connected sconn tconn sintert
state_before: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
s t : Set V
sconn : (⊤.induce s).Connected
tconn : (⊤.induce t).Connected
sintert : (s ∩ t).Nonempty
⊢ (⊤.induce (s ∪ t)).Connected
state_after: no goals
Theorem: Nat.succ_succ_ne_one
File: Mathlib/Data/Nat/Defs.lean

tactic: simp
state_before: a b c d m n✝ k : ℕ
p q : ℕ → Prop
n : ℕ
⊢ n.succ.succ ≠ 1
state_after: no goals
Theorem: Finset.map_cons
File: Mathlib/Data/Finset/Image.lean

tactic: simpa using ha
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α ↪ β
s✝ : Finset α
f : α ↪ β
a : α
s : Finset α
ha : a ∉ s
⊢ f a ∉ map f s
state_after: no goals
Theorem: Topology.IsScott.monotone_of_continuous
File: Mathlib/Topology/Order/ScottTopology.lean

tactic: by_contra h
state_before: α : Type u_1
β : Type u_2
inst✝⁵ : Preorder α
inst✝⁴ : TopologicalSpace α
inst✝³ : IsScott α
s : Set α
a : α
inst✝² : Preorder β
inst✝¹ : TopologicalSpace β
inst✝ : IsScott β
f : α → β
hf : Continuous f
x✝ b : α
hab : x✝ ≤ b
⊢ f x✝ ≤ f b
state_after: α : Type u_1
β : Type u_2
inst✝⁵ : Preorder α
inst✝⁴ : TopologicalSpace α
inst✝³ : IsScott α
s : Set α
a : α
inst✝² : Preorder β
inst✝¹ : TopologicalSpace β
inst✝ : IsScott β
f : α → β
hf : Continuous f
x✝ b : α
hab : x✝ ≤ b
h : ¬f x✝ ≤ f b
⊢ False

tactic: simpa only [mem_compl_iff, mem_preimage, mem_Iic, le_refl, not_true]
  using isUpperSet_of_isOpen ((isOpen_compl_iff.2 isClosed_Iic).preimage hf) hab h
state_before: α : Type u_1
β : Type u_2
inst✝⁵ : Preorder α
inst✝⁴ : TopologicalSpace α
inst✝³ : IsScott α
s : Set α
a : α
inst✝² : Preorder β
inst✝¹ : TopologicalSpace β
inst✝ : IsScott β
f : α → β
hf : Continuous f
x✝ b : α
hab : x✝ ≤ b
h : ¬f x✝ ≤ f b
⊢ False
state_after: no goals
Theorem: FreeGroup.Red.Step.not_rev
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

tactic: cases b <;> exact Step.not
state_before: α : Type u
L L₁ L₂ L₃ L₄ : List (α × Bool)
x : α
b : Bool
⊢ Step (L₁ ++ (x, !b) :: (x, b) :: L₂) (L₁ ++ L₂)
state_after: no goals
Theorem: cmpUsing_eq_eq
File: Mathlib/Init/Data/Ordering/Lemmas.lean

tactic: simp
state_before: α : Type u
lt : α → α → Prop
inst✝ : DecidableRel lt
a b : α
⊢ cmpUsing lt a b = Ordering.eq ↔ ¬lt a b ∧ ¬lt b a
state_after: no goals
Theorem: EuclideanGeometry.dist_div_sin_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₂).sin = 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₂).sin = dist p₁ p₃

tactic: rw [oangle_eq_angle_of_sign_eq_one hs, angle_comm, Real.Angle.sin_coe, dist_comm p₁ p₃,
  dist_div_sin_angle_of_angle_eq_pi_div_two (angle_rev_eq_pi_div_two_of_oangle_eq_pi_div_two h)
    (Or.inl (right_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₂).sin = 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: Submodule.dualAnnihilator_map_linearEquiv_flip_symm
File: Mathlib/LinearAlgebra/PerfectPairing.lean

tactic: have : IsReflexive R N := e.isReflexive_of_equiv_dual_of_isReflexive
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : IsReflexive R M
e : N ≃ₗ[R] Dual R M
p : Submodule R (Dual R N)
⊢ (map e.flip.symm p).dualAnnihilator = map e p.dualCoannihilator
state_after: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : IsReflexive R M
e : N ≃ₗ[R] Dual R M
p : Submodule R (Dual R N)
this : IsReflexive R N
⊢ (map e.flip.symm p).dualAnnihilator = map e p.dualCoannihilator

tactic: rw [← map_dualCoannihilator_linearEquiv_flip, flip_flip]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : IsReflexive R M
e : N ≃ₗ[R] Dual R M
p : Submodule R (Dual R N)
this : IsReflexive R N
⊢ (map e.flip.symm p).dualAnnihilator = map e p.dualCoannihilator
state_after: no goals
Theorem: List.count_filter
File: .lake/packages/batteries/Batteries/Data/List/Count.lean

tactic: rw [count, countP_filter]
state_before: α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
⊢ count a (filter p l) = count a l
state_after: α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
⊢ countP (fun a_1 => decide ((a_1 == a) = true ∧ p a_1 = true)) l = countP (fun x => x == a) l

tactic: congr
state_before: α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
⊢ countP (fun a_1 => decide ((a_1 == a) = true ∧ p a_1 = true)) l = countP (fun x => x == a) l
state_after: case e_p
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
⊢ (fun a_1 => decide ((a_1 == a) = true ∧ p a_1 = true)) = fun x => x == a

tactic: funext b
state_before: case e_p
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
⊢ (fun a_1 => decide ((a_1 == a) = true ∧ p a_1 = true)) = fun x => x == a
state_after: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ decide ((b == a) = true ∧ p b = true) = (b == a)

tactic: rw [(by rfl : (b == a) = decide (b = a)), decide_eq_decide]
state_before: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ decide ((b == a) = true ∧ p b = true) = (b == a)
state_after: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ decide (b = a) = true ∧ p b = true ↔ b = a

tactic: simp
state_before: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ decide (b = a) = true ∧ p b = true ↔ b = a
state_after: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ b = a → p b = true

tactic: rintro rfl
state_before: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ b = a → p b = true
state_after: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
l : List α
b : α
h : p b = true
⊢ p b = true

tactic: exact h
state_before: case e_p.h
α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
l : List α
b : α
h : p b = true
⊢ p b = true
state_after: no goals

tactic: rfl
state_before: α : Type u_1
inst✝ : DecidableEq α
p : α → Bool
a : α
l : List α
h : p a = true
b : α
⊢ (b == a) = decide (b = a)
state_after: no goals
Theorem: AdjoinRoot.lift_of
File: Mathlib/RingTheory/AdjoinRoot.lean

tactic: rw [← mk_C x, lift_mk, eval₂_C]
state_before: R : Type u
S : Type v
K : Type w
inst✝¹ : CommRing R
f : R[X]
inst✝ : CommRing S
i : R →+* S
a : S
h : eval₂ i a f = 0
x : R
⊢ (lift i a h) ((of f) x) = i x
state_after: no goals
Theorem: MvPolynomial.scalarRTensor_apply_monomial_tmul
File: Mathlib/RingTheory/TensorProduct/MvPolynomial.lean

tactic: rw [scalarRTensor_apply_tmul_apply, coeff_monomial, ite_smul, zero_smul]
state_before: R : Type u
M : Type v
N : Type w
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
σ : Type u_1
inst✝⁴ : DecidableEq σ
S : Type u_2
inst✝³ : CommSemiring S
inst✝² : Algebra R S
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
e : σ →₀ ℕ
r : R
n : N
d : σ →₀ ℕ
⊢ (scalarRTensor ((monomial e) r ⊗ₜ[R] n)) d = if e = d then r • n else 0
state_after: no goals
Theorem: Function.Antiperiodic.sub
File: Mathlib/Algebra/Periodic.lean

tactic: simpa only [sub_eq_add_neg] using h1.add h2.neg
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝¹ : AddGroup α
inst✝ : InvolutiveNeg β
h1 : Antiperiodic f c₁
h2 : Antiperiodic f c₂
⊢ Periodic f (c₁ - c₂)
state_after: no goals
Theorem: Subgroup.relindex_inf_le
File: Mathlib/GroupTheory/Index.lean

tactic: by_cases h : H.relindex L = 0
state_before: G : Type u_1
inst✝ : Group G
H K L : Subgroup G
⊢ (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L
state_after: case pos
G : Type u_1
inst✝ : Group G
H K L : Subgroup G
h : H.relindex L = 0
⊢ (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L

case neg
G : Type u_1
inst✝ : Group G
H K L : Subgroup G
h : ¬H.relindex L = 0
⊢ (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L

tactic: rw [← inf_relindex_right, inf_assoc, ← relindex_mul_relindex _ _ L inf_le_right inf_le_right,
  inf_relindex_right, inf_relindex_right]
state_before: case neg
G : Type u_1
inst✝ : Group G
H K L : Subgroup G
h : ¬H.relindex L = 0
⊢ (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L
state_after: case neg
G : Type u_1
inst✝ : Group G
H K L : Subgroup G
h : ¬H.relindex L = 0
⊢ H.relindex (K ⊓ L) * K.relindex L ≤ H.relindex L * K.relindex L

tactic: exact mul_le_mul_right' (relindex_le_of_le_right inf_le_right h) (K.relindex L)
state_before: case neg
G : Type u_1
inst✝ : Group G
H K L : Subgroup G
h : ¬H.relindex L = 0
⊢ H.relindex (K ⊓ L) * K.relindex L ≤ H.relindex L * K.relindex L
state_after: no goals

tactic: exact (le_of_eq (relindex_eq_zero_of_le_left inf_le_left h)).trans (zero_le _)
state_before: case pos
G : Type u_1
inst✝ : Group G
H K L : Subgroup G
h : H.relindex L = 0
⊢ (H ⊓ K).relindex L ≤ H.relindex L * K.relindex L
state_after: no goals
Theorem: Filter.prod_pure_pure
File: Mathlib/Order/Filter/Prod.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
s : Set α
t : Set β
f : Filter α
g : Filter β
a : α
b : β
⊢ pure a ×ˢ pure b = pure (a, b)
state_after: no goals
Theorem: Finset.sup_union
File: Mathlib/Data/Finset/Lattice.lean

tactic: simp [or_imp, forall_and]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝² : SemilatticeSup α
inst✝¹ : OrderBot α
s s₁ s₂ : Finset β
f g : β → α
a : α
inst✝ : DecidableEq β
c : α
⊢ (s₁ ∪ s₂).sup f ≤ c ↔ s₁.sup f ⊔ s₂.sup f ≤ c
state_after: no goals
Theorem: SimpleGraph.Walk.isCircuit_copy
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: subst_vars
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v w x y u u' : V
p : G.Walk u u
hu : u = u'
⊢ (p.copy hu hu).IsCircuit ↔ p.IsCircuit
state_after: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x y u' : V
p : G.Walk u' u'
⊢ (p.copy ⋯ ⋯).IsCircuit ↔ p.IsCircuit

tactic: rfl
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x y u' : V
p : G.Walk u' u'
⊢ (p.copy ⋯ ⋯).IsCircuit ↔ p.IsCircuit
state_after: no goals
Theorem: Finset.Ici_mul_Ioi_subset'
File: Mathlib/Data/Finset/Pointwise/Interval.lean

tactic: simpa using Set.Ici_mul_Ioi_subset' _ _
state_before: α : Type u_1
inst✝⁵ : Mul α
inst✝⁴ : PartialOrder α
inst✝³ : DecidableEq α
inst✝² : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝¹ : CovariantClass α α (Function.swap HMul.hMul) LT.lt
inst✝ : LocallyFiniteOrderTop α
a b : α
⊢ ↑(Ici a * Ioi b) ⊆ ↑(Ioi (a * b))
state_after: no goals
Theorem: MeasureTheory.smul_extend
File: Mathlib/MeasureTheory/OuterMeasure/Induced.lean

tactic: ext1 s
state_before: α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
⊢ c • extend m = extend fun s h => c • m s h
state_after: case h
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
⊢ (c • extend m) s = extend (fun s h => c • m s h) s

tactic: dsimp [extend]
state_before: case h
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
⊢ (c • extend m) s = extend (fun s h => c • m s h) s
state_after: case h
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
⊢ c • ⨅ (h : P s), m s h = ⨅ (h : P s), c • m s h

tactic: by_cases h : P s
state_before: case h
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
⊢ c • ⨅ (h : P s), m s h = ⨅ (h : P s), c • m s h
state_after: case pos
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
h : P s
⊢ c • ⨅ (h : P s), m s h = ⨅ (h : P s), c • m s h

case neg
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
h : ¬P s
⊢ c • ⨅ (h : P s), m s h = ⨅ (h : P s), c • m s h

tactic: simp [h]
state_before: case pos
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
h : P s
⊢ c • ⨅ (h : P s), m s h = ⨅ (h : P s), c • m s h
state_after: no goals

tactic: simp [h, ENNReal.smul_top, hc]
state_before: case neg
α : Type u_1
P : α → Prop
m : (s : α) → P s → ℝ≥0∞
R : Type u_2
inst✝³ : Zero R
inst✝² : SMulWithZero R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : NoZeroSMulDivisors R ℝ≥0∞
c : R
hc : c ≠ 0
s : α
h : ¬P s
⊢ c • ⨅ (h : P s), m s h = ⨅ (h : P s), c • m s h
state_after: no goals
Theorem: List.count_cons_of_ne
File: .lake/packages/batteries/Batteries/Data/List/Count.lean

tactic: simp [count_cons, h]
state_before: α : Type u_1
inst✝ : DecidableEq α
a b : α
h : a ≠ b
l : List α
⊢ count a (b :: l) = count a l
state_after: no goals
Theorem: Polynomial.splits_of_map_degree_eq_one
File: Mathlib/Algebra/Polynomial/Splits.lean

tactic: have := congr_arg degree hp
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hf : (map i f).degree = 1
g✝ : L[X]
hg : Irreducible g✝
x✝ : g✝ ∣ map i f
p : L[X]
hp : map i f = g✝ * p
⊢ g✝.degree = 1
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hf : (map i f).degree = 1
g✝ : L[X]
hg : Irreducible g✝
x✝ : g✝ ∣ map i f
p : L[X]
hp : map i f = g✝ * p
this : (map i f).degree = (g✝ * p).degree
⊢ g✝.degree = 1

tactic: simp [Nat.WithBot.add_eq_one_iff, hf, @eq_comm (WithBot ℕ) 1,
    mt isUnit_iff_degree_eq_zero.2 hg.1] at this
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hf : (map i f).degree = 1
g✝ : L[X]
hg : Irreducible g✝
x✝ : g✝ ∣ map i f
p : L[X]
hp : map i f = g✝ * p
this : (map i f).degree = (g✝ * p).degree
⊢ g✝.degree = 1
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hf : (map i f).degree = 1
g✝ : L[X]
hg : Irreducible g✝
x✝ : g✝ ∣ map i f
p : L[X]
hp : map i f = g✝ * p
this : g✝.degree = 1 ∧ p.degree = 0
⊢ g✝.degree = 1

tactic: tauto
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝² : CommRing K
inst✝¹ : Field L
inst✝ : Field F
i : K →+* L
f : K[X]
hf : (map i f).degree = 1
g✝ : L[X]
hg : Irreducible g✝
x✝ : g✝ ∣ map i f
p : L[X]
hp : map i f = g✝ * p
this : g✝.degree = 1 ∧ p.degree = 0
⊢ g✝.degree = 1
state_after: no goals
Theorem: Set.EqOn.image_eq_self
File: Mathlib/Data/Set/Function.lean

tactic: rw [h.image_eq, image_id]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s s₁ s₂ : Set α
t t₁ t₂ : Set β
p : Set γ
f✝ f₁ f₂ f₃ : α → β
g g₁ g₂ : β → γ
f' f₁' f₂' : β → α
g' : γ → β
a : α
b : β
f : α → α
h : EqOn f id s
⊢ f '' s = s
state_after: no goals
Theorem: Units.inv_eq_self_iff
File: Mathlib/Algebra/Ring/Commute.lean

tactic: rw [inv_eq_iff_mul_eq_one]
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ u⁻¹ = u ↔ u = 1 ∨ u = -1
state_after: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ u * u = 1 ↔ u = 1 ∨ u = -1

tactic: simp only [ext_iff]
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ u * u = 1 ↔ u = 1 ∨ u = -1
state_after: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ ↑(u * u) = ↑1 ↔ ↑u = ↑1 ∨ ↑u = ↑(-1)

tactic: push_cast
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ ↑(u * u) = ↑1 ↔ ↑u = ↑1 ∨ ↑u = ↑(-1)
state_after: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ ↑u * ↑u = 1 ↔ ↑u = 1 ∨ ↑u = -1

tactic: exact mul_self_eq_one_iff
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Ring R
inst✝ : NoZeroDivisors R
u : Rˣ
⊢ ↑u * ↑u = 1 ↔ ↑u = 1 ∨ ↑u = -1
state_after: no goals