tasksource/leandojo huggingface dataset:
Theorem: Finset.image₂_left
File: Mathlib/Data/Finset/NAry.lean

tactic: push_cast
state_before: α : Type u_1
α' : Type ?u.69101
β : Type u_2
β' : Type ?u.69107
γ : Type ?u.69110
γ' : Type ?u.69113
δ : Type ?u.69116
δ' : Type ?u.69119
ε : Type ?u.69122
ε' : Type ?u.69125
ζ : Type ?u.69128
ζ' : Type ?u.69131
ν : Type ?u.69134
inst✝⁸ : DecidableEq α'
inst✝⁷ : DecidableEq β'
inst✝⁶ : DecidableEq γ
inst✝⁵ : DecidableEq γ'
inst✝⁴ : DecidableEq δ
inst✝³ : DecidableEq δ'
inst✝² : DecidableEq ε
inst✝¹ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝ : DecidableEq α
h : Finset.Nonempty t
⊢ ↑(image₂ (fun x x_1 => x) s t) = ↑s

tactic: exact image2_left h
state_before: α : Type u_1
α' : Type ?u.69101
β : Type u_2
β' : Type ?u.69107
γ : Type ?u.69110
γ' : Type ?u.69113
δ : Type ?u.69116
δ' : Type ?u.69119
ε : Type ?u.69122
ε' : Type ?u.69125
ζ : Type ?u.69128
ζ' : Type ?u.69131
ν : Type ?u.69134
inst✝⁸ : DecidableEq α'
inst✝⁷ : DecidableEq β'
inst✝⁶ : DecidableEq γ
inst✝⁵ : DecidableEq γ'
inst✝⁴ : DecidableEq δ
inst✝³ : DecidableEq δ'
inst✝² : DecidableEq ε
inst✝¹ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝ : DecidableEq α
h : Finset.Nonempty t
⊢ image2 (fun x x_1 => x) ↑s ↑t = ↑s
Theorem: PGame.isOption_neg
File: Mathlib/SetTheory/Game/PGame.lean

tactic: rw [IsOption_iff, IsOption_iff, or_comm]
state_before: x y : PGame
⊢ IsOption x (-y) ↔ IsOption (-x) y

tactic: cases y
state_before: x y : PGame
⊢ ((∃ i, x = moveRight (-y) i) ∨ ∃ i, x = moveLeft (-y) i) ↔ (∃ i, -x = moveLeft y i) ∨ ∃ i, -x = moveRight y i

tactic: apply exists_congr
state_before: case mk.h₂
x : PGame
α✝ β✝ : Type u_1
a✝¹ : α✝ → PGame
a✝ : β✝ → PGame
⊢ (∃ i, x = moveLeft (-mk α✝ β✝ a✝¹ a✝) i) ↔ ∃ i, -x = moveRight (mk α✝ β✝ a✝¹ a✝) i

tactic: intro
state_before: case mk.h₂.h
x : PGame
α✝ β✝ : Type u_1
a✝¹ : α✝ → PGame
a✝ : β✝ → PGame
⊢ ∀ (a : LeftMoves (-mk α✝ β✝ a✝¹ a✝)), x = moveLeft (-mk α✝ β✝ a✝¹ a✝) a ↔ -x = moveRight (mk α✝ β✝ a✝¹ a✝) a

tactic: rw [neg_eq_iff_eq_neg]
state_before: case mk.h₂.h
x : PGame
α✝ β✝ : Type u_1
a✝² : α✝ → PGame
a✝¹ : β✝ → PGame
a✝ : LeftMoves (-mk α✝ β✝ a✝² a✝¹)
⊢ x = moveLeft (-mk α✝ β✝ a✝² a✝¹) a✝ ↔ -x = moveRight (mk α✝ β✝ a✝² a✝¹) a✝

tactic: rfl
state_before: case mk.h₂.h
x : PGame
α✝ β✝ : Type u_1
a✝² : α✝ → PGame
a✝¹ : β✝ → PGame
a✝ : LeftMoves (-mk α✝ β✝ a✝² a✝¹)
⊢ x = moveLeft (-mk α✝ β✝ a✝² a✝¹) a✝ ↔ x = -moveRight (mk α✝ β✝ a✝² a✝¹) a✝
Theorem: SeminormedCommGroup.mem_closure_iff
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: simp [Metric.mem_closure_iff, dist_eq_norm_div]
state_before: 𝓕 : Type ?u.494104
𝕜 : Type ?u.494107
α : Type ?u.494110
ι : Type ?u.494113
κ : Type ?u.494116
E : Type u_1
F : Type ?u.494122
G : Type ?u.494125
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
⊢ a ∈ closure s ↔ ∀ (ε : ℝ), 0 < ε → ∃ b, b ∈ s ∧ ‖a / b‖ < ε
Theorem: AddSubmonoid.mem_closure_singleton
File: Mathlib/GroupTheory/Submonoid/Membership.lean

tactic: rw [closure_singleton_eq, AddMonoidHom.mem_mrange]
state_before: M : Type ?u.251015
A : Type u_1
B : Type ?u.251021
inst✝ : AddMonoid A
x y : A
⊢ y ∈ closure {x} ↔ ∃ n, n • x = y

tactic: rfl
state_before: M : Type ?u.251015
A : Type u_1
B : Type ?u.251021
inst✝ : AddMonoid A
x y : A
⊢ (∃ x_1, ↑(↑(multiplesHom A) x) x_1 = y) ↔ ∃ n, n • x = y
Theorem: Function.isPeriodicPt_of_mem_periodicPts_of_isPeriodicPt_iterate
File: Mathlib/Dynamics/PeriodicPts.lean

tactic: rcases hx with ⟨r, hr, hr'⟩
state_before: α : Type u_1
β : Type ?u.6665
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hx : x ∈ periodicPts f
hm : IsPeriodicPt f m ((f^[n]) x)
⊢ IsPeriodicPt f m x

tactic: suffices n ≤ (n / r + 1) * r by
  change _ = _
  convert (hm.apply_iterate ((n / r + 1) * r - n)).eq <;>
    rw [← iterate_add_apply, Nat.sub_add_cancel this, iterate_mul, (hr'.iterate _).eq]
state_before: case intro.intro
α : Type u_1
β : Type ?u.6665
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hm : IsPeriodicPt f m ((f^[n]) x)
r : ℕ
hr : r > 0
hr' : IsPeriodicPt f r x
⊢ IsPeriodicPt f m x

tactic: rw [add_mul, one_mul]
state_before: case intro.intro
α : Type u_1
β : Type ?u.6665
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hm : IsPeriodicPt f m ((f^[n]) x)
r : ℕ
hr : r > 0
hr' : IsPeriodicPt f r x
⊢ n ≤ (n / r + 1) * r

tactic: exact (Nat.lt_div_mul_add hr).le
state_before: case intro.intro
α : Type u_1
β : Type ?u.6665
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hm : IsPeriodicPt f m ((f^[n]) x)
r : ℕ
hr : r > 0
hr' : IsPeriodicPt f r x
⊢ n ≤ n / r * r + r

tactic: change _ = _
state_before: α : Type u_1
β : Type ?u.6665
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hm : IsPeriodicPt f m ((f^[n]) x)
r : ℕ
hr : r > 0
hr' : IsPeriodicPt f r x
this : n ≤ (n / r + 1) * r
⊢ IsPeriodicPt f m x

tactic: convert (hm.apply_iterate ((n / r + 1) * r - n)).eq <;>
  rw [← iterate_add_apply, Nat.sub_add_cancel this, iterate_mul, (hr'.iterate _).eq]
state_before: α : Type u_1
β : Type ?u.6665
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hm : IsPeriodicPt f m ((f^[n]) x)
r : ℕ
hr : r > 0
hr' : IsPeriodicPt f r x
this : n ≤ (n / r + 1) * r
⊢ (f^[m]) x = x
Theorem: GeneralizedContinuedFraction.continuantsAux_stable_of_terminated
File: Mathlib/Algebra/ContinuedFractions/TerminatedStable.lean

tactic: refine' Nat.le_induction rfl (fun k hnk hk => _) _ n_lt_m
state_before: K : Type u_1
g : GeneralizedContinuedFraction K
n m : ℕ
inst✝ : DivisionRing K
n_lt_m : n < m
terminated_at_n : TerminatedAt g n
⊢ continuantsAux g m = continuantsAux g (n + 1)

tactic: rcases Nat.exists_eq_add_of_lt hnk with ⟨k, rfl⟩
state_before: K : Type u_1
g : GeneralizedContinuedFraction K
n m : ℕ
inst✝ : DivisionRing K
n_lt_m : n < m
terminated_at_n : TerminatedAt g n
k : ℕ
hnk : Nat.succ n ≤ k
hk : continuantsAux g k = continuantsAux g (n + 1)
⊢ continuantsAux g (k + 1) = continuantsAux g (n + 1)

tactic: refine' (continuantsAux_stable_step_of_terminated _).trans hk
state_before: case intro
K : Type u_1
g : GeneralizedContinuedFraction K
n m : ℕ
inst✝ : DivisionRing K
n_lt_m : n < m
terminated_at_n : TerminatedAt g n
k : ℕ
hnk : Nat.succ n ≤ n + k + 1
hk : continuantsAux g (n + k + 1) = continuantsAux g (n + 1)
⊢ continuantsAux g (n + k + 1 + 1) = continuantsAux g (n + 1)

tactic: exact terminated_stable (Nat.le_add_right _ _) terminated_at_n
state_before: case intro
K : Type u_1
g : GeneralizedContinuedFraction K
n m : ℕ
inst✝ : DivisionRing K
n_lt_m : n < m
terminated_at_n : TerminatedAt g n
k : ℕ
hnk : Nat.succ n ≤ n + k + 1
hk : continuantsAux g (n + k + 1) = continuantsAux g (n + 1)
⊢ TerminatedAt g (n + k)
Theorem: Algebra.TensorProduct.rid_tmul
File: Mathlib/RingTheory/TensorProduct.lean

tactic: simp [TensorProduct.rid]
state_before: R : Type u
inst✝⁸ : CommSemiring R
A : Type v₁
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
B : Type v₂
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R B
C : Type v₃
inst✝³ : Semiring C
inst✝² : Algebra R C
D : Type v₄
inst✝¹ : Semiring D
inst✝ : Algebra R D
r : R
a : A
⊢ ↑(TensorProduct.rid R A) (a ⊗ₜ[R] r) = r • a
Theorem: Multiset.fold_union_inter
File: Mathlib/Data/Multiset/Fold.lean

tactic: rw [← fold_add op, union_add_inter, fold_add op]
state_before: α : Type u_1
β : Type ?u.17525
op : α → α → α
hc : IsCommutative α op
ha : IsAssociative α op
inst✝ : DecidableEq α
s₁ s₂ : Multiset α
b₁ b₂ : α
⊢ op (fold op b₁ (s₁ ∪ s₂)) (fold op b₂ (s₁ ∩ s₂)) = op (fold op b₁ s₁) (fold op b₂ s₂)
Theorem: Real.exp_neg_one_lt_d9
File: Mathlib/Data/Complex/ExponentialBounds.lean

tactic: rw [exp_neg, inv_lt (exp_pos _)]
state_before: ⊢ exp (-1) < 0.3678794412

tactic: refine' lt_of_lt_of_le _ (sub_le_comm.1 (abs_sub_le_iff.1 exp_one_near_10).2)
state_before: ⊢ 0.3678794412⁻¹ < exp 1


⊢ 0 < 0.3678794412

tactic: all_goals norm_num
state_before: ⊢ 0.3678794412⁻¹ < 2244083 / 825552 - 1 / 10 ^ 10


⊢ 0 < 0.3678794412

tactic: norm_num
state_before: ⊢ 0 < 0.3678794412
Theorem: Filter.principal_eq_map_coe_top
File: Mathlib/Order/Filter/Basic.lean

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
δ : Type ?u.287841
ι : Sort x
s : Set α
⊢ 𝓟 s = map Subtype.val ⊤
Theorem: CategoryTheory.Abelian.mono_inl_of_isColimit
File: Mathlib/CategoryTheory/Abelian/Basic.lean

tactic: haveI : Mono (NatTrans.app (colimit.cocone (span f g)).ι WalkingCospan.left) :=
  Abelian.mono_pushout_of_mono_g f g
state_before: C : Type u
inst✝³ : Category C
inst✝² : Abelian C
inst✝¹ : HasPushouts C
W X Y Z : C
f : X ⟶ Y
g : X ⟶ Z
inst✝ : Mono g
s : PushoutCocone f g
hs : IsColimit s
⊢ Mono (PushoutCocone.inl s)

tactic: apply
  mono_of_mono_fac (IsColimit.comp_coconePointUniqueUpToIso_hom hs (colimit.isColimit _) _)
state_before: C : Type u
inst✝³ : Category C
inst✝² : Abelian C
inst✝¹ : HasPushouts C
W X Y Z : C
f : X ⟶ Y
g : X ⟶ Z
inst✝ : Mono g
s : PushoutCocone f g
hs : IsColimit s
this : Mono ((colimit.cocone (span f g)).ι.app WalkingCospan.left)
⊢ Mono (PushoutCocone.inl s)
Theorem: UniqueFactorizationMonoid.normalizedFactors_eq_of_dvd
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: intro p hp q hq hdvd
state_before: α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
⊢ ∀ (p : α), p ∈ normalizedFactors a → ∀ (q : α), q ∈ normalizedFactors a → p ∣ q → p = q

tactic: convert normalize_eq_normalize hdvd
        ((prime_of_normalized_factor _ hp).irreducible.dvd_symm
          (prime_of_normalized_factor _ hq).irreducible hdvd) <;>
  apply (normalize_normalized_factor _ ‹_›).symm
state_before: α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a p : α
hp : p ∈ normalizedFactors a
q : α
hq : q ∈ normalizedFactors a
hdvd : p ∣ q
⊢ p = q
Theorem: Finsupp.support_mapRange_of_injective
File: Mathlib/Data/Finsupp/Defs.lean

tactic: ext
state_before: α : Type ?u.181803
β : Type ?u.181806
γ : Type ?u.181809
ι : Type u_3
M : Type u_2
M' : Type ?u.181818
N : Type u_1
P : Type ?u.181824
G : Type ?u.181827
H : Type ?u.181830
R : Type ?u.181833
S : Type ?u.181836
inst✝² : Zero M
inst✝¹ : Zero N
inst✝ : Zero P
e : M → N
he0 : e 0 = 0
f : ι →₀ M
he : Injective e
⊢ (mapRange e he0 f).support = f.support

tactic: simp only [Finsupp.mem_support_iff, Ne.def, Finsupp.mapRange_apply]
state_before: case a
α : Type ?u.181803
β : Type ?u.181806
γ : Type ?u.181809
ι : Type u_3
M : Type u_2
M' : Type ?u.181818
N : Type u_1
P : Type ?u.181824
G : Type ?u.181827
H : Type ?u.181830
R : Type ?u.181833
S : Type ?u.181836
inst✝² : Zero M
inst✝¹ : Zero N
inst✝ : Zero P
e : M → N
he0 : e 0 = 0
f : ι →₀ M
he : Injective e
a✝ : ι
⊢ a✝ ∈ (mapRange e he0 f).support ↔ a✝ ∈ f.support

tactic: exact he.ne_iff' he0
state_before: case a
α : Type ?u.181803
β : Type ?u.181806
γ : Type ?u.181809
ι : Type u_3
M : Type u_2
M' : Type ?u.181818
N : Type u_1
P : Type ?u.181824
G : Type ?u.181827
H : Type ?u.181830
R : Type ?u.181833
S : Type ?u.181836
inst✝² : Zero M
inst✝¹ : Zero N
inst✝ : Zero P
e : M → N
he0 : e 0 = 0
f : ι →₀ M
he : Injective e
a✝ : ι
⊢ ¬e (↑f a✝) = 0 ↔ ¬↑f a✝ = 0
Theorem: ContDiffBump.hasCompactSupport
File: Mathlib/Analysis/Calculus/BumpFunctionInner.lean

tactic: simp_rw [HasCompactSupport, f.tsupport_eq, isCompact_closedBall]
state_before: E : Type u_1
X : Type ?u.91895
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup X
inst✝² : NormedSpace ℝ X
inst✝¹ : HasContDiffBump E
c : E
f : ContDiffBump c
x : E
n : ℕ∞
inst✝ : FiniteDimensional ℝ E
⊢ HasCompactSupport ↑f
Theorem: Ideal.bot_prime
File: Mathlib/RingTheory/Ideal/Basic.lean

tactic: rwa [Ideal.eq_top_iff_one, Submodule.mem_bot] at h
state_before: α : Type u
β : Type v
inst✝² : Semiring α
I : Ideal α
a b : α
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
h : ⊥ = ⊤
⊢ 1 = 0

tactic: simpa only [Submodule.mem_bot] using h
state_before: α : Type u
β : Type v
inst✝² : Semiring α
I : Ideal α
a b : α
R : Type u_1
inst✝¹ : Ring R
inst✝ : IsDomain R
x✝ y✝ : R
h : x✝ * y✝ ∈ ⊥
⊢ x✝ * y✝ = 0
Theorem: FiniteDimensional.finrank_prod
File: Mathlib/LinearAlgebra/FreeModule/Finite/Rank.lean

tactic: simp [finrank, rank_lt_aleph0 R M, rank_lt_aleph0 R N]
state_before: R : Type u
M : Type v
N : Type w
inst✝⁹ : Ring R
inst✝⁸ : StrongRankCondition R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : Module.Free R M
inst✝⁴ : Module.Finite R M
inst✝³ : AddCommGroup N
inst✝² : Module R N
inst✝¹ : Module.Free R N
inst✝ : Module.Finite R N
⊢ finrank R (M × N) = finrank R M + finrank R N
Theorem: UniqueMul.mulHom_map_iff
File: Mathlib/Algebra/Group/UniqueProds.lean

tactic: ext
state_before: case h.e'_1.h.e'_4
G : Type u_1
H : Type u_2
inst✝¹ : Mul G
inst✝ : Mul H
A B : Finset G
a0 b0 : G
f : G ↪ H
mul : ∀ (x y : G), ↑f (x * y) = ↑f x * ↑f y
⊢ Finset.map f B = Finset.image (↑{ toFun := ↑f, map_mul' := mul }) B

tactic: simp only [Finset.mem_map, MulHom.coe_mk, Finset.mem_image]
state_before: case h.e'_1.h.e'_4.a
G : Type u_1
H : Type u_2
inst✝¹ : Mul G
inst✝ : Mul H
A B : Finset G
a0 b0 : G
f : G ↪ H
mul : ∀ (x y : G), ↑f (x * y) = ↑f x * ↑f y
a✝ : H
⊢ a✝ ∈ Finset.map f B ↔ a✝ ∈ Finset.image (↑{ toFun := ↑f, map_mul' := mul }) B
Theorem: Ordinal.typein_le_typein
File: Mathlib/SetTheory/Ordinal/Basic.lean

tactic: rw [← not_lt, typein_lt_typein]
state_before: α : Type u_1
β : Type ?u.188363
γ : Type ?u.188366
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
r : α → α → Prop
inst✝ : IsWellOrder α r
x x' : α
⊢ typein r x ≤ typein r x' ↔ ¬r x' x
Theorem: thickening_thickening
File: Mathlib/Analysis/NormedSpace/Pointwise.lean

tactic: simp_rw [mem_thickening_iff]
state_before: 𝕜 : Type ?u.224089
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x✝ y z : E
δ ε : ℝ
hε : 0 < ε
hδ : 0 < δ
s : Set E
x : E
⊢ x ∈ thickening (ε + δ) s → x ∈ thickening ε (thickening δ s)

tactic: rintro ⟨z, hz, hxz⟩
state_before: 𝕜 : Type ?u.224089
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x✝ y z : E
δ ε : ℝ
hε : 0 < ε
hδ : 0 < δ
s : Set E
x : E
⊢ (∃ z, z ∈ s ∧ dist x z < ε + δ) → ∃ z, (∃ z_1, z_1 ∈ s ∧ dist z z_1 < δ) ∧ dist x z < ε

tactic: rw [add_comm] at hxz
state_before: case intro.intro
𝕜 : Type ?u.224089
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x✝ y z✝ : E
δ ε : ℝ
hε : 0 < ε
hδ : 0 < δ
s : Set E
x z : E
hz : z ∈ s
hxz : dist x z < ε + δ
⊢ ∃ z, (∃ z_1, z_1 ∈ s ∧ dist z z_1 < δ) ∧ dist x z < ε

tactic: obtain ⟨y, hxy, hyz⟩ := exists_dist_lt_lt hε hδ hxz
state_before: case intro.intro
𝕜 : Type ?u.224089
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x✝ y z✝ : E
δ ε : ℝ
hε : 0 < ε
hδ : 0 < δ
s : Set E
x z : E
hz : z ∈ s
hxz : dist x z < δ + ε
⊢ ∃ z, (∃ z_1, z_1 ∈ s ∧ dist z z_1 < δ) ∧ dist x z < ε

tactic: exact ⟨y, ⟨_, hz, hyz⟩, hxy⟩
state_before: case intro.intro.intro.intro
𝕜 : Type ?u.224089
E : Type u_1
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x✝ y✝ z✝ : E
δ ε : ℝ
hε : 0 < ε
hδ : 0 < δ
s : Set E
x z : E
hz : z ∈ s
hxz : dist x z < δ + ε
y : E
hxy : dist x y < ε
hyz : dist y z < δ
⊢ ∃ z, (∃ z_1, z_1 ∈ s ∧ dist z z_1 < δ) ∧ dist x z < ε
Theorem: Finset.prod_eq_prod_Ico_succ_bot
File: Mathlib/Algebra/BigOperators/Intervals.lean

tactic: have ha : a ∉ Ico (a + 1) b := by simp
state_before: α : Type u
β : Type v
γ : Type w
s₂ s₁ s : Finset α
a✝ : α
g f✝ : α → β
inst✝ : CommMonoid β
a b : ℕ
hab : a < b
f : ℕ → β
⊢ ∏ k in Ico a b, f k = f a * ∏ k in Ico (a + 1) b, f k

tactic: rw [← prod_insert ha, Nat.Ico_insert_succ_left hab]
state_before: α : Type u
β : Type v
γ : Type w
s₂ s₁ s : Finset α
a✝ : α
g f✝ : α → β
inst✝ : CommMonoid β
a b : ℕ
hab : a < b
f : ℕ → β
ha : ¬a ∈ Ico (a + 1) b
⊢ ∏ k in Ico a b, f k = f a * ∏ k in Ico (a + 1) b, f k

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
s₂ s₁ s : Finset α
a✝ : α
g f✝ : α → β
inst✝ : CommMonoid β
a b : ℕ
hab : a < b
f : ℕ → β
⊢ ¬a ∈ Ico (a + 1) b
Theorem: Behrend.exp_neg_two_mul_le
File: Mathlib/Combinatorics/Additive/Behrend.lean

tactic: have h₁ := ceil_lt_add_one hx.le
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
⊢ exp (-2 * x) < exp (2 - ↑⌈x⌉₊) / ↑⌈x⌉₊

tactic: have h₂ : 1 - x ≤ 2 - ⌈x⌉₊ := by
  rw [_root_.le_sub_iff_add_le]
  apply (add_le_add_left h₁.le _).trans_eq
  rw [← add_assoc, sub_add_cancel]
  linarith
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
⊢ exp (-2 * x) < exp (2 - ↑⌈x⌉₊) / ↑⌈x⌉₊

tactic: refine' lt_of_le_of_lt _ (div_lt_div_of_lt_left (exp_pos _) (cast_pos.2 <| ceil_pos.2 hx) h₁)
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
h₂ : 1 - x ≤ 2 - ↑⌈x⌉₊
⊢ exp (-2 * x) < exp (2 - ↑⌈x⌉₊) / ↑⌈x⌉₊

tactic: refine' le_trans _ (div_le_div_of_le_of_nonneg (exp_le_exp.2 h₂) <| add_nonneg hx.le zero_le_one)
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
h₂ : 1 - x ≤ 2 - ↑⌈x⌉₊
⊢ exp (-2 * x) ≤ exp (2 - ↑⌈x⌉₊) / (x + 1)

tactic: rw [le_div_iff (add_pos hx zero_lt_one), ← le_div_iff' (exp_pos _), ← exp_sub, neg_mul,
  sub_neg_eq_add, two_mul, sub_add_add_cancel, add_comm _ x]
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
h₂ : 1 - x ≤ 2 - ↑⌈x⌉₊
⊢ exp (-2 * x) ≤ exp (1 - x) / (x + 1)

tactic: refine' le_trans _ (add_one_le_exp_of_nonneg <| add_nonneg hx.le zero_le_one)
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
h₂ : 1 - x ≤ 2 - ↑⌈x⌉₊
⊢ x + 1 ≤ exp (x + 1)

tactic: exact le_add_of_nonneg_right zero_le_one
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
h₂ : 1 - x ≤ 2 - ↑⌈x⌉₊
⊢ x + 1 ≤ x + 1 + 1

tactic: rw [_root_.le_sub_iff_add_le]
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
⊢ 1 - x ≤ 2 - ↑⌈x⌉₊

tactic: apply (add_le_add_left h₁.le _).trans_eq
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
⊢ 1 - x + ↑⌈x⌉₊ ≤ 2

tactic: rw [← add_assoc, sub_add_cancel]
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
⊢ 1 - x + (x + 1) = 2

tactic: linarith
state_before: α : Type ?u.690738
β : Type ?u.690741
n d k N : ℕ
x✝ : Fin n → ℕ
x : ℝ
hx : 0 < x
h₁ : ↑⌈x⌉₊ < x + 1
⊢ 1 + 1 = 2
Theorem: Units.divp_add
File: Mathlib/Algebra/Ring/Units.lean

tactic: simp only [divp, add_mul, Units.mul_inv_cancel_right]
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝ : Ring α
a✝ b✝ a b : α
u : αˣ
⊢ a /ₚ u + b = (a + b * ↑u) /ₚ u
Theorem: Nat.card_eq_two_iff'
File: Mathlib/SetTheory/Cardinal/Finite.lean

tactic: rw [Nat.cast_two]
state_before: α : Type u_1
β : Type ?u.10566
x : α
⊢ (#α) = ↑2 ↔ (#α) = 2
Theorem: MeasureTheory.VectorMeasure.map_smul
File: Mathlib/MeasureTheory/Measure/VectorMeasure.lean

tactic: by_cases hf : Measurable f
state_before: α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
⊢ map (c • v) f = c • map v f

tactic: ext i
state_before: case pos
α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
hf : Measurable f
⊢ map (c • v) f = c • map v f

tactic: intro hi
state_before: case pos.h
α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
hf : Measurable f
i : Set β
⊢ MeasurableSet i → ↑(map (c • v) f) i = ↑(c • map v f) i

tactic: simp [map_apply _ hf hi]
state_before: case pos.h
α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
hf : Measurable f
i : Set β
hi : MeasurableSet i
⊢ ↑(map (c • v) f) i = ↑(c • map v f) i

tactic: simp only [map, dif_neg hf]
state_before: case neg
α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
hf : ¬Measurable f
⊢ map (c • v) f = c • map v f

tactic: ext i
state_before: case neg
α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
hf : ¬Measurable f
⊢ 0 = c • 0

tactic: simp
state_before: case neg.h
α : Type u_1
β : Type u_3
m : MeasurableSpace α
inst✝⁵ : MeasurableSpace β
M : Type u_2
inst✝⁴ : AddCommMonoid M
inst✝³ : TopologicalSpace M
R : Type u_4
inst✝² : Semiring R
inst✝¹ : DistribMulAction R M
inst✝ : ContinuousConstSMul R M
v : VectorMeasure α M
f : α → β
c : R
hf : ¬Measurable f
i : Set β
⊢ MeasurableSet i → ↑0 i = ↑(c • 0) i
Theorem: Semiquot.pure_isPure
File: Mathlib/Data/Semiquot.lean

tactic: rw [mem_pure] at ab ac
state_before: α : Type u_1
β : Type ?u.15837
a b : α
ab : b ∈ pure a
c : α
ac : c ∈ pure a
⊢ b = c

tactic: rwa [←ac] at ab
state_before: α : Type u_1
β : Type ?u.15837
a b : α
ab : b = a
c : α
ac : c = a
⊢ b = c
Theorem: List.zipRight_nil_left
File: Mathlib/Data/List/Basic.lean

tactic: cases bs <;> rfl
state_before: ι : Type ?u.478828
α : Type u
β : Type v
γ : Type w
δ : Type x
l₁ l₂ : List α
a : α
as : List α
b : β
bs : List β
⊢ zipRight [] bs = map (fun b => (none, b)) bs
Theorem: MeasureTheory.Measure.QuasiMeasurePreserving.comp
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: rw [← map_map hg.1 hf.1]
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
δ : Type ?u.407802
ι : Type ?u.407805
R : Type ?u.407808
R' : Type ?u.407811
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μa μa' : Measure α
μb μb' : Measure β
μc : Measure γ
f✝ : α → β
g : β → γ
f : α → β
hg : QuasiMeasurePreserving g
hf : QuasiMeasurePreserving f
⊢ map (g ∘ f) μa ≪ μc

tactic: exact (hf.2.map hg.1).trans hg.2
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
δ : Type ?u.407802
ι : Type ?u.407805
R : Type ?u.407808
R' : Type ?u.407811
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
μa μa' : Measure α
μb μb' : Measure β
μc : Measure γ
f✝ : α → β
g : β → γ
f : α → β
hg : QuasiMeasurePreserving g
hf : QuasiMeasurePreserving f
⊢ map g (map f μa) ≪ μc