1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: StrictConcaveOn.secant_strict_mono
File: Mathlib/Analysis/Convex/Slope.lean

tactic: have key := hf.neg.secant_strict_mono ha hx hy hxa hya hxy
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
⊢ (f y - f a) / (y - a) < (f x - f a) / (x - a)
state_after: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
key : ((-f) x - (-f) a) / (x - a) < ((-f) y - (-f) a) / (y - a)
⊢ (f y - f a) / (y - a) < (f x - f a) / (x - a)

tactic: simp only [Pi.neg_apply] at key
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
key : ((-f) x - (-f) a) / (x - a) < ((-f) y - (-f) a) / (y - a)
⊢ (f y - f a) / (y - a) < (f x - f a) / (x - a)
state_after: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
key : (-f x - -f a) / (x - a) < (-f y - -f a) / (y - a)
⊢ (f y - f a) / (y - a) < (f x - f a) / (x - a)

tactic: rw [← neg_lt_neg_iff]
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
key : (-f x - -f a) / (x - a) < (-f y - -f a) / (y - a)
⊢ (f y - f a) / (y - a) < (f x - f a) / (x - a)
state_after: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
key : (-f x - -f a) / (x - a) < (-f y - -f a) / (y - a)
⊢ -((f x - f a) / (x - a)) < -((f y - f a) / (y - a))

tactic: convert key using 1 <;> field_simp <;> ring
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConcaveOn 𝕜 s f
a x y : 𝕜
ha : a ∈ s
hx : x ∈ s
hy : y ∈ s
hxa : x ≠ a
hya : y ≠ a
hxy : x < y
key : (-f x - -f a) / (x - a) < (-f y - -f a) / (y - a)
⊢ -((f x - f a) / (x - a)) < -((f y - f a) / (y - a))
state_after: no goals
Theorem: interior_iInter_of_finite
File: Mathlib/Topology/Basic.lean

tactic: rw [← sInter_range, (finite_range f).interior_sInter, biInter_range]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝¹ : TopologicalSpace X
inst✝ : Finite ι
f : ι → Set X
⊢ interior (⋂ i, f i) = ⋂ i, interior (f i)
state_after: no goals
Theorem: Finset.prod_filter_mul_prod_filter_not
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: have := Classical.decEq α
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝² : CommMonoid β
s : Finset α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : (x : α) → Decidable ¬p x
f : α → β
⊢ (∏ x ∈ filter p s, f x) * ∏ x ∈ filter (fun x => ¬p x) s, f x = ∏ x ∈ s, f x
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝² : CommMonoid β
s : Finset α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : (x : α) → Decidable ¬p x
f : α → β
this : DecidableEq α
⊢ (∏ x ∈ filter p s, f x) * ∏ x ∈ filter (fun x => ¬p x) s, f x = ∏ x ∈ s, f x

tactic: rw [← prod_union (disjoint_filter_filter_neg s s p), filter_union_filter_neg_eq]
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝² : CommMonoid β
s : Finset α
p : α → Prop
inst✝¹ : DecidablePred p
inst✝ : (x : α) → Decidable ¬p x
f : α → β
this : DecidableEq α
⊢ (∏ x ∈ filter p s, f x) * ∏ x ∈ filter (fun x => ¬p x) s, f x = ∏ x ∈ s, f x
state_after: no goals
Theorem: Matroid.Restriction.finitary
File: Mathlib/Data/Matroid/Restrict.lean

tactic: obtain ⟨R, -, rfl⟩ := h
state_before: α : Type u_1
M✝ : Matroid α
R I J X Y : Set α
N M : Matroid α
inst✝ : M.Finitary
h : N ≤r M
⊢ N.Finitary
state_after: case intro.intro
α : Type u_1
M✝ : Matroid α
R✝ I J X Y : Set α
M : Matroid α
inst✝ : M.Finitary
R : Set α
⊢ (M ↾ R).Finitary

tactic: infer_instance
state_before: case intro.intro
α : Type u_1
M✝ : Matroid α
R✝ I J X Y : Set α
M : Matroid α
inst✝ : M.Finitary
R : Set α
⊢ (M ↾ R).Finitary
state_after: no goals
Theorem: Nat.prod_mem_factoredNumbers
File: Mathlib/NumberTheory/SmoothNumbers.lean

tactic: refine ⟨h₀, fun p hp ↦ ?_⟩
state_before: s : Finset ℕ
n : ℕ
h₀ : (List.filter (fun x => decide (x ∈ s)) n.factors).prod ≠ 0
⊢ (List.filter (fun x => decide (x ∈ s)) n.factors).prod ∈ factoredNumbers s
state_after: s : Finset ℕ
n : ℕ
h₀ : (List.filter (fun x => decide (x ∈ s)) n.factors).prod ≠ 0
p : ℕ
hp : p ∈ (List.filter (fun x => decide (x ∈ s)) n.factors).prod.factors
⊢ p ∈ s

tactic: obtain ⟨H₁, H₂⟩ := (mem_factors h₀).mp hp
state_before: s : Finset ℕ
n : ℕ
h₀ : (List.filter (fun x => decide (x ∈ s)) n.factors).prod ≠ 0
p : ℕ
hp : p ∈ (List.filter (fun x => decide (x ∈ s)) n.factors).prod.factors
⊢ p ∈ s
state_after: case intro
s : Finset ℕ
n : ℕ
h₀ : (List.filter (fun x => decide (x ∈ s)) n.factors).prod ≠ 0
p : ℕ
hp : p ∈ (List.filter (fun x => decide (x ∈ s)) n.factors).prod.factors
H₁ : Prime p
H₂ : p ∣ (List.filter (fun x => decide (x ∈ s)) n.factors).prod
⊢ p ∈ s

tactic: simpa only [decide_eq_true_eq] using List.of_mem_filter <| mem_list_primes_of_dvd_prod H₁.prime
  (fun _ hq ↦ (prime_of_mem_factors (List.mem_of_mem_filter hq)).prime) H₂
state_before: case intro
s : Finset ℕ
n : ℕ
h₀ : (List.filter (fun x => decide (x ∈ s)) n.factors).prod ≠ 0
p : ℕ
hp : p ∈ (List.filter (fun x => decide (x ∈ s)) n.factors).prod.factors
H₁ : Prime p
H₂ : p ∣ (List.filter (fun x => decide (x ∈ s)) n.factors).prod
⊢ p ∈ s
state_after: no goals
Theorem: MeasureTheory.Supermartingale.le_zero_of_predictable
File: Mathlib/Probability/Martingale/Basic.lean

tactic: induction' n with k ih
state_before: Ω : Type u_1
E : Type u_2
ι : Type u_3
inst✝⁵ : Preorder ι
m0 : MeasurableSpace Ω
μ : Measure Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
f✝ g : ι → Ω → E
ℱ : Filtration ι m0
𝒢 : Filtration ℕ m0
inst✝¹ : Preorder E
inst✝ : SigmaFiniteFiltration μ 𝒢
f : ℕ → Ω → E
hfmgle : Supermartingale f 𝒢 μ
hfadp : Adapted 𝒢 fun n => f (n + 1)
n : ℕ
⊢ f n ≤ᶠ[ae μ] f 0
state_after: case zero
Ω : Type u_1
E : Type u_2
ι : Type u_3
inst✝⁵ : Preorder ι
m0 : MeasurableSpace Ω
μ : Measure Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
f✝ g : ι → Ω → E
ℱ : Filtration ι m0
𝒢 : Filtration ℕ m0
inst✝¹ : Preorder E
inst✝ : SigmaFiniteFiltration μ 𝒢
f : ℕ → Ω → E
hfmgle : Supermartingale f 𝒢 μ
hfadp : Adapted 𝒢 fun n => f (n + 1)
⊢ f 0 ≤ᶠ[ae μ] f 0

case succ
Ω : Type u_1
E : Type u_2
ι : Type u_3
inst✝⁵ : Preorder ι
m0 : MeasurableSpace Ω
μ : Measure Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
f✝ g : ι → Ω → E
ℱ : Filtration ι m0
𝒢 : Filtration ℕ m0
inst✝¹ : Preorder E
inst✝ : SigmaFiniteFiltration μ 𝒢
f : ℕ → Ω → E
hfmgle : Supermartingale f 𝒢 μ
hfadp : Adapted 𝒢 fun n => f (n + 1)
k : ℕ
ih : f k ≤ᶠ[ae μ] f 0
⊢ f (k + 1) ≤ᶠ[ae μ] f 0

tactic: rfl
state_before: case zero
Ω : Type u_1
E : Type u_2
ι : Type u_3
inst✝⁵ : Preorder ι
m0 : MeasurableSpace Ω
μ : Measure Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
f✝ g : ι → Ω → E
ℱ : Filtration ι m0
𝒢 : Filtration ℕ m0
inst✝¹ : Preorder E
inst✝ : SigmaFiniteFiltration μ 𝒢
f : ℕ → Ω → E
hfmgle : Supermartingale f 𝒢 μ
hfadp : Adapted 𝒢 fun n => f (n + 1)
⊢ f 0 ≤ᶠ[ae μ] f 0
state_after: no goals

tactic: exact ((Germ.coe_eq.mp <| congr_arg Germ.ofFun <| condexp_of_stronglyMeasurable (𝒢.le _)
  (hfadp _) <| hfmgle.integrable _).symm.trans_le (hfmgle.2.1 k (k + 1) k.le_succ)).trans ih
state_before: case succ
Ω : Type u_1
E : Type u_2
ι : Type u_3
inst✝⁵ : Preorder ι
m0 : MeasurableSpace Ω
μ : Measure Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
f✝ g : ι → Ω → E
ℱ : Filtration ι m0
𝒢 : Filtration ℕ m0
inst✝¹ : Preorder E
inst✝ : SigmaFiniteFiltration μ 𝒢
f : ℕ → Ω → E
hfmgle : Supermartingale f 𝒢 μ
hfadp : Adapted 𝒢 fun n => f (n + 1)
k : ℕ
ih : f k ≤ᶠ[ae μ] f 0
⊢ f (k + 1) ≤ᶠ[ae μ] f 0
state_after: no goals
Theorem: Finsupp.equivMapDomain_eq_mapDomain
File: Mathlib/Data/Finsupp/Basic.lean

tactic: ext x
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M✝ : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M✝
v v₁ v₂ : α →₀ M✝
M : Type u_13
inst✝ : AddCommMonoid M
f : α ≃ β
l : α →₀ M
⊢ equivMapDomain f l = mapDomain (⇑f) l
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M✝ : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M✝
v v₁ v₂ : α →₀ M✝
M : Type u_13
inst✝ : AddCommMonoid M
f : α ≃ β
l : α →₀ M
x : β
⊢ (equivMapDomain f l) x = (mapDomain (⇑f) l) x

tactic: simp [mapDomain_equiv_apply]
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M✝ : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : AddCommMonoid M✝
v v₁ v₂ : α →₀ M✝
M : Type u_13
inst✝ : AddCommMonoid M
f : α ≃ β
l : α →₀ M
x : β
⊢ (equivMapDomain f l) x = (mapDomain (⇑f) l) x
state_after: no goals
Theorem: isBigO_deriv_rpow_const_atTop
File: Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean

tactic: rcases eq_or_ne p 0 with rfl | hp
state_before: f g : ℝ → ℝ
f' g' x y p✝ : ℝ
s : Set ℝ
p : ℝ
⊢ (deriv fun x => x ^ p) =O[atTop] fun x => x ^ (p - 1)
state_after: case inl
f g : ℝ → ℝ
f' g' x y p : ℝ
s : Set ℝ
⊢ (deriv fun x => x ^ 0) =O[atTop] fun x => x ^ (0 - 1)

case inr
f g : ℝ → ℝ
f' g' x y p✝ : ℝ
s : Set ℝ
p : ℝ
hp : p ≠ 0
⊢ (deriv fun x => x ^ p) =O[atTop] fun x => x ^ (p - 1)

tactic: case inl =>
  simp [zero_sub, Real.rpow_neg_one, Real.rpow_zero, deriv_const', Asymptotics.isBigO_zero]
state_before: case inl
f g : ℝ → ℝ
f' g' x y p : ℝ
s : Set ℝ
⊢ (deriv fun x => x ^ 0) =O[atTop] fun x => x ^ (0 - 1)

case inr
f g : ℝ → ℝ
f' g' x y p✝ : ℝ
s : Set ℝ
p : ℝ
hp : p ≠ 0
⊢ (deriv fun x => x ^ p) =O[atTop] fun x => x ^ (p - 1)
state_after: case inr
f g : ℝ → ℝ
f' g' x y p✝ : ℝ
s : Set ℝ
p : ℝ
hp : p ≠ 0
⊢ (deriv fun x => x ^ p) =O[atTop] fun x => x ^ (p - 1)

tactic: case inr =>
  exact (isTheta_deriv_rpow_const_atTop hp).1
state_before: case inr
f g : ℝ → ℝ
f' g' x y p✝ : ℝ
s : Set ℝ
p : ℝ
hp : p ≠ 0
⊢ (deriv fun x => x ^ p) =O[atTop] fun x => x ^ (p - 1)
state_after: no goals

tactic: simp [zero_sub, Real.rpow_neg_one, Real.rpow_zero, deriv_const', Asymptotics.isBigO_zero]
state_before: f g : ℝ → ℝ
f' g' x y p : ℝ
s : Set ℝ
⊢ (deriv fun x => x ^ 0) =O[atTop] fun x => x ^ (0 - 1)
state_after: no goals

tactic: exact (isTheta_deriv_rpow_const_atTop hp).1
state_before: f g : ℝ → ℝ
f' g' x y p✝ : ℝ
s : Set ℝ
p : ℝ
hp : p ≠ 0
⊢ (deriv fun x => x ^ p) =O[atTop] fun x => x ^ (p - 1)
state_after: no goals
Theorem: CategoryTheory.ShortComplex.leftHomologyMap'_sub
File: Mathlib/Algebra/Homology/ShortComplex/Preadditive.lean

tactic: simp only [sub_eq_add_neg, leftHomologyMap'_add, leftHomologyMap'_neg]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
S₁ S₂ S₃ : ShortComplex C
φ φ' : S₁ ⟶ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ leftHomologyMap' (φ - φ') h₁ h₂ = leftHomologyMap' φ h₁ h₂ - leftHomologyMap' φ' h₁ h₂
state_after: no goals
Theorem: RCLike.ofReal_lt_zero
File: Mathlib/Analysis/RCLike/Basic.lean

tactic: rw [← ofReal_zero, ofReal_lt_ofReal]
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z w : K
x : ℝ
⊢ ↑x < 0 ↔ x < 0
state_after: no goals
Theorem: SimplicialObject.Splitting.πSummand_comp_cofan_inj_id_comp_PInfty_eq_PInfty
File: Mathlib/AlgebraicTopology/DoldKan/SplitSimplicialObject.lean

tactic: conv_rhs => rw [← id_comp (PInfty.f n)]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ s.πSummand (IndexSet.id { unop := [n] }) ≫ (s.cofan { unop := [n] }).inj (IndexSet.id { unop := [n] }) ≫ PInfty.f n =
    PInfty.f n
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ s.πSummand (IndexSet.id { unop := [n] }) ≫ (s.cofan { unop := [n] }).inj (IndexSet.id { unop := [n] }) ≫ PInfty.f n =
    𝟙 (K[X].X n) ≫ PInfty.f n

tactic: erw [s.decomposition_id, Preadditive.sum_comp]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ s.πSummand (IndexSet.id { unop := [n] }) ≫ (s.cofan { unop := [n] }).inj (IndexSet.id { unop := [n] }) ≫ PInfty.f n =
    𝟙 (K[X].X n) ≫ PInfty.f n
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ s.πSummand (IndexSet.id { unop := [n] }) ≫ (s.cofan { unop := [n] }).inj (IndexSet.id { unop := [n] }) ≫ PInfty.f n =
    ∑ j : IndexSet { unop := [n] }, (s.πSummand j ≫ (s.cofan { unop := [n] }).inj j) ≫ PInfty.f n

tactic: rw [Fintype.sum_eq_single (IndexSet.id (op [n])), assoc]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ s.πSummand (IndexSet.id { unop := [n] }) ≫ (s.cofan { unop := [n] }).inj (IndexSet.id { unop := [n] }) ≫ PInfty.f n =
    ∑ j : IndexSet { unop := [n] }, (s.πSummand j ≫ (s.cofan { unop := [n] }).inj j) ≫ PInfty.f n
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ ∀ (x : IndexSet { unop := [n] }),
    x ≠ IndexSet.id { unop := [n] } → (s.πSummand x ≫ (s.cofan { unop := [n] }).inj x) ≫ PInfty.f n = 0

tactic: rintro A (hA : ¬A.EqId)
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ ∀ (x : IndexSet { unop := [n] }),
    x ≠ IndexSet.id { unop := [n] } → (s.πSummand x ≫ (s.cofan { unop := [n] }).inj x) ≫ PInfty.f n = 0
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
A : IndexSet { unop := [n] }
hA : ¬A.EqId
⊢ (s.πSummand A ≫ (s.cofan { unop := [n] }).inj A) ≫ PInfty.f n = 0

tactic: rw [assoc, s.cofan_inj_comp_PInfty_eq_zero A hA, comp_zero]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
A : IndexSet { unop := [n] }
hA : ¬A.EqId
⊢ (s.πSummand A ≫ (s.cofan { unop := [n] }).inj A) ≫ PInfty.f n = 0
state_after: no goals
Theorem: Sum.exists_sum
File: Mathlib/Data/Sum/Basic.lean

tactic: rw [← not_forall_not, forall_sum]
state_before: α : Type u
α' : Type w
β : Type v
β' : Type x
γ✝ : Type u_1
δ : Type u_2
γ : α ⊕ β → Sort u_3
p : ((ab : α ⊕ β) → γ ab) → Prop
⊢ (∃ fab, p fab) ↔ ∃ fa fb, p fun t => rec fa fb t
state_after: α : Type u
α' : Type w
β : Type v
β' : Type x
γ✝ : Type u_1
δ : Type u_2
γ : α ⊕ β → Sort u_3
p : ((ab : α ⊕ β) → γ ab) → Prop
⊢ (¬∀ (fa : (val : α) → γ (inl val)) (fb : (val : β) → γ (inr val)), ¬p fun t => rec fa fb t) ↔
    ∃ fa fb, p fun t => rec fa fb t

tactic: simp
state_before: α : Type u
α' : Type w
β : Type v
β' : Type x
γ✝ : Type u_1
δ : Type u_2
γ : α ⊕ β → Sort u_3
p : ((ab : α ⊕ β) → γ ab) → Prop
⊢ (¬∀ (fa : (val : α) → γ (inl val)) (fb : (val : β) → γ (inr val)), ¬p fun t => rec fa fb t) ↔
    ∃ fa fb, p fun t => rec fa fb t
state_after: no goals
Theorem: cross_self
File: Mathlib/LinearAlgebra/CrossProduct.lean

tactic: simp [cross_apply, mul_comm]
state_before: R : Type u_1
inst✝ : CommRing R
v : Fin 3 → R
⊢ (crossProduct v) v = 0
state_after: no goals
Theorem: AddLECancellable.tsub_inj_right
File: Mathlib/Algebra/Order/Sub/Canonical.lean

tactic: rw [← hab.inj]
state_before: α : Type u_1
inst✝⁵ : AddCommSemigroup α
inst✝⁴ : PartialOrder α
inst✝³ : ExistsAddOfLE α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hab : AddLECancellable (a - b)
h₁ : b ≤ a
h₂ : c ≤ a
h₃ : a - b = a - c
⊢ b = c
state_after: α : Type u_1
inst✝⁵ : AddCommSemigroup α
inst✝⁴ : PartialOrder α
inst✝³ : ExistsAddOfLE α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hab : AddLECancellable (a - b)
h₁ : b ≤ a
h₂ : c ≤ a
h₃ : a - b = a - c
⊢ a - b + b = a - b + c

tactic: rw [tsub_add_cancel_of_le h₁, h₃, tsub_add_cancel_of_le h₂]
state_before: α : Type u_1
inst✝⁵ : AddCommSemigroup α
inst✝⁴ : PartialOrder α
inst✝³ : ExistsAddOfLE α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hab : AddLECancellable (a - b)
h₁ : b ≤ a
h₂ : c ≤ a
h₃ : a - b = a - c
⊢ a - b + b = a - b + c
state_after: no goals
Theorem: lcm_eq_right_iff
File: Mathlib/Algebra/GCDMonoid/Basic.lean

tactic: simpa only [lcm_comm b a] using lcm_eq_left_iff b a h
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : NormalizedGCDMonoid α
a b : α
h : normalize b = b
⊢ lcm a b = b ↔ a ∣ b
state_after: no goals
Theorem: Set.image2_union_right
File: Mathlib/Data/Set/NAry.lean

tactic: rw [← image2_swap, image2_union_left, image2_swap f, image2_swap f]
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
⊢ image2 f s (t ∪ t') = image2 f s t ∪ image2 f s t'
state_after: no goals
Theorem: ZFSet.map_unique
File: Mathlib/SetTheory/ZFC/Basic.lean

tactic: let ⟨w, _, we⟩ := mem_image.1 yx
state_before: f : ZFSet → ZFSet
H : Definable 1 f
x z : ZFSet
zx : z ∈ x
y : ZFSet
yx : (fun w => z.pair w ∈ map f x) y
⊢ y = f z
state_after: f : ZFSet → ZFSet
H : Definable 1 f
x z : ZFSet
zx : z ∈ x
y : ZFSet
yx : (fun w => z.pair w ∈ map f x) y
w : ZFSet
left✝ : w ∈ x
we : w.pair (f w) = z.pair y
⊢ y = f z

tactic: let ⟨wz, fy⟩ := pair_injective we
state_before: f : ZFSet → ZFSet
H : Definable 1 f
x z : ZFSet
zx : z ∈ x
y : ZFSet
yx : (fun w => z.pair w ∈ map f x) y
w : ZFSet
left✝ : w ∈ x
we : w.pair (f w) = z.pair y
⊢ y = f z
state_after: f : ZFSet → ZFSet
H : Definable 1 f
x z : ZFSet
zx : z ∈ x
y : ZFSet
yx : (fun w => z.pair w ∈ map f x) y
w : ZFSet
left✝ : w ∈ x
we : w.pair (f w) = z.pair y
wz : w = z
fy : f w = y
⊢ y = f z

tactic: rw [← fy, wz]
state_before: f : ZFSet → ZFSet
H : Definable 1 f
x z : ZFSet
zx : z ∈ x
y : ZFSet
yx : (fun w => z.pair w ∈ map f x) y
w : ZFSet
left✝ : w ∈ x
we : w.pair (f w) = z.pair y
wz : w = z
fy : f w = y
⊢ y = f z
state_after: no goals
Theorem: Rat.toNNRat_div
File: Mathlib/Data/NNRat/Lemmas.lean

tactic: rw [div_eq_mul_inv, div_eq_mul_inv, ← toNNRat_inv, ← toNNRat_mul hp]
state_before: p q : ℚ
hp : 0 ≤ p
⊢ (p / q).toNNRat = p.toNNRat / q.toNNRat
state_after: no goals
Theorem: Finset.card_fin
File: Mathlib/Data/Fintype/Card.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
⊢ univ.card = n
state_after: no goals
Theorem: CategoryTheory.shiftFunctorAdd_hom_app_obj_of_induced
File: Mathlib/CategoryTheory/Shift/Induced.lean

tactic: letI := HasShift.induced F A s i
state_before: C : Type u_4
D : Type u_2
inst✝⁵ : Category.{u_5, u_4} C
inst✝⁴ : Category.{u_1, u_2} D
F : C ⥤ D
A : Type u_3
inst✝³ : AddMonoid A
inst✝² : HasShift C A
s : A → D ⥤ D
i : (a : A) → F ⋙ s a ≅ shiftFunctor C a ⋙ F
inst✝¹ : ((whiskeringLeft C D D).obj F).Full
inst✝ : ((whiskeringLeft C D D).obj F).Faithful
a b : A
X : C
⊢ (shiftFunctorAdd D a b).hom.app (F.obj X) =
    (i (a + b)).hom.app X ≫
      F.map ((shiftFunctorAdd C a b).hom.app X) ≫ (i b).inv.app ((shiftFunctor C a).obj X) ≫ (s b).map ((i a).inv.app X)
state_after: C : Type u_4
D : Type u_2
inst✝⁵ : Category.{u_5, u_4} C
inst✝⁴ : Category.{u_1, u_2} D
F : C ⥤ D
A : Type u_3
inst✝³ : AddMonoid A
inst✝² : HasShift C A
s : A → D ⥤ D
i : (a : A) → F ⋙ s a ≅ shiftFunctor C a ⋙ F
inst✝¹ : ((whiskeringLeft C D D).obj F).Full
inst✝ : ((whiskeringLeft C D D).obj F).Faithful
a b : A
X : C
this : HasShift D A := HasShift.induced F A s i
⊢ (shiftFunctorAdd D a b).hom.app (F.obj X) =
    (i (a + b)).hom.app X ≫
      F.map ((shiftFunctorAdd C a b).hom.app X) ≫ (i b).inv.app ((shiftFunctor C a).obj X) ≫ (s b).map ((i a).inv.app X)

tactic: simp only [ShiftMkCore.shiftFunctorAdd_eq, HasShift.Induced.add_hom_app_obj]
state_before: C : Type u_4
D : Type u_2
inst✝⁵ : Category.{u_5, u_4} C
inst✝⁴ : Category.{u_1, u_2} D
F : C ⥤ D
A : Type u_3
inst✝³ : AddMonoid A
inst✝² : HasShift C A
s : A → D ⥤ D
i : (a : A) → F ⋙ s a ≅ shiftFunctor C a ⋙ F
inst✝¹ : ((whiskeringLeft C D D).obj F).Full
inst✝ : ((whiskeringLeft C D D).obj F).Faithful
a b : A
X : C
this : HasShift D A := HasShift.induced F A s i
⊢ (shiftFunctorAdd D a b).hom.app (F.obj X) =
    (i (a + b)).hom.app X ≫
      F.map ((shiftFunctorAdd C a b).hom.app X) ≫ (i b).inv.app ((shiftFunctor C a).obj X) ≫ (s b).map ((i a).inv.app X)
state_after: no goals
Theorem: ExistsUnique.unique₂
File: Mathlib/Logic/Basic.lean

tactic: simp only [exists_unique_iff_exists] at h
state_before: α✝ : Sort u_1
β : Sort u_2
p✝ q✝ : α✝ → Prop
α : Sort u_3
p : α → Sort u_4
inst✝ : ∀ (x : α), Subsingleton (p x)
q : (x : α) → p x → Prop
h : ∃! x, ∃! hx, q x hx
y₁ y₂ : α
hpy₁ : p y₁
hqy₁ : q y₁ hpy₁
hpy₂ : p y₂
hqy₂ : q y₂ hpy₂
⊢ y₁ = y₂
state_after: α✝ : Sort u_1
β : Sort u_2
p✝ q✝ : α✝ → Prop
α : Sort u_3
p : α → Sort u_4
inst✝ : ∀ (x : α), Subsingleton (p x)
q : (x : α) → p x → Prop
y₁ y₂ : α
hpy₁ : p y₁
hqy₁ : q y₁ hpy₁
hpy₂ : p y₂
hqy₂ : q y₂ hpy₂
h : ∃! x, ∃ hx, q x hx
⊢ y₁ = y₂

tactic: exact h.unique ⟨hpy₁, hqy₁⟩ ⟨hpy₂, hqy₂⟩
state_before: α✝ : Sort u_1
β : Sort u_2
p✝ q✝ : α✝ → Prop
α : Sort u_3
p : α → Sort u_4
inst✝ : ∀ (x : α), Subsingleton (p x)
q : (x : α) → p x → Prop
y₁ y₂ : α
hpy₁ : p y₁
hqy₁ : q y₁ hpy₁
hpy₂ : p y₂
hqy₂ : q y₂ hpy₂
h : ∃! x, ∃ hx, q x hx
⊢ y₁ = y₂
state_after: no goals
Theorem: lt_mul_iff_one_lt_right
File: Mathlib/Algebra/Order/GroupWithZero/Unbundled.lean

tactic: rw [mul_one]
state_before: α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : PosMulStrictMono α
inst✝ : PosMulReflectLT α
a0 : 0 < a
⊢ a < a * b ↔ a * 1 < a * b
state_after: no goals
Theorem: CircleDeg1Lift.le_translationNumber_of_add_int_le
File: Mathlib/Dynamics/Circle/RotationNumber/TranslationNumber.lean

tactic: simp only [coe_pow, mul_comm (m : ℝ), ← Nat.cast_add_one, f.le_iterate_of_add_int_le_map h]
state_before: f g : CircleDeg1Lift
x : ℝ
m : ℤ
h : x + ↑m ≤ f x
n : ℕ
⊢ x + ↑m * (↑n + 1) ≤ (f ^ (n + 1)) x
state_after: no goals
Theorem: Submodule.span_pow
File: Mathlib/Algebra/Algebra/Operations.lean

tactic: rw [pow_zero, pow_zero, one_eq_span_one_set]
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n : A
s : Set A
⊢ span R s ^ 0 = span R (s ^ 0)
state_after: no goals

tactic: rw [pow_succ, pow_succ, span_pow s n, span_mul_span]
state_before: ι : Sort uι
R : Type u
inst✝² : CommSemiring R
A : Type v
inst✝¹ : Semiring A
inst✝ : Algebra R A
S T : Set A
M N P Q : Submodule R A
m n✝ : A
s : Set A
n : ℕ
⊢ span R s ^ (n + 1) = span R (s ^ (n + 1))
state_after: no goals
Theorem: Irrational.of_sub_int
File: Mathlib/Data/Real/Irrational.lean

tactic: rwa [Rat.cast_intCast]
state_before: q : ℚ
x y : ℝ
m : ℤ
h : Irrational (x - ↑m)
⊢ Irrational (x - ↑↑m)
state_after: no goals
Theorem: Function.Semiconj₂.isIdempotent_right
File: Mathlib/Logic/Function/Conjugate.lean

tactic: simp only [← h.eq, Std.IdempotentOp.idempotent (op := ga)]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → β
ga : α → α → α
gb : β → β → β
inst✝ : Std.IdempotentOp ga
h : Semiconj₂ f ga gb
h_surj : Surjective f
x : α
⊢ gb (f x) (f x) = f x
state_after: no goals