1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: isReduced_iff_pow_one_lt
File: Mathlib/RingTheory/Nilpotent/Basic.lean

tactic: simp_rw [← zero_isRadical_iff, isRadical_iff_pow_one_lt k hk, zero_dvd_iff]
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : MonoidWithZero R
k : ℕ
hk : 1 < k
⊢ IsReduced R ↔ ∀ (x : R), x ^ k = 0 → x = 0
state_after: no goals
Theorem: PrimeSpectrum.basicOpen_mul
File: Mathlib/AlgebraicGeometry/PrimeSpectrum/Basic.lean

tactic: simp [zeroLocus_singleton_mul]
state_before: R : Type u
S : Type v
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
f g : R
⊢ ↑(basicOpen (f * g)) = ↑(basicOpen f ⊓ basicOpen g)
state_after: no goals
Theorem: String.join_eq
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

tactic: simp
state_before: ss : List String
x✝ : List Char
⊢ List.foldl (fun x x_1 => x ++ x_1) { data := x✝ } [] = { data := x✝ ++ (List.map data []).join }
state_after: no goals

tactic: simp
state_before: ss✝ : List String
s : List Char
ss : List String
x✝ : List Char
⊢ { data := x✝ ++ s ++ (List.map data ss).join } = { data := x✝ ++ (List.map data ({ data := s } :: ss)).join }
state_after: no goals
Theorem: Complex.I_pow_bit0
File: Mathlib/Data/Complex/Basic.lean

tactic: rw [pow_bit0', Complex.I_mul_I]
state_before: n : ℕ
⊢ I ^ bit0 n = (-1) ^ n
state_after: no goals
Theorem: MeasureTheory.SimpleFunc.restrict_preimage
File: Mathlib/MeasureTheory/Function/SimpleFunc.lean

tactic: simp [hs, indicator_preimage_of_not_mem _ _ ht, inter_comm]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : MeasurableSpace α
K : Type u_5
inst✝ : Zero β
f : α →ₛ β
s : Set α
hs : MeasurableSet s
t : Set β
ht : 0 ∉ t
⊢ ↑(f.restrict s) ⁻¹' t = s ∩ ↑f ⁻¹' t
state_after: no goals
Theorem: Real.Angle.cos_sin_inj
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: cases' cos_eq_iff_coe_eq_or_eq_neg.mp Hcos with hc hc
state_before: θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
⊢ ↑θ = ↑ψ
state_after: case inl
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = ↑ψ
⊢ ↑θ = ↑ψ

case inr
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = -↑ψ
⊢ ↑θ = ↑ψ

tactic: cases' sin_eq_iff_coe_eq_or_add_eq_pi.mp Hsin with hs hs
state_before: case inr
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = -↑ψ
⊢ ↑θ = ↑ψ
state_after: case inr.inl
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = -↑ψ
hs : ↑θ = ↑ψ
⊢ ↑θ = ↑ψ

case inr.inr
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = -↑ψ
hs : ↑θ + ↑ψ = ↑π
⊢ ↑θ = ↑ψ

tactic: rw [eq_neg_iff_add_eq_zero, hs] at hc
state_before: case inr.inr
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = -↑ψ
hs : ↑θ + ↑ψ = ↑π
⊢ ↑θ = ↑ψ
state_after: case inr.inr
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
⊢ ↑θ = ↑ψ

tactic: obtain ⟨n, hn⟩ : ∃ n, n • _ = _ := QuotientAddGroup.leftRel_apply.mp (Quotient.exact' hc)
state_before: case inr.inr
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
⊢ ↑θ = ↑ψ
state_after: case inr.inr.intro
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
n : ℤ
hn : n • (2 * π) = -π + 0
⊢ ↑θ = ↑ψ

tactic: rw [← neg_one_mul, add_zero, ← sub_eq_zero, zsmul_eq_mul, ← mul_assoc, ← sub_mul, mul_eq_zero,
  eq_false (ne_of_gt pi_pos), or_false_iff, sub_neg_eq_add, ← Int.cast_zero, ← Int.cast_one,
  ← Int.cast_ofNat, ← Int.cast_mul, ← Int.cast_add, Int.cast_inj] at hn
state_before: case inr.inr.intro
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
n : ℤ
hn : n • (2 * π) = -π + 0
⊢ ↑θ = ↑ψ
state_after: case inr.inr.intro
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
n : ℤ
hn : n * 2 + 1 = 0
⊢ ↑θ = ↑ψ

tactic: rw [add_comm, Int.add_mul_emod_self] at this
state_before: case inr.inr.intro
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
n : ℤ
hn : n * 2 + 1 = 0
this : (n * 2 + 1) % 2 = 0 % 2
⊢ ↑θ = ↑ψ
state_after: case inr.inr.intro
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
n : ℤ
hn : n * 2 + 1 = 0
this : 1 % 2 = 0 % 2
⊢ ↑θ = ↑ψ

tactic: exact absurd this one_ne_zero
state_before: case inr.inr.intro
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑π = 0
hs : ↑θ + ↑ψ = ↑π
n : ℤ
hn : n * 2 + 1 = 0
this : 1 % 2 = 0 % 2
⊢ ↑θ = ↑ψ
state_after: no goals

tactic: exact hc
state_before: case inl
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = ↑ψ
⊢ ↑θ = ↑ψ
state_after: no goals

tactic: exact hs
state_before: case inr.inl
θ ψ : ℝ
Hcos : cos θ = cos ψ
Hsin : sin θ = sin ψ
hc : ↑θ = -↑ψ
hs : ↑θ = ↑ψ
⊢ ↑θ = ↑ψ
state_after: no goals
Theorem: MeasureTheory.withDensityᵥ_rnDeriv_smul
File: Mathlib/MeasureTheory/Decomposition/RadonNikodym.lean

tactic: rw [withDensityᵥ_smul_eq_withDensityᵥ_withDensity' (measurable_rnDeriv μ ν).aemeasurable
  (rnDeriv_lt_top μ ν) ((integrable_rnDeriv_smul_iff hμν).mpr hf), withDensity_rnDeriv_eq μ ν hμν]
state_before: α✝ : Type u_1
β : Type u_2
m✝ : MeasurableSpace α✝
α : Type u_3
m : MeasurableSpace α
μ ν : Measure α
E : Type u_4
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : μ.HaveLebesgueDecomposition ν
hμν : μ ≪ ν
inst✝ : SigmaFinite μ
f : α → E
hf : Integrable f μ
⊢ (ν.withDensityᵥ fun x => (μ.rnDeriv ν x).toReal • f x) = μ.withDensityᵥ f
state_after: no goals
Theorem: iInf_singleton
File: Mathlib/Order/CompleteLattice.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f✝ g s t : ι → α
a b✝ : α
f : β → α
b : β
⊢ ⨅ x ∈ {b}, f x = f b
state_after: no goals
Theorem: Real.sqrt_eq_cases
File: Mathlib/Data/Real/Sqrt.lean

tactic: constructor
state_before: x y : ℝ
⊢ √x = y ↔ y * y = x ∧ 0 ≤ y ∨ x < 0 ∧ y = 0
state_after: case mp
x y : ℝ
⊢ √x = y → y * y = x ∧ 0 ≤ y ∨ x < 0 ∧ y = 0

case mpr
x y : ℝ
⊢ y * y = x ∧ 0 ≤ y ∨ x < 0 ∧ y = 0 → √x = y

tactic: rintro rfl
state_before: case mp
x y : ℝ
⊢ √x = y → y * y = x ∧ 0 ≤ y ∨ x < 0 ∧ y = 0
state_after: case mp
x : ℝ
⊢ √x * √x = x ∧ 0 ≤ √x ∨ x < 0 ∧ √x = 0

tactic: rcases le_or_lt 0 x with hle | hlt
state_before: case mp
x : ℝ
⊢ √x * √x = x ∧ 0 ≤ √x ∨ x < 0 ∧ √x = 0
state_after: case mp.inl
x : ℝ
hle : 0 ≤ x
⊢ √x * √x = x ∧ 0 ≤ √x ∨ x < 0 ∧ √x = 0

case mp.inr
x : ℝ
hlt : x < 0
⊢ √x * √x = x ∧ 0 ≤ √x ∨ x < 0 ∧ √x = 0

tactic: exact Or.inl ⟨mul_self_sqrt hle, sqrt_nonneg x⟩
state_before: case mp.inl
x : ℝ
hle : 0 ≤ x
⊢ √x * √x = x ∧ 0 ≤ √x ∨ x < 0 ∧ √x = 0
state_after: no goals

tactic: exact Or.inr ⟨hlt, sqrt_eq_zero_of_nonpos hlt.le⟩
state_before: case mp.inr
x : ℝ
hlt : x < 0
⊢ √x * √x = x ∧ 0 ≤ √x ∨ x < 0 ∧ √x = 0
state_after: no goals

tactic: rintro (⟨rfl, hy⟩ | ⟨hx, rfl⟩)
state_before: case mpr
x y : ℝ
⊢ y * y = x ∧ 0 ≤ y ∨ x < 0 ∧ y = 0 → √x = y
state_after: case mpr.inl.intro
y : ℝ
hy : 0 ≤ y
⊢ √(y * y) = y

case mpr.inr.intro
x : ℝ
hx : x < 0
⊢ √x = 0

tactic: exacts [sqrt_mul_self hy, sqrt_eq_zero_of_nonpos hx.le]
state_before: case mpr.inl.intro
y : ℝ
hy : 0 ≤ y
⊢ √(y * y) = y

case mpr.inr.intro
x : ℝ
hx : x < 0
⊢ √x = 0
state_after: no goals
Theorem: Submodule.range_snd
File: Mathlib/LinearAlgebra/Prod.lean

tactic: rw [range_eq_map, ← prod_top, prod_map_snd]
state_before: R : Type u
K : Type u'
M : Type v
V : Type v'
M₂ : Type w
V₂ : Type w'
M₃ : Type y
V₃ : Type y'
M₄ : Type z
ι : Type x
M₅ : Type u_1
M₆ : Type u_2
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : AddCommMonoid M₂
inst✝¹ : Module R M
inst✝ : Module R M₂
p : Submodule R M
q : Submodule R M₂
⊢ range (snd R M M₂) = ⊤
state_after: no goals
Theorem: LinearMap.IsSymmetric.isSelfAdjoint
File: Mathlib/Analysis/InnerProductSpace/Adjoint.lean

tactic: rwa [← ContinuousLinearMap.isSelfAdjoint_iff_isSymmetric] at hA
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁸ : RCLike 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedAddCommGroup F
inst✝⁵ : NormedAddCommGroup G
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace 𝕜 F
inst✝² : InnerProductSpace 𝕜 G
inst✝¹ : CompleteSpace E
inst✝ : CompleteSpace F
A : E →L[𝕜] E
hA : (↑A).IsSymmetric
⊢ IsSelfAdjoint A
state_after: no goals
Theorem: ZNum.cast_to_int
File: Mathlib/Data/Num/Lemmas.lean

tactic: rw [cast_zero, cast_zero, Int.cast_zero]
state_before: α : Type u_1
inst✝ : AddGroupWithOne α
⊢ ↑↑0 = ↑0
state_after: no goals

tactic: rw [cast_pos, cast_pos, PosNum.cast_to_int]
state_before: α : Type u_1
inst✝ : AddGroupWithOne α
p : PosNum
⊢ ↑↑(pos p) = ↑(pos p)
state_after: no goals

tactic: rw [cast_neg, cast_neg, Int.cast_neg, PosNum.cast_to_int]
state_before: α : Type u_1
inst✝ : AddGroupWithOne α
p : PosNum
⊢ ↑↑(neg p) = ↑(neg p)
state_after: no goals
Theorem: toIocMod_zero_sub_comm
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [← neg_sub, toIocMod_neg, neg_zero]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIocMod hp 0 (a - b) = p - toIcoMod hp 0 (b - a)
state_after: no goals
Theorem: Setoid.classes_inj
File: Mathlib/Data/Setoid/Partition.lean

tactic: simp only [rel_iff_exists_classes, exists_prop, h]
state_before: α : Type u_1
r₁ r₂ : Setoid α
h : r₁.classes = r₂.classes
a b : α
⊢ r₁.Rel a b ↔ r₂.Rel a b
state_after: no goals
Theorem: Matroid.ground_eq_empty_iff
File: Mathlib/Data/Matroid/Constructions.lean

tactic: simp only [emptyOn, eq_iff_indep_iff_indep_forall, iff_self_and]
state_before: α : Type u_1
M : Matroid α
E B I X R J : Set α
⊢ M.E = ∅ ↔ M = emptyOn α
state_after: α : Type u_1
M : Matroid α
E B I X R J : Set α
⊢ M.E = ∅ → ∀ I ⊆ M.E, M.Indep I ↔ I = ∅

tactic: exact fun h ↦ by simp [h, subset_empty_iff]
state_before: α : Type u_1
M : Matroid α
E B I X R J : Set α
⊢ M.E = ∅ → ∀ I ⊆ M.E, M.Indep I ↔ I = ∅
state_after: no goals

tactic: simp [h, subset_empty_iff]
state_before: α : Type u_1
M : Matroid α
E B I X R J : Set α
h : M.E = ∅
⊢ ∀ I ⊆ M.E, M.Indep I ↔ I = ∅
state_after: no goals
Theorem: Finpartition.IsUniform.mono
File: Mathlib/Combinatorics/SimpleGraph/Regularity/Uniform.lean

tactic: gcongr
state_before: α : Type u_1
𝕜 : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
A : Finset α
P : Finpartition A
G : SimpleGraph α
inst✝ : DecidableRel G.Adj
ε✝ δ : 𝕜
u v : Finset α
ε ε' : 𝕜
hP : P.IsUniform G ε
h : ε ≤ ε'
⊢ ↑(P.parts.card * (P.parts.card - 1)) * ε ≤ ↑(P.parts.card * (P.parts.card - 1)) * ε'
state_after: no goals
Theorem: CategoryTheory.Functor.map_isZero
File: Mathlib/CategoryTheory/Limits/Preserves/Shapes/Zero.lean

tactic: simp only [IsZero.iff_id_eq_zero] at hX ⊢
state_before: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
E : Type u₃
inst✝⁴ : Category.{v₃, u₃} E
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
inst✝¹ : HasZeroMorphisms E
F : C ⥤ D
inst✝ : F.PreservesZeroMorphisms
X : C
hX : IsZero X
⊢ IsZero (F.obj X)
state_after: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
E : Type u₃
inst✝⁴ : Category.{v₃, u₃} E
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
inst✝¹ : HasZeroMorphisms E
F : C ⥤ D
inst✝ : F.PreservesZeroMorphisms
X : C
hX : 𝟙 X = 0
⊢ 𝟙 (F.obj X) = 0

tactic: rw [← F.map_id, hX, F.map_zero]
state_before: C : Type u₁
inst✝⁶ : Category.{v₁, u₁} C
D : Type u₂
inst✝⁵ : Category.{v₂, u₂} D
E : Type u₃
inst✝⁴ : Category.{v₃, u₃} E
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
inst✝¹ : HasZeroMorphisms E
F : C ⥤ D
inst✝ : F.PreservesZeroMorphisms
X : C
hX : 𝟙 X = 0
⊢ 𝟙 (F.obj X) = 0
state_after: no goals
Theorem: Ordnode.splitMin_eq
File: Mathlib/Data/Ordmap/Ordset.lean

tactic: rw [splitMin', splitMin_eq ls ll lx lr, findMin', eraseMin]
state_before: α : Type u_1
x✝ ls : ℕ
ll : Ordnode α
lx : α
lr : Ordnode α
x : α
r : Ordnode α
⊢ (node ls ll lx lr).splitMin' x r = ((node ls ll lx lr).findMin' x, (node x✝ (node ls ll lx lr) x r).eraseMin)
state_after: no goals
Theorem: Int.natCast_dvd
File: Mathlib/Data/Int/Defs.lean

tactic: obtain hn | hn := natAbs_eq n <;> rw [hn] <;> simp [← natCast_dvd_natCast, Int.dvd_neg]
state_before: a b c d m✝ n : ℤ
m : ℕ
⊢ ↑m ∣ n ↔ m ∣ n.natAbs
state_after: no goals
Theorem: Set.list_prod_subset_list_prod
File: Mathlib/Data/Set/Pointwise/BigOperators.lean

tactic: induction' t with h tl ih
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
t : List ι
f₁ f₂ : ι → Set α
hf : ∀ i ∈ t, f₁ i ⊆ f₂ i
⊢ (List.map f₁ t).prod ⊆ (List.map f₂ t).prod
state_after: case nil
ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
f₁ f₂ : ι → Set α
hf : ∀ i ∈ [], f₁ i ⊆ f₂ i
⊢ (List.map f₁ []).prod ⊆ (List.map f₂ []).prod

case cons
ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
f₁ f₂ : ι → Set α
h : ι
tl : List ι
ih : (∀ i ∈ tl, f₁ i ⊆ f₂ i) → (List.map f₁ tl).prod ⊆ (List.map f₂ tl).prod
hf : ∀ i ∈ h :: tl, f₁ i ⊆ f₂ i
⊢ (List.map f₁ (h :: tl)).prod ⊆ (List.map f₂ (h :: tl)).prod

tactic: rfl
state_before: case nil
ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
f₁ f₂ : ι → Set α
hf : ∀ i ∈ [], f₁ i ⊆ f₂ i
⊢ (List.map f₁ []).prod ⊆ (List.map f₂ []).prod
state_after: no goals

tactic: simp_rw [List.map_cons, List.prod_cons]
state_before: case cons
ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
f₁ f₂ : ι → Set α
h : ι
tl : List ι
ih : (∀ i ∈ tl, f₁ i ⊆ f₂ i) → (List.map f₁ tl).prod ⊆ (List.map f₂ tl).prod
hf : ∀ i ∈ h :: tl, f₁ i ⊆ f₂ i
⊢ (List.map f₁ (h :: tl)).prod ⊆ (List.map f₂ (h :: tl)).prod
state_after: case cons
ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
f₁ f₂ : ι → Set α
h : ι
tl : List ι
ih : (∀ i ∈ tl, f₁ i ⊆ f₂ i) → (List.map f₁ tl).prod ⊆ (List.map f₂ tl).prod
hf : ∀ i ∈ h :: tl, f₁ i ⊆ f₂ i
⊢ f₁ h * (List.map f₁ tl).prod ⊆ f₂ h * (List.map f₂ tl).prod

tactic: exact mul_subset_mul (hf h <| List.mem_cons_self _ _)
  (ih fun i hi ↦ hf i <| List.mem_cons_of_mem _ hi)
state_before: case cons
ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝³ : FunLike F α β
inst✝² : CommMonoid α
inst✝¹ : CommMonoid β
inst✝ : MonoidHomClass F α β
f₁ f₂ : ι → Set α
h : ι
tl : List ι
ih : (∀ i ∈ tl, f₁ i ⊆ f₂ i) → (List.map f₁ tl).prod ⊆ (List.map f₂ tl).prod
hf : ∀ i ∈ h :: tl, f₁ i ⊆ f₂ i
⊢ f₁ h * (List.map f₁ tl).prod ⊆ f₂ h * (List.map f₂ tl).prod
state_after: no goals
Theorem: MeasureTheory.VectorMeasure.map_id
File: Mathlib/MeasureTheory/Measure/VectorMeasure.lean

tactic: rw [map_apply v measurable_id hi, Set.preimage_id]
state_before: α : Type u_1
β : Type u_2
m inst✝³ : MeasurableSpace α
inst✝² : MeasurableSpace β
M : Type u_3
inst✝¹ : AddCommMonoid M
inst✝ : TopologicalSpace M
v : VectorMeasure α M
i : Set α
hi : MeasurableSet i
⊢ ↑(v.map id) i = ↑v i
state_after: no goals
Theorem: Finset.sorted_last_eq_max'_aux
File: Mathlib/Data/Finset/Sort.lean

tactic: apply le_antisymm
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
⊢ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩ = s.max' H
state_after: case a
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
⊢ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩ ≤ s.max' H

case a
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
⊢ s.max' H ≤ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩

tactic: exact s.le_max' _ this
state_before: case a
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
this : l.get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩ ∈ s
⊢ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩ ≤ s.max' H
state_after: no goals

tactic: obtain ⟨i, hi⟩ : ∃ i, l.get i = s.max' H := List.mem_iff_get.1 this
state_before: case a
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
this : s.max' H ∈ l
⊢ s.max' H ≤ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩
state_after: case a.intro
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
this : s.max' H ∈ l
i : Fin l.length
hi : l.get i = s.max' H
⊢ s.max' H ≤ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩

tactic: rw [← hi]
state_before: case a.intro
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
this : s.max' H ∈ l
i : Fin l.length
hi : l.get i = s.max' H
⊢ s.max' H ≤ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩
state_after: case a.intro
α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
s : Finset α
h : (sort (fun x x_1 => x ≤ x_1) s).length - 1 < (sort (fun x x_1 => x ≤ x_1) s).length
H : s.Nonempty
l : List α := sort (fun x x_1 => x ≤ x_1) s
this : s.max' H ∈ l
i : Fin l.length
hi : l.get i = s.max' H
⊢ l.get i ≤ (sort (fun x x_1 => x ≤ x_1) s).get ⟨(sort (fun x x_1 => x ≤ x_1) s).length - 1, h⟩
Theorem: WeierstrassCurve.coeff_Ψ₂Sq_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

tactic: rwa [coeff_Ψ₂Sq]
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
h : 4 ≠ 0
⊢ W.Ψ₂Sq.coeff 3 ≠ 0
state_after: no goals
Theorem: Set.image_neg_Ico
File: Mathlib/Data/Set/Pointwise/Interval.lean

tactic: simp
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ Neg.neg '' Ico a b = Ioc (-b) (-a)
state_after: no goals
Theorem: Subsemigroup.iSup_induction
File: Mathlib/Algebra/Group/Subsemigroup/Membership.lean

tactic: rw [iSup_eq_closure] at hx₁
state_before: ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ ⨆ i, S i
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
⊢ C x₁
state_after: ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
⊢ C x₁

tactic: refine closure_induction hx₁ (fun x₂ hx₂ => ?_) mul
state_before: ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
⊢ C x₁
state_after: ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
x₂ : M
hx₂ : x₂ ∈ ⋃ i, ↑(S i)
⊢ C x₂

tactic: obtain ⟨i, hi⟩ := Set.mem_iUnion.mp hx₂
state_before: ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
x₂ : M
hx₂ : x₂ ∈ ⋃ i, ↑(S i)
⊢ C x₂
state_after: case intro
ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
x₂ : M
hx₂ : x₂ ∈ ⋃ i, ↑(S i)
i : ι
hi : x₂ ∈ ↑(S i)
⊢ C x₂

tactic: exact mem _ _ hi
state_before: case intro
ι : Sort u_1
M : Type u_2
A : Type u_3
B : Type u_4
inst✝ : Mul M
S : ι → Subsemigroup M
C : M → Prop
x₁ : M
hx₁ : x₁ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x₂ ∈ S i, C x₂
mul : ∀ (x y : M), C x → C y → C (x * y)
x₂ : M
hx₂ : x₂ ∈ ⋃ i, ↑(S i)
i : ι
hi : x₂ ∈ ↑(S i)
⊢ C x₂
state_after: no goals
Theorem: CategoryTheory.Limits.inl_of_isLimit
File: Mathlib/CategoryTheory/Preadditive/Biproducts.lean

tactic: apply ht.uniq (BinaryFan.mk (𝟙 X) 0)
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
t : BinaryBicone X Y
ht : IsLimit t.toCone
⊢ t.inl = ht.lift (BinaryFan.mk (𝟙 X) 0)
state_after: case x
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
t : BinaryBicone X Y
ht : IsLimit t.toCone
⊢ ∀ (j : Discrete WalkingPair), t.inl ≫ t.toCone.π.app j = (BinaryFan.mk (𝟙 X) 0).π.app j

tactic: rintro ⟨⟨⟩⟩ <;> dsimp <;> simp
state_before: case x
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
t : BinaryBicone X Y
ht : IsLimit t.toCone
⊢ ∀ (j : Discrete WalkingPair), t.inl ≫ t.toCone.π.app j = (BinaryFan.mk (𝟙 X) 0).π.app j
state_after: no goals
Theorem: MeasurableEquiv.quasiMeasurePreserving_symm
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

tactic: rw [Measure.map_map, e.symm_comp_self, Measure.map_id] <;> measurability
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
μ✝ : Measure α
ν : Measure β
μ : Measure α
e : α ≃ᵐ β
⊢ Measure.map (⇑e.symm) (Measure.map (⇑e) μ) ≪ μ
state_after: no goals