tasksource/leandojo huggingface dataset:
Theorem: BoxIntegral.Prepartition.le_iff_nonempty_imp_le_and_iUnion_subset
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

tactic: constructor
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
⊢ π₁ ≤ π₂ ↔
    (∀ (J : Box ι), J ∈ π₁ → ∀ (J' : Box ι), J' ∈ π₂ → Set.Nonempty (↑J ∩ ↑J') → J ≤ J') ∧
      Prepartition.iUnion π₁ ⊆ Prepartition.iUnion π₂

tactic: refine' fun H => ⟨fun J hJ J' hJ' Hne => _, iUnion_mono H⟩
state_before: case mp
ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
⊢ π₁ ≤ π₂ →
    (∀ (J : Box ι), J ∈ π₁ → ∀ (J' : Box ι), J' ∈ π₂ → Set.Nonempty (↑J ∩ ↑J') → J ≤ J') ∧
      Prepartition.iUnion π₁ ⊆ Prepartition.iUnion π₂

tactic: rcases H hJ with ⟨J'', hJ'', Hle⟩
state_before: case mp
ι : Type u_1
I J✝ J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
H : π₁ ≤ π₂
J : Box ι
hJ : J ∈ π₁
J' : Box ι
hJ' : J' ∈ π₂
Hne : Set.Nonempty (↑J ∩ ↑J')
⊢ J ≤ J'

tactic: rcases Hne with ⟨x, hx, hx'⟩
state_before: case mp.intro.intro
ι : Type u_1
I J✝ J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
H : π₁ ≤ π₂
J : Box ι
hJ : J ∈ π₁
J' : Box ι
hJ' : J' ∈ π₂
Hne : Set.Nonempty (↑J ∩ ↑J')
J'' : Box ι
hJ'' : J'' ∈ π₂
Hle : J ≤ J''
⊢ J ≤ J'

tactic: rwa [π₂.eq_of_mem_of_mem hJ' hJ'' hx' (Hle hx)]
state_before: case mp.intro.intro.intro.intro
ι : Type u_1
I J✝ J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x✝ : ι → ℝ
H : π₁ ≤ π₂
J : Box ι
hJ : J ∈ π₁
J' : Box ι
hJ' : J' ∈ π₂
J'' : Box ι
hJ'' : J'' ∈ π₂
Hle : J ≤ J''
x : ι → ℝ
hx : x ∈ ↑J
hx' : x ∈ ↑J'
⊢ J ≤ J'

tactic: rintro ⟨H, HU⟩ J hJ
state_before: case mpr
ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
⊢ (∀ (J : Box ι), J ∈ π₁ → ∀ (J' : Box ι), J' ∈ π₂ → Set.Nonempty (↑J ∩ ↑J') → J ≤ J') ∧
      Prepartition.iUnion π₁ ⊆ Prepartition.iUnion π₂ →
    π₁ ≤ π₂

tactic: simp only [Set.subset_def, mem_iUnion] at HU
state_before: case mpr.intro
ι : Type u_1
I J✝ J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
H : ∀ (J : Box ι), J ∈ π₁ → ∀ (J' : Box ι), J' ∈ π₂ → Set.Nonempty (↑J ∩ ↑J') → J ≤ J'
HU : Prepartition.iUnion π₁ ⊆ Prepartition.iUnion π₂
J : Box ι
hJ : J ∈ π₁
⊢ ∃ I', I' ∈ π₂ ∧ J ≤ I'

tactic: rcases HU J.upper ⟨J, hJ, J.upper_mem⟩ with ⟨J₂, hJ₂, hx⟩
state_before: case mpr.intro
ι : Type u_1
I J✝ J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
H : ∀ (J : Box ι), J ∈ π₁ → ∀ (J' : Box ι), J' ∈ π₂ → Set.Nonempty (↑J ∩ ↑J') → J ≤ J'
J : Box ι
hJ : J ∈ π₁
HU : ∀ (x : ι → ℝ), (∃ J, J ∈ π₁ ∧ x ∈ J) → ∃ J, J ∈ π₂ ∧ x ∈ J
⊢ ∃ I', I' ∈ π₂ ∧ J ≤ I'

tactic: exact ⟨J₂, hJ₂, H _ hJ _ hJ₂ ⟨_, J.upper_mem, hx⟩⟩
state_before: case mpr.intro.intro.intro
ι : Type u_1
I J✝ J₁ J₂✝ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
H : ∀ (J : Box ι), J ∈ π₁ → ∀ (J' : Box ι), J' ∈ π₂ → Set.Nonempty (↑J ∩ ↑J') → J ≤ J'
J : Box ι
hJ : J ∈ π₁
HU : ∀ (x : ι → ℝ), (∃ J, J ∈ π₁ ∧ x ∈ J) → ∃ J, J ∈ π₂ ∧ x ∈ J
J₂ : Box ι
hJ₂ : J₂ ∈ π₂
hx : J.upper ∈ J₂
⊢ ∃ I', I' ∈ π₂ ∧ J ≤ I'
Theorem: TopCat.inducing_pullback_to_prod
File: Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean

tactic: simp [prod_topology, pullback_topology, induced_compose, ← coe_comp]
state_before: J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z✝ X Y Z : TopCat
f : X ⟶ Z
g : Y ⟶ Z
⊢ topologicalSpace_forget (pullback f g) =
    induced ((forget TopCat).map (prod.lift pullback.fst pullback.snd)) (topologicalSpace_forget (X ⨯ Y))
Theorem: ENNReal.toReal_eq_one_iff
File: Mathlib/Data/Real/ENNReal.lean

tactic: rw [ENNReal.toReal, NNReal.coe_eq_one, ENNReal.toNNReal_eq_one_iff]
state_before: α : Type ?u.24050
β : Type ?u.24053
a b c d : ℝ≥0∞
r p q : ℝ≥0
x : ℝ≥0∞
⊢ ENNReal.toReal x = 1 ↔ x = 1
Theorem: Real.strictAntiOn_log
File: Mathlib/Analysis/SpecialFunctions/Log/Basic.lean

tactic: rintro x (hx : x < 0) y (hy : y < 0) hxy
state_before: x y : ℝ
⊢ StrictAntiOn log (Iio 0)

tactic: rw [← log_abs y, ← log_abs x]
state_before: x✝ y✝ x : ℝ
hx : x < 0
y : ℝ
hy : y < 0
hxy : x < y
⊢ log y < log x

tactic: refine' log_lt_log (abs_pos.2 hy.ne) _
state_before: x✝ y✝ x : ℝ
hx : x < 0
y : ℝ
hy : y < 0
hxy : x < y
⊢ log (abs y) < log (abs x)

tactic: rwa [abs_of_neg hy, abs_of_neg hx, neg_lt_neg_iff]
state_before: x✝ y✝ x : ℝ
hx : x < 0
y : ℝ
hy : y < 0
hxy : x < y
⊢ abs y < abs x
Theorem: IsBoundedLinearMap.fst
File: Mathlib/Analysis/NormedSpace/BoundedLinearMaps.lean

tactic: refine' (LinearMap.fst 𝕜 E F).isLinear.with_bound 1 fun x => _
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.27451
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
⊢ IsBoundedLinearMap 𝕜 fun x => x.fst

tactic: rw [one_mul]
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.27451
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
x : E × F
⊢ ‖↑(LinearMap.fst 𝕜 E F) x‖ ≤ 1 * ‖x‖

tactic: exact le_max_left _ _
state_before: 𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_3
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.27451
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
x : E × F
⊢ ‖↑(LinearMap.fst 𝕜 E F) x‖ ≤ ‖x‖
Theorem: IsScalarTower.of_mclosure_eq_top
File: Mathlib/GroupTheory/Submonoid/Membership.lean

tactic: refine' ⟨fun x => Submonoid.induction_of_closure_eq_top_left htop x _ _⟩
state_before: M : Type u_3
A : Type ?u.235426
B : Type ?u.235429
N : Type u_1
α : Type u_2
inst✝³ : Monoid M
inst✝² : MulAction M N
inst✝¹ : SMul N α
inst✝ : MulAction M α
s : Set M
htop : Submonoid.closure s = ⊤
hs : ∀ (x : M), x ∈ s → ∀ (y : N) (z : α), (x • y) • z = x • y • z
⊢ IsScalarTower M N α

tactic: intro y z
state_before: case refine'_1
M : Type u_3
A : Type ?u.235426
B : Type ?u.235429
N : Type u_1
α : Type u_2
inst✝³ : Monoid M
inst✝² : MulAction M N
inst✝¹ : SMul N α
inst✝ : MulAction M α
s : Set M
htop : Submonoid.closure s = ⊤
hs : ∀ (x : M), x ∈ s → ∀ (y : N) (z : α), (x • y) • z = x • y • z
x : M
⊢ ∀ (y : N) (z : α), (1 • y) • z = 1 • y • z

tactic: rw [one_smul, one_smul]
state_before: case refine'_1
M : Type u_3
A : Type ?u.235426
B : Type ?u.235429
N : Type u_1
α : Type u_2
inst✝³ : Monoid M
inst✝² : MulAction M N
inst✝¹ : SMul N α
inst✝ : MulAction M α
s : Set M
htop : Submonoid.closure s = ⊤
hs : ∀ (x : M), x ∈ s → ∀ (y : N) (z : α), (x • y) • z = x • y • z
x : M
y : N
z : α
⊢ (1 • y) • z = 1 • y • z

tactic: clear x
state_before: case refine'_2
M : Type u_3
A : Type ?u.235426
B : Type ?u.235429
N : Type u_1
α : Type u_2
inst✝³ : Monoid M
inst✝² : MulAction M N
inst✝¹ : SMul N α
inst✝ : MulAction M α
s : Set M
htop : Submonoid.closure s = ⊤
hs : ∀ (x : M), x ∈ s → ∀ (y : N) (z : α), (x • y) • z = x • y • z
x : M
⊢ ∀ (x : M),
    x ∈ s →
      ∀ (y : M),
        (∀ (y_1 : N) (z : α), (y • y_1) • z = y • y_1 • z) →
          ∀ (y_1 : N) (z : α), ((x * y) • y_1) • z = (x * y) • y_1 • z

tactic: intro x hx x' hx' y z
state_before: case refine'_2
M : Type u_3
A : Type ?u.235426
B : Type ?u.235429
N : Type u_1
α : Type u_2
inst✝³ : Monoid M
inst✝² : MulAction M N
inst✝¹ : SMul N α
inst✝ : MulAction M α
s : Set M
htop : Submonoid.closure s = ⊤
hs : ∀ (x : M), x ∈ s → ∀ (y : N) (z : α), (x • y) • z = x • y • z
⊢ ∀ (x : M),
    x ∈ s →
      ∀ (y : M),
        (∀ (y_1 : N) (z : α), (y • y_1) • z = y • y_1 • z) →
          ∀ (y_1 : N) (z : α), ((x * y) • y_1) • z = (x * y) • y_1 • z

tactic: rw [mul_smul, mul_smul, hs x hx, hx']
state_before: case refine'_2
M : Type u_3
A : Type ?u.235426
B : Type ?u.235429
N : Type u_1
α : Type u_2
inst✝³ : Monoid M
inst✝² : MulAction M N
inst✝¹ : SMul N α
inst✝ : MulAction M α
s : Set M
htop : Submonoid.closure s = ⊤
hs : ∀ (x : M), x ∈ s → ∀ (y : N) (z : α), (x • y) • z = x • y • z
x : M
hx : x ∈ s
x' : M
hx' : ∀ (y : N) (z : α), (x' • y) • z = x' • y • z
y : N
z : α
⊢ ((x * x') • y) • z = (x * x') • y • z
Theorem: CategoryTheory.Limits.coprod.triangle
File: Mathlib/CategoryTheory/Limits/Shapes/BinaryProducts.lean

tactic: dsimp
state_before: C : Type u
inst✝³ : Category C
X✝ Y✝ : C
inst✝² : Category C
inst✝¹ : HasBinaryCoproducts C
inst✝ : HasInitial C
X Y : C
⊢ (associator X (⊥_ C) Y).hom ≫ map (𝟙 X) (leftUnitor Y).hom = map (rightUnitor X).hom (𝟙 Y)

tactic: apply coprod.hom_ext
state_before: C : Type u
inst✝³ : Category C
X✝ Y✝ : C
inst✝² : Category C
inst✝¹ : HasBinaryCoproducts C
inst✝ : HasInitial C
X Y : C
⊢ desc (desc inl (inl ≫ inr)) (inr ≫ inr) ≫ map (𝟙 X) (desc (initial.to Y) (𝟙 Y)) =
    map (desc (𝟙 X) (initial.to X)) (𝟙 Y)

tactic: simp
state_before: case h₁
C : Type u
inst✝³ : Category C
X✝ Y✝ : C
inst✝² : Category C
inst✝¹ : HasBinaryCoproducts C
inst✝ : HasInitial C
X Y : C
⊢ inl ≫ desc (desc inl (inl ≫ inr)) (inr ≫ inr) ≫ map (𝟙 X) (desc (initial.to Y) (𝟙 Y)) =
    inl ≫ map (desc (𝟙 X) (initial.to X)) (𝟙 Y)

case h₂
C : Type u
inst✝³ : Category C
X✝ Y✝ : C
inst✝² : Category C
inst✝¹ : HasBinaryCoproducts C
inst✝ : HasInitial C
X Y : C
⊢ inr ≫ desc (desc inl (inl ≫ inr)) (inr ≫ inr) ≫ map (𝟙 X) (desc (initial.to Y) (𝟙 Y)) =
    inr ≫ map (desc (𝟙 X) (initial.to X)) (𝟙 Y)

tactic: simp
state_before: case h₂
C : Type u
inst✝³ : Category C
X✝ Y✝ : C
inst✝² : Category C
inst✝¹ : HasBinaryCoproducts C
inst✝ : HasInitial C
X Y : C
⊢ inr ≫ desc (desc inl (inl ≫ inr)) (inr ≫ inr) ≫ map (𝟙 X) (desc (initial.to Y) (𝟙 Y)) =
    inr ≫ map (desc (𝟙 X) (initial.to X)) (𝟙 Y)
Theorem: Mathlib.Tactic.Ring.add_pf_add_gt
File: Mathlib/Tactic/Ring/Basic.lean

tactic: subst_vars
state_before: u : Lean.Level
R : Type u_1
α : Q(Type u)
sα : Q(CommSemiring «$α»)
inst✝ : CommSemiring R
a b₂ c b₁ : R
x✝ : a + b₂ = c
⊢ a + (b₁ + b₂) = b₁ + c

tactic: simp [add_left_comm]
state_before: u : Lean.Level
R : Type u_1
α : Q(Type u)
sα : Q(CommSemiring «$α»)
inst✝ : CommSemiring R
a b₂ b₁ : R
⊢ a + (b₁ + b₂) = b₁ + (a + b₂)
Theorem: lp.single_smul
File: Mathlib/Analysis/NormedSpace/lpSpace.lean

tactic: refine' ext (funext (fun (j : α) => _))
state_before: α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
⊢ lp.single p i (c • a) = c • lp.single p i a

tactic: by_cases hi : j = i
state_before: α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
⊢ ↑(lp.single p i (c • a)) j = ↑(c • lp.single p i a) j

tactic: subst hi
state_before: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
hi : j = i
⊢ ↑(lp.single p i (c • a)) j = ↑(c • lp.single p i a) j

tactic: dsimp
state_before: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
c : 𝕜
j : α
a : E j
⊢ ↑(lp.single p j (c • a)) j = ↑(c • lp.single p j a) j

tactic: simp [lp.single_apply_self]
state_before: case pos
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
c : 𝕜
j : α
a : E j
⊢ ↑(lp.single p j (c • a)) j = c • ↑(lp.single p j a) j

tactic: dsimp
state_before: case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (c • a)) j = ↑(c • lp.single p i a) j

tactic: simp [lp.single_apply_ne p i _ hi]
state_before: case neg
α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
c : 𝕜
j : α
hi : ¬j = i
⊢ ↑(lp.single p i (c • a)) j = c • ↑(lp.single p i a) j
Theorem: HasContinuousInv₀.of_nhds_one
File: Mathlib/Topology/Algebra/GroupWithZero.lean

tactic: have hx' := inv_ne_zero hx
state_before: α : Type ?u.61226
β : Type ?u.61229
G₀ : Type u_1
inst✝² : TopologicalSpace G₀
inst✝¹ : GroupWithZero G₀
inst✝ : ContinuousMul G₀
a : G₀
h : Tendsto Inv.inv (𝓝 1) (𝓝 1)
x : G₀
hx : x ≠ 0
⊢ ContinuousAt Inv.inv x

tactic: rw [ContinuousAt, ← map_mul_left_nhds_one₀ hx, ← nhds_translation_mul_inv₀ hx',
  tendsto_map'_iff, tendsto_comap_iff]
state_before: α : Type ?u.61226
β : Type ?u.61229
G₀ : Type u_1
inst✝² : TopologicalSpace G₀
inst✝¹ : GroupWithZero G₀
inst✝ : ContinuousMul G₀
a : G₀
h : Tendsto Inv.inv (𝓝 1) (𝓝 1)
x : G₀
hx : x ≠ 0
hx' : x⁻¹ ≠ 0
⊢ ContinuousAt Inv.inv x
Theorem: Int.ofNat_mul_subNatNat
File: Std/Data/Int/Lemmas.lean

tactic: cases m with
| zero => simp [ofNat_zero, Int.zero_mul, Nat.zero_mul]
| succ m => cases n.lt_or_ge k with
  | inl h =>
    have h' : succ m * n < succ m * k := Nat.mul_lt_mul_of_pos_left h (Nat.succ_pos m)
    simp [subNatNat_of_lt h, subNatNat_of_lt h']
    rw [succ_pred_eq_of_pos (Nat.sub_pos_of_lt h), ← neg_ofNat_succ, Nat.mul_sub_left_distrib,
      ← succ_pred_eq_of_pos (Nat.sub_pos_of_lt h')]; rfl
  | inr h =>
    have h' : succ m * k ≤ succ m * n := Nat.mul_le_mul_left _ h
    simp [subNatNat_of_le h, subNatNat_of_le h', Nat.mul_sub_left_distrib]
state_before: m n k : Nat
⊢ ↑m * subNatNat n k = subNatNat (m * n) (m * k)

tactic: simp [ofNat_zero, Int.zero_mul, Nat.zero_mul]
state_before: case zero
n k : Nat
⊢ ↑zero * subNatNat n k = subNatNat (zero * n) (zero * k)

tactic: cases n.lt_or_ge k with
| inl h =>
have h' : succ m * n < succ m * k := Nat.mul_lt_mul_of_pos_left h (Nat.succ_pos m)
simp [subNatNat_of_lt h, subNatNat_of_lt h']
rw [succ_pred_eq_of_pos (Nat.sub_pos_of_lt h), ← neg_ofNat_succ, Nat.mul_sub_left_distrib,
← succ_pred_eq_of_pos (Nat.sub_pos_of_lt h')]; rfl
| inr h =>
have h' : succ m * k ≤ succ m * n := Nat.mul_le_mul_left _ h
simp [subNatNat_of_le h, subNatNat_of_le h', Nat.mul_sub_left_distrib]
state_before: case succ
n k m : Nat
⊢ ↑(succ m) * subNatNat n k = subNatNat (succ m * n) (succ m * k)

tactic: have h' : succ m * n < succ m * k := Nat.mul_lt_mul_of_pos_left h (Nat.succ_pos m)
state_before: case succ.inl
n k m : Nat
h : n < k
⊢ ↑(succ m) * subNatNat n k = subNatNat (succ m * n) (succ m * k)

tactic: simp [subNatNat_of_lt h, subNatNat_of_lt h']
state_before: case succ.inl
n k m : Nat
h : n < k
h' : succ m * n < succ m * k
⊢ ↑(succ m) * subNatNat n k = subNatNat (succ m * n) (succ m * k)

tactic: rw [succ_pred_eq_of_pos (Nat.sub_pos_of_lt h), ← neg_ofNat_succ, Nat.mul_sub_left_distrib,
  ← succ_pred_eq_of_pos (Nat.sub_pos_of_lt h')]
state_before: case succ.inl
n k m : Nat
h : n < k
h' : succ m * n < succ m * k
⊢ negOfNat (succ m * succ (pred (k - n))) = -[pred (succ m * k - succ m * n)+1]

tactic: rfl
state_before: case succ.inl
n k m : Nat
h : n < k
h' : succ m * n < succ m * k
⊢ negOfNat (succ (pred (succ m * k - succ m * n))) = -↑(succ (pred (succ (pred (succ m * k - succ m * n)))))

tactic: have h' : succ m * k ≤ succ m * n := Nat.mul_le_mul_left _ h
state_before: case succ.inr
n k m : Nat
h : n ≥ k
⊢ ↑(succ m) * subNatNat n k = subNatNat (succ m * n) (succ m * k)

tactic: simp [subNatNat_of_le h, subNatNat_of_le h', Nat.mul_sub_left_distrib]
state_before: case succ.inr
n k m : Nat
h : n ≥ k
h' : succ m * k ≤ succ m * n
⊢ ↑(succ m) * subNatNat n k = subNatNat (succ m * n) (succ m * k)
Theorem: isOpenMap_quotient_mk'_mul
File: Mathlib/Topology/Algebra/ConstMulAction.lean

tactic: rw [isOpen_coinduced, MulAction.quotient_preimage_image_eq_union_mul U]
state_before: M : Type ?u.142323
α : Type ?u.142326
β : Type ?u.142329
Γ : Type u_1
inst✝³ : Group Γ
T : Type u_2
inst✝² : TopologicalSpace T
inst✝¹ : MulAction Γ T
inst✝ : ContinuousConstSMul Γ T
U : Set T
hU : IsOpen U
⊢ IsOpen (Quotient.mk' '' U)

tactic: exact isOpen_iUnion fun γ => isOpenMap_smul γ U hU
state_before: M : Type ?u.142323
α : Type ?u.142326
β : Type ?u.142329
Γ : Type u_1
inst✝³ : Group Γ
T : Type u_2
inst✝² : TopologicalSpace T
inst✝¹ : MulAction Γ T
inst✝ : ContinuousConstSMul Γ T
U : Set T
hU : IsOpen U
⊢ IsOpen (⋃ (a : Γ), (fun x x_1 => x • x_1) a '' U)
Theorem: List.formPerm_apply_getLast
File: Mathlib/GroupTheory/Perm/List.lean

tactic: induction' xs using List.reverseRecOn with xs y _ generalizing x <;> simp
state_before: α : Type u_1
β : Type ?u.667113
inst✝ : DecidableEq α
l : List α
x✝ x : α
xs : List α
⊢ ↑(formPerm (x :: xs)) (getLast (x :: xs) (_ : x :: xs ≠ [])) = x
Theorem: ModuleCat.MonoidalCategory.tensor_id
File: Mathlib/Algebra/Category/ModuleCat/Monoidal/Basic.lean

tactic: apply TensorProduct.ext
state_before: R : Type u
inst✝ : CommRing R
M : ModuleCat R
N : ModuleCat R
⊢ tensorHom (𝟙 M) (𝟙 N) = 𝟙 (of R (↑M ⊗[R] ↑N))

tactic: rfl
state_before: case H
R : Type u
inst✝ : CommRing R
M : ModuleCat R
N : ModuleCat R
⊢ LinearMap.compr₂ (TensorProduct.mk R ↑M ↑N) (tensorHom (𝟙 M) (𝟙 N)) =
    LinearMap.compr₂ (TensorProduct.mk R ↑M ↑N) (𝟙 (of R (↑M ⊗[R] ↑N)))
Theorem: CategoryTheory.GrothendieckTopology.isoToPlus_inv
File: Mathlib/CategoryTheory/Sites/Plus.lean

tactic: apply J.plusLift_unique
state_before: C : Type u
inst✝³ : Category C
J : GrothendieckTopology C
D : Type w
inst✝² : Category D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P : Cᵒᵖ ⥤ D
inst✝ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
hP : Presheaf.IsSheaf J P
⊢ (isoToPlus J P hP).inv = plusLift J (𝟙 P) hP

tactic: rw [Iso.comp_inv_eq, Category.id_comp]
state_before: case hγ
C : Type u
inst✝³ : Category C
J : GrothendieckTopology C
D : Type w
inst✝² : Category D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P : Cᵒᵖ ⥤ D
inst✝ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
hP : Presheaf.IsSheaf J P
⊢ toPlus J P ≫ (isoToPlus J P hP).inv = 𝟙 P

tactic: rfl
state_before: case hγ
C : Type u
inst✝³ : Category C
J : GrothendieckTopology C
D : Type w
inst✝² : Category D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P : Cᵒᵖ ⥤ D
inst✝ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
hP : Presheaf.IsSheaf J P
⊢ toPlus J P = (isoToPlus J P hP).hom
Theorem: AffineSubspace.Parallel.vectorSpan_eq
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: simp_rw [← direction_affineSpan]
state_before: k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
h : affineSpan k s₁ ∥ affineSpan k s₂
⊢ vectorSpan k s₁ = vectorSpan k s₂

tactic: exact h.direction_eq
state_before: k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s₁ s₂ : Set P
h : affineSpan k s₁ ∥ affineSpan k s₂
⊢ direction (affineSpan k s₁) = direction (affineSpan k s₂)
Theorem: essSup_le_of_ae_le
File: Mathlib/MeasureTheory/Function/EssSup.lean

tactic: refine' (essSup_mono_ae hf).trans _
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν : MeasureTheory.Measure α
inst✝ : CompleteLattice β
f : α → β
c : β
hf : f ≤ᵐ[μ] fun x => c
⊢ essSup f μ ≤ c

tactic: by_cases hμ : μ = 0
state_before: α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν : MeasureTheory.Measure α
inst✝ : CompleteLattice β
f : α → β
c : β
hf : f ≤ᵐ[μ] fun x => c
⊢ essSup (fun x => c) μ ≤ c

tactic: simp [hμ]
state_before: case pos
α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν : MeasureTheory.Measure α
inst✝ : CompleteLattice β
f : α → β
c : β
hf : f ≤ᵐ[μ] fun x => c
hμ : μ = 0
⊢ essSup (fun x => c) μ ≤ c

tactic: rwa [essSup_const]
state_before: case neg
α : Type u_1
β : Type u_2
m : MeasurableSpace α
μ ν : MeasureTheory.Measure α
inst✝ : CompleteLattice β
f : α → β
c : β
hf : f ≤ᵐ[μ] fun x => c
hμ : ¬μ = 0
⊢ essSup (fun x => c) μ ≤ c
Theorem: FinEnum.pi.mem_enum
File: Mathlib/Data/FinEnum.lean

tactic: simp [pi.enum]
state_before: α : Type u
β✝ : α → Type v
β : α → Type (max u v)
inst✝¹ : FinEnum α
inst✝ : (a : α) → FinEnum (β a)
f : (a : α) → β a
⊢ f ∈ enum β

tactic: refine' ⟨fun a _ => f a, mem_pi _ _, rfl⟩
state_before: α : Type u
β✝ : α → Type v
β : α → Type (max u v)
inst✝¹ : FinEnum α
inst✝ : (a : α) → FinEnum (β a)
f : (a : α) → β a
⊢ ∃ a, (a ∈ pi (toList α) fun x => toList (β x)) ∧ (fun x => a x (_ : x ∈ toList α)) = f
Theorem: edist_le_of_edist_le_geometric_two_of_tendsto
File: Mathlib/Analysis/SpecificLimits/Basic.lean

tactic: simp only [div_eq_mul_inv, ENNReal.inv_pow] at *
state_before: α : Type u_1
β : Type ?u.441500
ι : Type ?u.441503
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C / 2 ^ n
a : α
ha : Tendsto f atTop (𝓝 a)
n : ℕ
⊢ edist (f n) a ≤ 2 * C / 2 ^ n

tactic: rw [mul_assoc, mul_comm]
state_before: α : Type u_1
β : Type ?u.441500
ι : Type ?u.441503
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
n : ℕ
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ edist (f n) a ≤ 2 * C * 2⁻¹ ^ n

tactic: convert edist_le_of_edist_le_geometric_of_tendsto 2⁻¹ C hu ha n using 1
state_before: α : Type u_1
β : Type ?u.441500
ι : Type ?u.441503
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
n : ℕ
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ edist (f n) a ≤ C * 2⁻¹ ^ n * 2

tactic: rw [ENNReal.one_sub_inv_two, div_eq_mul_inv, inv_inv]
state_before: case h.e'_4
α : Type u_1
β : Type ?u.441500
ι : Type ?u.441503
inst✝ : PseudoEMetricSpace α
C : ℝ≥0∞
hC : C ≠ ⊤
f : ℕ → α
a : α
ha : Tendsto f atTop (𝓝 a)
n : ℕ
hu : ∀ (n : ℕ), edist (f n) (f (n + 1)) ≤ C * 2⁻¹ ^ n
⊢ C * 2⁻¹ ^ n * 2 = C * 2⁻¹ ^ n / (1 - 2⁻¹)
Theorem: IsTensorProduct.lift_eq
File: Mathlib/RingTheory/IsTensorProduct.lean

tactic: delta IsTensorProduct.lift
state_before: R : Type u_1
inst✝¹⁴ : CommRing R
M₁ : Type u_2
M₂ : Type u_3
M : Type u_4
M' : Type u_5
inst✝¹³ : AddCommMonoid M₁
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M'
inst✝⁹ : Module R M₁
inst✝⁸ : Module R M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
f : M₁ →ₗ[R] M₂ →ₗ[R] M
N₁ : Type ?u.87557
N₂ : Type ?u.87560
N : Type ?u.87563
inst✝⁵ : AddCommMonoid N₁
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N
inst✝² : Module R N₁
inst✝¹ : Module R N₂
inst✝ : Module R N
g : N₁ →ₗ[R] N₂ →ₗ[R] N
h : IsTensorProduct f
f' : M₁ →ₗ[R] M₂ →ₗ[R] M'
x₁ : M₁
x₂ : M₂
⊢ ↑(lift h f') (↑(↑f x₁) x₂) = ↑(↑f' x₁) x₂

tactic: simp
state_before: R : Type u_1
inst✝¹⁴ : CommRing R
M₁ : Type u_2
M₂ : Type u_3
M : Type u_4
M' : Type u_5
inst✝¹³ : AddCommMonoid M₁
inst✝¹² : AddCommMonoid M₂
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M'
inst✝⁹ : Module R M₁
inst✝⁸ : Module R M₂
inst✝⁷ : Module R M
inst✝⁶ : Module R M'
f : M₁ →ₗ[R] M₂ →ₗ[R] M
N₁ : Type ?u.87557
N₂ : Type ?u.87560
N : Type ?u.87563
inst✝⁵ : AddCommMonoid N₁
inst✝⁴ : AddCommMonoid N₂
inst✝³ : AddCommMonoid N
inst✝² : Module R N₁
inst✝¹ : Module R N₂
inst✝ : Module R N
g : N₁ →ₗ[R] N₂ →ₗ[R] N
h : IsTensorProduct f
f' : M₁ →ₗ[R] M₂ →ₗ[R] M'
x₁ : M₁
x₂ : M₂
⊢ ↑(LinearMap.comp (TensorProduct.lift f') ↑(LinearEquiv.symm (equiv h))) (↑(↑f x₁) x₂) = ↑(↑f' x₁) x₂
Theorem: Set.image_symm_diff
File: Mathlib/Data/Set/Image.lean

tactic: simp_rw [Set.symmDiff_def, image_union, image_diff hf]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.48465
ι : Sort ?u.48468
ι' : Sort ?u.48471
f : α → β
s✝ t✝ : Set α
hf : Injective f
s t : Set α
⊢ f '' s ∆ t = (f '' s) ∆ (f '' t)