1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Finset.coe_infsep
File: Mathlib/Topology/MetricSpace/Infsep.lean

tactic: have H : (s : Set α).Nontrivial ↔ s.offDiag.Nonempty := by
  rw [← Set.offDiag_nonempty, ← Finset.coe_offDiag, Finset.coe_nonempty]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
⊢ (↑s).infsep = if hs : s.offDiag.Nonempty then s.offDiag.inf' hs (uncurry dist) else 0
state_after: α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
H : (↑s).Nontrivial ↔ s.offDiag.Nonempty
⊢ (↑s).infsep = if hs : s.offDiag.Nonempty then s.offDiag.inf' hs (uncurry dist) else 0

tactic: split_ifs with hs
state_before: α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
H : (↑s).Nontrivial ↔ s.offDiag.Nonempty
⊢ (↑s).infsep = if hs : s.offDiag.Nonempty then s.offDiag.inf' hs (uncurry dist) else 0
state_after: case pos
α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
H : (↑s).Nontrivial ↔ s.offDiag.Nonempty
hs : s.offDiag.Nonempty
⊢ (↑s).infsep = s.offDiag.inf' hs (uncurry dist)

case neg
α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
H : (↑s).Nontrivial ↔ s.offDiag.Nonempty
hs : ¬s.offDiag.Nonempty
⊢ (↑s).infsep = 0

tactic: rw [← Set.offDiag_nonempty, ← Finset.coe_offDiag, Finset.coe_nonempty]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
⊢ (↑s).Nontrivial ↔ s.offDiag.Nonempty
state_after: no goals

tactic: simp_rw [(H.mpr hs).infsep_of_fintype, ← Finset.coe_offDiag, Finset.toFinset_coe]
state_before: case pos
α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
H : (↑s).Nontrivial ↔ s.offDiag.Nonempty
hs : s.offDiag.Nonempty
⊢ (↑s).infsep = s.offDiag.inf' hs (uncurry dist)
state_after: no goals

tactic: exact (not_nontrivial_iff.mp (H.mp.mt hs)).infsep_zero
state_before: case neg
α : Type u_1
β : Type u_2
inst✝¹ : PseudoMetricSpace α
x y z : α
s✝ t : Set α
inst✝ : DecidableEq α
s : Finset α
H : (↑s).Nontrivial ↔ s.offDiag.Nonempty
hs : ¬s.offDiag.Nonempty
⊢ (↑s).infsep = 0
state_after: no goals
Theorem: Dilation.mapsTo_emetric_closedBall
File: Mathlib/Topology/MetricSpace/Dilation.lean

tactic: exact hy
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
F : Type u_4
G : Type u_5
inst✝⁶ : PseudoEMetricSpace α
inst✝⁵ : PseudoEMetricSpace β
inst✝⁴ : PseudoEMetricSpace γ
inst✝³ : FunLike F α β
inst✝² : DilationClass F α β
inst✝¹ : FunLike G β γ
inst✝ : DilationClass G β γ
f : F
g : G
x✝ y✝ z : α
s : Set α
x : α
r' : ℝ≥0∞
y : α
hy : y ∈ EMetric.closedBall x r'
⊢ edist y x ≤ r'
state_after: no goals
Theorem: Finset.card_Ioi_eq_card_Ici_sub_one
File: Mathlib/Order/Interval/Finset/Basic.lean

tactic: rw [Ici_eq_cons_Ioi, card_cons, Nat.add_sub_cancel_right]
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrderTop α
a : α
⊢ (Ioi a).card = (Ici a).card - 1
state_after: no goals
Theorem: ProbabilityTheory.iIndepSets_singleton_iff
File: Mathlib/Probability/Independence/Basic.lean

tactic: simp_rw [iIndepSets, kernel.iIndepSets_singleton_iff, ae_dirac_eq, Filter.eventually_pure,
  kernel.const_apply]
state_before: Ω : Type u_1
ι : Type u_2
β : Type u_3
γ : Type u_4
κ : ι → Type u_5
m₁ m₂ _mΩ : MeasurableSpace Ω
μ : Measure Ω
s✝ t : Set Ω
S T : Set (Set Ω)
s : ι → Set Ω
⊢ iIndepSets (fun i => {s i}) μ ↔ ∀ (t : Finset ι), μ (⋂ i ∈ t, s i) = ∏ i ∈ t, μ (s i)
state_after: no goals
Theorem: LinearIsometry.orthonormal_comp_iff
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: classical simp_rw [orthonormal_iff_ite, Function.comp_apply, LinearIsometry.inner_map_map]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁸ : _root_.RCLike 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : InnerProductSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
ι : Type u_4
ι' : Type u_5
ι'' : Type u_6
E' : Type u_7
inst✝³ : NormedAddCommGroup E'
inst✝² : InnerProductSpace 𝕜 E'
E'' : Type u_8
inst✝¹ : NormedAddCommGroup E''
inst✝ : InnerProductSpace 𝕜 E''
v : ι → E
f : E →ₗᵢ[𝕜] E'
⊢ Orthonormal 𝕜 (⇑f ∘ v) ↔ Orthonormal 𝕜 v
state_after: no goals

tactic: simp_rw [orthonormal_iff_ite, Function.comp_apply, LinearIsometry.inner_map_map]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁸ : _root_.RCLike 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : InnerProductSpace 𝕜 E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace ℝ F
ι : Type u_4
ι' : Type u_5
ι'' : Type u_6
E' : Type u_7
inst✝³ : NormedAddCommGroup E'
inst✝² : InnerProductSpace 𝕜 E'
E'' : Type u_8
inst✝¹ : NormedAddCommGroup E''
inst✝ : InnerProductSpace 𝕜 E''
v : ι → E
f : E →ₗᵢ[𝕜] E'
⊢ Orthonormal 𝕜 (⇑f ∘ v) ↔ Orthonormal 𝕜 v
state_after: no goals
Theorem: le_nhds_iff
File: Mathlib/Topology/Basic.lean

tactic: simp [nhds_def]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
f : Filter X
⊢ f ≤ 𝓝 x ↔ ∀ (s : Set X), x ∈ s → IsOpen s → s ∈ f
state_after: no goals
Theorem: CategoryTheory.yonedaEquiv_yoneda_map
File: Mathlib/CategoryTheory/Yoneda.lean

tactic: rw [yonedaEquiv_apply]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
X Y : C
f : X ⟶ Y
⊢ yonedaEquiv (yoneda.map f) = f
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
X Y : C
f : X ⟶ Y
⊢ (yoneda.map f).app { unop := X } (𝟙 X) = f

tactic: simp
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
X Y : C
f : X ⟶ Y
⊢ (yoneda.map f).app { unop := X } (𝟙 X) = f
state_after: no goals
Theorem: Real.BohrMollerup.le_logGammaSeq
File: Mathlib/Analysis/SpecialFunctions/Gamma/BohrMollerup.lean

tactic: rw [logGammaSeq, ← add_sub_assoc, le_sub_iff_add_le, ← f_add_nat_eq (@hf_feq) hx, add_comm x]
state_before: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f x ≤ f 1 + x * log (↑n + 1) - x * log ↑n + logGammaSeq x n
state_after: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f (↑(n + 1) + x) ≤ f 1 + x * log (↑n + 1) - x * log ↑n + (x * log ↑n + log ↑n !)

tactic: refine (f_add_nat_le hf_conv (@hf_feq) (Nat.add_one_ne_zero n) hx hx').trans (le_of_eq ?_)
state_before: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f (↑(n + 1) + x) ≤ f 1 + x * log (↑n + 1) - x * log ↑n + (x * log ↑n + log ↑n !)
state_after: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f ↑(n + 1) + x * log ↑(n + 1) = f 1 + x * log (↑n + 1) - x * log ↑n + (x * log ↑n + log ↑n !)

tactic: rw [f_nat_eq @hf_feq (by linarith : n + 1 ≠ 0), Nat.add_sub_cancel, Nat.cast_add_one]
state_before: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f ↑(n + 1) + x * log ↑(n + 1) = f 1 + x * log (↑n + 1) - x * log ↑n + (x * log ↑n + log ↑n !)
state_after: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f 1 + log ↑n ! + x * log (↑n + 1) = f 1 + x * log (↑n + 1) - x * log ↑n + (x * log ↑n + log ↑n !)

tactic: ring
state_before: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ f 1 + log ↑n ! + x * log (↑n + 1) = f 1 + x * log (↑n + 1) - x * log ↑n + (x * log ↑n + log ↑n !)
state_after: no goals

tactic: linarith
state_before: f : ℝ → ℝ
x : ℝ
n✝ : ℕ
hf_conv : ConvexOn ℝ (Ioi 0) f
hf_feq : ∀ {y : ℝ}, 0 < y → f (y + 1) = f y + log y
hx : 0 < x
hx' : x ≤ 1
n : ℕ
⊢ n + 1 ≠ 0
state_after: no goals
Theorem: List.Subperm.cons_left
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

tactic: rw [subperm_ext_iff] at h ⊢
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : l₁ <+~ l₂
x : α
hx : count x l₁ < count x l₂
⊢ x :: l₁ <+~ l₂
state_after: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
⊢ ∀ (x_1 : α), x_1 ∈ x :: l₁ → count x_1 (x :: l₁) ≤ count x_1 l₂

tactic: intro y hy
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
⊢ ∀ (x_1 : α), x_1 ∈ x :: l₁ → count x_1 (x :: l₁) ≤ count x_1 l₂
state_after: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
⊢ count y (x :: l₁) ≤ count y l₂

tactic: if hy' : y = x then
  subst x; simpa using Nat.succ_le_of_lt hx
else
  rw [count_cons_of_ne hy']
  refine h y ?_
  simpa [hy'] using hy
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
⊢ count y (x :: l₁) ≤ count y l₂
state_after: no goals

tactic: subst x
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
hy' : y = x
⊢ count y (x :: l₁) ≤ count y l₂
state_after: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
y : α
hx : count y l₁ < count y l₂
hy : y ∈ y :: l₁
⊢ count y (y :: l₁) ≤ count y l₂

tactic: simpa using Nat.succ_le_of_lt hx
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
y : α
hx : count y l₁ < count y l₂
hy : y ∈ y :: l₁
⊢ count y (y :: l₁) ≤ count y l₂
state_after: no goals

tactic: rw [count_cons_of_ne hy']
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
hy' : ¬y = x
⊢ count y (x :: l₁) ≤ count y l₂
state_after: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
hy' : ¬y = x
⊢ count y l₁ ≤ count y l₂

tactic: refine h y ?_
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
hy' : ¬y = x
⊢ count y l₁ ≤ count y l₂
state_after: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
hy' : ¬y = x
⊢ y ∈ l₁

tactic: simpa [hy'] using hy
state_before: α : Type u_1
inst✝ : DecidableEq α
l₁ l₂ : List α
h : ∀ (x : α), x ∈ l₁ → count x l₁ ≤ count x l₂
x : α
hx : count x l₁ < count x l₂
y : α
hy : y ∈ x :: l₁
hy' : ¬y = x
⊢ y ∈ l₁
state_after: no goals
Theorem: Real.Angle.sign_coe_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [sign, sin_coe_pi, _root_.sign_zero]
state_before: ⊢ (↑π).sign = 0
state_after: no goals
Theorem: Ordinal.div_opow_log_pos
File: Mathlib/SetTheory/Ordinal/Exponential.lean

tactic: rcases eq_zero_or_pos b with (rfl | hb)
state_before: b o : Ordinal.{u_1}
ho : o ≠ 0
⊢ 0 < o / b ^ log b o
state_after: case inl
o : Ordinal.{u_1}
ho : o ≠ 0
⊢ 0 < o / 0 ^ log 0 o

case inr
b o : Ordinal.{u_1}
ho : o ≠ 0
hb : 0 < b
⊢ 0 < o / b ^ log b o

tactic: simpa using Ordinal.pos_iff_ne_zero.2 ho
state_before: case inl
o : Ordinal.{u_1}
ho : o ≠ 0
⊢ 0 < o / 0 ^ log 0 o
state_after: no goals

tactic: rw [div_pos (opow_ne_zero _ hb.ne')]
state_before: case inr
b o : Ordinal.{u_1}
ho : o ≠ 0
hb : 0 < b
⊢ 0 < o / b ^ log b o
state_after: case inr
b o : Ordinal.{u_1}
ho : o ≠ 0
hb : 0 < b
⊢ b ^ log b o ≤ o

tactic: exact opow_log_le_self b ho
state_before: case inr
b o : Ordinal.{u_1}
ho : o ≠ 0
hb : 0 < b
⊢ b ^ log b o ≤ o
state_after: no goals
Theorem: CategoryTheory.Limits.hasProduct_of_equiv_of_iso
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

tactic: have : HasLimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f) :=
  hasLimitEquivalenceComp _
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
g : β → C
inst✝ : HasProduct f
e : β ≃ α
iso : (j : β) → g j ≅ f (e j)
⊢ HasProduct g
state_after: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
g : β → C
inst✝ : HasProduct f
e : β ≃ α
iso : (j : β) → g j ≅ f (e j)
this : HasLimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
⊢ HasProduct g

tactic: have α : Discrete.functor g ≅ (Discrete.equivalence e).functor ⋙ Discrete.functor f :=
  Discrete.natIso (fun ⟨j⟩ => iso j)
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
g : β → C
inst✝ : HasProduct f
e : β ≃ α
iso : (j : β) → g j ≅ f (e j)
this : HasLimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
⊢ HasProduct g
state_after: β : Type w
α✝ : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α✝ → C
g : β → C
inst✝ : HasProduct f
e : β ≃ α✝
iso : (j : β) → g j ≅ f (e j)
this : HasLimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
α : Discrete.functor g ≅ (Discrete.equivalence e).functor ⋙ Discrete.functor f
⊢ HasProduct g

tactic: exact hasLimitOfIso α.symm
state_before: β : Type w
α✝ : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α✝ → C
g : β → C
inst✝ : HasProduct f
e : β ≃ α✝
iso : (j : β) → g j ≅ f (e j)
this : HasLimit ((Discrete.equivalence e).functor ⋙ Discrete.functor f)
α : Discrete.functor g ≅ (Discrete.equivalence e).functor ⋙ Discrete.functor f
⊢ HasProduct g
state_after: no goals
Theorem: Monoid.PushoutI.ofCoprodI_of
File: Mathlib/GroupTheory/PushoutI.lean

tactic: simp [ofCoprodI]
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
i : ι
g : G i
⊢ ofCoprodI (CoprodI.of g) = (of i) g
state_after: no goals
Theorem: one_le_gauge_of_not_mem
File: Mathlib/Analysis/Convex/Gauge.lean

tactic: rwa [one_smul]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
x : E
a : ℝ
hs₁ : StarConvex ℝ 0 s
hs₂ : Absorbs ℝ s {x}
hx : x ∉ s
⊢ x ∉ 1 • s
state_after: no goals
Theorem: Nat.bodd_add_div2
File: Mathlib/Data/Nat/Bits.lean

tactic: simp only [bodd_succ, Bool.cond_not, div2_succ, Nat.mul_comm]
state_before: m n✝ n : ℕ
⊢ (bif n.succ.bodd then 1 else 0) + 2 * n.succ.div2 = n.succ
state_after: m n✝ n : ℕ
⊢ (bif n.bodd then 0 else 1) + (bif n.bodd then n.div2.succ else n.div2) * 2 = n.succ

tactic: refine Eq.trans ?_ (congr_arg succ (bodd_add_div2 n))
state_before: m n✝ n : ℕ
⊢ (bif n.bodd then 0 else 1) + (bif n.bodd then n.div2.succ else n.div2) * 2 = n.succ
state_after: m n✝ n : ℕ
⊢ (bif n.bodd then 0 else 1) + (bif n.bodd then n.div2.succ else n.div2) * 2 =
    ((bif n.bodd then 1 else 0) + 2 * n.div2).succ

tactic: cases bodd n
state_before: m n✝ n : ℕ
⊢ (bif n.bodd then 0 else 1) + (bif n.bodd then n.div2.succ else n.div2) * 2 =
    ((bif n.bodd then 1 else 0) + 2 * n.div2).succ
state_after: case false
m n✝ n : ℕ
⊢ (bif false then 0 else 1) + (bif false then n.div2.succ else n.div2) * 2 =
    ((bif false then 1 else 0) + 2 * n.div2).succ

case true
m n✝ n : ℕ
⊢ (bif true then 0 else 1) + (bif true then n.div2.succ else n.div2) * 2 = ((bif true then 1 else 0) + 2 * n.div2).succ

tactic: simp
state_before: case false
m n✝ n : ℕ
⊢ (bif false then 0 else 1) + (bif false then n.div2.succ else n.div2) * 2 =
    ((bif false then 1 else 0) + 2 * n.div2).succ
state_after: no goals

tactic: simp
state_before: case true
m n✝ n : ℕ
⊢ (bif true then 0 else 1) + (bif true then n.div2.succ else n.div2) * 2 = ((bif true then 1 else 0) + 2 * n.div2).succ
state_after: case true
m n✝ n : ℕ
⊢ (n.div2 + 1) * 2 = 1 + (1 + n.div2 * 2)

tactic: omega
state_before: case true
m n✝ n : ℕ
⊢ (n.div2 + 1) * 2 = 1 + (1 + n.div2 * 2)
state_after: no goals
Theorem: Fin.mk_bit1
File: Mathlib/Data/Fin/Basic.lean

tactic: ext
state_before: n✝ m✝ m n : ℕ
inst✝ : NeZero n
h : bit1 m < n
⊢ ⟨bit1 m, h⟩ = bit1 ⟨m, ⋯⟩
state_after: case h
n✝ m✝ m n : ℕ
inst✝ : NeZero n
h : bit1 m < n
⊢ ↑⟨bit1 m, h⟩ = ↑(bit1 ⟨m, ⋯⟩)

tactic: simp only [bit1, bit0] at h
state_before: case h
n✝ m✝ m n : ℕ
inst✝ : NeZero n
h : bit1 m < n
⊢ ↑⟨bit1 m, h⟩ = ↑(bit1 ⟨m, ⋯⟩)
state_after: case h
n✝ m✝ m n : ℕ
inst✝ : NeZero n
h : m + m + 1 < n
⊢ ↑⟨bit1 m, h⟩ = ↑(bit1 ⟨m, ⋯⟩)

tactic: simp only [bit1, bit0, val_add, val_one', ← Nat.add_mod, Nat.mod_eq_of_lt h]
state_before: case h
n✝ m✝ m n : ℕ
inst✝ : NeZero n
h : m + m + 1 < n
⊢ ↑⟨bit1 m, h⟩ = ↑(bit1 ⟨m, ⋯⟩)
state_after: no goals
Theorem: nhds_translation_div
File: Mathlib/Topology/Algebra/Group/Basic.lean

tactic: simpa only [div_eq_mul_inv] using nhds_translation_mul_inv x
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝² : Group G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
x : G
⊢ comap (fun x_1 => x_1 / x) (𝓝 1) = 𝓝 x
state_after: no goals
Theorem: Metric.diam_univ_of_noncompact
File: Mathlib/Topology/MetricSpace/Bounded.lean

tactic: simp [diam]
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝² : PseudoMetricSpace α
s : Set α
x y z : α
inst✝¹ : ProperSpace α
inst✝ : NoncompactSpace α
⊢ diam univ = 0
state_after: no goals
Theorem: List.cons_subset_cons
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

tactic: simp only [mem_cons]
state_before: α : Type u_1
l₁ l₂ : List α
a : α
s : l₁ ⊆ l₂
x✝ : α
⊢ x✝ ∈ a :: l₁ → x✝ ∈ a :: l₂
state_after: α : Type u_1
l₁ l₂ : List α
a : α
s : l₁ ⊆ l₂
x✝ : α
⊢ x✝ = a ∨ x✝ ∈ l₁ → x✝ = a ∨ x✝ ∈ l₂

tactic: exact Or.imp_right (@s _)
state_before: α : Type u_1
l₁ l₂ : List α
a : α
s : l₁ ⊆ l₂
x✝ : α
⊢ x✝ = a ∨ x✝ ∈ l₁ → x✝ = a ∨ x✝ ∈ l₂
state_after: no goals
Theorem: Monoid.CoprodI.lift_word_prod_nontrivial_of_head_eq_last
File: Mathlib/GroupTheory/CoprodI.lean

tactic: obtain ⟨k, hk⟩ := exists_ne i
state_before: ι : Type u_1
M : ι → Type u_2
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_5
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i)
α : Type u_6
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), (X i).Nonempty
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → (f i) h • X j ⊆ X i
i : ι
w : NeWord H i i
⊢ (lift f) w.prod ≠ 1
state_after: case intro
ι : Type u_1
M : ι → Type u_2
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_5
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i)
α : Type u_6
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), (X i).Nonempty
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → (f i) h • X j ⊆ X i
i : ι
w : NeWord H i i
k : ι
hk : k ≠ i
⊢ (lift f) w.prod ≠ 1

tactic: exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
state_before: case intro
ι : Type u_1
M : ι → Type u_2
inst✝⁴ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝³ : Monoid N
hnontriv : Nontrivial ι
G : Type u_4
inst✝² : Group G
H : ι → Type u_5
inst✝¹ : (i : ι) → Group (H i)
f : (i : ι) → H i →* G
hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i)
α : Type u_6
inst✝ : MulAction G α
X : ι → Set α
hXnonempty : ∀ (i : ι), (X i).Nonempty
hXdisj : Pairwise fun i j => Disjoint (X i) (X j)
hpp : Pairwise fun i j => ∀ (h : H i), h ≠ 1 → (f i) h • X j ⊆ X i
i : ι
w : NeWord H i i
k : ι
hk : k ≠ i
⊢ (lift f) w.prod ≠ 1
state_after: no goals
Theorem: ProbabilityTheory.IsRatCondKernelCDFAux.mono
File: Mathlib/Probability/Kernel/Disintegration/CdfToKernel.lean

tactic: unfold Monotone
state_before: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α (β × ℝ))
ν : ↥(kernel α β)
f : α × β → ℚ → ℝ
hf : IsRatCondKernelCDFAux f κ ν
a : α
⊢ ∀ᵐ (c : β) ∂ν a, Monotone (f (a, c))
state_after: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α (β × ℝ))
ν : ↥(kernel α β)
f : α × β → ℚ → ℝ
hf : IsRatCondKernelCDFAux f κ ν
a : α
⊢ ∀ᵐ (c : β) ∂ν a, ∀ ⦃a_1 b : ℚ⦄, a_1 ≤ b → f (a, c) a_1 ≤ f (a, c) b

tactic: simp_rw [ae_all_iff]
state_before: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α (β × ℝ))
ν : ↥(kernel α β)
f : α × β → ℚ → ℝ
hf : IsRatCondKernelCDFAux f κ ν
a : α
⊢ ∀ᵐ (c : β) ∂ν a, ∀ ⦃a_1 b : ℚ⦄, a_1 ≤ b → f (a, c) a_1 ≤ f (a, c) b
state_after: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α (β × ℝ))
ν : ↥(kernel α β)
f : α × β → ℚ → ℝ
hf : IsRatCondKernelCDFAux f κ ν
a : α
⊢ ∀ (i i_1 : ℚ), i ≤ i_1 → ∀ᵐ (a_1 : β) ∂ν a, f (a, a_1) i ≤ f (a, a_1) i_1

tactic: exact fun _ _ hqr ↦ hf.mono' a hqr
state_before: α : Type u_1
β : Type u_2
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : ↥(kernel α (β × ℝ))
ν : ↥(kernel α β)
f : α × β → ℚ → ℝ
hf : IsRatCondKernelCDFAux f κ ν
a : α
⊢ ∀ (i i_1 : ℚ), i ≤ i_1 → ∀ᵐ (a_1 : β) ∂ν a, f (a, a_1) i ≤ f (a, a_1) i_1
state_after: no goals
Theorem: CategoryTheory.Limits.cokernelIsoOfEq_inv_comp_desc
File: Mathlib/CategoryTheory/Limits/Shapes/Kernels.lean

tactic: simp [← h, he]
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f g : X ⟶ Y
inst✝¹ : HasCokernel f
inst✝ : HasCokernel g
h : f = g
e : Y ⟶ Z
he : f ≫ e = 0
⊢ g ≫ e = 0
state_after: no goals

tactic: cases h
state_before: C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f g : X ⟶ Y
inst✝¹ : HasCokernel f
inst✝ : HasCokernel g
h : f = g
e : Y ⟶ Z
he : f ≫ e = 0
⊢ (cokernelIsoOfEq h).inv ≫ cokernel.desc f e he = cokernel.desc g e ⋯
state_after: case refl
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f : X ⟶ Y
inst✝¹ : HasCokernel f
e : Y ⟶ Z
he : f ≫ e = 0
inst✝ : HasCokernel f
⊢ (cokernelIsoOfEq ⋯).inv ≫ cokernel.desc f e he = cokernel.desc f e ⋯

tactic: simp
state_before: case refl
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
X Y : C
f✝ : X ⟶ Y
inst✝² : HasCokernel f✝
Z : C
f : X ⟶ Y
inst✝¹ : HasCokernel f
e : Y ⟶ Z
he : f ≫ e = 0
inst✝ : HasCokernel f
⊢ (cokernelIsoOfEq ⋯).inv ≫ cokernel.desc f e he = cokernel.desc f e ⋯
state_after: no goals
Theorem: AlgebraicTopology.DoldKan.P_idem
File: Mathlib/AlgebraicTopology/DoldKan/Projections.lean

tactic: ext n
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q : ℕ
⊢ P q ≫ P q = P q
state_after: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q n : ℕ
⊢ (P q ≫ P q).f n = (P q).f n

tactic: exact P_f_idem q n
state_before: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q n : ℕ
⊢ (P q ≫ P q).f n = (P q).f n
state_after: no goals