1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: ih_0
File: Mathlib/NumberTheory/Padics/Hensel.lean

tactic: simp [T_def, mul_div_cancel₀ _ (ne_of_gt (deriv_sq_norm_pos hnorm))]
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
F : Polynomial ℤ_[p]
a : ℤ_[p]
hnorm : ‖Polynomial.eval a F‖ < ‖Polynomial.eval a (Polynomial.derivative F)‖ ^ 2
hnsol : Polynomial.eval a F ≠ 0
⊢ ‖Polynomial.eval a F‖ ≤ ‖Polynomial.eval a (Polynomial.derivative F)‖ ^ 2 * T_gen p F a ^ 2 ^ 0
state_after: no goals
Theorem: Fin.prod_trunc
File: Mathlib/Algebra/BigOperators/Fin.lean

tactic: rw [prod_univ_add, Fintype.prod_eq_one _ hf, mul_one]
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
hf : ∀ (j : Fin b), f (natAdd a j) = 1
⊢ ∏ i : Fin (a + b), f i = ∏ i : Fin a, f (castLE ⋯ i)
state_after: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
hf : ∀ (j : Fin b), f (natAdd a j) = 1
⊢ ∏ i : Fin a, f (castAdd b i) = ∏ i : Fin a, f (castLE ⋯ i)

tactic: rfl
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
a b : ℕ
f : Fin (a + b) → M
hf : ∀ (j : Fin b), f (natAdd a j) = 1
⊢ ∏ i : Fin a, f (castAdd b i) = ∏ i : Fin a, f (castLE ⋯ i)
state_after: no goals
Theorem: tendsto_gauge_nhds_zero'
File: Mathlib/Analysis/Convex/Gauge.lean

tactic: refine nhdsWithin_Ici_basis_Icc.tendsto_right_iff.2 fun ε hε ↦ ?_
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 : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
hs : s ∈ 𝓝 0
⊢ Tendsto (gauge s) (𝓝 0) (𝓝[≥] 0)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
s t : Set E
x : E
a : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
hs : s ∈ 𝓝 0
ε : ℝ
hε : 0 < ε
⊢ ∀ᶠ (x : E) in 𝓝 0, gauge s x ∈ Icc 0 ε

tactic: rw [← set_smul_mem_nhds_zero_iff hε.ne'] at hs
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 : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
hs : s ∈ 𝓝 0
ε : ℝ
hε : 0 < ε
⊢ ∀ᶠ (x : E) in 𝓝 0, gauge s x ∈ Icc 0 ε
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
s t : Set E
x : E
a : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
ε : ℝ
hs : ε • s ∈ 𝓝 0
hε : 0 < ε
⊢ ∀ᶠ (x : E) in 𝓝 0, gauge s x ∈ Icc 0 ε

tactic: filter_upwards [hs] with x hx
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 : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
ε : ℝ
hs : ε • s ∈ 𝓝 0
hε : 0 < ε
⊢ ∀ᶠ (x : E) in 𝓝 0, gauge s x ∈ Icc 0 ε
state_after: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
s t : Set E
x✝ : E
a : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
ε : ℝ
hs : ε • s ∈ 𝓝 0
hε : 0 < ε
x : E
hx : x ∈ ε • s
⊢ gauge s x ∈ Icc 0 ε

tactic: exact ⟨gauge_nonneg _, gauge_le_of_mem hε.le hx⟩
state_before: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
s t : Set E
x✝ : E
a : ℝ
inst✝¹ : TopologicalSpace E
inst✝ : ContinuousSMul ℝ E
ε : ℝ
hs : ε • s ∈ 𝓝 0
hε : 0 < ε
x : E
hx : x ∈ ε • s
⊢ gauge s x ∈ Icc 0 ε
state_after: no goals
Theorem: HasDerivWithinAt.inner
File: Mathlib/Analysis/InnerProductSpace/Calculus.lean

tactic: simpa using (hf.hasFDerivWithinAt.inner 𝕜 hg.hasFDerivWithinAt).hasDerivWithinAt
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
inst✝² : NormedSpace ℝ E
G : Type u_4
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
f✝ g✝ : G → E
f'✝ g'✝ : G →L[ℝ] E
s✝ : Set G
x✝ : G
n : ℕ∞
f g : ℝ → E
f' g' : E
s : Set ℝ
x : ℝ
hf : HasDerivWithinAt f f' s x
hg : HasDerivWithinAt g g' s x
⊢ HasDerivWithinAt (fun t => ⟪f t, g t⟫_𝕜) (⟪f x, g'⟫_𝕜 + ⟪f', g x⟫_𝕜) s x
state_after: no goals
Theorem: SimpleGraph.IsSRGWith.card_commonNeighbors_eq_of_not_adj_compl
File: Mathlib/Combinatorics/SimpleGraph/StronglyRegular.lean

tactic: simp only [← Set.toFinset_card, commonNeighbors, Set.toFinset_inter, neighborSet_compl,
  Set.toFinset_diff, Set.toFinset_singleton, Set.toFinset_compl, ← neighborFinset_def]
state_before: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : ¬Gᶜ.Adj v w
⊢ Fintype.card ↑(Gᶜ.commonNeighbors v w) = n - (2 * k - ℓ)
state_after: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : ¬Gᶜ.Adj v w
⊢ ((G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w})).card = n - (2 * k - ℓ)

tactic: simp only [not_and, Classical.not_not, compl_adj] at hna
state_before: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : ¬Gᶜ.Adj v w
⊢ ((G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w})).card = n - (2 * k - ℓ)
state_after: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : v ≠ w → G.Adj v w
⊢ ((G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w})).card = n - (2 * k - ℓ)

tactic: have h2' := hna hn
state_before: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : v ≠ w → G.Adj v w
⊢ ((G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w})).card = n - (2 * k - ℓ)
state_after: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : v ≠ w → G.Adj v w
h2' : G.Adj v w
⊢ ((G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w})).card = n - (2 * k - ℓ)

tactic: simp_rw [compl_neighborFinset_sdiff_inter_eq, sdiff_compl_neighborFinset_inter_eq h2']
state_before: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : v ≠ w → G.Adj v w
h2' : G.Adj v w
⊢ ((G.neighborFinset v)ᶜ \ {v} ∩ ((G.neighborFinset w)ᶜ \ {w})).card = n - (2 * k - ℓ)
state_after: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : v ≠ w → G.Adj v w
h2' : G.Adj v w
⊢ ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ).card = n - (2 * k - ℓ)

tactic: rwa [← Finset.compl_union, card_compl, h.card_neighborFinset_union_of_adj, ← h.card]
state_before: V : Type u
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n k ℓ μ : ℕ
h : G.IsSRGWith n k ℓ μ
v w : V
hn : v ≠ w
hna : v ≠ w → G.Adj v w
h2' : G.Adj v w
⊢ ((G.neighborFinset v)ᶜ ∩ (G.neighborFinset w)ᶜ).card = n - (2 * k - ℓ)
state_after: no goals
Theorem: ZFSet.isTransitive_iff_sUnion_subset
File: Mathlib/SetTheory/ZFC/Ordinal.lean

tactic: rcases mem_sUnion.1 hy with ⟨z, hz, hz'⟩
state_before: x y✝ z : ZFSet
h : x.IsTransitive
y : ZFSet
hy : y ∈ ⋃₀ x
⊢ y ∈ x
state_after: case intro.intro
x y✝ z✝ : ZFSet
h : x.IsTransitive
y : ZFSet
hy : y ∈ ⋃₀ x
z : ZFSet
hz : z ∈ x
hz' : y ∈ z
⊢ y ∈ x

tactic: exact h.mem_trans hz' hz
state_before: case intro.intro
x y✝ z✝ : ZFSet
h : x.IsTransitive
y : ZFSet
hy : y ∈ ⋃₀ x
z : ZFSet
hz : z ∈ x
hz' : y ∈ z
⊢ y ∈ x
state_after: no goals
Theorem: DFinsupp.sum_mapRange_index.linearMap
File: Mathlib/LinearAlgebra/DFinsupp.lean

tactic: classical simpa [DFinsupp.sumAddHom_apply] using sum_mapRange_index fun i => by simp
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝¹¹ : Semiring R
inst✝¹⁰ : (i : ι) → AddCommMonoid (M i)
inst✝⁹ : (i : ι) → Module R (M i)
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
β : ι → Type u_6
β₁ : ι → Type u_7
β₂ : ι → Type u_8
inst✝⁶ : (i : ι) → AddCommMonoid (β i)
inst✝⁵ : (i : ι) → AddCommMonoid (β₁ i)
inst✝⁴ : (i : ι) → AddCommMonoid (β₂ i)
inst✝³ : (i : ι) → Module R (β i)
inst✝² : (i : ι) → Module R (β₁ i)
inst✝¹ : (i : ι) → Module R (β₂ i)
inst✝ : DecidableEq ι
f : (i : ι) → β₁ i →ₗ[R] β₂ i
h : (i : ι) → β₂ i →ₗ[R] N
l : Π₀ (i : ι), β₁ i
⊢ ((lsum ℕ) h) ((mapRange.linearMap f) l) = ((lsum ℕ) fun i => h i ∘ₗ f i) l
state_after: no goals

tactic: simpa [DFinsupp.sumAddHom_apply] using sum_mapRange_index fun i => by simp
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝¹¹ : Semiring R
inst✝¹⁰ : (i : ι) → AddCommMonoid (M i)
inst✝⁹ : (i : ι) → Module R (M i)
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
β : ι → Type u_6
β₁ : ι → Type u_7
β₂ : ι → Type u_8
inst✝⁶ : (i : ι) → AddCommMonoid (β i)
inst✝⁵ : (i : ι) → AddCommMonoid (β₁ i)
inst✝⁴ : (i : ι) → AddCommMonoid (β₂ i)
inst✝³ : (i : ι) → Module R (β i)
inst✝² : (i : ι) → Module R (β₁ i)
inst✝¹ : (i : ι) → Module R (β₂ i)
inst✝ : DecidableEq ι
f : (i : ι) → β₁ i →ₗ[R] β₂ i
h : (i : ι) → β₂ i →ₗ[R] N
l : Π₀ (i : ι), β₁ i
⊢ ((lsum ℕ) h) ((mapRange.linearMap f) l) = ((lsum ℕ) fun i => h i ∘ₗ f i) l
state_after: no goals

tactic: simp
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
M : ι → Type u_4
N : Type u_5
inst✝¹¹ : Semiring R
inst✝¹⁰ : (i : ι) → AddCommMonoid (M i)
inst✝⁹ : (i : ι) → Module R (M i)
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
β : ι → Type u_6
β₁ : ι → Type u_7
β₂ : ι → Type u_8
inst✝⁶ : (i : ι) → AddCommMonoid (β i)
inst✝⁵ : (i : ι) → AddCommMonoid (β₁ i)
inst✝⁴ : (i : ι) → AddCommMonoid (β₂ i)
inst✝³ : (i : ι) → Module R (β i)
inst✝² : (i : ι) → Module R (β₁ i)
inst✝¹ : (i : ι) → Module R (β₂ i)
inst✝ : DecidableEq ι
f : (i : ι) → β₁ i →ₗ[R] β₂ i
h : (i : ι) → β₂ i →ₗ[R] N
l : Π₀ (i : ι), β₁ i
i : ι
⊢ (h i) 0 = 0
state_after: no goals
Theorem: Set.mulIndicator_one
File: Mathlib/Algebra/Group/Indicator.lean

tactic: simp only [mulSupport_one, empty_disjoint]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
M : Type u_4
N : Type u_5
inst✝¹ : One M
inst✝ : One N
s✝ t : Set α
f g : α → M
a : α
s : Set α
⊢ Disjoint (mulSupport fun x => 1) s
state_after: no goals
Theorem: InitialSeg.eq
File: Mathlib/Order/InitialSeg.lean

tactic: rw [Subsingleton.elim f g]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
inst✝ : IsWellOrder β s
f g : r ≼i s
a : α
⊢ f a = g a
state_after: no goals
Theorem: CauSeq.add_limZero
File: Mathlib/Algebra/Order/CauSeq/Basic.lean

tactic: let ⟨H₁, H₂⟩ := H _ ij
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : f.LimZero
hg : g.LimZero
ε : α
ε0 : ε > 0
i : ℕ
H : ∀ j ≥ i, abv (↑f j) < ε / 2 ∧ abv (↑g j) < ε / 2
j : ℕ
ij : j ≥ i
⊢ abv (↑(f + g) j) < ε
state_after: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : f.LimZero
hg : g.LimZero
ε : α
ε0 : ε > 0
i : ℕ
H : ∀ j ≥ i, abv (↑f j) < ε / 2 ∧ abv (↑g j) < ε / 2
j : ℕ
ij : j ≥ i
H₁ : abv (↑f j) < ε / 2
H₂ : abv (↑g j) < ε / 2
⊢ abv (↑(f + g) j) < ε

tactic: simpa [add_halves ε] using lt_of_le_of_lt (abv_add abv _ _) (add_lt_add H₁ H₂)
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : f.LimZero
hg : g.LimZero
ε : α
ε0 : ε > 0
i : ℕ
H : ∀ j ≥ i, abv (↑f j) < ε / 2 ∧ abv (↑g j) < ε / 2
j : ℕ
ij : j ≥ i
H₁ : abv (↑f j) < ε / 2
H₂ : abv (↑g j) < ε / 2
⊢ abv (↑(f + g) j) < ε
state_after: no goals
Theorem: Holor.mul_assoc
File: Mathlib/Data/Holor.lean

tactic: simp [cast_heq, mul_assoc0, assocLeft]
state_before: α : Type
d : ℕ
ds ds₁ ds₂ ds₃ : List ℕ
inst✝ : Semigroup α
x : Holor α ds₁
y : Holor α ds₂
z : Holor α ds₃
⊢ HEq (x ⊗ y ⊗ z) (x ⊗ (y ⊗ z))
state_after: no goals
Theorem: IsLocalization.at_units
File: Mathlib/RingTheory/Localization/Basic.lean

tactic: simp
state_before: R✝ : Type u_1
inst✝⁵ : CommSemiring R✝
M : Submonoid R✝
S✝ : Type u_2
inst✝⁴ : CommSemiring S✝
inst✝³ : Algebra R✝ S✝
P : Type u_3
inst✝² : CommSemiring P
inst✝¹ : IsLocalization M S✝
g : R✝ →+* P
hg : ∀ (y : ↥M), IsUnit (g ↑y)
R : Type u_4
inst✝ : CommSemiring R
S : Submonoid R
hS : S ≤ IsUnit.submonoid R
s : R
⊢ s * (algebraMap R R) ↑(s, 1).2 = (algebraMap R R) (s, 1).1
state_after: no goals
Theorem: SimpleGraph.Colorable.mono
File: Mathlib/Combinatorics/SimpleGraph/Coloring.lean

tactic: simp [h]
state_before: V : Type u
G : SimpleGraph V
n✝ : ℕ
α : Type u_1
β : Type u_2
C : G.Coloring α
n m : ℕ
h : n ≤ m
hc : G.Colorable n
⊢ card (Fin n) ≤ card (Fin m)
state_after: no goals
Theorem: CategoryTheory.Subobject.bot_factors_iff_zero
File: Mathlib/CategoryTheory/Subobject/Lattice.lean

tactic: rintro ⟨h, rfl⟩
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
f : A ⟶ B
⊢ ⊥.Factors f → f = 0
state_after: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
h : A ⟶ ⊥.obj.left
⊢ h ≫ ⊥.arrow = 0

tactic: simp only [MonoOver.bot_arrow_eq_zero, Functor.id_obj, Functor.const_obj_obj,
  MonoOver.bot_left, comp_zero]
state_before: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
h : A ⟶ ⊥.obj.left
⊢ h ≫ ⊥.arrow = 0
state_after: no goals

tactic: rintro rfl
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
f : A ⟶ B
⊢ f = 0 → ⊥.Factors f
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
⊢ ⊥.Factors 0

tactic: exact ⟨0, by simp⟩
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
⊢ ⊥.Factors 0
state_after: no goals

tactic: simp
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
A B : C
⊢ 0 ≫ ⊥.arrow = 0
state_after: no goals
Theorem: SeparationQuotient.comap_mk_nhdsSet
File: Mathlib/Topology/Inseparable.lean

tactic: conv_lhs => rw [← image_preimage_eq t surjective_mk, comap_mk_nhdsSet_image]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
α : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : (i : ι) → TopologicalSpace (π i)
x y z : X
s : Set X
f g : X → Y
t : Set (SeparationQuotient X)
⊢ comap mk (𝓝ˢ t) = 𝓝ˢ (mk ⁻¹' t)
state_after: no goals
Theorem: Metric.cthickening_cthickening_subset
File: Mathlib/Topology/MetricSpace/Thickening.lean

tactic: intro x
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s✝ t : Set α
x : α
hε : 0 ≤ ε
hδ : 0 ≤ δ
s : Set α
⊢ cthickening ε (cthickening δ s) ⊆ cthickening (ε + δ) s
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s✝ t : Set α
x✝ : α
hε : 0 ≤ ε
hδ : 0 ≤ δ
s : Set α
x : α
⊢ x ∈ cthickening ε (cthickening δ s) → x ∈ cthickening (ε + δ) s

tactic: simp_rw [mem_cthickening_iff, ENNReal.ofReal_add hε hδ]
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s✝ t : Set α
x✝ : α
hε : 0 ≤ ε
hδ : 0 ≤ δ
s : Set α
x : α
⊢ x ∈ cthickening ε (cthickening δ s) → x ∈ cthickening (ε + δ) s
state_after: ι : Sort u_1
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s✝ t : Set α
x✝ : α
hε : 0 ≤ ε
hδ : 0 ≤ δ
s : Set α
x : α
⊢ infEdist x (cthickening δ s) ≤ ENNReal.ofReal ε → infEdist x s ≤ ENNReal.ofReal ε + ENNReal.ofReal δ

tactic: exact fun hx => infEdist_le_infEdist_cthickening_add.trans (add_le_add_right hx _)
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ ε : ℝ
s✝ t : Set α
x✝ : α
hε : 0 ≤ ε
hδ : 0 ≤ δ
s : Set α
x : α
⊢ infEdist x (cthickening δ s) ≤ ENNReal.ofReal ε → infEdist x s ≤ ENNReal.ofReal ε + ENNReal.ofReal δ
state_after: no goals
Theorem: Monoid.PushoutI.NormalWord.ext_iff
File: Mathlib/GroupTheory/PushoutI.lean

tactic: simp [h]
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝⁴ : Monoid K
inst✝³ : (i : ι) → Group (G i)
inst✝² : Group H
φ : (i : ι) → H →* G i
d : Transversal φ
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → DecidableEq (G i)
w₁ w₂ : NormalWord d
h : w₁ = w₂
⊢ w₁.head = w₂.head ∧ w₁.toList = w₂.toList
state_after: no goals
Theorem: Function.Semiconj₂.isAssociative_left
File: Mathlib/Logic/Function/Conjugate.lean

tactic: simp only [h.eq, Std.Associative.assoc (op := gb)]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → β
ga : α → α → α
gb : β → β → β
inst✝ : Std.Associative gb
h : Semiconj₂ f ga gb
h_inj : Injective f
x₁ x₂ x₃ : α
⊢ f (ga (ga x₁ x₂) x₃) = f (ga x₁ (ga x₂ x₃))
state_after: no goals
Theorem: Set.Ioi_add_bij
File: Mathlib/Algebra/Order/Interval/Set/Monoid.lean

tactic: refine
  ⟨fun x h => add_lt_add_right (mem_Ioi.mp h) _, fun _ _ _ _ h => add_right_cancel h, fun _ h =>
    ?_⟩
state_before: M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c d : M
⊢ BijOn (fun x => x + d) (Ioi a) (Ioi (a + d))
state_after: M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c d x✝ : M
h : x✝ ∈ Ioi (a + d)
⊢ x✝ ∈ (fun x => x + d) '' Ioi a

tactic: obtain ⟨c, rfl⟩ := exists_add_of_le (mem_Ioi.mp h).le
state_before: M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c d x✝ : M
h : x✝ ∈ Ioi (a + d)
⊢ x✝ ∈ (fun x => x + d) '' Ioi a
state_after: case intro
M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c✝ d c : M
h : a + d + c ∈ Ioi (a + d)
⊢ a + d + c ∈ (fun x => x + d) '' Ioi a

tactic: rw [mem_Ioi, add_right_comm, add_lt_add_iff_right] at h
state_before: case intro
M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c✝ d c : M
h : a + d + c ∈ Ioi (a + d)
⊢ a + d + c ∈ (fun x => x + d) '' Ioi a
state_after: case intro
M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c✝ d c : M
h : a < a + c
⊢ a + d + c ∈ (fun x => x + d) '' Ioi a

tactic: exact ⟨a + c, h, by rw [add_right_comm]⟩
state_before: case intro
M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c✝ d c : M
h : a < a + c
⊢ a + d + c ∈ (fun x => x + d) '' Ioi a
state_after: no goals

tactic: rw [add_right_comm]
state_before: M : Type u_1
inst✝¹ : OrderedCancelAddCommMonoid M
inst✝ : ExistsAddOfLE M
a b c✝ d c : M
h : a < a + c
⊢ (fun x => x + d) (a + c) = a + d + c
state_after: no goals
Theorem: IsRelPrime.dvd_of_dvd_mul_right_of_isPrimal
File: Mathlib/Algebra/Divisibility/Units.lean

tactic: obtain ⟨a, b, ha, hb, rfl⟩ := h H2
state_before: α : Type u_1
inst✝ : CommMonoid α
x y z : α
H1 : IsRelPrime x z
H2 : x ∣ y * z
h : IsPrimal x
⊢ x ∣ y
state_after: case intro.intro.intro.intro
α : Type u_1
inst✝ : CommMonoid α
y z a b : α
ha : a ∣ y
hb : b ∣ z
H1 : IsRelPrime (a * b) z
H2 : a * b ∣ y * z
h : IsPrimal (a * b)
⊢ a * b ∣ y

tactic: exact (H1.of_mul_left_right.isUnit_of_dvd hb).mul_right_dvd.mpr ha
state_before: case intro.intro.intro.intro
α : Type u_1
inst✝ : CommMonoid α
y z a b : α
ha : a ∣ y
hb : b ∣ z
H1 : IsRelPrime (a * b) z
H2 : a * b ∣ y * z
h : IsPrimal (a * b)
⊢ a * b ∣ y
state_after: no goals
Theorem: ENat.toNat_le_of_le_coe
File: Mathlib/Data/ENat/Basic.lean

tactic: lift m to ℕ using ne_top_of_le_ne_top (coe_ne_top n) h
state_before: m✝ n✝ m : ℕ∞
n : ℕ
h : m ≤ ↑n
⊢ m.toNat ≤ n
state_after: case intro
m✝ n✝ : ℕ∞
n m : ℕ
h : ↑m ≤ ↑n
⊢ (↑m).toNat ≤ n

tactic: simpa using h
state_before: case intro
m✝ n✝ : ℕ∞
n m : ℕ
h : ↑m ≤ ↑n
⊢ (↑m).toNat ≤ n
state_after: no goals
Theorem: SetTheory.PGame.nim_birthday
File: Mathlib/SetTheory/Game/Nim.lean

tactic: induction' o using Ordinal.induction with o IH
state_before: o : Ordinal.{u_1}
⊢ (nim o).birthday = o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ (nim o).birthday = o

tactic: rw [nim_def, birthday_def]
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ (nim o).birthday = o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ max
      (lsub fun i =>
        ((mk (Quotient.out o).α (Quotient.out o).α (fun o₂ => nim (typein (fun x x_1 => x < x_1) o₂)) fun o₂ =>
                nim (typein (fun x x_1 => x < x_1) o₂)).moveLeft
            i).birthday)
      (lsub fun i =>
        ((mk (Quotient.out o).α (Quotient.out o).α (fun o₂ => nim (typein (fun x x_1 => x < x_1) o₂)) fun o₂ =>
                nim (typein (fun x x_1 => x < x_1) o₂)).moveRight
            i).birthday) =
    o

tactic: dsimp
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ max
      (lsub fun i =>
        ((mk (Quotient.out o).α (Quotient.out o).α (fun o₂ => nim (typein (fun x x_1 => x < x_1) o₂)) fun o₂ =>
                nim (typein (fun x x_1 => x < x_1) o₂)).moveLeft
            i).birthday)
      (lsub fun i =>
        ((mk (Quotient.out o).α (Quotient.out o).α (fun o₂ => nim (typein (fun x x_1 => x < x_1) o₂)) fun o₂ =>
                nim (typein (fun x x_1 => x < x_1) o₂)).moveRight
            i).birthday) =
    o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ max (lsub fun i => (nim (typein (fun x x_1 => x < x_1) i)).birthday)
      (lsub fun i => (nim (typein (fun x x_1 => x < x_1) i)).birthday) =
    o

tactic: rw [max_eq_right le_rfl]
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ max (lsub fun i => (nim (typein (fun x x_1 => x < x_1) i)).birthday)
      (lsub fun i => (nim (typein (fun x x_1 => x < x_1) i)).birthday) =
    o
state_after: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ (lsub fun i => (nim (typein (fun x x_1 => x < x_1) i)).birthday) = o

tactic: convert lsub_typein o with i
state_before: case h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
⊢ (lsub fun i => (nim (typein (fun x x_1 => x < x_1) i)).birthday) = o
state_after: case h.e'_2.h.e'_2.h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
i : (Quotient.out o).α
⊢ (nim (typein (fun x x_1 => x < x_1) i)).birthday = typein (fun x x_1 => x < x_1) i

tactic: exact IH _ (typein_lt_self i)
state_before: case h.e'_2.h.e'_2.h
o : Ordinal.{u_1}
IH : ∀ k < o, (nim k).birthday = k
i : (Quotient.out o).α
⊢ (nim (typein (fun x x_1 => x < x_1) i)).birthday = typein (fun x x_1 => x < x_1) i
state_after: no goals
Theorem: div_mul_eq_mul_div₀
File: Mathlib/Algebra/GroupWithZero/Basic.lean

tactic: simp_rw [div_eq_mul_inv, mul_assoc, mul_comm c⁻¹]
state_before: α : Type u_1
M₀ : Type u_2
G₀ : Type u_3
M₀' : Type u_4
G₀' : Type u_5
F : Type u_6
F' : Type u_7
inst✝ : CommGroupWithZero G₀
a✝ b✝ c✝ d a b c : G₀
⊢ a / c * b = a * b / c
state_after: no goals
Theorem: Batteries.UnionFind.rank_lt
File: .lake/packages/batteries/Batteries/Data/UnionFind/Basic.lean

tactic: simpa only [rank] using self.rankD_lt
state_before: self : UnionFind
i : Nat
⊢ self.parent i ≠ i → self.rank i < self.rank (self.parent i)
state_after: no goals
Theorem: Multiset.rel_flip_eq
File: Mathlib/Data/Multiset/Basic.lean

tactic: rw [rel_flip, rel_eq, eq_comm]
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
r : α → β → Prop
p : γ → δ → Prop
s t : Multiset α
⊢ Rel (flip fun x x_1 => x = x_1) s t ↔ s = t
state_after: no goals