1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: collinear_insert_insert_insert_of_mem_affineSpan_pair
File: Mathlib/LinearAlgebra/AffineSpace/FiniteDimensional.lean

tactic: rw [collinear_insert_iff_of_mem_affineSpan
    ((AffineSubspace.le_def' _ _).1
      (affineSpan_mono k ((Set.subset_insert _ _).trans (Set.subset_insert _ _))) _ h₁),
  collinear_insert_iff_of_mem_affineSpan
    ((AffineSubspace.le_def' _ _).1 (affineSpan_mono k (Set.subset_insert _ _)) _ h₂),
  collinear_insert_iff_of_mem_affineSpan h₃]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
ι : Type u_4
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
p₁ p₂ p₃ p₄ p₅ : P
h₁ : p₁ ∈ affineSpan k {p₄, p₅}
h₂ : p₂ ∈ affineSpan k {p₄, p₅}
h₃ : p₃ ∈ affineSpan k {p₄, p₅}
⊢ Collinear k {p₁, p₂, p₃, p₄, p₅}
state_after: k : Type u_1
V : Type u_2
P : Type u_3
ι : Type u_4
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
p₁ p₂ p₃ p₄ p₅ : P
h₁ : p₁ ∈ affineSpan k {p₄, p₅}
h₂ : p₂ ∈ affineSpan k {p₄, p₅}
h₃ : p₃ ∈ affineSpan k {p₄, p₅}
⊢ Collinear k {p₄, p₅}

tactic: exact collinear_pair _ _ _
state_before: k : Type u_1
V : Type u_2
P : Type u_3
ι : Type u_4
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
p₁ p₂ p₃ p₄ p₅ : P
h₁ : p₁ ∈ affineSpan k {p₄, p₅}
h₂ : p₂ ∈ affineSpan k {p₄, p₅}
h₃ : p₃ ∈ affineSpan k {p₄, p₅}
⊢ Collinear k {p₄, p₅}
state_after: no goals
Theorem: AlgHom.coe_range
File: Mathlib/Algebra/Algebra/Subalgebra/Basic.lean

tactic: ext
state_before: R' : Type u'
R : Type u
A : Type v
B : Type w
C : Type w'
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : Semiring C
inst✝ : Algebra R C
φ✝ φ : A →ₐ[R] B
⊢ ↑φ.range = Set.range ⇑φ
state_after: case h
R' : Type u'
R : Type u
A : Type v
B : Type w
C : Type w'
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : Semiring C
inst✝ : Algebra R C
φ✝ φ : A →ₐ[R] B
x✝ : B
⊢ x✝ ∈ ↑φ.range ↔ x✝ ∈ Set.range ⇑φ

tactic: rw [SetLike.mem_coe, mem_range]
state_before: case h
R' : Type u'
R : Type u
A : Type v
B : Type w
C : Type w'
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : Semiring C
inst✝ : Algebra R C
φ✝ φ : A →ₐ[R] B
x✝ : B
⊢ x✝ ∈ ↑φ.range ↔ x✝ ∈ Set.range ⇑φ
state_after: case h
R' : Type u'
R : Type u
A : Type v
B : Type w
C : Type w'
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : Semiring C
inst✝ : Algebra R C
φ✝ φ : A →ₐ[R] B
x✝ : B
⊢ (∃ x, φ x = x✝) ↔ x✝ ∈ Set.range ⇑φ

tactic: rfl
state_before: case h
R' : Type u'
R : Type u
A : Type v
B : Type w
C : Type w'
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : Semiring C
inst✝ : Algebra R C
φ✝ φ : A →ₐ[R] B
x✝ : B
⊢ (∃ x, φ x = x✝) ↔ x✝ ∈ Set.range ⇑φ
state_after: no goals
Theorem: Nat.ceilRoot_def
File: Mathlib/Data/Nat/Factorization/Root.lean

tactic: unfold ceilRoot
state_before: a b n : ℕ
⊢ n.ceilRoot a = if n = 0 ∨ a = 0 then 0 else (a.factorization ⌈/⌉ n).prod fun x x_1 => x ^ x_1
state_after: a b n : ℕ
⊢ (if n = 0 ∨ a = 0 then 0 else a.factorization.prod fun p k => p ^ ((k + n - 1) / n)) =
    if n = 0 ∨ a = 0 then 0 else (a.factorization ⌈/⌉ n).prod fun x x_1 => x ^ x_1

tactic: split_ifs with h <;>
  simp [Finsupp.ceilDiv_def, prod_mapRange_index pow_zero, Nat.ceilDiv_eq_add_pred_div]
state_before: a b n : ℕ
⊢ (if n = 0 ∨ a = 0 then 0 else a.factorization.prod fun p k => p ^ ((k + n - 1) / n)) =
    if n = 0 ∨ a = 0 then 0 else (a.factorization ⌈/⌉ n).prod fun x x_1 => x ^ x_1
state_after: no goals
Theorem: eq_of_norm_div_le_zero
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: rwa [← div_eq_one, ← norm_le_zero_iff'']
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝¹ : NormedGroup E
inst✝ : NormedGroup F
a b : E
h : ‖a / b‖ ≤ 0
⊢ a = b
state_after: no goals
Theorem: Multiset.countP_le_of_le
File: Mathlib/Data/Multiset/Basic.lean

tactic: simpa [countP_eq_card_filter] using card_le_card (filter_le_filter p h)
state_before: α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s t : Multiset α
h : s ≤ t
⊢ countP p s ≤ countP p t
state_after: no goals
Theorem: NormedSpace.exp_continuous
File: Mathlib/Analysis/NormedSpace/Exponential.lean

tactic: rw [continuous_iff_continuousOn_univ, ← Metric.eball_top_eq_univ (0 : 𝔸), ←
  expSeries_radius_eq_top 𝕂 𝔸]
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type u_3
inst✝⁵ : RCLike 𝕂
inst✝⁴ : NormedRing 𝔸
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedRing 𝔹
inst✝¹ : NormedAlgebra 𝕂 𝔹
inst✝ : CompleteSpace 𝔸
⊢ Continuous (exp 𝕂)
state_after: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type u_3
inst✝⁵ : RCLike 𝕂
inst✝⁴ : NormedRing 𝔸
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedRing 𝔹
inst✝¹ : NormedAlgebra 𝕂 𝔹
inst✝ : CompleteSpace 𝔸
⊢ ContinuousOn (exp 𝕂) (EMetric.ball 0 (expSeries 𝕂 𝔸).radius)

tactic: exact continuousOn_exp
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
𝔹 : Type u_3
inst✝⁵ : RCLike 𝕂
inst✝⁴ : NormedRing 𝔸
inst✝³ : NormedAlgebra 𝕂 𝔸
inst✝² : NormedRing 𝔹
inst✝¹ : NormedAlgebra 𝕂 𝔹
inst✝ : CompleteSpace 𝔸
⊢ ContinuousOn (exp 𝕂) (EMetric.ball 0 (expSeries 𝕂 𝔸).radius)
state_after: no goals
Theorem: IsLocalization.algebraMap_mk'
File: Mathlib/RingTheory/Localization/Basic.lean

tactic: rw [IsLocalization.eq_mk'_iff_mul_eq, Subtype.coe_mk, ← IsScalarTower.algebraMap_apply, ←
  IsScalarTower.algebraMap_apply, IsScalarTower.algebraMap_apply R Rₘ Sₘ,
  IsScalarTower.algebraMap_apply R Rₘ Sₘ, ← _root_.map_mul, mul_comm,
  IsLocalization.mul_mk'_eq_mk'_of_mul]
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type u_3
inst✝⁹ : CommRing P
Rₘ : Type u_4
Sₘ : Type u_5
inst✝⁸ : CommRing Rₘ
inst✝⁷ : CommRing Sₘ
inst✝⁶ : Algebra R Rₘ
inst✝⁵ : IsLocalization M Rₘ
inst✝⁴ : Algebra S Sₘ
i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ
inst✝³ : Algebra Rₘ Sₘ
inst✝² : Algebra R Sₘ
inst✝¹ : IsScalarTower R Rₘ Sₘ
inst✝ : IsScalarTower R S Sₘ
x : R
y : ↥M
⊢ (algebraMap Rₘ Sₘ) (mk' Rₘ x y) = mk' Sₘ ((algebraMap R S) x) ⟨(algebraMap R S) ↑y, ⋯⟩
state_after: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type u_3
inst✝⁹ : CommRing P
Rₘ : Type u_4
Sₘ : Type u_5
inst✝⁸ : CommRing Rₘ
inst✝⁷ : CommRing Sₘ
inst✝⁶ : Algebra R Rₘ
inst✝⁵ : IsLocalization M Rₘ
inst✝⁴ : Algebra S Sₘ
i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ
inst✝³ : Algebra Rₘ Sₘ
inst✝² : Algebra R Sₘ
inst✝¹ : IsScalarTower R Rₘ Sₘ
inst✝ : IsScalarTower R S Sₘ
x : R
y : ↥M
⊢ (algebraMap Rₘ Sₘ) (mk' Rₘ (↑y * x) y) = (algebraMap Rₘ Sₘ) ((algebraMap R Rₘ) x)

tactic: exact congr_arg (algebraMap Rₘ Sₘ) (IsLocalization.mk'_mul_cancel_left x y)
state_before: R : Type u_1
inst✝¹² : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹¹ : CommRing S
inst✝¹⁰ : Algebra R S
P : Type u_3
inst✝⁹ : CommRing P
Rₘ : Type u_4
Sₘ : Type u_5
inst✝⁸ : CommRing Rₘ
inst✝⁷ : CommRing Sₘ
inst✝⁶ : Algebra R Rₘ
inst✝⁵ : IsLocalization M Rₘ
inst✝⁴ : Algebra S Sₘ
i : IsLocalization (Algebra.algebraMapSubmonoid S M) Sₘ
inst✝³ : Algebra Rₘ Sₘ
inst✝² : Algebra R Sₘ
inst✝¹ : IsScalarTower R Rₘ Sₘ
inst✝ : IsScalarTower R S Sₘ
x : R
y : ↥M
⊢ (algebraMap Rₘ Sₘ) (mk' Rₘ (↑y * x) y) = (algebraMap Rₘ Sₘ) ((algebraMap R Rₘ) x)
state_after: no goals
Theorem: Nat.multinomial_singleton
File: Mathlib/Data/Nat/Choose/Multinomial.lean

tactic: rw [← cons_empty, multinomial_cons]
state_before: α : Type u_1
s : Finset α
f✝ : α → ℕ
a✝ b : α
n : ℕ
a : α
f : α → ℕ
⊢ multinomial {a} f = 1
state_after: α : Type u_1
s : Finset α
f✝ : α → ℕ
a✝ b : α
n : ℕ
a : α
f : α → ℕ
⊢ (f a + ∑ i ∈ ∅, f i).choose (f a) * multinomial ∅ f = 1

tactic: simp
state_before: α : Type u_1
s : Finset α
f✝ : α → ℕ
a✝ b : α
n : ℕ
a : α
f : α → ℕ
⊢ (f a + ∑ i ∈ ∅, f i).choose (f a) * multinomial ∅ f = 1
state_after: no goals
Theorem: MeasureTheory.levyProkhorovDist_self
File: Mathlib/MeasureTheory/Measure/LevyProkhorovMetric.lean

tactic: simp only [levyProkhorovDist, levyProkhorovEDist_self, zero_toReal]
state_before: ι : Type u_1
Ω : Type u_2
inst✝¹ : MeasurableSpace Ω
inst✝ : PseudoEMetricSpace Ω
μ : Measure Ω
⊢ levyProkhorovDist μ μ = 0
state_after: no goals
Theorem: Stream'.WSeq.map_id
File: Mathlib/Data/Seq/WSeq.lean

tactic: simp [map]
state_before: α : Type u
β : Type v
γ : Type w
s : WSeq α
⊢ map id s = s
state_after: no goals
Theorem: Language.one_add_kstar_mul_self_eq_kstar
File: Mathlib/Computability/Language.lean

tactic: rw [mul_self_kstar_comm, one_add_self_mul_kstar_eq_kstar]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
l✝ m : Language α
a b x : List α
l : Language α
⊢ 1 + l∗ * l = l∗
state_after: no goals
Theorem: Matrix.fromColumns_fromRows_eq_fromBlocks
File: Mathlib/Data/Matrix/ColumnRowPartitioned.lean

tactic: ext (_ | _) (_ | _) <;> simp
state_before: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹² : Fintype m
inst✝¹¹ : Fintype m₁
inst✝¹⁰ : Fintype m₂
inst✝⁹ : Fintype n
inst✝⁸ : Fintype n₁
inst✝⁷ : Fintype n₂
inst✝⁶ : DecidableEq m
inst✝⁵ : DecidableEq m₁
inst✝⁴ : DecidableEq m₂
inst✝³ : DecidableEq n
inst✝² : DecidableEq n₁
inst✝¹ : DecidableEq n₂
inst✝ : Semiring R
B₁₁ : Matrix m₁ n₁ R
B₁₂ : Matrix m₁ n₂ R
B₂₁ : Matrix m₂ n₁ R
B₂₂ : Matrix m₂ n₂ R
⊢ (B₁₁.fromRows B₂₁).fromColumns (B₁₂.fromRows B₂₂) = fromBlocks B₁₁ B₁₂ B₂₁ B₂₂
state_after: no goals
Theorem: Complex.edist_of_im_eq
File: Mathlib/Analysis/Complex/Basic.lean

tactic: rw [edist_nndist, edist_nndist, nndist_of_im_eq h]
state_before: z✝ : ℂ
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z w : ℂ
h : z.im = w.im
⊢ edist z w = edist z.re w.re
state_after: no goals
Theorem: Int.units_natAbs
File: Mathlib/Algebra/Group/Int.lean

tactic: rw [← natAbs_mul, Units.mul_inv]
state_before: u✝ v : ℤ
u : ℤˣ
⊢ (↑u).natAbs * (↑u⁻¹).natAbs = 1
state_after: u✝ v : ℤ
u : ℤˣ
⊢ natAbs 1 = 1

tactic: rfl
state_before: u✝ v : ℤ
u : ℤˣ
⊢ natAbs 1 = 1
state_after: no goals

tactic: rw [← natAbs_mul, Units.inv_mul]
state_before: u✝ v : ℤ
u : ℤˣ
⊢ (↑u⁻¹).natAbs * (↑u).natAbs = 1
state_after: u✝ v : ℤ
u : ℤˣ
⊢ natAbs 1 = 1
Theorem: MeasureTheory.Measure.rnDeriv_zero
File: Mathlib/MeasureTheory/Decomposition/Lebesgue.lean

tactic: rw [rnDeriv_eq_zero]
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν✝ ν : Measure α
⊢ rnDeriv 0 ν =ᶠ[ae ν] 0
state_after: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν✝ ν : Measure α
⊢ 0 ⟂ₘ ν

tactic: exact MutuallySingular.zero_left
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν✝ ν : Measure α
⊢ 0 ⟂ₘ ν
state_after: no goals
Theorem: hyperoperation_two_two_eq_four
File: Mathlib/Data/Nat/Hyperoperation.lean

tactic: induction' n with nn nih
state_before: n : ℕ
⊢ hyperoperation (n + 1) 2 2 = 4
state_after: case zero

⊢ hyperoperation (0 + 1) 2 2 = 4

case succ
nn : ℕ
nih : hyperoperation (nn + 1) 2 2 = 4
⊢ hyperoperation (nn + 1 + 1) 2 2 = 4

tactic: rw [hyperoperation_one]
state_before: case zero

⊢ hyperoperation (0 + 1) 2 2 = 4
state_after: no goals

tactic: rw [hyperoperation_recursion, hyperoperation_ge_two_eq_self, nih]
state_before: case succ
nn : ℕ
nih : hyperoperation (nn + 1) 2 2 = 4
⊢ hyperoperation (nn + 1 + 1) 2 2 = 4
state_after: no goals
Theorem: CategoryTheory.Functor.toEventualRanges_nonempty
File: Mathlib/CategoryTheory/CofilteredSystem.lean

tactic: let ⟨i, f, h⟩ := F.isMittagLeffler_iff_eventualRange.1 h j
state_before: J : Type u
inst✝² : Category.{u_1, u} J
F : J ⥤ Type v
i j✝ k : J
s : Set (F.obj i)
inst✝¹ : IsCofilteredOrEmpty J
h : F.IsMittagLeffler
inst✝ : ∀ (j : J), Nonempty (F.obj j)
j : J
⊢ Nonempty (F.toEventualRanges.obj j)
state_after: J : Type u
inst✝² : Category.{u_1, u} J
F : J ⥤ Type v
i✝ j✝ k : J
s : Set (F.obj i✝)
inst✝¹ : IsCofilteredOrEmpty J
h✝ : F.IsMittagLeffler
inst✝ : ∀ (j : J), Nonempty (F.obj j)
j i : J
f : i ⟶ j
h : F.eventualRange j = range (F.map f)
⊢ Nonempty (F.toEventualRanges.obj j)

tactic: rw [toEventualRanges_obj, h]
state_before: J : Type u
inst✝² : Category.{u_1, u} J
F : J ⥤ Type v
i✝ j✝ k : J
s : Set (F.obj i✝)
inst✝¹ : IsCofilteredOrEmpty J
h✝ : F.IsMittagLeffler
inst✝ : ∀ (j : J), Nonempty (F.obj j)
j i : J
f : i ⟶ j
h : F.eventualRange j = range (F.map f)
⊢ Nonempty (F.toEventualRanges.obj j)
state_after: J : Type u
inst✝² : Category.{u_1, u} J
F : J ⥤ Type v
i✝ j✝ k : J
s : Set (F.obj i✝)
inst✝¹ : IsCofilteredOrEmpty J
h✝ : F.IsMittagLeffler
inst✝ : ∀ (j : J), Nonempty (F.obj j)
j i : J
f : i ⟶ j
h : F.eventualRange j = range (F.map f)
⊢ Nonempty ↑(range (F.map f))

tactic: infer_instance
state_before: J : Type u
inst✝² : Category.{u_1, u} J
F : J ⥤ Type v
i✝ j✝ k : J
s : Set (F.obj i✝)
inst✝¹ : IsCofilteredOrEmpty J
h✝ : F.IsMittagLeffler
inst✝ : ∀ (j : J), Nonempty (F.obj j)
j i : J
f : i ⟶ j
h : F.eventualRange j = range (F.map f)
⊢ Nonempty ↑(range (F.map f))
state_after: no goals
Theorem: Fin.addRothNumber_le_rothNumberNat
File: Mathlib/Combinatorics/Additive/AP/Three/Defs.lean

tactic: suffices h : Set.BijOn (Nat.cast : ℕ → Fin n.succ) (range k) (Iio k : Finset (Fin n.succ)) by
  exact (AddMonoidHomClass.isAddFreimanHom (Nat.castRingHom _) h.mapsTo).addRothNumber_mono h
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ addRothNumber (Iio ↑k) ≤ rothNumberNat k
state_after: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ Set.BijOn Nat.cast ↑(range k) ↑(Iio ↑k)

tactic: refine ⟨?_, (CharP.natCast_injOn_Iio _ n.succ).mono (by simp; omega), ?_⟩
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ Set.BijOn Nat.cast ↑(range k) ↑(Iio ↑k)
state_after: case refine_1
F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ Set.MapsTo Nat.cast ↑(range k) ↑(Iio ↑k)

case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ Set.SurjOn Nat.cast ↑(range k) ↑(Iio ↑k)

tactic: simp only [Set.SurjOn, coe_Iio, Set.subset_def, Set.mem_Iio, Set.mem_image, lt_iff_val_lt_val,
  val_cast_of_lt, Nat.lt_succ_iff.2 hkn, coe_range]
state_before: case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ Set.SurjOn Nat.cast ↑(range k) ↑(Iio ↑k)
state_after: case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ ∀ (x : Fin n.succ), ↑x < k → ∃ x_1 < k, ↑x_1 = x

tactic: exact fun x hx ↦ ⟨x, hx, by simp⟩
state_before: case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ ∀ (x : Fin n.succ), ↑x < k → ∃ x_1 < k, ↑x_1 = x
state_after: no goals

tactic: exact (AddMonoidHomClass.isAddFreimanHom (Nat.castRingHom _) h.mapsTo).addRothNumber_mono h
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
h : Set.BijOn Nat.cast ↑(range k) ↑(Iio ↑k)
⊢ addRothNumber (Iio ↑k) ≤ rothNumberNat k
state_after: no goals

tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ ↑(range k) ⊆ Set.Iio n.succ
state_after: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ k ≤ n + 1

tactic: omega
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ k ≤ n + 1
state_after: no goals

tactic: simpa using fun x ↦ natCast_strictMono hkn
state_before: case refine_1
F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
⊢ Set.MapsTo Nat.cast ↑(range k) ↑(Iio ↑k)
state_after: no goals

tactic: simp
state_before: F : Type u_1
α : Type u_2
β : Type u_3
𝕜 : Type u_4
E : Type u_5
s : Finset ℕ
k✝ n✝ k n : ℕ
hkn : k ≤ n
x : Fin n.succ
hx : ↑x < k
⊢ ↑↑x = x
state_after: no goals
Theorem: Real.log_natCast_nonneg
File: Mathlib/Analysis/SpecialFunctions/Log/Basic.lean

tactic: if hn : n = 0 then
  simp [hn]
else
  have : (1 : ℝ) ≤ n := mod_cast Nat.one_le_of_lt <| Nat.pos_of_ne_zero hn
  exact log_nonneg this
state_before: x y : ℝ
n : ℕ
⊢ 0 ≤ log ↑n
state_after: no goals

tactic: simp [hn]
state_before: x y : ℝ
n : ℕ
hn : n = 0
⊢ 0 ≤ log ↑n
state_after: no goals

tactic: have : (1 : ℝ) ≤ n := mod_cast Nat.one_le_of_lt <| Nat.pos_of_ne_zero hn
state_before: x y : ℝ
n : ℕ
hn : ¬n = 0
⊢ 0 ≤ log ↑n
state_after: x y : ℝ
n : ℕ
hn : ¬n = 0
this : 1 ≤ ↑n
⊢ 0 ≤ log ↑n

tactic: exact log_nonneg this
state_before: x y : ℝ
n : ℕ
hn : ¬n = 0
this : 1 ≤ ↑n
⊢ 0 ≤ log ↑n
state_after: no goals
Theorem: Finset.prod_Iio_mul_eq_prod_Iic
File: Mathlib/Algebra/BigOperators/Intervals.lean

tactic: rw [mul_comm, mul_prod_Iio_eq_prod_Iic]
state_before: α : Type u_1
M : Type u_2
inst✝² : PartialOrder α
inst✝¹ : CommMonoid M
f : α → M
a✝ b : α
inst✝ : LocallyFiniteOrderBot α
a : α
⊢ (∏ x ∈ Iio a, f x) * f a = ∏ x ∈ Iic a, f x
state_after: no goals
Theorem: Finset.ofDual_max'
File: Mathlib/Data/Finset/Lattice.lean

tactic: rw [← WithTop.coe_eq_coe]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset αᵒᵈ
hs : s.Nonempty
⊢ ofDual (s.max' hs) = (image (⇑ofDual) s).min' ⋯
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset αᵒᵈ
hs : s.Nonempty
⊢ ↑(ofDual (s.max' hs)) = ↑((image (⇑ofDual) s).min' ⋯)

tactic: simp only [max'_eq_sup', id_eq, ofDual_sup', Function.comp_apply, coe_inf', min'_eq_inf',
  inf_image]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset αᵒᵈ
hs : s.Nonempty
⊢ ↑(ofDual (s.max' hs)) = ↑((image (⇑ofDual) s).min' ⋯)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset αᵒᵈ
hs : s.Nonempty
⊢ s.inf (WithTop.some ∘ fun x => ofDual x) = s.inf ((WithTop.some ∘ fun x => x) ∘ ⇑ofDual)

tactic: rfl
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝ : LinearOrder α
s✝ : Finset α
H : s✝.Nonempty
x : α
s : Finset αᵒᵈ
hs : s.Nonempty
⊢ s.inf (WithTop.some ∘ fun x => ofDual x) = s.inf ((WithTop.some ∘ fun x => x) ∘ ⇑ofDual)
state_after: no goals
Theorem: FreeGroup.Red.Step.append_right
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

tactic: simp
state_before: α : Type u
L L₁ L₂ L₃ L₄ x✝¹ L₁✝ L₂✝ : List (α × Bool)
x✝ : α
b✝ : Bool
⊢ Step (L₁✝ ++ (x✝, b✝) :: (x✝, !b✝) :: L₂✝ ++ x✝¹) (L₁✝ ++ L₂✝ ++ x✝¹)
state_after: no goals
Theorem: UniformCauchySeqOn.cauchy_map
File: Mathlib/Topology/UniformSpace/UniformConvergence.lean

tactic: simp only [cauchy_map_iff, hp, true_and_iff]
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
⊢ Cauchy (map (fun i => F i x) p)
state_after: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
⊢ Tendsto (fun p => (F p.1 x, F p.2 x)) (p ×ˢ p) (𝓤 β)

tactic: intro u hu
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
⊢ Tendsto (fun p => (F p.1 x, F p.2 x)) (p ×ˢ p) (𝓤 β)
state_after: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
u : Set (β × β)
hu : u ∈ 𝓤 β
⊢ u ∈ map (fun p => (F p.1 x, F p.2 x)) (p ×ˢ p)

tactic: rw [mem_map]
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
u : Set (β × β)
hu : u ∈ 𝓤 β
⊢ u ∈ map (fun p => (F p.1 x, F p.2 x)) (p ×ˢ p)
state_after: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
u : Set (β × β)
hu : u ∈ 𝓤 β
⊢ (fun p => (F p.1 x, F p.2 x)) ⁻¹' u ∈ p ×ˢ p

tactic: filter_upwards [hf u hu] with p hp using hp x hx
state_before: α : Type u
β : Type v
γ : Type w
ι : Type x
inst✝ : UniformSpace β
F : ι → α → β
f : α → β
s s' : Set α
x : α
p : Filter ι
p' : Filter α
g : ι → α
hp : p.NeBot
hf : UniformCauchySeqOn F p s
hx : x ∈ s
u : Set (β × β)
hu : u ∈ 𝓤 β
⊢ (fun p => (F p.1 x, F p.2 x)) ⁻¹' u ∈ p ×ˢ p
state_after: no goals