tasksource/leandojo huggingface dataset:
Theorem: Polynomial.natDegree_mul_le
File: Mathlib/Data/Polynomial/Degree/Definitions.lean

tactic: apply natDegree_le_of_degree_le
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ q✝ : R[X]
ι : Type ?u.695041
p q : R[X]
⊢ natDegree (p * q) ≤ natDegree p + natDegree q

tactic: apply le_trans (degree_mul_le p q)
state_before: case a
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ q✝ : R[X]
ι : Type ?u.695041
p q : R[X]
⊢ degree (p * q) ≤ ↑(natDegree p + natDegree q)

tactic: rw [Nat.cast_withBot, WithBot.coe_add]
state_before: case a
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ q✝ : R[X]
ι : Type ?u.695041
p q : R[X]
⊢ degree p + degree q ≤ ↑(natDegree p + natDegree q)

tactic: refine' add_le_add _ _ <;> apply degree_le_natDegree
state_before: case a
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ q✝ : R[X]
ι : Type ?u.695041
p q : R[X]
⊢ degree p + degree q ≤ ↑(natDegree p) + ↑(natDegree q)
Theorem: Set.Countable.measure_zero
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: rw [← biUnion_of_singleton s, ← nonpos_iff_eq_zero]
state_before: α✝ : Type ?u.711005
β : Type ?u.711008
γ : Type ?u.711011
δ : Type ?u.711014
ι : Type ?u.711017
R : Type ?u.711020
R' : Type ?u.711023
m0 : MeasurableSpace α✝
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α✝
s✝ s' t : Set α✝
inst✝¹ : NoAtoms μ✝
α : Type u_1
m : MeasurableSpace α
s : Set α
h : Set.Countable s
μ : Measure α
inst✝ : NoAtoms μ
⊢ ↑↑μ s = 0

tactic: refine' le_trans (measure_biUnion_le h _) _
state_before: α✝ : Type ?u.711005
β : Type ?u.711008
γ : Type ?u.711011
δ : Type ?u.711014
ι : Type ?u.711017
R : Type ?u.711020
R' : Type ?u.711023
m0 : MeasurableSpace α✝
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α✝
s✝ s' t : Set α✝
inst✝¹ : NoAtoms μ✝
α : Type u_1
m : MeasurableSpace α
s : Set α
h : Set.Countable s
μ : Measure α
inst✝ : NoAtoms μ
⊢ ↑↑μ (⋃ (x : α) (_ : x ∈ s), {x}) ≤ 0

tactic: simp
state_before: α✝ : Type ?u.711005
β : Type ?u.711008
γ : Type ?u.711011
δ : Type ?u.711014
ι : Type ?u.711017
R : Type ?u.711020
R' : Type ?u.711023
m0 : MeasurableSpace α✝
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α✝
s✝ s' t : Set α✝
inst✝¹ : NoAtoms μ✝
α : Type u_1
m : MeasurableSpace α
s : Set α
h : Set.Countable s
μ : Measure α
inst✝ : NoAtoms μ
⊢ (∑' (p : ↑s), ↑↑μ {↑p}) ≤ 0
Theorem: Finset.sup_product_right
File: Mathlib/Data/Finset/Lattice.lean

tactic: rw [sup_product_left, Finset.sup_comm]
state_before: F : Type ?u.57927
α : Type u_3
β : Type u_1
γ : Type u_2
ι : Type ?u.57939
κ : Type ?u.57942
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
s✝ s₁ s₂ : Finset β
f✝ g : β → α
a : α
s : Finset β
t : Finset γ
f : β × γ → α
⊢ sup (s ×ˢ t) f = sup t fun i' => sup s fun i => f (i, i')
Theorem: LieSubmodule.Quotient.map_mk'_eq_bot_le
File: Mathlib/Algebra/Lie/Quotient.lean

tactic: rw [← LieModuleHom.le_ker_iff_map, mk'_ker]
state_before: R : Type u
L : Type v
M : Type w
inst✝⁶ : CommRing R
inst✝⁵ : LieRing L
inst✝⁴ : LieAlgebra R L
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
N N' : LieSubmodule R L M
I J : LieIdeal R L
⊢ map (mk' N) N' = ⊥ ↔ N' ≤ N
Theorem: ContDiffBump.normed_sub
File: Mathlib/Analysis/Calculus/BumpFunctionInner.lean

tactic: simp_rw [f.normed_def, f.sub]
state_before: E : Type u_1
X : Type ?u.1041036
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup X
inst✝² : NormedSpace ℝ X
inst✝¹ : HasContDiffBump E
c : E
f : ContDiffBump c
x✝ : E
n : ℕ∞
inst✝ : MeasurableSpace E
μ : MeasureTheory.Measure E
x : E
⊢ ContDiffBump.normed f μ (c - x) = ContDiffBump.normed f μ (c + x)
Theorem: Seminorm.isBounded_const
File: Mathlib/Analysis/LocallyConvex/WithSeminorms.lean

tactic: simp only [IsBounded, forall_const]
state_before: 𝕜 : Type u_2
𝕜₂ : Type u_4
𝕝 : Type ?u.110955
𝕝₂ : Type ?u.110958
E : Type u_3
F : Type u_5
G : Type ?u.110967
ι : Type u_6
ι'✝ : Type ?u.110973
inst✝⁷ : NormedField 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : Module 𝕜 E
inst✝⁴ : NormedField 𝕜₂
inst✝³ : AddCommGroup F
inst✝² : Module 𝕜₂ F
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝¹ : RingHomIsometric σ₁₂
ι' : Type u_1
inst✝ : Nonempty ι'
p : ι → Seminorm 𝕜 E
q : Seminorm 𝕜₂ F
f : E →ₛₗ[σ₁₂] F
⊢ IsBounded p (fun x => q) f ↔ ∃ s C, comp q f ≤ C • Finset.sup s p
Theorem: CategoryTheory.Limits.Multiequalizer.hom_ext
File: Mathlib/CategoryTheory/Limits/Shapes/Multiequalizer.lean

tactic: rintro (a | b)
state_before: C : Type u
inst✝¹ : Category C
I : MulticospanIndex C
inst✝ : HasMultiequalizer I
W : C
i j : W ⟶ multiequalizer I
h : ∀ (a : I.L), i ≫ ι I a = j ≫ ι I a
⊢ ∀ (j_1 : WalkingMulticospan I.fstTo I.sndTo),
    i ≫ limit.π (MulticospanIndex.multicospan I) j_1 = j ≫ limit.π (MulticospanIndex.multicospan I) j_1

tactic: simp_rw [← limit.w I.multicospan (WalkingMulticospan.Hom.fst b), ← Category.assoc, h]
state_before: case right
C : Type u
inst✝¹ : Category C
I : MulticospanIndex C
inst✝ : HasMultiequalizer I
W : C
i j : W ⟶ multiequalizer I
h : ∀ (a : I.L), i ≫ ι I a = j ≫ ι I a
b : I.R
⊢ i ≫ limit.π (MulticospanIndex.multicospan I) (WalkingMulticospan.right b) =
    j ≫ limit.π (MulticospanIndex.multicospan I) (WalkingMulticospan.right b)

tactic: apply h
state_before: case left
C : Type u
inst✝¹ : Category C
I : MulticospanIndex C
inst✝ : HasMultiequalizer I
W : C
i j : W ⟶ multiequalizer I
h : ∀ (a : I.L), i ≫ ι I a = j ≫ ι I a
a : I.L
⊢ i ≫ limit.π (MulticospanIndex.multicospan I) (WalkingMulticospan.left a) =
    j ≫ limit.π (MulticospanIndex.multicospan I) (WalkingMulticospan.left a)
Theorem: MeasurableEquiv.toEquiv_injective
File: Mathlib/MeasureTheory/MeasurableSpace.lean

tactic: rintro ⟨e₁, _, _⟩ ⟨e₂, _, _⟩ (rfl : e₁ = e₂)
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.392411
δ : Type ?u.392414
δ' : Type ?u.392417
ι : Sort uι
s t u : Set α
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : MeasurableSpace γ
inst✝ : MeasurableSpace δ
⊢ Injective toEquiv

tactic: rfl
state_before: case mk.mk
α : Type u_1
β : Type u_2
γ : Type ?u.392411
δ : Type ?u.392414
δ' : Type ?u.392417
ι : Sort uι
s t u : Set α
inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : MeasurableSpace γ
inst✝ : MeasurableSpace δ
e₁ : α ≃ β
measurable_toFun✝¹ : Measurable ↑e₁
measurable_invFun✝¹ : Measurable ↑e₁.symm
measurable_toFun✝ : Measurable ↑e₁
measurable_invFun✝ : Measurable ↑e₁.symm
⊢ { toEquiv := e₁, measurable_toFun := measurable_toFun✝¹, measurable_invFun := measurable_invFun✝¹ } =
    { toEquiv := e₁, measurable_toFun := measurable_toFun✝, measurable_invFun := measurable_invFun✝ }
Theorem: Real.tan_pi_div_two_sub
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [tan_eq_sin_div_cos, tan_eq_sin_div_cos, inv_div, sin_pi_div_two_sub, cos_pi_div_two_sub]
state_before: x : ℝ
⊢ tan (π / 2 - x) = (tan x)⁻¹
Theorem: MeasureTheory.ae_eq_of_ae_subset_of_measure_ge
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: refine' eventuallyLE_antisymm_iff.mpr ⟨h₁, ae_le_set.mpr _⟩
state_before: α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
h₂ : ↑↑μ t ≤ ↑↑μ s
hsm : MeasurableSet s
ht : ↑↑μ t ≠ ⊤
⊢ s =ᵐ[μ] t

tactic: replace h₂ : μ t = μ s
state_before: α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
h₂ : ↑↑μ t ≤ ↑↑μ s
hsm : MeasurableSet s
ht : ↑↑μ t ≠ ⊤
⊢ ↑↑μ (t \ s) = 0

tactic: exact h₂.antisymm (measure_mono_ae h₁)
state_before: case h₂
α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
h₂ : ↑↑μ t ≤ ↑↑μ s
hsm : MeasurableSet s
ht : ↑↑μ t ≠ ⊤
⊢ ↑↑μ t = ↑↑μ s

α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
hsm : MeasurableSet s
ht : ↑↑μ t ≠ ⊤
h₂ : ↑↑μ t = ↑↑μ s
⊢ ↑↑μ (t \ s) = 0

tactic: replace ht : μ s ≠ ∞
state_before: α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
hsm : MeasurableSet s
ht : ↑↑μ t ≠ ⊤
h₂ : ↑↑μ t = ↑↑μ s
⊢ ↑↑μ (t \ s) = 0

tactic: exact h₂ ▸ ht
state_before: case ht
α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
hsm : MeasurableSet s
ht : ↑↑μ t ≠ ⊤
h₂ : ↑↑μ t = ↑↑μ s
⊢ ↑↑μ s ≠ ⊤

α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
hsm : MeasurableSet s
h₂ : ↑↑μ t = ↑↑μ s
ht : ↑↑μ s ≠ ⊤
⊢ ↑↑μ (t \ s) = 0

tactic: rw [measure_diff' t hsm ht, measure_congr (union_ae_eq_left_iff_ae_subset.mpr h₁), h₂, tsub_self]
state_before: α : Type u_1
β : Type ?u.31363
γ : Type ?u.31366
δ : Type ?u.31369
ι : Type ?u.31372
R : Type ?u.31375
R' : Type ?u.31378
m : MeasurableSpace α
μ μ₁ μ₂ : Measure α
s s₁ s₂ t : Set α
h₁ : s ≤ᵐ[μ] t
hsm : MeasurableSet s
h₂ : ↑↑μ t = ↑↑μ s
ht : ↑↑μ s ≠ ⊤
⊢ ↑↑μ (t \ s) = 0
Theorem: Real.Wallis.W_pos
File: Mathlib/Data/Real/Pi/Wallis.lean

tactic: induction' k with k hk
state_before: k : ℕ
⊢ 0 < W k

tactic: unfold W
state_before: case zero

⊢ 0 < W Nat.zero

tactic: simp
state_before: case zero

⊢ 0 < ∏ i in range Nat.zero, (2 * ↑i + 2) / (2 * ↑i + 1) * ((2 * ↑i + 2) / (2 * ↑i + 3))

tactic: rw [W_succ]
state_before: case succ
k : ℕ
hk : 0 < W k
⊢ 0 < W (Nat.succ k)

tactic: refine' mul_pos hk (mul_pos (div_pos _ _) (div_pos _ _)) <;> positivity
state_before: case succ
k : ℕ
hk : 0 < W k
⊢ 0 < W k * ((2 * ↑k + 2) / (2 * ↑k + 1) * ((2 * ↑k + 2) / (2 * ↑k + 3)))
Theorem: Filter.HasBasis.le_basis_iff
File: Mathlib/Order/Filter/Bases.lean

tactic: simp only [hl'.ge_iff, hl.mem_iff]
state_before: α : Type u_1
β : Type ?u.25627
γ : Type ?u.25630
ι : Sort u_2
ι' : Sort u_3
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : HasBasis l p s
hl' : HasBasis l' p' s'
⊢ l ≤ l' ↔ ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
Theorem: Finite.exists_univ_list
File: Mathlib/Data/Fintype/Card.lean

tactic: cases nonempty_fintype α
state_before: α✝ : Type ?u.13579
β : Type ?u.13582
γ : Type ?u.13585
α : Type u_1
inst✝ : Finite α
⊢ ∃ l, List.Nodup l ∧ ∀ (x : α), x ∈ l

tactic: obtain ⟨l, e⟩ := Quotient.exists_rep (@univ α _).1
state_before: case intro
α✝ : Type ?u.13579
β : Type ?u.13582
γ : Type ?u.13585
α : Type u_1
inst✝ : Finite α
val✝ : Fintype α
⊢ ∃ l, List.Nodup l ∧ ∀ (x : α), x ∈ l

tactic: have := And.intro (@univ α _).2 (@mem_univ_val α _)
state_before: case intro.intro
α✝ : Type ?u.13579
β : Type ?u.13582
γ : Type ?u.13585
α : Type u_1
inst✝ : Finite α
val✝ : Fintype α
l : List α
e : Quotient.mk (List.isSetoid α) l = univ.val
⊢ ∃ l, List.Nodup l ∧ ∀ (x : α), x ∈ l

tactic: exact ⟨_, by rwa [← e] at this⟩
state_before: case intro.intro
α✝ : Type ?u.13579
β : Type ?u.13582
γ : Type ?u.13585
α : Type u_1
inst✝ : Finite α
val✝ : Fintype α
l : List α
e : Quotient.mk (List.isSetoid α) l = univ.val
this : Multiset.Nodup univ.val ∧ ∀ (x : α), x ∈ univ.val
⊢ ∃ l, List.Nodup l ∧ ∀ (x : α), x ∈ l

tactic: rwa [← e] at this
state_before: α✝ : Type ?u.13579
β : Type ?u.13582
γ : Type ?u.13585
α : Type u_1
inst✝ : Finite α
val✝ : Fintype α
l : List α
e : Quotient.mk (List.isSetoid α) l = univ.val
this : Multiset.Nodup univ.val ∧ ∀ (x : α), x ∈ univ.val
⊢ List.Nodup ?m.13770 ∧ ∀ (x : α), x ∈ ?m.13770
Theorem: Filter.specializes_iff_le
File: Mathlib/Topology/Filter.lean

tactic: simp only [specializes_iff_closure_subset, Filter.closure_singleton, Ici_subset_Ici]
state_before: ι : Sort ?u.19236
α : Type u_1
β : Type ?u.19242
X : Type ?u.19245
Y : Type ?u.19248
l₁ l₂ : Filter α
⊢ l₁ ⤳ l₂ ↔ l₁ ≤ l₂
Theorem: IsGδ.measurableSet
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Basic.lean

tactic: rcases h with ⟨S, hSo, hSc, rfl⟩
state_before: α : Type u_1
β : Type ?u.147561
γ : Type ?u.147564
γ₂ : Type ?u.147567
δ : Type ?u.147570
ι : Sort y
s t u : Set α
inst✝¹² : TopologicalSpace α
inst✝¹¹ : MeasurableSpace α
inst✝¹⁰ : OpensMeasurableSpace α
inst✝⁹ : TopologicalSpace β
inst✝⁸ : MeasurableSpace β
inst✝⁷ : OpensMeasurableSpace β
inst✝⁶ : TopologicalSpace γ
inst✝⁵ : MeasurableSpace γ
inst✝⁴ : BorelSpace γ
inst✝³ : TopologicalSpace γ₂
inst✝² : MeasurableSpace γ₂
inst✝¹ : BorelSpace γ₂
inst✝ : MeasurableSpace δ
h : IsGδ s
⊢ MeasurableSet s

tactic: exact MeasurableSet.sInter hSc fun t ht => (hSo t ht).measurableSet
state_before: case intro.intro.intro
α : Type u_1
β : Type ?u.147561
γ : Type ?u.147564
γ₂ : Type ?u.147567
δ : Type ?u.147570
ι : Sort y
t u : Set α
inst✝¹² : TopologicalSpace α
inst✝¹¹ : MeasurableSpace α
inst✝¹⁰ : OpensMeasurableSpace α
inst✝⁹ : TopologicalSpace β
inst✝⁸ : MeasurableSpace β
inst✝⁷ : OpensMeasurableSpace β
inst✝⁶ : TopologicalSpace γ
inst✝⁵ : MeasurableSpace γ
inst✝⁴ : BorelSpace γ
inst✝³ : TopologicalSpace γ₂
inst✝² : MeasurableSpace γ₂
inst✝¹ : BorelSpace γ₂
inst✝ : MeasurableSpace δ
S : Set (Set α)
hSo : ∀ (t : Set α), t ∈ S → IsOpen t
hSc : Set.Countable S
⊢ MeasurableSet (⋂₀ S)
Theorem: Finset.prod_of_empty
File: Mathlib/Algebra/BigOperators/Basic.lean

tactic: rw [eq_empty_of_isEmpty s, prod_empty]
state_before: ι : Type ?u.263261
β : Type u
α : Type v
γ : Type w
s✝ s₁ s₂ : Finset α
a : α
f g : α → β
inst✝¹ : CommMonoid β
inst✝ : IsEmpty α
s : Finset α
⊢ ∏ i in s, f i = 1
Theorem: SimpleGraph.Path.cons_isCycle
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: simp [Walk.isCycle_def, Walk.cons_isTrail_iff, he]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v : V
p : Path G v u
h : Adj G u v
he : ¬Quotient.mk (Sym2.Rel.setoid V) (u, v) ∈ Walk.edges ↑p
⊢ Walk.IsCycle (Walk.cons h ↑p)
Theorem: Real.sqrt_lt_sqrt_iff_of_pos
File: Mathlib/Data/Real/Sqrt.lean

tactic: rw [sqrt, sqrt, NNReal.coe_lt_coe, NNReal.sqrt_lt_sqrt_iff, toNNReal_lt_toNNReal_iff hy]
state_before: x y : ℝ
hy : 0 < y
⊢ sqrt x < sqrt y ↔ x < y
Theorem: Set.Iio_diff_Iio
File: Mathlib/Data/Set/Intervals/Basic.lean

tactic: rw [diff_eq, compl_Iio, inter_comm, Ici_inter_Iio]
state_before: α : Type u_1
β : Type ?u.63600
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
⊢ Iio b \ Iio a = Ico a b
Theorem: List.toAssocList_toList
File: Std/Data/AssocList.lean

tactic: induction l <;> simp [*]
state_before: α : Type u_1
β : Type u_2
l : List (α × β)
⊢ toList (List.toAssocList l) = l
Theorem: List.pairwise_lt_range
File: Mathlib/Data/List/Range.lean

tactic: simp only [range_eq_range', pairwise_lt_range']
state_before: α : Type u
n : ℕ
⊢ Pairwise (fun x x_1 => x < x_1) (range n)
Theorem: AntilipschitzWith.to_rightInverse
File: Mathlib/Topology/MetricSpace/Antilipschitz.lean

tactic: intro x y
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.10275
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
hf : AntilipschitzWith K f
g : β → α
hg : Function.RightInverse g f
⊢ LipschitzWith K g

tactic: have := hf (g x) (g y)
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.10275
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
hf : AntilipschitzWith K f
g : β → α
hg : Function.RightInverse g f
x y : β
⊢ edist (g x) (g y) ≤ ↑K * edist x y

tactic: rwa [hg x, hg y] at this
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.10275
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
K : ℝ≥0
f : α → β
hf : AntilipschitzWith K f
g : β → α
hg : Function.RightInverse g f
x y : β
this : edist (g x) (g y) ≤ ↑K * edist (f (g x)) (f (g y))
⊢ edist (g x) (g y) ≤ ↑K * edist x y
Theorem: LocallyFinite.iInter_compl_mem_nhds
File: Mathlib/Topology/LocallyFinite.lean

tactic: refine' IsOpen.mem_nhds _ (mem_iInter₂.2 fun i => id)
state_before: ι : Type u_1
ι' : Type ?u.8425
α : Type ?u.8428
X : Type u_2
Y : Type ?u.8434
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f g : ι → Set X
hf : LocallyFinite f
hc : ∀ (i : ι), IsClosed (f i)
x : X
⊢ (⋂ (i : ι) (_ : ¬x ∈ f i), f iᶜ) ∈ 𝓝 x

tactic: suffices IsClosed (⋃ i : { i // x ∉ f i }, f i) by
  rwa [← isOpen_compl_iff, compl_iUnion, iInter_subtype] at this
state_before: ι : Type u_1
ι' : Type ?u.8425
α : Type ?u.8428
X : Type u_2
Y : Type ?u.8434
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f g : ι → Set X
hf : LocallyFinite f
hc : ∀ (i : ι), IsClosed (f i)
x : X
⊢ IsOpen (⋂ (i : ι) (_ : ¬x ∈ f i), f iᶜ)

tactic: exact (hf.comp_injective Subtype.val_injective).isClosed_iUnion fun i => hc _
state_before: ι : Type u_1
ι' : Type ?u.8425
α : Type ?u.8428
X : Type u_2
Y : Type ?u.8434
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f g : ι → Set X
hf : LocallyFinite f
hc : ∀ (i : ι), IsClosed (f i)
x : X
⊢ IsClosed (⋃ (i : { i // ¬x ∈ f i }), f ↑i)

tactic: rwa [← isOpen_compl_iff, compl_iUnion, iInter_subtype] at this
state_before: ι : Type u_1
ι' : Type ?u.8425
α : Type ?u.8428
X : Type u_2
Y : Type ?u.8434
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f g : ι → Set X
hf : LocallyFinite f
hc : ∀ (i : ι), IsClosed (f i)
x : X
this : IsClosed (⋃ (i : { i // ¬x ∈ f i }), f ↑i)
⊢ IsOpen (⋂ (i : ι) (_ : ¬x ∈ f i), f iᶜ)
Theorem: Num.shiftl_to_nat
File: Mathlib/Data/Num/Lemmas.lean

tactic: cases m <;> dsimp only [shiftl]
state_before: α : Type ?u.621708
m : Num
n : ℕ
⊢ ↑(shiftl m n) = Nat.shiftl (↑m) n

tactic: simp only [cast_pos]
state_before: case pos
α : Type ?u.621708
n : ℕ
a✝ : PosNum
⊢ ↑(pos (PosNum.shiftl a✝ n)) = Nat.shiftl (↑(pos a✝)) n

tactic: induction' n with n IH
state_before: case pos
α : Type ?u.621708
n : ℕ
a✝ : PosNum
⊢ ↑(PosNum.shiftl a✝ n) = Nat.shiftl (↑a✝) n

tactic: simp [PosNum.shiftl_succ_eq_bit0_shiftl, Nat.shiftl_succ, IH]
state_before: case pos.succ
α : Type ?u.621708
a✝ : PosNum
n : ℕ
IH : ↑(PosNum.shiftl a✝ n) = Nat.shiftl (↑a✝) n
⊢ ↑(PosNum.shiftl a✝ (Nat.succ n)) = Nat.shiftl (↑a✝) (Nat.succ n)

tactic: symm
state_before: case zero
α : Type ?u.621708
n : ℕ
⊢ ↑0 = Nat.shiftl (↑zero) n

tactic: apply Nat.zero_shiftl
state_before: case zero
α : Type ?u.621708
n : ℕ
⊢ Nat.shiftl (↑zero) n = ↑0

tactic: rfl
state_before: case pos.zero
α : Type ?u.621708
a✝ : PosNum
⊢ ↑(PosNum.shiftl a✝ Nat.zero) = Nat.shiftl (↑a✝) Nat.zero
Theorem: FiniteDimensional.finrank_eq_of_rank_eq
File: Mathlib/LinearAlgebra/Finrank.lean

tactic: apply_fun toNat at h
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : AddCommGroup V
inst✝² : Module K V
V₂ : Type v'
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
n : ℕ
h : Module.rank K V = ↑n
⊢ finrank K V = n

tactic: rw [toNat_cast] at h
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : AddCommGroup V
inst✝² : Module K V
V₂ : Type v'
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
n : ℕ
h : ↑toNat (Module.rank K V) = ↑toNat ↑n
⊢ finrank K V = n

tactic: exact_mod_cast h
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : AddCommGroup V
inst✝² : Module K V
V₂ : Type v'
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
n : ℕ
h : ↑toNat (Module.rank K V) = n
⊢ finrank K V = n
Theorem: GeneralizedContinuedFraction.compExactValue_correctness_of_stream_eq_some_aux_comp
File: Mathlib/Algebra/ContinuedFractions/Computation/CorrectnessTerminating.lean

tactic: field_simp [fract_a_ne_zero]
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
v : K
n : ℕ
inst✝ : FloorRing K
a b c : K
fract_a_ne_zero : Int.fract a ≠ 0
⊢ (↑⌊a⌋ * b + c) / Int.fract a + b = (b * a + c) / Int.fract a

tactic: rw [Int.fract]
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
v : K
n : ℕ
inst✝ : FloorRing K
a b c : K
fract_a_ne_zero : Int.fract a ≠ 0
⊢ ↑⌊a⌋ * b + c + b * Int.fract a = b * a + c

tactic: ring
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
v : K
n : ℕ
inst✝ : FloorRing K
a b c : K
fract_a_ne_zero : Int.fract a ≠ 0
⊢ ↑⌊a⌋ * b + c + b * (a - ↑⌊a⌋) = b * a + c
Theorem: Set.Ioc_inter_Ioc
File: Mathlib/Data/Set/Intervals/Basic.lean

tactic: simp only [Ioi_inter_Iic.symm, Ioi_inter_Ioi.symm, Iic_inter_Iic.symm]
state_before: α : Type u_1
β : Type ?u.186303
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
a a₁ a₂ b b₁ b₂ c d : α
⊢ Ioc a₁ b₁ ∩ Ioc a₂ b₂ = Ioc (a₁ ⊔ a₂) (b₁ ⊓ b₂)

tactic: ac_rfl
state_before: α : Type u_1
β : Type ?u.186303
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
a a₁ a₂ b b₁ b₂ c d : α
⊢ Ioi a₁ ∩ Iic b₁ ∩ (Ioi a₂ ∩ Iic b₂) = Ioi a₁ ∩ Ioi a₂ ∩ (Iic b₁ ∩ Iic b₂)
Theorem: Subgroup.le_normalizer_comap
File: Mathlib/GroupTheory/Subgroup/Basic.lean

tactic: simp only [mem_normalizer_iff, mem_comap]
state_before: G : Type u_2
G' : Type ?u.390813
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.390822
inst✝¹ : AddGroup A
H K : Subgroup G
N : Type u_1
inst✝ : Group N
f : N →* G
x : N
⊢ x ∈ comap f (normalizer H) → x ∈ normalizer (comap f H)

tactic: intro h n
state_before: G : Type u_2
G' : Type ?u.390813
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.390822
inst✝¹ : AddGroup A
H K : Subgroup G
N : Type u_1
inst✝ : Group N
f : N →* G
x : N
⊢ (∀ (h : G), h ∈ H ↔ ↑f x * h * (↑f x)⁻¹ ∈ H) → ∀ (h : N), ↑f h ∈ H ↔ ↑f (x * h * x⁻¹) ∈ H

tactic: simp [h (f n)]
state_before: G : Type u_2
G' : Type ?u.390813
inst✝³ : Group G
inst✝² : Group G'
A : Type ?u.390822
inst✝¹ : AddGroup A
H K : Subgroup G
N : Type u_1
inst✝ : Group N
f : N →* G
x : N
h : ∀ (h : G), h ∈ H ↔ ↑f x * h * (↑f x)⁻¹ ∈ H
n : N
⊢ ↑f n ∈ H ↔ ↑f (x * n * x⁻¹) ∈ H
Theorem: Turing.eval_maximal₁
File: Mathlib/Computability/TuringMachine.lean

tactic: let ⟨_, b0⟩ := mem_eval.1 h
state_before: σ : Type u_1
f : σ → Option σ
a b : σ
h : b ∈ eval f a
c : σ
x✝ : Reaches₁ f b c
bc : Reaches₁ f b c := x✝
⊢ False

tactic: let ⟨b', h', _⟩ := TransGen.head'_iff.1 bc
state_before: σ : Type u_1
f : σ → Option σ
a b : σ
h : b ∈ eval f a
c : σ
x✝ : Reaches₁ f b c
bc : Reaches₁ f b c := x✝
left✝ : Reaches f a b
b0 : f b = none
⊢ False

tactic: cases b0.symm.trans h'
state_before: σ : Type u_1
f : σ → Option σ
a b : σ
h : b ∈ eval f a
c : σ
x✝ : Reaches₁ f b c
bc : Reaches₁ f b c := x✝
left✝ : Reaches f a b
b0 : f b = none
b' : σ
h' : b' ∈ f b
right✝ : ReflTransGen (fun a b => b ∈ f a) b' c
⊢ False
Theorem: isPrimePow_iff_card_support_factorization_eq_one
File: Mathlib/Data/Nat/Factorization/PrimePow.lean

tactic: simp_rw [isPrimePow_iff_factorization_eq_single, Finsupp.card_support_eq_one', exists_prop,
  pos_iff_ne_zero]
state_before: R : Type ?u.2961
inst✝ : CommMonoidWithZero R
n✝ p : R
k n : ℕ
⊢ IsPrimePow n ↔ Finset.card (Nat.factorization n).support = 1
Theorem: Int.csSup_mem
File: Mathlib/Data/Int/ConditionallyCompleteOrder.lean

tactic: convert (greatestOfBdd _ (Classical.choose_spec h2) h1).2.1
state_before: s : Set ℤ
h1 : Set.Nonempty s
h2 : BddAbove s
⊢ sSup s ∈ s

tactic: exact dif_pos ⟨h1, h2⟩
state_before: case h.e'_4
s : Set ℤ
h1 : Set.Nonempty s
h2 : BddAbove s
⊢ sSup s = ↑(greatestOfBdd (choose h2) (_ : choose h2 ∈ upperBounds s) h1)
Theorem: YoungDiagram.colLen_anti
File: Mathlib/Combinatorics/Young/YoungDiagram.lean

tactic: convert μ.transpose.rowLen_anti j1 j2 hj using 1 <;> simp
state_before: μ : YoungDiagram
j1 j2 : ℕ
hj : j1 ≤ j2
⊢ colLen μ j2 ≤ colLen μ j1
Theorem: CategoryTheory.Functor.pentagon
File: Mathlib/CategoryTheory/Whiskering.lean

tactic: aesop_cat
state_before: A : Type u₁
inst✝⁴ : Category A
B : Type u₂
inst✝³ : Category B
C : Type u₃
inst✝² : Category C
D : Type u₄
inst✝¹ : Category D
E : Type u₅
inst✝ : Category E
F : A ⥤ B
G : B ⥤ C
H : C ⥤ D
K : D ⥤ E
⊢ whiskerRight (associator F G H).hom K ≫ (associator F (G ⋙ H) K).hom ≫ whiskerLeft F (associator G H K).hom =
    (associator (F ⋙ G) H K).hom ≫ (associator F G (H ⋙ K)).hom