1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: WeierstrassCurve.Jacobian.addZ_smul
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

tactic: simp only [addZ, smul_fin3_ext]
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
u v : R
⊢ addZ (u • P) (v • Q) = (u * v) ^ 2 * addZ P Q
state_after: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
u v : R
⊢ u ^ 2 * P x * (v * Q z) ^ 2 - v ^ 2 * Q x * (u * P z) ^ 2 = (u * v) ^ 2 * (P x * Q z ^ 2 - Q x * P z ^ 2)

tactic: ring1
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → R
u v : R
⊢ u ^ 2 * P x * (v * Q z) ^ 2 - v ^ 2 * Q x * (u * P z) ^ 2 = (u * v) ^ 2 * (P x * Q z ^ 2 - Q x * P z ^ 2)
state_after: no goals
Theorem: Finset.fold_op_distrib
File: Mathlib/Data/Finset/Fold.lean

tactic: simp only [fold, fold_distrib]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f✝ : α → β
b : β
s : Finset α
a : α
f g : α → β
b₁ b₂ : β
⊢ fold op (op b₁ b₂) (fun x => op (f x) (g x)) s = op (fold op b₁ f s) (fold op b₂ g s)
state_after: no goals
Theorem: CategoryTheory.Presheaf.isSheaf_iff_isLimit_pretopology
File: Mathlib/CategoryTheory/Sites/Sheaf.lean

tactic: dsimp [IsSheaf]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : Type u₂
inst✝¹ : Category.{v₂, u₂} A
J : GrothendieckTopology C
P : Cᵒᵖ ⥤ A
X : C
S : Sieve X
R : Presieve X
E : Aᵒᵖ
x : FamilyOfElements (P ⋙ coyoneda.obj E) S.arrows
hx : x.SieveCompatible
inst✝ : HasPullbacks C
K : Pretopology C
⊢ IsSheaf (Pretopology.toGrothendieck C K) P ↔
    ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, Nonempty (IsLimit (P.mapCone (generate R).arrows.cocone.op))
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : Type u₂
inst✝¹ : Category.{v₂, u₂} A
J : GrothendieckTopology C
P : Cᵒᵖ ⥤ A
X : C
S : Sieve X
R : Presieve X
E : Aᵒᵖ
x : FamilyOfElements (P ⋙ coyoneda.obj E) S.arrows
hx : x.SieveCompatible
inst✝ : HasPullbacks C
K : Pretopology C
⊢ (∀ (E : A), Presieve.IsSheaf (Pretopology.toGrothendieck C K) (P ⋙ coyoneda.obj { unop := E })) ↔
    ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, Nonempty (IsLimit (P.mapCone (generate R).arrows.cocone.op))

tactic: simp_rw [isSheaf_pretopology]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : Type u₂
inst✝¹ : Category.{v₂, u₂} A
J : GrothendieckTopology C
P : Cᵒᵖ ⥤ A
X : C
S : Sieve X
R : Presieve X
E : Aᵒᵖ
x : FamilyOfElements (P ⋙ coyoneda.obj E) S.arrows
hx : x.SieveCompatible
inst✝ : HasPullbacks C
K : Pretopology C
⊢ (∀ (E : A), Presieve.IsSheaf (Pretopology.toGrothendieck C K) (P ⋙ coyoneda.obj { unop := E })) ↔
    ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, Nonempty (IsLimit (P.mapCone (generate R).arrows.cocone.op))
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : Type u₂
inst✝¹ : Category.{v₂, u₂} A
J : GrothendieckTopology C
P : Cᵒᵖ ⥤ A
X : C
S : Sieve X
R : Presieve X
E : Aᵒᵖ
x : FamilyOfElements (P ⋙ coyoneda.obj E) S.arrows
hx : x.SieveCompatible
inst✝ : HasPullbacks C
K : Pretopology C
⊢ (∀ (E : A) {X : C}, ∀ R ∈ K.coverings X, IsSheafFor (P ⋙ coyoneda.obj { unop := E }) R) ↔
    ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, Nonempty (IsLimit (P.mapCone (generate R).arrows.cocone.op))

tactic: exact
  ⟨fun h X R hR => (isLimit_iff_isSheafFor_presieve P R).2 fun E => h E.unop R hR,
    fun h E X R hR => (isLimit_iff_isSheafFor_presieve P R).1 (h R hR) (op E)⟩
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
A : Type u₂
inst✝¹ : Category.{v₂, u₂} A
J : GrothendieckTopology C
P : Cᵒᵖ ⥤ A
X : C
S : Sieve X
R : Presieve X
E : Aᵒᵖ
x : FamilyOfElements (P ⋙ coyoneda.obj E) S.arrows
hx : x.SieveCompatible
inst✝ : HasPullbacks C
K : Pretopology C
⊢ (∀ (E : A) {X : C}, ∀ R ∈ K.coverings X, IsSheafFor (P ⋙ coyoneda.obj { unop := E }) R) ↔
    ∀ ⦃X : C⦄, ∀ R ∈ K.coverings X, Nonempty (IsLimit (P.mapCone (generate R).arrows.cocone.op))
state_after: no goals
Theorem: Nat.digits_of_two_le_of_pos
File: Mathlib/Data/Nat/Digits.lean

tactic: rw [Nat.eq_add_of_sub_eq hb rfl, Nat.eq_add_of_sub_eq hn rfl, Nat.digits_add_two_add_one]
state_before: n b : ℕ
hb : 2 ≤ b
hn : 0 < n
⊢ b.digits n = n % b :: b.digits (n / b)
state_after: no goals
Theorem: CauSeq.exists_gt
File: Mathlib/Algebra/Order/CauSeq/Basic.lean

tactic: rw [sub_apply, const_apply, le_sub_iff_add_le', add_le_add_iff_right]
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrderedField α
f : CauSeq α abs
K : α
H : ∀ (i : ℕ), |↑f i| < K
i : ℕ
x✝ : i ≥ 0
⊢ 1 ≤ ↑(const (K + 1) - f) i
state_after: α : Type u_1
β : Type u_2
inst✝ : LinearOrderedField α
f : CauSeq α abs
K : α
H : ∀ (i : ℕ), |↑f i| < K
i : ℕ
x✝ : i ≥ 0
⊢ ↑f i ≤ K

tactic: exact le_of_lt (abs_lt.1 (H _)).2
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrderedField α
f : CauSeq α abs
K : α
H : ∀ (i : ℕ), |↑f i| < K
i : ℕ
x✝ : i ≥ 0
⊢ ↑f i ≤ K
state_after: no goals
Theorem: Vector.zipWith_tail
File: Mathlib/Data/Vector/Zip.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
f : α → β → γ
x : Vector α n
y : Vector β n
⊢ (zipWith f x y).tail = zipWith f x.tail y.tail
state_after: case x
α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
f : α → β → γ
x : Vector α n
y : Vector β n
m✝ : Fin (n - 1)
⊢ (zipWith f x y).tail.get m✝ = (zipWith f x.tail y.tail).get m✝

tactic: simp [get_tail]
state_before: case x
α : Type u_1
β : Type u_2
γ : Type u_3
n : ℕ
f : α → β → γ
x : Vector α n
y : Vector β n
m✝ : Fin (n - 1)
⊢ (zipWith f x y).tail.get m✝ = (zipWith f x.tail y.tail).get m✝
state_after: no goals
Theorem: Relation.cutExpand_add_right
File: Mathlib/Logic/Hydra.lean

tactic: convert cutExpand_add_left t using 2 <;> apply add_comm
state_before: α : Type u_1
r : α → α → Prop
s' s t : Multiset α
⊢ CutExpand r (s' + t) (s + t) ↔ CutExpand r s' s
state_after: no goals
Theorem: LinearMap.nilRank_eq_polyCharpoly_natTrailingDegree
File: Mathlib/Algebra/Module/LinearMap/Polynomial.lean

tactic: apply nilRankAux_basis_indep
state_before: R : Type u_1
L : Type u_2
M : Type u_3
n : Type u_4
ι : Type u_5
ι' : Type u_6
ιM : Type u_7
inst✝¹⁴ : CommRing R
inst✝¹³ : AddCommGroup L
inst✝¹² : Module R L
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
φ : L →ₗ[R] Module.End R M
inst✝⁹ : Fintype ι
inst✝⁸ : Fintype ι'
inst✝⁷ : Fintype ιM
inst✝⁶ : DecidableEq ι
inst✝⁵ : DecidableEq ι'
inst✝⁴ : Module.Free R M
inst✝³ : Module.Finite R M
b✝ : Basis ι R L
inst✝² : Module.Finite R L
inst✝¹ : Module.Free R L
inst✝ : Nontrivial R
b : Basis ι R L
⊢ φ.nilRank = (φ.polyCharpoly b).natTrailingDegree
state_after: no goals
Theorem: Int.eq_zero_of_dvd_of_natAbs_lt_natAbs
File: Mathlib/Data/Int/Defs.lean

tactic: rw [← natAbs_dvd, ← dvd_natAbs, natCast_dvd_natCast] at hmn
state_before: a b c d m n : ℤ
hmn : m ∣ n
hnm : n.natAbs < m.natAbs
⊢ n = 0
state_after: a b c d m n : ℤ
hmn : m.natAbs ∣ n.natAbs
hnm : n.natAbs < m.natAbs
⊢ n = 0

tactic: rw [← natAbs_eq_zero]
state_before: a b c d m n : ℤ
hmn : m.natAbs ∣ n.natAbs
hnm : n.natAbs < m.natAbs
⊢ n = 0
state_after: a b c d m n : ℤ
hmn : m.natAbs ∣ n.natAbs
hnm : n.natAbs < m.natAbs
⊢ n.natAbs = 0

tactic: exact Nat.eq_zero_of_dvd_of_lt hmn hnm
state_before: a b c d m n : ℤ
hmn : m.natAbs ∣ n.natAbs
hnm : n.natAbs < m.natAbs
⊢ n.natAbs = 0
state_after: no goals
Theorem: HasOuterApproxClosed.indicator_le_apprSeq
File: Mathlib/MeasureTheory/Measure/HasOuterApproxClosed.lean

tactic: intro x
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
⊢ (F.indicator fun x => 1) ≤ ⇑(hF.apprSeq n)
state_after: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
x : X
⊢ F.indicator (fun x => 1) x ≤ (hF.apprSeq n) x

tactic: by_cases hxF : x ∈ F
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
x : X
⊢ F.indicator (fun x => 1) x ≤ (hF.apprSeq n) x
state_after: case pos
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
x : X
hxF : x ∈ F
⊢ F.indicator (fun x => 1) x ≤ (hF.apprSeq n) x

case neg
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
x : X
hxF : x ∉ F
⊢ F.indicator (fun x => 1) x ≤ (hF.apprSeq n) x

tactic: simp only [hxF, indicator_of_mem, apprSeq_apply_eq_one hF n, le_refl]
state_before: case pos
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
x : X
hxF : x ∈ F
⊢ F.indicator (fun x => 1) x ≤ (hF.apprSeq n) x
state_after: no goals

tactic: simp only [hxF, not_false_eq_true, indicator_of_not_mem, zero_le]
state_before: case neg
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : HasOuterApproxClosed X
F : Set X
hF : IsClosed F
n : ℕ
x : X
hxF : x ∉ F
⊢ F.indicator (fun x => 1) x ≤ (hF.apprSeq n) x
state_after: no goals
Theorem: zero_geom_sum
File: Mathlib/Algebra/GeomSum.lean

tactic: simp
state_before: α : Type u
inst✝ : Semiring α
⊢ ∑ i ∈ range 0, 0 ^ i = if 0 = 0 then 0 else 1
state_after: no goals

tactic: simp
state_before: α : Type u
inst✝ : Semiring α
⊢ ∑ i ∈ range 1, 0 ^ i = if 1 = 0 then 0 else 1
state_after: no goals

tactic: rw [geom_sum_succ']
state_before: α : Type u
inst✝ : Semiring α
n : ℕ
⊢ ∑ i ∈ range (n + 2), 0 ^ i = if n + 2 = 0 then 0 else 1
state_after: α : Type u
inst✝ : Semiring α
n : ℕ
⊢ 0 ^ (n + 1) + ∑ i ∈ range (n + 1), 0 ^ i = if n + 2 = 0 then 0 else 1

tactic: simp [zero_geom_sum]
state_before: α : Type u
inst✝ : Semiring α
n : ℕ
⊢ 0 ^ (n + 1) + ∑ i ∈ range (n + 1), 0 ^ i = if n + 2 = 0 then 0 else 1
state_after: no goals
Theorem: ContinuousMultilinearMap.le_mul_prod_of_le_opNorm_of_le
File: Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean

tactic: positivity
state_before: 𝕜 : Type u
ι : Type v
ι' : Type v'
E : ι → Type wE
E₁ : ι → Type wE₁
E' : ι' → Type wE'
G : Type wG
G' : Type wG'
inst✝¹² : Fintype ι
inst✝¹¹ : Fintype ι'
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁸ : (i : ι) → NormedSpace 𝕜 (E i)
inst✝⁷ : (i : ι) → SeminormedAddCommGroup (E₁ i)
inst✝⁶ : (i : ι) → NormedSpace 𝕜 (E₁ i)
inst✝⁵ : (i : ι') → SeminormedAddCommGroup (E' i)
inst✝⁴ : (i : ι') → NormedSpace 𝕜 (E' i)
inst✝³ : SeminormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : SeminormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
c : 𝕜
f g : ContinuousMultilinearMap 𝕜 E G
m : (i : ι) → E i
C : ℝ
b : ι → ℝ
hC : ‖f‖ ≤ C
hm : ∀ (i : ι), ‖m i‖ ≤ b i
⊢ 0 ≤ ∏ i : ι, ‖m i‖
state_after: no goals
Theorem: CliffordAlgebra.contractRight_contractRight
File: Mathlib/LinearAlgebra/CliffordAlgebra/Contraction.lean

tactic: rw [contractRight_eq, contractRight_eq, reverse_reverse, contractLeft_contractLeft, map_zero]
state_before: R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
d d' : Module.Dual R M
x : CliffordAlgebra Q
⊢ (contractRight ((contractRight x) d)) d = 0
state_after: no goals
Theorem: Filter.comap_sSup
File: Mathlib/Order/Filter/Basic.lean

tactic: simp only [sSup_eq_iSup, comap_iSup, eq_self_iff_true]
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
m✝ : α → β
m' : β → γ
s✝ : Set α
t : Set β
s : Set (Filter β)
m : α → β
⊢ comap m (sSup s) = ⨆ f ∈ s, comap m f
state_after: no goals
Theorem: Set.Finite.toFinset_subset_toFinset
File: Mathlib/Data/Set/Finite.lean

tactic: simp only [← Finset.coe_subset, Finite.coe_toFinset]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
a : α
hs : s.Finite
ht : t.Finite
⊢ hs.toFinset ⊆ ht.toFinset ↔ s ⊆ t
state_after: no goals
Theorem: Ideal.prod_eq_bot
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: simp
state_before: R✝ : Type u
ι : Type u_1
inst✝² : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝¹ : CommRing R
inst✝ : IsDomain R
s : Multiset (Ideal R)
⊢ s.prod = ⊥ ↔ ∃ I ∈ s, I = ⊥
state_after: no goals
Theorem: Complex.exp_int_mul
File: Mathlib/Data/Complex/Exponential.lean

tactic: cases n
state_before: x y z : ℂ
n : ℤ
⊢ cexp (↑n * z) = cexp z ^ n
state_after: case ofNat
x y z : ℂ
a✝ : ℕ
⊢ cexp (↑(Int.ofNat a✝) * z) = cexp z ^ Int.ofNat a✝

case negSucc
x y z : ℂ
a✝ : ℕ
⊢ cexp (↑(Int.negSucc a✝) * z) = cexp z ^ Int.negSucc a✝

tactic: simp [exp_nat_mul]
state_before: case ofNat
x y z : ℂ
a✝ : ℕ
⊢ cexp (↑(Int.ofNat a✝) * z) = cexp z ^ Int.ofNat a✝
state_after: no goals

tactic: simp [exp_add, add_mul, pow_add, exp_neg, exp_nat_mul]
state_before: case negSucc
x y z : ℂ
a✝ : ℕ
⊢ cexp (↑(Int.negSucc a✝) * z) = cexp z ^ Int.negSucc a✝
state_after: no goals
Theorem: CategoryTheory.Limits.Types.pushoutCocone_inl_eq_inr_imp_of_iso
File: Mathlib/CategoryTheory/Limits/Shapes/Types.lean

tactic: convert congr_arg e.hom.hom h
state_before: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c c' : PushoutCocone f g
e : c ≅ c'
x₁ : X₁
x₂ : X₂
h : c.inl x₁ = c.inr x₂
⊢ c'.inl x₁ = c'.inr x₂
state_after: case h.e'_2
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c c' : PushoutCocone f g
e : c ≅ c'
x₁ : X₁
x₂ : X₂
h : c.inl x₁ = c.inr x₂
⊢ c'.inl x₁ = e.hom.hom (c.inl x₁)

case h.e'_3
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c c' : PushoutCocone f g
e : c ≅ c'
x₁ : X₁
x₂ : X₂
h : c.inl x₁ = c.inr x₂
⊢ c'.inr x₂ = e.hom.hom (c.inr x₂)

tactic: exact congr_fun (e.hom.w WalkingSpan.left).symm x₁
state_before: case h.e'_2
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c c' : PushoutCocone f g
e : c ≅ c'
x₁ : X₁
x₂ : X₂
h : c.inl x₁ = c.inr x₂
⊢ c'.inl x₁ = e.hom.hom (c.inl x₁)
state_after: no goals

tactic: exact congr_fun (e.hom.w WalkingSpan.right).symm x₂
state_before: case h.e'_3
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
c c' : PushoutCocone f g
e : c ≅ c'
x₁ : X₁
x₂ : X₂
h : c.inl x₁ = c.inr x₂
⊢ c'.inr x₂ = e.hom.hom (c.inr x₂)
state_after: no goals
Theorem: CategoryTheory.OverPresheafAux.map_mkPrecomp_eqToHom
File: Mathlib/CategoryTheory/Comma/Presheaf.lean

tactic: rw [h]
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X Y : C
f : X ⟶ Y
g g' : yoneda.obj Y ⟶ A
h : g = g'
x : F.obj { unop := CostructuredArrow.mk g' }
⊢ { unop := CostructuredArrow.mk g' } = { unop := CostructuredArrow.mk g }
state_after: no goals

tactic: rw [h]
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X Y : C
f : X ⟶ Y
g g' : yoneda.obj Y ⟶ A
h : g = g'
x : F.obj { unop := CostructuredArrow.mk g' }
⊢ { unop := CostructuredArrow.mk (yoneda.map f ≫ g') } = { unop := CostructuredArrow.mk (yoneda.map f ≫ g) }
state_after: no goals

tactic: aesop_cat
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X Y : C
f : X ⟶ Y
g g' : yoneda.obj Y ⟶ A
h : g = g'
x : F.obj { unop := CostructuredArrow.mk g' }
⊢ F.map (CostructuredArrow.mkPrecomp g f).op (F.map (eqToHom ⋯) x) =
    F.map (eqToHom ⋯) (F.map (CostructuredArrow.mkPrecomp g' f).op x)
state_after: no goals
Theorem: Finsupp.support_inf
File: Mathlib/Data/Finsupp/Order.lean

tactic: ext
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CanonicallyLinearOrderedAddCommMonoid α
inst✝ : DecidableEq ι
f g : ι →₀ α
⊢ (f ⊓ g).support = f.support ∩ g.support
state_after: case a
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CanonicallyLinearOrderedAddCommMonoid α
inst✝ : DecidableEq ι
f g : ι →₀ α
a✝ : ι
⊢ a✝ ∈ (f ⊓ g).support ↔ a✝ ∈ f.support ∩ g.support

tactic: simp only [inf_apply, mem_support_iff, Ne, Finset.mem_union, Finset.mem_filter,
  Finset.mem_inter]
state_before: case a
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CanonicallyLinearOrderedAddCommMonoid α
inst✝ : DecidableEq ι
f g : ι →₀ α
a✝ : ι
⊢ a✝ ∈ (f ⊓ g).support ↔ a✝ ∈ f.support ∩ g.support
state_after: case a
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CanonicallyLinearOrderedAddCommMonoid α
inst✝ : DecidableEq ι
f g : ι →₀ α
a✝ : ι
⊢ ¬f a✝ ⊓ g a✝ = 0 ↔ ¬f a✝ = 0 ∧ ¬g a✝ = 0

tactic: simp only [inf_eq_min, ← nonpos_iff_eq_zero, min_le_iff, not_or]
state_before: case a
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CanonicallyLinearOrderedAddCommMonoid α
inst✝ : DecidableEq ι
f g : ι →₀ α
a✝ : ι
⊢ ¬f a✝ ⊓ g a✝ = 0 ↔ ¬f a✝ = 0 ∧ ¬g a✝ = 0
state_after: no goals
Theorem: SimpleGraph.fromEdgeSet_sdiff
File: Mathlib/Combinatorics/SimpleGraph/Basic.lean

tactic: ext v w
state_before: ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v w : V
e : Sym2 V
s✝ s t : Set (Sym2 V)
⊢ fromEdgeSet (s \ t) = fromEdgeSet s \ fromEdgeSet t
state_after: case Adj.h.h.a
ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v✝ w✝ : V
e : Sym2 V
s✝ s t : Set (Sym2 V)
v w : V
⊢ (fromEdgeSet (s \ t)).Adj v w ↔ (fromEdgeSet s \ fromEdgeSet t).Adj v w

tactic: constructor <;> simp (config := { contextual := true })
state_before: case Adj.h.h.a
ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v✝ w✝ : V
e : Sym2 V
s✝ s t : Set (Sym2 V)
v w : V
⊢ (fromEdgeSet (s \ t)).Adj v w ↔ (fromEdgeSet s \ fromEdgeSet t).Adj v w
state_after: no goals
Theorem: Set.mulIndicator_apply_le'
File: Mathlib/Algebra/Order/Group/Indicator.lean

tactic: by_cases ha : a ∈ s
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝¹ : LE M
inst✝ : One M
s t : Set α
f g : α → M
a : α
y : M
hfg : a ∈ s → f a ≤ y
hg : a ∉ s → 1 ≤ y
⊢ s.mulIndicator f a ≤ y
state_after: case pos
ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝¹ : LE M
inst✝ : One M
s t : Set α
f g : α → M
a : α
y : M
hfg : a ∈ s → f a ≤ y
hg : a ∉ s → 1 ≤ y
ha : a ∈ s
⊢ s.mulIndicator f a ≤ y

case neg
ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝¹ : LE M
inst✝ : One M
s t : Set α
f g : α → M
a : α
y : M
hfg : a ∈ s → f a ≤ y
hg : a ∉ s → 1 ≤ y
ha : a ∉ s
⊢ s.mulIndicator f a ≤ y

tactic: simpa [ha] using hfg ha
state_before: case pos
ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝¹ : LE M
inst✝ : One M
s t : Set α
f g : α → M
a : α
y : M
hfg : a ∈ s → f a ≤ y
hg : a ∉ s → 1 ≤ y
ha : a ∈ s
⊢ s.mulIndicator f a ≤ y
state_after: no goals

tactic: simpa [ha] using hg ha
state_before: case neg
ι : Sort u_1
α : Type u_2
β : Type u_3
M : Type u_4
inst✝¹ : LE M
inst✝ : One M
s t : Set α
f g : α → M
a : α
y : M
hfg : a ∈ s → f a ≤ y
hg : a ∉ s → 1 ≤ y
ha : a ∉ s
⊢ s.mulIndicator f a ≤ y
state_after: no goals
Theorem: StrongConvexOn.strictConvexOn
File: Mathlib/Analysis/Convex/Strong.lean

tactic: positivity
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
φ ψ : ℝ → ℝ
s✝ : Set E
a b m✝ : ℝ
x y : E
f✝ g : E → ℝ
s : Set E
f : E → ℝ
m n : ℝ
hf : StrongConvexOn s m f
hm : 0 < m
r : ℝ
hr : r ≠ 0
⊢ 0 < m / 2 * r ^ 2
state_after: no goals
Theorem: IsLindelof.countable_of_discrete
File: Mathlib/Topology/Compactness/Lindelof.lean

tactic: have : ∀ x : X, ({x} : Set X) ∈ 𝓝 x := by simp [nhds_discrete]
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
⊢ s.Countable
state_after: X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
this : ∀ (x : X), {x} ∈ 𝓝 x
⊢ s.Countable

tactic: rcases hs.elim_nhds_subcover (fun x => {x}) fun x _ => this x with ⟨t, ht, _, hssubt⟩
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
this : ∀ (x : X), {x} ∈ 𝓝 x
⊢ s.Countable
state_after: case intro.intro.intro
X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t✝ : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
this : ∀ (x : X), {x} ∈ 𝓝 x
t : Set X
ht : t.Countable
left✝ : ∀ x ∈ t, x ∈ s
hssubt : s ⊆ ⋃ x ∈ t, {x}
⊢ s.Countable

tactic: rw [biUnion_of_singleton] at hssubt
state_before: case intro.intro.intro
X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t✝ : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
this : ∀ (x : X), {x} ∈ 𝓝 x
t : Set X
ht : t.Countable
left✝ : ∀ x ∈ t, x ∈ s
hssubt : s ⊆ ⋃ x ∈ t, {x}
⊢ s.Countable
state_after: case intro.intro.intro
X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t✝ : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
this : ∀ (x : X), {x} ∈ 𝓝 x
t : Set X
ht : t.Countable
left✝ : ∀ x ∈ t, x ∈ s
hssubt : s ⊆ t
⊢ s.Countable

tactic: exact ht.mono hssubt
state_before: case intro.intro.intro
X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t✝ : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
this : ∀ (x : X), {x} ∈ 𝓝 x
t : Set X
ht : t.Countable
left✝ : ∀ x ∈ t, x ∈ s
hssubt : s ⊆ t
⊢ s.Countable
state_after: no goals

tactic: simp [nhds_discrete]
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
s t : Set X
inst✝ : DiscreteTopology X
hs : IsLindelof s
⊢ ∀ (x : X), {x} ∈ 𝓝 x
state_after: no goals
Theorem: PNat.card_Icc
File: Mathlib/Data/PNat/Interval.lean

tactic: rw [← Nat.card_Icc]
state_before: a b : ℕ+
⊢ (Icc a b).card = ↑b + 1 - ↑a
state_after: a b : ℕ+
⊢ (Icc a b).card = (Icc ↑a ↑b).card

tactic: erw [← Finset.map_subtype_embedding_Icc _ a b (fun c x _ hx _ hc _ => hc.trans_le hx)]
state_before: a b : ℕ+
⊢ (Icc a b).card = (Icc ↑a ↑b).card
state_after: a b : ℕ+
⊢ (Icc a b).card = (map (Embedding.subtype fun n => 0 < n) (Icc a b)).card

tactic: rw [card_map]
state_before: a b : ℕ+
⊢ (Icc a b).card = (map (Embedding.subtype fun n => 0 < n) (Icc a b)).card
state_after: no goals
Theorem: CategoryTheory.Limits.Sigma.map'_comp_map
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

tactic: ext
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝³ : Category.{v, u} C
f : α → C
g h : β → C
inst✝² : HasCoproduct f
inst✝¹ : HasCoproduct g
inst✝ : HasCoproduct h
p : α → β
q : (a : α) → f a ⟶ g (p a)
q' : (b : β) → g b ⟶ h b
⊢ map' p q ≫ map q' = map' p fun a => q a ≫ q' (p a)
state_after: case h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝³ : Category.{v, u} C
f : α → C
g h : β → C
inst✝² : HasCoproduct f
inst✝¹ : HasCoproduct g
inst✝ : HasCoproduct h
p : α → β
q : (a : α) → f a ⟶ g (p a)
q' : (b : β) → g b ⟶ h b
b✝ : α
⊢ ι f b✝ ≫ map' p q ≫ map q' = ι f b✝ ≫ map' p fun a => q a ≫ q' (p a)

tactic: simp
state_before: case h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝³ : Category.{v, u} C
f : α → C
g h : β → C
inst✝² : HasCoproduct f
inst✝¹ : HasCoproduct g
inst✝ : HasCoproduct h
p : α → β
q : (a : α) → f a ⟶ g (p a)
q' : (b : β) → g b ⟶ h b
b✝ : α
⊢ ι f b✝ ≫ map' p q ≫ map q' = ι f b✝ ≫ map' p fun a => q a ≫ q' (p a)
state_after: no goals