tasksource/leandojo huggingface dataset:
Theorem: CategoryTheory.Presieve.FamilyOfElements.IsAmalgamation.compPresheafMap
File: Mathlib/CategoryTheory/Sites/SheafOfTypes.lean

tactic: intro Y g hg
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : P.obj X.op
f : P ⟶ Q
h : IsAmalgamation x t
⊢ IsAmalgamation (FamilyOfElements.compPresheafMap f x) (f.app X.op t)

tactic: dsimp [FamilyOfElements.compPresheafMap]
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y✝ : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : P.obj X.op
f : P ⟶ Q
h : IsAmalgamation x t
Y : C
g : Y ⟶ X
hg : R g
⊢ Q.map g.op (f.app X.op t) = FamilyOfElements.compPresheafMap f x g hg

tactic: change (f.app _ ≫ Q.map _) _ = _
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y✝ : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : P.obj X.op
f : P ⟶ Q
h : IsAmalgamation x t
Y : C
g : Y ⟶ X
hg : R g
⊢ Q.map g.op (f.app X.op t) = f.app Y.op (x g hg)

tactic: rw [← f.naturality, types_comp_apply, h g hg]
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y✝ : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : P.obj X.op
f : P ⟶ Q
h : IsAmalgamation x t
Y : C
g : Y ⟶ X
hg : R g
⊢ (f.app X.op ≫ Q.map g.op) t = f.app Y.op (x g hg)
Theorem: BoundedContinuousFunction.sum_apply
File: Mathlib/Topology/ContinuousFunction/Bounded.lean

tactic: simp
state_before: F : Type ?u.976970
α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : PseudoMetricSpace β
inst✝¹ : AddCommMonoid β
inst✝ : LipschitzAdd β
ι : Type u_1
s : Finset ι
f : ι → α →ᵇ β
a : α
⊢ ↑(∑ i in s, f i) a = ∑ i in s, ↑(f i) a
Theorem: Polynomial.eq_X_add_C_of_degree_eq_one
File: Mathlib/Data/Polynomial/Degree/Definitions.lean

tactic: simp only [leadingCoeff, natDegree_eq_of_degree_eq_some h]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p q r : R[X]
h : degree p = 1
⊢ ↑C (coeff p 1) * X + ↑C (coeff p 0) = ↑C (leadingCoeff p) * X + ↑C (coeff p 0)

tactic: rfl
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p q r : R[X]
h : degree p = 1
⊢ ↑C (coeff p 1) * X + ↑C (coeff p 0) = ↑C (coeff p One.one) * X + ↑C (coeff p 0)
Theorem: NonUnitalRingHom.prod_unique
File: Mathlib/Algebra/Ring/Prod.lean

tactic: simp only [prod_apply, coe_fst, coe_snd, comp_apply, Prod.mk.eta]
state_before: α : Type ?u.22238
β : Type ?u.22241
R : Type u_1
R' : Type ?u.22247
S : Type u_3
S' : Type ?u.22253
T : Type u_2
T' : Type ?u.22259
inst✝² : NonUnitalNonAssocSemiring R
inst✝¹ : NonUnitalNonAssocSemiring S
inst✝ : NonUnitalNonAssocSemiring T
f✝ : R →ₙ+* S
g : R →ₙ+* T
f : R →ₙ+* S × T
x : R
⊢ ↑(NonUnitalRingHom.prod (comp (fst S T) f) (comp (snd S T) f)) x = ↑f x
Theorem: Matrix.range_cons
File: Mathlib/Data/Fin/VecNotation.lean

tactic: simp [Fin.exists_fin_succ, eq_comm]
state_before: α : Type u
m n o : ℕ
m' : Type ?u.15284
n' : Type ?u.15287
o' : Type ?u.15290
x : α
u : Fin n → α
y : α
⊢ y ∈ Set.range (vecCons x u) ↔ y ∈ {x} ∪ Set.range u
Theorem: Multiset.card_disjSum
File: Mathlib/Data/Multiset/Sum.lean

tactic: rw [disjSum, card_add, card_map, card_map]
state_before: α : Type u_1
β : Type u_2
s : Multiset α
t : Multiset β
⊢ ↑card (disjSum s t) = ↑card s + ↑card t
Theorem: Bornology.isBounded_sUnion
File: Mathlib/Topology/Bornology/Basic.lean

tactic: rw [sUnion_eq_biUnion, isBounded_biUnion hs]
state_before: ι : Type ?u.8797
α : Type u_1
β : Type ?u.8803
s : Set α
inst✝ : Bornology α
S : Set (Set α)
hs : Set.Finite S
⊢ IsBounded (⋃₀ S) ↔ ∀ (s : Set α), s ∈ S → IsBounded s
Theorem: expNegInvGlue.contDiff
File: Mathlib/Analysis/Calculus/BumpFunctionInner.lean

tactic: simpa using contDiff_polynomial_eval_inv_mul 1
state_before: n : ℕ∞
⊢ ContDiff ℝ n expNegInvGlue
Theorem: Multiset.eq_zero_of_forall_not_mem
File: Mathlib/Data/Multiset/Basic.lean

tactic: rw [eq_nil_iff_forall_not_mem.mpr H]
state_before: α : Type u_1
β : Type ?u.16742
γ : Type ?u.16745
s : Multiset α
l : List α
H : ∀ (x : α), ¬x ∈ Quot.mk Setoid.r l
⊢ Quot.mk Setoid.r l = 0

tactic: rfl
state_before: α : Type u_1
β : Type ?u.16742
γ : Type ?u.16745
s : Multiset α
l : List α
H : ∀ (x : α), ¬x ∈ Quot.mk Setoid.r l
⊢ Quot.mk Setoid.r [] = 0
Theorem: summable_iff_vanishing_norm
File: Mathlib/Analysis/Normed/Group/InfiniteSum.lean

tactic: rw [summable_iff_cauchySeq_finset, cauchySeq_finset_iff_vanishing_norm]
state_before: ι : Type u_2
α : Type ?u.2223
E : Type u_1
F : Type ?u.2229
inst✝² : SeminormedAddCommGroup E
inst✝¹ : SeminormedAddCommGroup F
inst✝ : CompleteSpace E
f : ι → E
⊢ Summable f ↔ ∀ (ε : ℝ), ε > 0 → ∃ s, ∀ (t : Finset ι), Disjoint t s → ‖∑ i in t, f i‖ < ε
Theorem: Set.image2_image_right
File: Mathlib/Data/Set/NAry.lean

tactic: ext
state_before: α : Type u_2
α' : Type ?u.34558
β : Type u_4
β' : Type ?u.34564
γ : Type u_3
γ' : Type ?u.34570
δ : Type u_1
δ' : Type ?u.34576
ε : Type ?u.34579
ε' : Type ?u.34582
ζ : Type ?u.34585
ζ' : Type ?u.34588
ν : Type ?u.34591
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
f : α → γ → δ
g : β → γ
⊢ image2 f s (g '' t) = image2 (fun a b => f a (g b)) s t

tactic: constructor
state_before: case h
α : Type u_2
α' : Type ?u.34558
β : Type u_4
β' : Type ?u.34564
γ : Type u_3
γ' : Type ?u.34570
δ : Type u_1
δ' : Type ?u.34576
ε : Type ?u.34579
ε' : Type ?u.34582
ζ : Type ?u.34585
ζ' : Type ?u.34588
ν : Type ?u.34591
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
f : α → γ → δ
g : β → γ
x✝ : δ
⊢ x✝ ∈ image2 f s (g '' t) ↔ x✝ ∈ image2 (fun a b => f a (g b)) s t

tactic: rintro ⟨a, _, ha, ⟨b, hb, rfl⟩, rfl⟩
state_before: case h.mp
α : Type u_2
α' : Type ?u.34558
β : Type u_4
β' : Type ?u.34564
γ : Type u_3
γ' : Type ?u.34570
δ : Type u_1
δ' : Type ?u.34576
ε : Type ?u.34579
ε' : Type ?u.34582
ζ : Type ?u.34585
ζ' : Type ?u.34588
ν : Type ?u.34591
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
f : α → γ → δ
g : β → γ
x✝ : δ
⊢ x✝ ∈ image2 f s (g '' t) → x✝ ∈ image2 (fun a b => f a (g b)) s t

tactic: refine' ⟨a, b, ha, hb, rfl⟩
state_before: case h.mp.intro.intro.intro.intro.intro.intro
α : Type u_2
α' : Type ?u.34558
β : Type u_4
β' : Type ?u.34564
γ : Type u_3
γ' : Type ?u.34570
δ : Type u_1
δ' : Type ?u.34576
ε : Type ?u.34579
ε' : Type ?u.34582
ζ : Type ?u.34585
ζ' : Type ?u.34588
ν : Type ?u.34591
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a✝ a' : α
b✝ b' : β
c c' : γ
d d' : δ
f : α → γ → δ
g : β → γ
a : α
ha : a ∈ s
b : β
hb : b ∈ t
⊢ f a (g b) ∈ image2 (fun a b => f a (g b)) s t

tactic: rintro ⟨a, b, ha, hb, rfl⟩
state_before: case h.mpr
α : Type u_2
α' : Type ?u.34558
β : Type u_4
β' : Type ?u.34564
γ : Type u_3
γ' : Type ?u.34570
δ : Type u_1
δ' : Type ?u.34576
ε : Type ?u.34579
ε' : Type ?u.34582
ζ : Type ?u.34585
ζ' : Type ?u.34588
ν : Type ?u.34591
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
f : α → γ → δ
g : β → γ
x✝ : δ
⊢ x✝ ∈ image2 (fun a b => f a (g b)) s t → x✝ ∈ image2 f s (g '' t)

tactic: refine' ⟨a, _, ha, ⟨b, hb, rfl⟩, rfl⟩
state_before: case h.mpr.intro.intro.intro.intro
α : Type u_2
α' : Type ?u.34558
β : Type u_4
β' : Type ?u.34564
γ : Type u_3
γ' : Type ?u.34570
δ : Type u_1
δ' : Type ?u.34576
ε : Type ?u.34579
ε' : Type ?u.34582
ζ : Type ?u.34585
ζ' : Type ?u.34588
ν : Type ?u.34591
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a✝ a' : α
b✝ b' : β
c c' : γ
d d' : δ
f : α → γ → δ
g : β → γ
a : α
b : β
ha : a ∈ s
hb : b ∈ t
⊢ (fun a b => f a (g b)) a b ∈ image2 f s (g '' t)
Theorem: List.rdropWhile_concat_neg
File: Mathlib/Data/List/Rdrop.lean

tactic: rw [rdropWhile_concat, if_neg h]
state_before: α : Type u_1
p : α → Bool
l : List α
n : ℕ
x : α
h : ¬p x = true
⊢ rdropWhile p (l ++ [x]) = l ++ [x]
Theorem: Int.natAbs_dvd_natAbs
File: Std/Data/Int/DivMod.lean

tactic: refine ⟨fun ⟨k, hk⟩ => ?_, fun ⟨k, hk⟩ => ⟨natAbs k, hk.symm ▸ natAbs_mul a k⟩⟩
state_before: a b : Int
⊢ natAbs a ∣ natAbs b ↔ a ∣ b

tactic: rw [← natAbs_ofNat k, ← natAbs_mul, natAbs_eq_natAbs_iff] at hk
state_before: a b : Int
x✝ : natAbs a ∣ natAbs b
k : Nat
hk : natAbs b = natAbs a * k
⊢ a ∣ b

tactic: cases hk <;> subst b
state_before: a b : Int
x✝ : natAbs a ∣ natAbs b
k : Nat
hk : b = a * ↑k ∨ b = -(a * ↑k)
⊢ a ∣ b

tactic: apply Int.dvd_mul_right
state_before: case inl
a : Int
k : Nat
x✝ : natAbs a ∣ natAbs (a * ↑k)
⊢ a ∣ a * ↑k

tactic: rw [← Int.mul_neg]
state_before: case inr
a : Int
k : Nat
x✝ : natAbs a ∣ natAbs (-(a * ↑k))
⊢ a ∣ -(a * ↑k)

tactic: apply Int.dvd_mul_right
state_before: case inr
a : Int
k : Nat
x✝ : natAbs a ∣ natAbs (-(a * ↑k))
⊢ a ∣ a * -↑k
Theorem: NNReal.inv_le_of_le_mul
File: Mathlib/Data/Real/NNReal.lean

tactic: by_cases r = 0 <;> simp [*, inv_le]
state_before: r p : ℝ≥0
h : 1 ≤ r * p
⊢ r⁻¹ ≤ p
Theorem: CategoryTheory.Presieve.extend_agrees
File: Mathlib/CategoryTheory/Sites/SheafOfTypes.lean

tactic: have h := (le_generate R Y hf).choose_spec
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : FamilyOfElements.Compatible x
f : Y ⟶ X
hf : R f
⊢ FamilyOfElements.sieveExtend x f (_ : f ∈ (generate R).arrows) = x f hf

tactic: unfold FamilyOfElements.sieveExtend
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : FamilyOfElements.Compatible x
f : Y ⟶ X
hf : R f
h : ∃ h g, R g ∧ h ≫ g = f
⊢ FamilyOfElements.sieveExtend x f (_ : f ∈ (generate R).arrows) = x f hf

tactic: rw [t h.choose (𝟙 _) _ hf _]
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : FamilyOfElements.Compatible x
f : Y ⟶ X
hf : R f
h : ∃ h g, R g ∧ h ≫ g = f
⊢ P.map (Exists.choose (_ : ∃ h g, R g ∧ h ≫ g = f)).op
      (x (Exists.choose (_ : ∃ g, R g ∧ Exists.choose (_ : ∃ h g, R g ∧ h ≫ g = f) ≫ g = f))
        (_ : R (Exists.choose (_ : ∃ g, R g ∧ Exists.choose (_ : ∃ h g, R g ∧ h ≫ g = f) ≫ g = f)))) =
    x f hf

tactic: simp
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : FamilyOfElements.Compatible x
f : Y ⟶ X
hf : R f
h : ∃ h g, R g ∧ h ≫ g = f
⊢ P.map (𝟙 Y).op (x f hf) = x f hf

tactic: rw [id_comp]
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : FamilyOfElements.Compatible x
f : Y ⟶ X
hf : R f
h : ∃ h g, R g ∧ h ≫ g = f
⊢ Exists.choose h ≫ Exists.choose (_ : ∃ g, R g ∧ Exists.choose (_ : ∃ h g, R g ∧ h ≫ g = f) ≫ g = f) = 𝟙 Y ≫ f

tactic: exact h.choose_spec.choose_spec.2
state_before: C : Type u₁
inst✝ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
x : FamilyOfElements P R
t : FamilyOfElements.Compatible x
f : Y ⟶ X
hf : R f
h : ∃ h g, R g ∧ h ≫ g = f
⊢ Exists.choose h ≫ Exists.choose (_ : ∃ g, R g ∧ Exists.choose (_ : ∃ h g, R g ∧ h ≫ g = f) ≫ g = f) = f
Theorem: FormalMultilinearSeries.order_eq_find
File: Mathlib/Analysis/Calculus/FormalMultilinearSeries.lean

tactic: convert Nat.sInf_def hp
state_before: 𝕜 : Type u
𝕜' : Type u'
E : Type v
F : Type w
G : Type x
inst✝¹¹ : CommRing 𝕜
n : ℕ
inst✝¹⁰ : AddCommGroup E
inst✝⁹ : Module 𝕜 E
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalAddGroup E
inst✝⁶ : ContinuousConstSMul 𝕜 E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜 F
inst✝³ : TopologicalSpace F
inst✝² : TopologicalAddGroup F
inst✝¹ : ContinuousConstSMul 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
inst✝ : DecidablePred fun n => p n ≠ 0
hp : ∃ n, p n ≠ 0
⊢ order p = Nat.find hp
Theorem: Function.Periodic.smul
File: Mathlib/Algebra/Periodic.lean

tactic: simp_all
state_before: α : Type u_1
β : Type u_3
γ : Type u_2
f g : α → β
c c₁ c₂ x : α
inst✝¹ : Add α
inst✝ : SMul γ β
h : Periodic f c
a : γ
⊢ Periodic (a • f) c
Theorem: mul_inv_lt_iff_le_mul'
File: Mathlib/Algebra/Order/Group/Defs.lean

tactic: rw [← inv_mul_lt_iff_lt_mul, mul_comm]
state_before: α : Type u
inst✝² : CommGroup α
inst✝¹ : LT α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c d : α
⊢ a * b⁻¹ < c ↔ a < b * c
Theorem: Equiv.Perm.cycleType_prime_order
File: Mathlib/GroupTheory/Perm/Cycle/Type.lean

tactic: refine ⟨Multiset.card σ.cycleType - 1, eq_replicate.2 ⟨?_, fun n hn ↦ ?_⟩⟩
state_before: α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
hσ : Nat.Prime (orderOf σ)
⊢ ∃ n, cycleType σ = replicate (n + 1) (orderOf σ)

tactic: rw [tsub_add_cancel_of_le]
state_before: case refine_1
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
hσ : Nat.Prime (orderOf σ)
⊢ ↑card (cycleType σ) = ↑card (cycleType σ) - 1 + 1

tactic: rw [Nat.succ_le_iff, card_cycleType_pos, Ne.def, ← orderOf_eq_one_iff]
state_before: case refine_1
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
hσ : Nat.Prime (orderOf σ)
⊢ 1 ≤ ↑card (cycleType σ)

tactic: exact hσ.ne_one
state_before: case refine_1
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
hσ : Nat.Prime (orderOf σ)
⊢ ¬orderOf σ = 1

tactic: exact (hσ.eq_one_or_self_of_dvd n (dvd_of_mem_cycleType hn)).resolve_left
  (one_lt_of_mem_cycleType hn).ne'
state_before: case refine_2
α : Type u_1
inst✝¹ : Fintype α
inst✝ : DecidableEq α
σ : Perm α
hσ : Nat.Prime (orderOf σ)
n : ℕ
hn : n ∈ cycleType σ
⊢ n = orderOf σ
Theorem: Ideal.radical_pow
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: decide
state_before: R : Type u
ι : Type ?u.339982
inst✝ : CommSemiring R
I J K L : Ideal R
n : ℕ
H : n > 0
⊢ ¬Nat.zero > 0

tactic: rw [pow_succ]
state_before: R : Type u
ι : Type ?u.339982
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ : ℕ
H✝¹ : n✝ > 0
n : ℕ
ih : n > 0 → radical (I ^ n) = radical I
H✝ : Nat.succ n > 0
H : 0 < n
⊢ radical (I ^ (n + 1)) = radical I ⊓ radical (I ^ n)

tactic: exact radical_mul _ _
state_before: R : Type u
ι : Type ?u.339982
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ : ℕ
H✝¹ : n✝ > 0
n : ℕ
ih : n > 0 → radical (I ^ n) = radical I
H✝ : Nat.succ n > 0
H : 0 < n
⊢ radical (I * I ^ n) = radical I ⊓ radical (I ^ n)

tactic: rw [ih H]
state_before: R : Type u
ι : Type ?u.339982
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ : ℕ
H✝¹ : n✝ > 0
n : ℕ
ih : n > 0 → radical (I ^ n) = radical I
H✝ : Nat.succ n > 0
H : 0 < n
⊢ radical I ⊓ radical (I ^ n) = radical I ⊓ radical I
Theorem: Nat.prod_factorization_eq_prod_factors
File: Mathlib/Data/Nat/Factorization/Basic.lean

tactic: apply prod_congr support_factorization
state_before: n : ℕ
β : Type u_1
inst✝ : CommMonoid β
f : ℕ → β
⊢ (Finsupp.prod (factorization n) fun p x => f p) = ∏ p in toFinset (factors n), f p

tactic: simp
state_before: n : ℕ
β : Type u_1
inst✝ : CommMonoid β
f : ℕ → β
⊢ ∀ (x : ℕ), x ∈ toFinset (factors n) → (fun p x => f p) x (↑(factorization n) x) = f x
Theorem: Nat.ArithmeticFunction.cardFactors_multiset_prod
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: revert h0
state_before: R : Type ?u.554754
s : Multiset ℕ
h0 : Multiset.prod s ≠ 0
⊢ ↑Ω (Multiset.prod s) = Multiset.sum (Multiset.map (↑Ω) s)

tactic: refine s.induction_on ?_ ?_
state_before: R : Type ?u.554754
s : Multiset ℕ
⊢ Multiset.prod s ≠ 0 → ↑Ω (Multiset.prod s) = Multiset.sum (Multiset.map (↑Ω) s)

tactic: intro a t h h0
state_before: case refine_2
R : Type ?u.554754
s : Multiset ℕ
⊢ ∀ ⦃a : ℕ⦄ {s : Multiset ℕ},
    (Multiset.prod s ≠ 0 → ↑Ω (Multiset.prod s) = Multiset.sum (Multiset.map (↑Ω) s)) →
      Multiset.prod (a ::ₘ s) ≠ 0 → ↑Ω (Multiset.prod (a ::ₘ s)) = Multiset.sum (Multiset.map (↑Ω) (a ::ₘ s))

tactic: rw [Multiset.prod_cons, mul_ne_zero_iff] at h0
state_before: case refine_2
R : Type ?u.554754
s : Multiset ℕ
a : ℕ
t : Multiset ℕ
h : Multiset.prod t ≠ 0 → ↑Ω (Multiset.prod t) = Multiset.sum (Multiset.map (↑Ω) t)
h0 : Multiset.prod (a ::ₘ t) ≠ 0
⊢ ↑Ω (Multiset.prod (a ::ₘ t)) = Multiset.sum (Multiset.map (↑Ω) (a ::ₘ t))

tactic: simp [h0, cardFactors_mul, h]
state_before: case refine_2
R : Type ?u.554754
s : Multiset ℕ
a : ℕ
t : Multiset ℕ
h : Multiset.prod t ≠ 0 → ↑Ω (Multiset.prod t) = Multiset.sum (Multiset.map (↑Ω) t)
h0 : a ≠ 0 ∧ Multiset.prod t ≠ 0
⊢ ↑Ω (Multiset.prod (a ::ₘ t)) = Multiset.sum (Multiset.map (↑Ω) (a ::ₘ t))

tactic: simp
state_before: case refine_1
R : Type ?u.554754
s : Multiset ℕ
⊢ Multiset.prod 0 ≠ 0 → ↑Ω (Multiset.prod 0) = Multiset.sum (Multiset.map (↑Ω) 0)
Theorem: circleIntegrable_iff
File: Mathlib/MeasureTheory/Integral/CircleIntegral.lean

tactic: by_cases h₀ : R = 0
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
⊢ CircleIntegrable f c R ↔ IntervalIntegrable (fun θ => deriv (circleMap c R) θ • f (circleMap c R θ)) volume 0 (2 * π)

tactic: refine' ⟨fun h => h.out, fun h => _⟩
state_before: case neg
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
⊢ CircleIntegrable f c R ↔ IntervalIntegrable (fun θ => deriv (circleMap c R) θ • f (circleMap c R θ)) volume 0 (2 * π)

tactic: simp only [CircleIntegrable, intervalIntegrable_iff, deriv_circleMap] at h ⊢
state_before: case neg
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
h : IntervalIntegrable (fun θ => deriv (circleMap c R) θ • f (circleMap c R θ)) volume 0 (2 * π)
⊢ CircleIntegrable f c R

tactic: refine' (h.norm.const_mul (|R|)⁻¹).mono' _ _
state_before: case neg
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
h : IntegrableOn (fun θ => (circleMap 0 R θ * I) • f (circleMap c R θ)) (Ι 0 (2 * π))
⊢ IntegrableOn (fun θ => f (circleMap c R θ)) (Ι 0 (2 * π))

tactic: simp [h₀, const]
state_before: case pos
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : R = 0
⊢ CircleIntegrable f c R ↔ IntervalIntegrable (fun θ => deriv (circleMap c R) θ • f (circleMap c R θ)) volume 0 (2 * π)

tactic: have H : ∀ {θ}, circleMap 0 R θ * I ≠ 0 := fun {θ} => by simp [h₀, I_ne_zero]
state_before: case neg.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
h : IntegrableOn (fun θ => (circleMap 0 R θ * I) • f (circleMap c R θ)) (Ι 0 (2 * π))
⊢ AEStronglyMeasurable (fun θ => f (circleMap c R θ)) (Measure.restrict volume (Ι 0 (2 * π)))

tactic: simpa only [inv_smul_smul₀ H]
  using ((continuous_circleMap 0 R).aestronglyMeasurable.mul_const
    I).aemeasurable.inv.aestronglyMeasurable.smul h.aestronglyMeasurable
state_before: case neg.refine'_1
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
h : IntegrableOn (fun θ => (circleMap 0 R θ * I) • f (circleMap c R θ)) (Ι 0 (2 * π))
H : ∀ {θ : ℝ}, circleMap 0 R θ * I ≠ 0
⊢ AEStronglyMeasurable (fun θ => f (circleMap c R θ)) (Measure.restrict volume (Ι 0 (2 * π)))

tactic: simp [h₀, I_ne_zero]
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
h : IntegrableOn (fun θ => (circleMap 0 R θ * I) • f (circleMap c R θ)) (Ι 0 (2 * π))
θ : ℝ
⊢ circleMap 0 R θ * I ≠ 0

tactic: simp [norm_smul, h₀]
state_before: case neg.refine'_2
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
f : ℂ → E
c : ℂ
R : ℝ
h₀ : ¬R = 0
h : IntegrableOn (fun θ => (circleMap 0 R θ * I) • f (circleMap c R θ)) (Ι 0 (2 * π))
⊢ ∀ᵐ (a : ℝ) ∂Measure.restrict volume (Ι 0 (2 * π)),
    ‖f (circleMap c R a)‖ ≤ (Abs.abs R)⁻¹ * ‖(circleMap 0 R a * I) • f (circleMap c R a)‖
Theorem: InnerProductGeometry.angle_add_le_pi_div_two_of_inner_eq_zero
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

tactic: rw [angle_add_eq_arccos_of_inner_eq_zero h, Real.arccos_le_pi_div_two]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
⊢ angle x (x + y) ≤ π / 2

tactic: exact div_nonneg (norm_nonneg _) (norm_nonneg _)
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
x y : V
h : inner x y = 0
⊢ 0 ≤ ‖x‖ / ‖x + y‖
Theorem: Int.odd_sub'
File: Mathlib/Data/Int/Parity.lean

tactic: rw [odd_iff_not_even, even_sub, not_iff, not_iff_comm, odd_iff_not_even]
state_before: m n : ℤ
⊢ Odd (m - n) ↔ (Odd n ↔ Even m)
Theorem: homology.π'_ι
File: Mathlib/CategoryTheory/Abelian/Homology.lean

tactic: dsimp [π', ι, homologyIsoKernelDesc]
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ π' f g w ≫ ι f g w = kernel.ι g ≫ cokernel.π f

tactic: simp
state_before: A : Type u
inst✝¹ : Category A
inst✝ : Abelian A
X Y Z : A
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (cokernel.π (kernel.lift g f w) ≫ (homologyIsoCokernelLift f g w).inv) ≫
      ((homologyIsoCokernelLift f g w).hom ≫ Abelian.homologyCToK f g w) ≫ kernel.ι (cokernel.desc f g w) =
    kernel.ι g ≫ cokernel.π f
Theorem: Nat.factorization_one
File: Mathlib/Data/Nat/Factorization/Basic.lean

tactic: simp [factorization]
state_before: ⊢ factorization 1 = 0
Theorem: StrictConvexOn.lt_on_open_segment'
File: Mathlib/Analysis/Convex/Function.lean

tactic: gcongr
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.484521
α : Type ?u.484524
β : Type u_3
ι : Type ?u.484530
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommMonoid E
inst✝⁴ : AddCommMonoid F
inst✝³ : LinearOrderedAddCommMonoid β
inst✝² : SMul 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f g : E → β
hf : StrictConvexOn 𝕜 s f
x y : E
hx : x ∈ s
hy : y ∈ s
hxy : x ≠ y
a b : 𝕜
ha : 0 < a
hb : 0 < b
hab : a + b = 1
⊢ a • f x + b • f y ≤ a • max (f x) (f y) + b • max (f x) (f y)

tactic: apply le_max_left
state_before: case h₁.h₁
𝕜 : Type u_1
E : Type u_2
F : Type ?u.484521
α : Type ?u.484524
β : Type u_3
ι : Type ?u.484530
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommMonoid E
inst✝⁴ : AddCommMonoid F
inst✝³ : LinearOrderedAddCommMonoid β
inst✝² : SMul 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f g : E → β
hf : StrictConvexOn 𝕜 s f
x y : E
hx : x ∈ s
hy : y ∈ s
hxy : x ≠ y
a b : 𝕜
ha : 0 < a
hb : 0 < b
hab : a + b = 1
⊢ f x ≤ max (f x) (f y)

tactic: apply le_max_right
state_before: case h₂.h₁
𝕜 : Type u_1
E : Type u_2
F : Type ?u.484521
α : Type ?u.484524
β : Type u_3
ι : Type ?u.484530
inst✝⁶ : OrderedSemiring 𝕜
inst✝⁵ : AddCommMonoid E
inst✝⁴ : AddCommMonoid F
inst✝³ : LinearOrderedAddCommMonoid β
inst✝² : SMul 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f g : E → β
hf : StrictConvexOn 𝕜 s f
x y : E
hx : x ∈ s
hy : y ∈ s
hxy : x ≠ y
a b : 𝕜
ha : 0 < a
hb : 0 < b
hab : a + b = 1
⊢ f y ≤ max (f x) (f y)
Theorem: Set.image_preimage_inter
File: Mathlib/Data/Set/Image.lean

tactic: simp only [inter_comm, image_inter_preimage]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.52437
ι : Sort ?u.52440
ι' : Sort ?u.52443
f✝ : α → β
s✝ t✝ : Set α
f : α → β
s : Set α
t : Set β
⊢ f '' (f ⁻¹' t ∩ s) = t ∩ f '' s
Theorem: GeneralizedContinuedFraction.terminatedAt_iff_part_denom_none
File: Mathlib/Algebra/ContinuedFractions/Translations.lean

tactic: rw [terminatedAt_iff_s_none, part_denom_none_iff_s_none]
state_before: α : Type u_1
g : GeneralizedContinuedFraction α
n : ℕ
⊢ TerminatedAt g n ↔ Stream'.Seq.get? (partialDenominators g) n = none