tasksource/leandojo huggingface dataset:
Theorem: MeasureTheory.AEStronglyMeasurable.integral_prod_right'
File: Mathlib/MeasureTheory/Constructions/Prod/Integral.lean

tactic: filter_upwards [ae_ae_of_ae_prod hf.ae_eq_mk] with _ hx using integral_congr_ae hx
state_before: α : Type u_3
α' : Type ?u.2386685
β : Type u_1
β' : Type ?u.2386691
γ : Type ?u.2386694
E : Type u_2
inst✝⁸ : MeasurableSpace α
inst✝⁷ : MeasurableSpace α'
inst✝⁶ : MeasurableSpace β
inst✝⁵ : MeasurableSpace β'
inst✝⁴ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝³ : NormedAddCommGroup E
inst✝² : SigmaFinite ν
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
f : α × β → E
hf : AEStronglyMeasurable f (Measure.prod μ ν)
⊢ (fun x => ∫ (y : β), f (x, y) ∂ν) =ᶠ[ae μ] fun x => ∫ (y : β), AEStronglyMeasurable.mk f hf (x, y) ∂ν
Theorem: Real.Angle.coe_toIcoMod
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [angle_eq_iff_two_pi_dvd_sub]
state_before: θ ψ : ℝ
⊢ ↑(toIcoMod two_pi_pos ψ θ) = ↑θ

tactic: refine' ⟨-toIcoDiv two_pi_pos ψ θ, _⟩
state_before: θ ψ : ℝ
⊢ ∃ k, toIcoMod two_pi_pos ψ θ - θ = 2 * π * ↑k

tactic: rw [toIcoMod_sub_self, zsmul_eq_mul, mul_comm]
state_before: θ ψ : ℝ
⊢ toIcoMod two_pi_pos ψ θ - θ = 2 * π * ↑(-toIcoDiv two_pi_pos ψ θ)
Theorem: isNoetherian_of_tower
File: Mathlib/RingTheory/Noetherian.lean

tactic: rw [isNoetherian_iff_wellFounded] at h⊢
state_before: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : SMul R S
inst✝² : Module S M
inst✝¹ : Module R M
inst✝ : IsScalarTower R S M
h : IsNoetherian R M
⊢ IsNoetherian S M

tactic: refine' (Submodule.restrictScalarsEmbedding R S M).dual.wellFounded h
state_before: R : Type u_1
S : Type u_2
M : Type u_3
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid M
inst✝³ : SMul R S
inst✝² : Module S M
inst✝¹ : Module R M
inst✝ : IsScalarTower R S M
h : WellFounded fun x x_1 => x > x_1
⊢ WellFounded fun x x_1 => x > x_1
Theorem: RingHom.codomain_trivial_iff_range_trivial
File: Mathlib/Algebra/Hom/Ring.lean

tactic: rw [← mul_one x, map_mul, h, mul_zero]
state_before: F : Type ?u.86859
α : Type u_2
β : Type u_1
γ : Type ?u.86868
x✝² : NonAssocSemiring α
x✝¹ : NonAssocSemiring β
f : α →+* β
x✝ y : α
h : ↑f 1 = 0
x : α
⊢ ↑f x = 0
Theorem: eq_mul_of_div_eq'
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp [h.symm]
state_before: α : Type ?u.67078
β : Type ?u.67081
G : Type u_1
inst✝ : CommGroup G
a b c d : G
h : a / b = c
⊢ a = b * c
Theorem: neg_abs_le_neg
File: Mathlib/Algebra/Order/Group/Abs.lean

tactic: simpa using neg_abs_le_self (-a)
state_before: α : Type u_1
inst✝² : AddGroup α
inst✝¹ : LinearOrder α
inst✝ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a✝ b c a : α
⊢ -abs a ≤ -a
Theorem: Set.Finite.coeSort_toFinset
File: Mathlib/Data/Set/Finite.lean

tactic: rw [← Finset.coe_sort_coe _, h.coe_toFinset]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
a : α
hs : Set.Finite s
ht : Set.Finite t
h : Set.Finite s
⊢ { x // x ∈ Finite.toFinset h } = ↑s
Theorem: Submonoid.map_powers
File: Mathlib/GroupTheory/Submonoid/Membership.lean

tactic: simp only [powers_eq_closure, map_mclosure f, Set.image_singleton]
state_before: M : Type u_3
A : Type ?u.225218
B : Type ?u.225221
inst✝² : Monoid M
N : Type u_1
F : Type u_2
inst✝¹ : Monoid N
inst✝ : MonoidHomClass F M N
f : F
m : M
⊢ map f (powers m) = powers (↑f m)
Theorem: LieModule.derivedSeries_le_lowerCentralSeries
File: Mathlib/Algebra/Lie/Nilpotent.lean

tactic: induction' k with k h
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
k✝ : ℕ
N : LieSubmodule R L M
k : ℕ
⊢ derivedSeries R L k ≤ lowerCentralSeries R L L k

tactic: rw [derivedSeries_def, derivedSeriesOfIdeal_zero, lowerCentralSeries_zero]
state_before: case zero
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
k : ℕ
N : LieSubmodule R L M
⊢ derivedSeries R L Nat.zero ≤ lowerCentralSeries R L L Nat.zero

tactic: have h' : derivedSeries R L k ≤ ⊤ := by simp only [le_top]
state_before: case succ
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
k✝ : ℕ
N : LieSubmodule R L M
k : ℕ
h : derivedSeries R L k ≤ lowerCentralSeries R L L k
⊢ derivedSeries R L (Nat.succ k) ≤ lowerCentralSeries R L L (Nat.succ k)

tactic: rw [derivedSeries_def, derivedSeriesOfIdeal_succ, lowerCentralSeries_succ]
state_before: case succ
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
k✝ : ℕ
N : LieSubmodule R L M
k : ℕ
h : derivedSeries R L k ≤ lowerCentralSeries R L L k
h' : derivedSeries R L k ≤ ⊤
⊢ derivedSeries R L (Nat.succ k) ≤ lowerCentralSeries R L L (Nat.succ k)

tactic: exact LieSubmodule.mono_lie _ _ _ _ h' h
state_before: case succ
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
k✝ : ℕ
N : LieSubmodule R L M
k : ℕ
h : derivedSeries R L k ≤ lowerCentralSeries R L L k
h' : derivedSeries R L k ≤ ⊤
⊢ ⁅derivedSeriesOfIdeal R L k ⊤, derivedSeriesOfIdeal R L k ⊤⁆ ≤ ⁅⊤, lowerCentralSeries R L L k⁆

tactic: simp only [le_top]
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
k✝ : ℕ
N : LieSubmodule R L M
k : ℕ
h : derivedSeries R L k ≤ lowerCentralSeries R L L k
⊢ derivedSeries R L k ≤ ⊤
Theorem: Matrix.fromBlocks_submatrix_sum_swap_sum_swap
File: Mathlib/Data/Matrix/Block.lean

tactic: simp
state_before: l✝ : Type ?u.20447
m✝ : Type ?u.20450
n✝ : Type ?u.20453
o✝ : Type ?u.20456
p : Type ?u.20459
q : Type ?u.20462
m' : o✝ → Type ?u.20467
n' : o✝ → Type ?u.20472
p' : o✝ → Type ?u.20477
R : Type ?u.20480
S : Type ?u.20483
α✝ : Type ?u.20486
β : Type ?u.20489
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
α : Type u_5
A : Matrix n l α
B : Matrix n m α
C : Matrix o l α
D : Matrix o m α
⊢ submatrix (fromBlocks A B C D) Sum.swap Sum.swap = fromBlocks D C B A
Theorem: AffineBasis.exists_affineBasis_of_finiteDimensional
File: Mathlib/LinearAlgebra/AffineSpace/FiniteDimensional.lean

tactic: obtain ⟨s, b, hb⟩ := AffineBasis.exists_affineBasis k V P
state_before: ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁵ : AddCommGroup V
inst✝⁴ : AffineSpace V P
inst✝³ : DivisionRing k
inst✝² : Module k V
inst✝¹ : Fintype ι
inst✝ : FiniteDimensional k V
h : Fintype.card ι = FiniteDimensional.finrank k V + 1
⊢ Nonempty (AffineBasis ι k P)

tactic: lift s to Finset P using b.finite_set
state_before: case intro.intro
ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁵ : AddCommGroup V
inst✝⁴ : AffineSpace V P
inst✝³ : DivisionRing k
inst✝² : Module k V
inst✝¹ : Fintype ι
inst✝ : FiniteDimensional k V
h : Fintype.card ι = FiniteDimensional.finrank k V + 1
s : Set P
b : AffineBasis (↑s) k P
hb : ↑b = Subtype.val
⊢ Nonempty (AffineBasis ι k P)

tactic: refine' ⟨b.reindex <| Fintype.equivOfCardEq _⟩
state_before: case intro.intro.intro
ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁵ : AddCommGroup V
inst✝⁴ : AffineSpace V P
inst✝³ : DivisionRing k
inst✝² : Module k V
inst✝¹ : Fintype ι
inst✝ : FiniteDimensional k V
h : Fintype.card ι = FiniteDimensional.finrank k V + 1
s : Finset P
b : AffineBasis (↑↑s) k P
hb : ↑b = Subtype.val
⊢ Nonempty (AffineBasis ι k P)

tactic: rw [h, ← b.card_eq_finrank_add_one]
state_before: case intro.intro.intro
ι : Type u₁
k : Type u₂
V : Type u₃
P : Type u₄
inst✝⁵ : AddCommGroup V
inst✝⁴ : AffineSpace V P
inst✝³ : DivisionRing k
inst✝² : Module k V
inst✝¹ : Fintype ι
inst✝ : FiniteDimensional k V
h : Fintype.card ι = FiniteDimensional.finrank k V + 1
s : Finset P
b : AffineBasis (↑↑s) k P
hb : ↑b = Subtype.val
⊢ Fintype.card ↑↑s = Fintype.card ι
Theorem: continuous_if'
File: Mathlib/Topology/ContinuousOn.lean

tactic: rw [continuous_iff_continuousOn_univ]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.376081
δ : Type ?u.376084
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
p : α → Prop
f g : α → β
inst✝ : (a : α) → Decidable (p a)
hpf : ∀ (a : α), a ∈ frontier {x | p x} → Tendsto f (𝓝[{x | p x}] a) (𝓝 (if p a then f a else g a))
hpg : ∀ (a : α), a ∈ frontier {x | p x} → Tendsto g (𝓝[{x | ¬p x}] a) (𝓝 (if p a then f a else g a))
hf : ContinuousOn f {x | p x}
hg : ContinuousOn g {x | ¬p x}
⊢ Continuous fun a => if p a then f a else g a

tactic: apply ContinuousOn.if' <;> simp [*] <;> assumption
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.376081
δ : Type ?u.376084
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
p : α → Prop
f g : α → β
inst✝ : (a : α) → Decidable (p a)
hpf : ∀ (a : α), a ∈ frontier {x | p x} → Tendsto f (𝓝[{x | p x}] a) (𝓝 (if p a then f a else g a))
hpg : ∀ (a : α), a ∈ frontier {x | p x} → Tendsto g (𝓝[{x | ¬p x}] a) (𝓝 (if p a then f a else g a))
hf : ContinuousOn f {x | p x}
hg : ContinuousOn g {x | ¬p x}
⊢ ContinuousOn (fun a => if p a then f a else g a) univ
Theorem: Polynomial.natDegree_mul_C_le
File: Mathlib/Data/Polynomial/Degree/Lemmas.lean

tactic: rw [natDegree_C a]
state_before: R : Type u
S : Type v
ι : Type w
a✝ b : R
m n : ℕ
inst✝ : Semiring R
p q r f : R[X]
a : R
⊢ natDegree f + natDegree (↑C a) = natDegree f + 0
Theorem: Submonoid.powers_eq_closure
File: Mathlib/GroupTheory/Submonoid/Membership.lean

tactic: ext
state_before: M : Type u_1
A : Type ?u.128599
B : Type ?u.128602
inst✝ : Monoid M
n : M
⊢ powers n = closure {n}

tactic: exact mem_closure_singleton.symm
state_before: case h
M : Type u_1
A : Type ?u.128599
B : Type ?u.128602
inst✝ : Monoid M
n x✝ : M
⊢ x✝ ∈ powers n ↔ x✝ ∈ closure {n}
Theorem: MeasureTheory.spanningSetsIndex_eq_iff
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: convert Set.ext_iff.1 (preimage_spanningSetsIndex_singleton μ n) x
state_before: α : Type u_1
β : Type ?u.728649
γ : Type ?u.728652
δ : Type ?u.728655
ι : Type ?u.728658
R : Type ?u.728661
R' : Type ?u.728664
m0 : MeasurableSpace α
inst✝² : MeasurableSpace β
inst✝¹ : MeasurableSpace γ
μ✝ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
n : ℕ
⊢ spanningSetsIndex μ x = n ↔ x ∈ disjointed (spanningSets μ) n
Theorem: Asymptotics.isBigOWith_pi
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

tactic: have : ∀ x, 0 ≤ C * ‖g' x‖ := fun x => mul_nonneg hC (norm_nonneg _)
state_before: α : Type u_3
β : Type ?u.690828
E : Type ?u.690831
F : Type ?u.690834
G : Type ?u.690837
E'✝ : Type ?u.690840
F' : Type u_4
G' : Type ?u.690846
E'' : Type ?u.690849
F'' : Type ?u.690852
G'' : Type ?u.690855
R : Type ?u.690858
R' : Type ?u.690861
𝕜 : Type ?u.690864
𝕜' : Type ?u.690867
inst✝¹⁴ : Norm E
inst✝¹³ : Norm F
inst✝¹² : Norm G
inst✝¹¹ : SeminormedAddCommGroup E'✝
inst✝¹⁰ : SeminormedAddCommGroup F'
inst✝⁹ : SeminormedAddCommGroup G'
inst✝⁸ : NormedAddCommGroup E''
inst✝⁷ : NormedAddCommGroup F''
inst✝⁶ : NormedAddCommGroup G''
inst✝⁵ : SeminormedRing R
inst✝⁴ : SeminormedRing R'
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
c c' c₁ c₂ : ℝ
f✝ : α → E
g : α → F
k : α → G
f' : α → E'✝
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
ι : Type u_1
inst✝¹ : Fintype ι
E' : ι → Type u_2
inst✝ : (i : ι) → NormedAddCommGroup (E' i)
f : α → (i : ι) → E' i
C : ℝ
hC : 0 ≤ C
⊢ IsBigOWith C l f g' ↔ ∀ (i : ι), IsBigOWith C l (fun x => f x i) g'

tactic: simp only [isBigOWith_iff, pi_norm_le_iff_of_nonneg (this _), eventually_all]
state_before: α : Type u_3
β : Type ?u.690828
E : Type ?u.690831
F : Type ?u.690834
G : Type ?u.690837
E'✝ : Type ?u.690840
F' : Type u_4
G' : Type ?u.690846
E'' : Type ?u.690849
F'' : Type ?u.690852
G'' : Type ?u.690855
R : Type ?u.690858
R' : Type ?u.690861
𝕜 : Type ?u.690864
𝕜' : Type ?u.690867
inst✝¹⁴ : Norm E
inst✝¹³ : Norm F
inst✝¹² : Norm G
inst✝¹¹ : SeminormedAddCommGroup E'✝
inst✝¹⁰ : SeminormedAddCommGroup F'
inst✝⁹ : SeminormedAddCommGroup G'
inst✝⁸ : NormedAddCommGroup E''
inst✝⁷ : NormedAddCommGroup F''
inst✝⁶ : NormedAddCommGroup G''
inst✝⁵ : SeminormedRing R
inst✝⁴ : SeminormedRing R'
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
c c' c₁ c₂ : ℝ
f✝ : α → E
g : α → F
k : α → G
f' : α → E'✝
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
ι : Type u_1
inst✝¹ : Fintype ι
E' : ι → Type u_2
inst✝ : (i : ι) → NormedAddCommGroup (E' i)
f : α → (i : ι) → E' i
C : ℝ
hC : 0 ≤ C
this : ∀ (x : α), 0 ≤ C * ‖g' x‖
⊢ IsBigOWith C l f g' ↔ ∀ (i : ι), IsBigOWith C l (fun x => f x i) g'
Theorem: String.Iterator.Valid.setCurr
File: Std/Data/String/Lemmas.lean

tactic: let ⟨l, r, h⟩ := h.validFor
state_before: c : Char
it : Iterator
h : Valid it
⊢ Valid (Iterator.setCurr it c)

tactic: exact h.setCurr'.valid
state_before: c : Char
it : Iterator
h✝ : Valid it
l r : List Char
h : ValidFor l r it
⊢ Valid (Iterator.setCurr it c)
Theorem: NNReal.mul_iSup
File: Mathlib/Data/Real/NNReal.lean

tactic: rw [← NNReal.coe_eq, NNReal.coe_mul, NNReal.coe_iSup, NNReal.coe_iSup]
state_before: ι : Sort u_1
f✝ f : ι → ℝ≥0
a : ℝ≥0
⊢ (a * ⨆ (i : ι), f i) = ⨆ (i : ι), a * f i

tactic: exact Real.mul_iSup_of_nonneg (NNReal.coe_nonneg _) _
state_before: ι : Sort u_1
f✝ f : ι → ℝ≥0
a : ℝ≥0
⊢ (↑a * ⨆ (i : ι), ↑(f i)) = ⨆ (i : ι), ↑(a * f i)
Theorem: ENNReal.tendsto_nhds_top_iff_nat
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: simpa only [ENNReal.coe_nat] using h n
state_before: α : Type u_1
β : Type ?u.40146
γ : Type ?u.40149
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
m : α → ℝ≥0∞
f : Filter α
h : ∀ (x : ℝ≥0), ∀ᶠ (a : α) in f, ↑x < m a
n : ℕ
⊢ ∀ᶠ (a : α) in f, ↑n < m a

tactic: rwa [← ENNReal.coe_nat, coe_lt_coe]
state_before: α : Type u_1
β : Type ?u.40146
γ : Type ?u.40149
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y✝ z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
m : α → ℝ≥0∞
f : Filter α
h : ∀ (n : ℕ), ∀ᶠ (a : α) in f, ↑n < m a
x : ℝ≥0
n : ℕ
hn : x < ↑n
y : α
⊢ ↑x < ↑n
Theorem: UpperSet.mem_iInf₂_iff
File: Mathlib/Order/UpperLower/Basic.lean

tactic: simp_rw [mem_iInf_iff]
state_before: α : Type u_1
β : Type ?u.60515
γ : Type ?u.60518
ι : Sort u_2
κ : ι → Sort u_3
inst✝ : LE α
S : Set (UpperSet α)
s t : UpperSet α
a : α
f : (i : ι) → κ i → UpperSet α
⊢ (a ∈ ⨅ (i : ι) (j : κ i), f i j) ↔ ∃ i j, a ∈ f i j
Theorem: LinearMap.toSpanSingleton_zero
File: Mathlib/LinearAlgebra/Span.lean

tactic: ext
state_before: R : Type u_1
R₂ : Type ?u.332387
K : Type ?u.332390
M : Type u_2
M₂ : Type ?u.332396
V : Type ?u.332399
S : Type ?u.332402
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ toSpanSingleton R M 0 = 0

tactic: simp
state_before: case h
R : Type u_1
R₂ : Type ?u.332387
K : Type ?u.332390
M : Type u_2
M₂ : Type ?u.332396
V : Type ?u.332399
S : Type ?u.332402
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ ↑(toSpanSingleton R M 0) 1 = ↑0 1
Theorem: PosNum.one_add
File: Mathlib/Data/Num/Lemmas.lean

tactic: cases n <;> rfl
state_before: α : Type ?u.30381
n : PosNum
⊢ 1 + n = succ n
Theorem: Finset.card_Iic_finset
File: Mathlib/Data/Finset/Interval.lean

tactic: rw [Iic_eq_powerset, card_powerset]
state_before: α : Type u_1
inst✝ : DecidableEq α
s t : Finset α
⊢ card (Iic s) = 2 ^ card s
Theorem: HasSum.sub
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

tactic: simp only [sub_eq_add_neg]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.401752
δ : Type ?u.401755
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f g : β → α
a a₁ a₂ : α
hf : HasSum f a₁
hg : HasSum g a₂
⊢ HasSum (fun b => f b - g b) (a₁ - a₂)

tactic: exact hf.add hg.neg
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.401752
δ : Type ?u.401755
inst✝² : AddCommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalAddGroup α
f g : β → α
a a₁ a₂ : α
hf : HasSum f a₁
hg : HasSum g a₂
⊢ HasSum (fun b => f b + -g b) (a₁ + -a₂)
Theorem: UniformSpace.Completion.comap_coe_eq_uniformity
File: Mathlib/Topology/UniformSpace/Completion.lean

tactic: have :
  (fun x : α × α => ((x.1 : Completion α), (x.2 : Completion α))) =
    (fun x : CauchyFilter α × CauchyFilter α => (⟦x.1⟧, ⟦x.2⟧)) ∘ fun x : α × α =>
      (pureCauchy x.1, pureCauchy x.2) :=
  by ext ⟨a, b⟩ <;> simp <;> rfl
state_before: α : Type u_1
inst✝² : UniformSpace α
β : Type ?u.37466
inst✝¹ : UniformSpace β
γ : Type ?u.37472
inst✝ : UniformSpace γ
⊢ Filter.comap (fun p => (↑α p.fst, ↑α p.snd)) (𝓤 (Completion α)) = 𝓤 α

tactic: rw [this, ← Filter.comap_comap]
state_before: α : Type u_1
inst✝² : UniformSpace α
β : Type ?u.37466
inst✝¹ : UniformSpace β
γ : Type ?u.37472
inst✝ : UniformSpace γ
this :
  (fun x => (↑α x.fst, ↑α x.snd)) =
    (fun x =>
        (Quotient.mk (separationSetoid (CauchyFilter α)) x.fst,
          Quotient.mk (separationSetoid (CauchyFilter α)) x.snd)) ∘
      fun x => (pureCauchy x.fst, pureCauchy x.snd)
⊢ Filter.comap (fun p => (↑α p.fst, ↑α p.snd)) (𝓤 (Completion α)) = 𝓤 α

tactic: change Filter.comap _ (Filter.comap _ (𝓤 <| Quotient <| separationSetoid <| CauchyFilter α)) = 𝓤 α
state_before: α : Type u_1
inst✝² : UniformSpace α
β : Type ?u.37466
inst✝¹ : UniformSpace β
γ : Type ?u.37472
inst✝ : UniformSpace γ
this :
  (fun x => (↑α x.fst, ↑α x.snd)) =
    (fun x =>
        (Quotient.mk (separationSetoid (CauchyFilter α)) x.fst,
          Quotient.mk (separationSetoid (CauchyFilter α)) x.snd)) ∘
      fun x => (pureCauchy x.fst, pureCauchy x.snd)
⊢ Filter.comap (fun x => (pureCauchy x.fst, pureCauchy x.snd))
      (Filter.comap
        (fun x =>
          (Quotient.mk (separationSetoid (CauchyFilter α)) x.fst,
            Quotient.mk (separationSetoid (CauchyFilter α)) x.snd))
        (𝓤 (Completion α))) =
    𝓤 α

tactic: rw [comap_quotient_eq_uniformity, uniformEmbedding_pureCauchy.comap_uniformity]
state_before: α : Type u_1
inst✝² : UniformSpace α
β : Type ?u.37466
inst✝¹ : UniformSpace β
γ : Type ?u.37472
inst✝ : UniformSpace γ
this :
  (fun x => (↑α x.fst, ↑α x.snd)) =
    (fun x =>
        (Quotient.mk (separationSetoid (CauchyFilter α)) x.fst,
          Quotient.mk (separationSetoid (CauchyFilter α)) x.snd)) ∘
      fun x => (pureCauchy x.fst, pureCauchy x.snd)
⊢ Filter.comap (fun x => (pureCauchy x.fst, pureCauchy x.snd))
      (Filter.comap
        (fun x =>
          (Quotient.mk (separationSetoid (CauchyFilter α)) x.fst,
            Quotient.mk (separationSetoid (CauchyFilter α)) x.snd))
        (𝓤 (Quotient (separationSetoid (CauchyFilter α))))) =
    𝓤 α

tactic: ext ⟨a, b⟩ <;> simp <;> rfl
state_before: α : Type u_1
inst✝² : UniformSpace α
β : Type ?u.37466
inst✝¹ : UniformSpace β
γ : Type ?u.37472
inst✝ : UniformSpace γ
⊢ (fun x => (↑α x.fst, ↑α x.snd)) =
    (fun x =>
        (Quotient.mk (separationSetoid (CauchyFilter α)) x.fst,
          Quotient.mk (separationSetoid (CauchyFilter α)) x.snd)) ∘
      fun x => (pureCauchy x.fst, pureCauchy x.snd)
Theorem: MonoidAlgebra.smul_of
File: Mathlib/Algebra/MonoidAlgebra/Basic.lean

tactic: rw [of_apply, smul_single', mul_one]
state_before: k : Type u₁
G : Type u₂
R : Type ?u.464052
inst✝¹ : Semiring k
inst✝ : MulOneClass G
g : G
r : k
⊢ r • ↑(of k G) g = single g r
Theorem: Metric.hausdorffDist_empty
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: cases' s.eq_empty_or_nonempty with h h
state_before: ι : Sort ?u.74934
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
⊢ hausdorffDist s ∅ = 0

tactic: simp [h]
state_before: case inl
ι : Sort ?u.74934
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
h : s = ∅
⊢ hausdorffDist s ∅ = 0

tactic: simp [hausdorffDist, hausdorffEdist_empty h]
state_before: case inr
ι : Sort ?u.74934
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
h : Set.Nonempty s
⊢ hausdorffDist s ∅ = 0
Theorem: SeminormFamily.withSeminorms_iff_topologicalSpace_eq_iInf
File: Mathlib/Analysis/LocallyConvex/WithSeminorms.lean

tactic: rw [p.withSeminorms_iff_nhds_eq_iInf,
  TopologicalAddGroup.ext_iff inferInstance (topologicalAddGroup_iInf fun i => inferInstance),
  nhds_iInf]
state_before: 𝕜 : Type u_1
𝕜₂ : Type ?u.446340
𝕝 : Type ?u.446343
𝕝₂ : Type ?u.446346
E : Type u_2
F : Type ?u.446352
G : Type ?u.446355
ι : Type u_3
ι' : Type ?u.446361
inst✝⁴ : NormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : Nonempty ι
t : TopologicalSpace E
inst✝ : TopologicalAddGroup E
p : SeminormFamily 𝕜 E ι
⊢ WithSeminorms p ↔ t = ⨅ (i : ι), UniformSpace.toTopologicalSpace

tactic: refine Eq.to_iff ?_
state_before: 𝕜 : Type u_1
𝕜₂ : Type ?u.446340
𝕝 : Type ?u.446343
𝕝₂ : Type ?u.446346
E : Type u_2
F : Type ?u.446352
G : Type ?u.446355
ι : Type u_3
ι' : Type ?u.446361
inst✝⁴ : NormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : Nonempty ι
t : TopologicalSpace E
inst✝ : TopologicalAddGroup E
p : SeminormFamily 𝕜 E ι
⊢ (𝓝 0 = ⨅ (i : ι), Filter.comap (↑(p i)) (𝓝 0)) ↔ 𝓝 0 = ⨅ (i : ι), 𝓝 0

tactic: congr
state_before: 𝕜 : Type u_1
𝕜₂ : Type ?u.446340
𝕝 : Type ?u.446343
𝕝₂ : Type ?u.446346
E : Type u_2
F : Type ?u.446352
G : Type ?u.446355
ι : Type u_3
ι' : Type ?u.446361
inst✝⁴ : NormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : Nonempty ι
t : TopologicalSpace E
inst✝ : TopologicalAddGroup E
p : SeminormFamily 𝕜 E ι
⊢ (𝓝 0 = ⨅ (i : ι), Filter.comap (↑(p i)) (𝓝 0)) = (𝓝 0 = ⨅ (i : ι), 𝓝 0)

tactic: funext i
state_before: case e_a.e_s
𝕜 : Type u_1
𝕜₂ : Type ?u.446340
𝕝 : Type ?u.446343
𝕝₂ : Type ?u.446346
E : Type u_2
F : Type ?u.446352
G : Type ?u.446355
ι : Type u_3
ι' : Type ?u.446361
inst✝⁴ : NormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : Nonempty ι
t : TopologicalSpace E
inst✝ : TopologicalAddGroup E
p : SeminormFamily 𝕜 E ι
⊢ (fun i => Filter.comap (↑(p i)) (𝓝 0)) = fun i => 𝓝 0

tactic: exact @comap_norm_nhds_zero _ (p i).toAddGroupSeminorm.toSeminormedAddGroup
state_before: case e_a.e_s.h
𝕜 : Type u_1
𝕜₂ : Type ?u.446340
𝕝 : Type ?u.446343
𝕝₂ : Type ?u.446346
E : Type u_2
F : Type ?u.446352
G : Type ?u.446355
ι : Type u_3
ι' : Type ?u.446361
inst✝⁴ : NormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : Nonempty ι
t : TopologicalSpace E
inst✝ : TopologicalAddGroup E
p : SeminormFamily 𝕜 E ι
i : ι
⊢ Filter.comap (↑(p i)) (𝓝 0) = 𝓝 0
Theorem: Real.Angle.abs_sin_eq_of_two_nsmul_eq
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [two_nsmul_eq_iff] at h
state_before: θ ψ : Angle
h : 2 • θ = 2 • ψ
⊢ abs (sin θ) = abs (sin ψ)

tactic: rcases h with (rfl | rfl)
state_before: θ ψ : Angle
h : θ = ψ ∨ θ = ψ + ↑π
⊢ abs (sin θ) = abs (sin ψ)

tactic: rfl
state_before: case inl
θ : Angle
⊢ abs (sin θ) = abs (sin θ)

tactic: rw [sin_add_pi, abs_neg]
state_before: case inr
ψ : Angle
⊢ abs (sin (ψ + ↑π)) = abs (sin ψ)
Theorem: Nat.factorial_eq_mul_doubleFactorial
File: Mathlib/Data/Nat/Factorial/DoubleFactorial.lean

tactic: rw [doubleFactorial_add_two, factorial, factorial_eq_mul_doubleFactorial _, mul_comm _ k‼,
  mul_assoc]
state_before: k : ℕ
⊢ (k + 1 + 1)! = (k + 1 + 1)‼ * (k + 1)‼