1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.Subobject.arrow_congr
File: Mathlib/CategoryTheory/Subobject/Basic.lean

tactic: induction h
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
X✝ Y✝ Z : C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
A : C
X Y : Subobject A
h : X = Y
⊢ eqToHom ⋯ ≫ Y.arrow = X.arrow
state_after: case refl
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
X✝ Y✝ Z : C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
A : C
X Y : Subobject A
⊢ eqToHom ⋯ ≫ X.arrow = X.arrow

tactic: simp
state_before: case refl
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
X✝ Y✝ Z : C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
A : C
X Y : Subobject A
⊢ eqToHom ⋯ ≫ X.arrow = X.arrow
state_after: no goals
Theorem: IsNilpotent.map_iff
File: Mathlib/RingTheory/Nilpotent/Defs.lean

tactic: rwa [map_pow]
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝³ : MonoidWithZero R
inst✝² : MonoidWithZero S
r : R
F : Type u_3
inst✝¹ : FunLike F R S
inst✝ : MonoidWithZeroHomClass F R S
f : F
hf : Injective ⇑f
x✝ : IsNilpotent (f r)
k : ℕ
hk : f r ^ k = 0
⊢ f (r ^ k) = 0
state_after: no goals
Theorem: measurable_coe_nnreal_real_iff
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Real.lean

tactic: simpa only [Real.toNNReal_coe] using h.real_toNNReal
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α
inst✝ : MeasurableSpace α
f : α → ℝ≥0
h : Measurable fun x => ↑(f x)
⊢ Measurable f
state_after: no goals
Theorem: OnePoint.continuous_iff
File: Mathlib/Topology/Compactification/OnePoint.lean

tactic: simp only [continuous_iff_continuousAt, OnePoint.forall, continuousAt_coe, continuousAt_infty']
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
s : Set (OnePoint X)
t : Set X
Y : Type u_2
inst✝ : TopologicalSpace Y
f : OnePoint X → Y
⊢ Continuous f ↔ Tendsto (fun x => f ↑x) (coclosedCompact X) (𝓝 (f ∞)) ∧ Continuous fun x => f ↑x
state_after: X : Type u_1
inst✝¹ : TopologicalSpace X
s : Set (OnePoint X)
t : Set X
Y : Type u_2
inst✝ : TopologicalSpace Y
f : OnePoint X → Y
⊢ (Tendsto (f ∘ some) (coclosedCompact X) (𝓝 (f ∞)) ∧ ∀ (x : X), ContinuousAt (f ∘ some) x) ↔
    Tendsto (fun x => f ↑x) (coclosedCompact X) (𝓝 (f ∞)) ∧ ∀ (x : X), ContinuousAt (fun x => f ↑x) x

tactic: rfl
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
s : Set (OnePoint X)
t : Set X
Y : Type u_2
inst✝ : TopologicalSpace Y
f : OnePoint X → Y
⊢ (Tendsto (f ∘ some) (coclosedCompact X) (𝓝 (f ∞)) ∧ ∀ (x : X), ContinuousAt (f ∘ some) x) ↔
    Tendsto (fun x => f ↑x) (coclosedCompact X) (𝓝 (f ∞)) ∧ ∀ (x : X), ContinuousAt (fun x => f ↑x) x
state_after: no goals
Theorem: one_add_one_eq_two
File: Mathlib/Data/Nat/Cast/Defs.lean

tactic: rw [← Nat.cast_one, ← Nat.cast_add]
state_before: R : Type u_1
inst✝ : AddMonoidWithOne R
⊢ 1 + 1 = 2
state_after: R : Type u_1
inst✝ : AddMonoidWithOne R
⊢ ↑(1 + 1) = 2

tactic: apply congrArg
state_before: R : Type u_1
inst✝ : AddMonoidWithOne R
⊢ ↑(1 + 1) = 2
state_after: case h
R : Type u_1
inst✝ : AddMonoidWithOne R
⊢ 1 + 1 = 2

tactic: decide
state_before: case h
R : Type u_1
inst✝ : AddMonoidWithOne R
⊢ 1 + 1 = 2
state_after: no goals
Theorem: Ideal.kerLiftAlg_mk
File: Mathlib/RingTheory/Ideal/QuotientOperations.lean

tactic: rfl
state_before: R : Type u
S : Type v
F : Type w
inst✝⁸ : CommRing R
inst✝⁷ : Semiring S
R₁ : Type u_1
R₂ : Type u_2
A : Type u_3
B : Type u_4
inst✝⁶ : CommSemiring R₁
inst✝⁵ : CommSemiring R₂
inst✝⁴ : CommRing A
inst✝³ : Algebra R₁ A
inst✝² : Algebra R₂ A
inst✝¹ : Semiring B
inst✝ : Algebra R₁ B
f : A →ₐ[R₁] B
a : A
⊢ (kerLiftAlg f) ((Quotient.mk (ker f)) a) = f a
state_after: no goals
Theorem: SimpleGraph.edgeDisjointTriangles_bot
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Basic.lean

tactic: simp [EdgeDisjointTriangles]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
⊢ ⊥.EdgeDisjointTriangles
state_after: no goals
Theorem: MeasureTheory.Measure.restrict_union'
File: Mathlib/MeasureTheory/Measure/Restrict.lean

tactic: rw [union_comm, restrict_union h.symm hs, add_comm]
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
h : Disjoint s t
hs : MeasurableSet s
⊢ μ.restrict (s ∪ t) = μ.restrict s + μ.restrict t
state_after: no goals
Theorem: ProbabilityTheory.gammaPDF_of_neg
File: Mathlib/Probability/Distributions/Gamma.lean

tactic: simp only [gammaPDF_eq, if_neg (not_le.mpr hx), ENNReal.ofReal_zero]
state_before: a r x : ℝ
hx : x < 0
⊢ gammaPDF a r x = 0
state_after: no goals
Theorem: Set.Iic.coe_iSup
File: Mathlib/Order/CompleteLatticeIntervals.lean

tactic: rw [iSup, coe_sSup]
state_before: ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
⊢ ↑(⨆ i, f i) = ⨆ i, ↑(f i)
state_after: ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
⊢ sSup (Subtype.val '' range fun i => f i) = ⨆ i, ↑(f i)

tactic: congr
state_before: ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
⊢ sSup (Subtype.val '' range fun i => f i) = ⨆ i, ↑(f i)
state_after: case e_a
ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
⊢ (Subtype.val '' range fun i => f i) = range fun i => ↑(f i)

tactic: ext
state_before: case e_a
ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
⊢ (Subtype.val '' range fun i => f i) = range fun i => ↑(f i)
state_after: case e_a.h
ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
x✝ : α
⊢ (x✝ ∈ Subtype.val '' range fun i => f i) ↔ x✝ ∈ range fun i => ↑(f i)

tactic: simp
state_before: case e_a.h
ι : Sort u_1
α : Type u_2
s : Set α
inst✝ : CompleteLattice α
a : α
S : Set ↑(Iic a)
f : ι → ↑(Iic a)
p : ι → Prop
x✝ : α
⊢ (x✝ ∈ Subtype.val '' range fun i => f i) ↔ x✝ ∈ range fun i => ↑(f i)
state_after: no goals
Theorem: AbstractCompletion.map_unique
File: Mathlib/Topology/UniformSpace/AbstractCompletion.lean

tactic: intro a
state_before: α : Type u_1
inst✝¹ : UniformSpace α
pkg : AbstractCompletion α
β : Type u_2
inst✝ : UniformSpace β
pkg' : AbstractCompletion β
f✝ f : α → β
g : pkg.space → pkg'.space
hg : UniformContinuous g
h : ∀ (a : α), pkg'.coe (f a) = g (pkg.coe a)
⊢ ∀ (a : α), pkg.map pkg' f (pkg.coe a) = g (pkg.coe a)
state_after: α : Type u_1
inst✝¹ : UniformSpace α
pkg : AbstractCompletion α
β : Type u_2
inst✝ : UniformSpace β
pkg' : AbstractCompletion β
f✝ f : α → β
g : pkg.space → pkg'.space
hg : UniformContinuous g
h : ∀ (a : α), pkg'.coe (f a) = g (pkg.coe a)
a : α
⊢ pkg.map pkg' f (pkg.coe a) = g (pkg.coe a)

tactic: change pkg.extend (ι' ∘ f) _ = _
state_before: α : Type u_1
inst✝¹ : UniformSpace α
pkg : AbstractCompletion α
β : Type u_2
inst✝ : UniformSpace β
pkg' : AbstractCompletion β
f✝ f : α → β
g : pkg.space → pkg'.space
hg : UniformContinuous g
h : ∀ (a : α), pkg'.coe (f a) = g (pkg.coe a)
a : α
⊢ pkg.map pkg' f (pkg.coe a) = g (pkg.coe a)
state_after: α : Type u_1
inst✝¹ : UniformSpace α
pkg : AbstractCompletion α
β : Type u_2
inst✝ : UniformSpace β
pkg' : AbstractCompletion β
f✝ f : α → β
g : pkg.space → pkg'.space
hg : UniformContinuous g
h : ∀ (a : α), pkg'.coe (f a) = g (pkg.coe a)
a : α
⊢ pkg.extend (pkg'.coe ∘ f) (pkg.coe a) = g (pkg.coe a)

tactic: rw [pkg.extend_coe (hg.comp pkg.uniformContinuous_coe)]
state_before: α : Type u_1
inst✝¹ : UniformSpace α
pkg : AbstractCompletion α
β : Type u_2
inst✝ : UniformSpace β
pkg' : AbstractCompletion β
f✝ f : α → β
g : pkg.space → pkg'.space
hg : UniformContinuous g
h : ∀ (a : α), pkg'.coe (f a) = g (pkg.coe a)
a : α
⊢ pkg.extend (fun x => (g ∘ pkg.coe) x) (pkg.coe a) = (g ∘ pkg.coe) a
state_after: no goals
Theorem: MeasureTheory.integrable_prod_iff'
File: Mathlib/MeasureTheory/Constructions/Prod/Integral.lean

tactic: convert integrable_prod_iff h1f.prod_swap using 1
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
E : Type u_6
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace β'
inst✝³ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝² : NormedAddCommGroup E
inst✝¹ : SigmaFinite ν
inst✝ : SigmaFinite μ
f : α × β → E
h1f : AEStronglyMeasurable f (μ.prod ν)
⊢ Integrable f (μ.prod ν) ↔
    (∀ᵐ (y : β) ∂ν, Integrable (fun x => f (x, y)) μ) ∧ Integrable (fun y => ∫ (x : α), ‖f (x, y)‖ ∂μ) ν
state_after: case h.e'_1.a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
E : Type u_6
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace β'
inst✝³ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝² : NormedAddCommGroup E
inst✝¹ : SigmaFinite ν
inst✝ : SigmaFinite μ
f : α × β → E
h1f : AEStronglyMeasurable f (μ.prod ν)
⊢ Integrable f (μ.prod ν) ↔ Integrable (fun z => f z.swap) (ν.prod μ)

tactic: rw [funext fun _ => Function.comp_apply.symm, integrable_swap_iff]
state_before: case h.e'_1.a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
E : Type u_6
inst✝⁷ : MeasurableSpace α
inst✝⁶ : MeasurableSpace α'
inst✝⁵ : MeasurableSpace β
inst✝⁴ : MeasurableSpace β'
inst✝³ : MeasurableSpace γ
μ μ' : Measure α
ν ν' : Measure β
τ : Measure γ
inst✝² : NormedAddCommGroup E
inst✝¹ : SigmaFinite ν
inst✝ : SigmaFinite μ
f : α × β → E
h1f : AEStronglyMeasurable f (μ.prod ν)
⊢ Integrable f (μ.prod ν) ↔ Integrable (fun z => f z.swap) (ν.prod μ)
state_after: no goals
Theorem: IsPrimitiveRoot.toInteger_sub_one_dvd_prime'
File: Mathlib/NumberTheory/Cyclotomic/Rat.lean

tactic: have : IsCyclotomicExtension {p ^ (0 + 1)} ℚ K := by simpa using hcycl
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
⊢ hζ.toInteger - 1 ∣ ↑↑p
state_after: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
this : IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
⊢ hζ.toInteger - 1 ∣ ↑↑p

tactic: replace hζ : IsPrimitiveRoot ζ (p ^ (0 + 1)) := by simpa using hζ
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
this : IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
⊢ hζ.toInteger - 1 ∣ ↑↑p
state_after: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ✝ : IsPrimitiveRoot ζ ↑p
this : IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
hζ : IsPrimitiveRoot ζ (↑p ^ (0 + 1))
⊢ hζ✝.toInteger - 1 ∣ ↑↑p

tactic: exact toInteger_sub_one_dvd_prime hζ
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ✝ : IsPrimitiveRoot ζ ↑p
this : IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
hζ : IsPrimitiveRoot ζ (↑p ^ (0 + 1))
⊢ hζ✝.toInteger - 1 ∣ ↑↑p
state_after: no goals

tactic: simpa using hcycl
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
⊢ IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
state_after: no goals

tactic: simpa using hζ
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
this : IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
⊢ IsPrimitiveRoot ζ (↑p ^ (0 + 1))
state_after: no goals
Theorem: differentiableAt_jacobiTheta
File: Mathlib/NumberTheory/ModularForms/JacobiTheta/OneVariable.lean

tactic: simp_rw [funext jacobiTheta_eq_jacobiTheta₂]
state_before: τ : ℂ
hτ : 0 < τ.im
⊢ DifferentiableAt ℂ jacobiTheta τ
state_after: τ : ℂ
hτ : 0 < τ.im
⊢ DifferentiableAt ℂ (jacobiTheta₂ 0) τ

tactic: exact differentiableAt_jacobiTheta₂_snd 0 hτ
state_before: τ : ℂ
hτ : 0 < τ.im
⊢ DifferentiableAt ℂ (jacobiTheta₂ 0) τ
state_after: no goals
Theorem: List.forall_mem_union
File: Mathlib/Data/List/Lattice.lean

tactic: simp only [mem_union_iff, or_imp, forall_and]
state_before: α : Type u_1
l l₁ l₂ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
⊢ (∀ (x : α), x ∈ l₁ ∪ l₂ → p x) ↔ (∀ (x : α), x ∈ l₁ → p x) ∧ ∀ (x : α), x ∈ l₂ → p x
state_after: no goals
Theorem: UV.compress_sdiff_sdiff
File: Mathlib/Combinatorics/SetFamily/Compression/UV.lean

tactic: refine (compress_of_disjoint_of_le disjoint_sdiff_self_left sdiff_le).trans ?_
state_before: α : Type u_1
inst✝² : GeneralizedBooleanAlgebra α
inst✝¹ : DecidableRel Disjoint
inst✝ : DecidableRel fun x x_1 => x ≤ x_1
s : Finset α
u v a✝ b✝ a b : α
⊢ compress (a \ b) (b \ a) b = a
state_after: α : Type u_1
inst✝² : GeneralizedBooleanAlgebra α
inst✝¹ : DecidableRel Disjoint
inst✝ : DecidableRel fun x x_1 => x ≤ x_1
s : Finset α
u v a✝ b✝ a b : α
⊢ (b ⊔ a \ b) \ (b \ a) = a

tactic: rw [sup_sdiff_self_right, sup_sdiff, disjoint_sdiff_self_right.sdiff_eq_left, sup_eq_right]
state_before: α : Type u_1
inst✝² : GeneralizedBooleanAlgebra α
inst✝¹ : DecidableRel Disjoint
inst✝ : DecidableRel fun x x_1 => x ≤ x_1
s : Finset α
u v a✝ b✝ a b : α
⊢ (b ⊔ a \ b) \ (b \ a) = a
state_after: α : Type u_1
inst✝² : GeneralizedBooleanAlgebra α
inst✝¹ : DecidableRel Disjoint
inst✝ : DecidableRel fun x x_1 => x ≤ x_1
s : Finset α
u v a✝ b✝ a b : α
⊢ b \ (b \ a) ≤ a

tactic: exact sdiff_sdiff_le
state_before: α : Type u_1
inst✝² : GeneralizedBooleanAlgebra α
inst✝¹ : DecidableRel Disjoint
inst✝ : DecidableRel fun x x_1 => x ≤ x_1
s : Finset α
u v a✝ b✝ a b : α
⊢ b \ (b \ a) ≤ a
state_after: no goals
Theorem: CategoryTheory.ComposableArrows.mk₃_surjective
File: Mathlib/CategoryTheory/ComposableArrows.lean

tactic: simp
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
n m : ℕ
F G : ComposableArrows C n
X : ComposableArrows C 3
⊢ X.map' 0 1 ⋯ ⋯ = eqToHom ⋯ ≫ (mk₃ (X.map' 0 1 ⋯ ⋯) (X.map' 1 2 ⋯ ⋯) (X.map' 2 3 ⋯ ⋯)).map' 0 1 ⋯ ⋯ ≫ eqToHom ⋯
state_after: no goals

tactic: simp
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
n m : ℕ
F G : ComposableArrows C n
X : ComposableArrows C 3
⊢ X.map' 1 2 ⋯ ⋯ = eqToHom ⋯ ≫ (mk₃ (X.map' 0 1 ⋯ ⋯) (X.map' 1 2 ⋯ ⋯) (X.map' 2 3 ⋯ ⋯)).map' 1 2 ⋯ ⋯ ≫ eqToHom ⋯
state_after: no goals

tactic: simp
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
n m : ℕ
F G : ComposableArrows C n
X : ComposableArrows C 3
⊢ X.map' 2 3 ⋯ ⋯ = eqToHom ⋯ ≫ (mk₃ (X.map' 0 1 ⋯ ⋯) (X.map' 1 2 ⋯ ⋯) (X.map' 2 3 ⋯ ⋯)).map' 2 3 ⋯ ⋯ ≫ eqToHom ⋯
state_after: no goals
Theorem: Polynomial.natDegree_add_coeff_mul
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

tactic: simp only [coeff_natDegree, coeff_mul_degree_add_degree]
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r f g : R[X]
⊢ (f * g).coeff (f.natDegree + g.natDegree) = f.coeff f.natDegree * g.coeff g.natDegree
state_after: no goals
Theorem: Nat.factorization_floorRoot
File: Mathlib/Data/Nat/Factorization/Root.lean

tactic: rw [floorRoot_def]
state_before: a✝ b n✝ n a : ℕ
⊢ (n.floorRoot a).factorization = a.factorization ⌊/⌋ n
state_after: a✝ b n✝ n a : ℕ
⊢ (if n = 0 ∨ a = 0 then 0 else (a.factorization ⌊/⌋ n).prod fun x x_1 => x ^ x_1).factorization = a.factorization ⌊/⌋ n

tactic: split_ifs with h
state_before: a✝ b n✝ n a : ℕ
⊢ (if n = 0 ∨ a = 0 then 0 else (a.factorization ⌊/⌋ n).prod fun x x_1 => x ^ x_1).factorization = a.factorization ⌊/⌋ n
state_after: case pos
a✝ b n✝ n a : ℕ
h : n = 0 ∨ a = 0
⊢ factorization 0 = a.factorization ⌊/⌋ n

case neg
a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
⊢ ((a.factorization ⌊/⌋ n).prod fun x x_1 => x ^ x_1).factorization = a.factorization ⌊/⌋ n

tactic: refine prod_pow_factorization_eq_self fun p hp ↦ ?_
state_before: case neg
a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
⊢ ((a.factorization ⌊/⌋ n).prod fun x x_1 => x ^ x_1).factorization = a.factorization ⌊/⌋ n
state_after: case neg
a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
p : ℕ
hp : p ∈ (a.factorization ⌊/⌋ n).support
⊢ Prime p

tactic: have : p.Prime ∧ p ∣ a ∧ ¬a = 0 := by simpa using support_floorDiv_subset hp
state_before: case neg
a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
p : ℕ
hp : p ∈ (a.factorization ⌊/⌋ n).support
⊢ Prime p
state_after: case neg
a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
p : ℕ
hp : p ∈ (a.factorization ⌊/⌋ n).support
this : Prime p ∧ p ∣ a ∧ ¬a = 0
⊢ Prime p

tactic: exact this.1
state_before: case neg
a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
p : ℕ
hp : p ∈ (a.factorization ⌊/⌋ n).support
this : Prime p ∧ p ∣ a ∧ ¬a = 0
⊢ Prime p
state_after: no goals

tactic: obtain rfl | rfl := h <;> simp
state_before: case pos
a✝ b n✝ n a : ℕ
h : n = 0 ∨ a = 0
⊢ factorization 0 = a.factorization ⌊/⌋ n
state_after: no goals

tactic: simpa using support_floorDiv_subset hp
state_before: a✝ b n✝ n a : ℕ
h : ¬(n = 0 ∨ a = 0)
p : ℕ
hp : p ∈ (a.factorization ⌊/⌋ n).support
⊢ Prime p ∧ p ∣ a ∧ ¬a = 0
state_after: no goals
Theorem: Set.forall_uIoc_iff
File: Mathlib/Order/Interval/Set/UnorderedInterval.lean

tactic: simp only [uIoc_eq_union, mem_union, or_imp, forall_and]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a a₁ a₂ b b₁ b₂ c d x : α
P : α → Prop
⊢ (∀ x ∈ Ι a b, P x) ↔ (∀ x ∈ Ioc a b, P x) ∧ ∀ x ∈ Ioc b a, P x
state_after: no goals
Theorem: ConvexCone.Flat.pointed
File: Mathlib/Analysis/Convex/Cone/Basic.lean

tactic: obtain ⟨x, hx, _, hxneg⟩ := hS
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : SMul 𝕜 E
S✝ S : ConvexCone 𝕜 E
hS : S.Flat
⊢ S.Pointed
state_after: case intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : SMul 𝕜 E
S✝ S : ConvexCone 𝕜 E
x : E
hx : x ∈ S
left✝ : x ≠ 0
hxneg : -x ∈ S
⊢ S.Pointed

tactic: rw [Pointed, ← add_neg_self x]
state_before: case intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : SMul 𝕜 E
S✝ S : ConvexCone 𝕜 E
x : E
hx : x ∈ S
left✝ : x ≠ 0
hxneg : -x ∈ S
⊢ S.Pointed
state_after: case intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : SMul 𝕜 E
S✝ S : ConvexCone 𝕜 E
x : E
hx : x ∈ S
left✝ : x ≠ 0
hxneg : -x ∈ S
⊢ x + -x ∈ S

tactic: exact add_mem S hx hxneg
state_before: case intro.intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝² : OrderedSemiring 𝕜
inst✝¹ : AddCommGroup E
inst✝ : SMul 𝕜 E
S✝ S : ConvexCone 𝕜 E
x : E
hx : x ∈ S
left✝ : x ≠ 0
hxneg : -x ∈ S
⊢ x + -x ∈ S
state_after: no goals
Theorem: Associates.irreducible_mk
File: Mathlib/Algebra/Associated.lean

tactic: simp only [irreducible_iff, isUnit_mk, forall_associated, isUnit_mk, mk_mul_mk,
  mk_eq_mk_iff_associated, Associated.comm (x := a)]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ Irreducible (Associates.mk a) ↔ Irreducible a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (¬IsUnit a ∧ ∀ (a_1 a_2 : α), a_1 * a_2 ~ᵤ a → IsUnit a_1 ∨ IsUnit a_2) ↔
    ¬IsUnit a ∧ ∀ (a_1 b : α), a = a_1 * b → IsUnit a_1 ∨ IsUnit b

tactic: apply Iff.rfl.and
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (¬IsUnit a ∧ ∀ (a_1 a_2 : α), a_1 * a_2 ~ᵤ a → IsUnit a_1 ∨ IsUnit a_2) ↔
    ¬IsUnit a ∧ ∀ (a_1 b : α), a = a_1 * b → IsUnit a_1 ∨ IsUnit b
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (∀ (a_1 a_2 : α), a_1 * a_2 ~ᵤ a → IsUnit a_1 ∨ IsUnit a_2) ↔ ∀ (a_1 b : α), a = a_1 * b → IsUnit a_1 ∨ IsUnit b

tactic: constructor
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (∀ (a_1 a_2 : α), a_1 * a_2 ~ᵤ a → IsUnit a_1 ∨ IsUnit a_2) ↔ ∀ (a_1 b : α), a = a_1 * b → IsUnit a_1 ∨ IsUnit b
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (∀ (a_1 a_2 : α), a_1 * a_2 ~ᵤ a → IsUnit a_1 ∨ IsUnit a_2) → ∀ (a_2 b : α), a = a_2 * b → IsUnit a_2 ∨ IsUnit b

case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (∀ (a_1 b : α), a = a_1 * b → IsUnit a_1 ∨ IsUnit b) → ∀ (a_2 a_3 : α), a_2 * a_3 ~ᵤ a → IsUnit a_2 ∨ IsUnit a_3

tactic: rintro h x y rfl
state_before: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (∀ (a_1 a_2 : α), a_1 * a_2 ~ᵤ a → IsUnit a_1 ∨ IsUnit a_2) → ∀ (a_2 b : α), a = a_2 * b → IsUnit a_2 ∨ IsUnit b
state_after: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
x y : α
h : ∀ (a a_1 : α), a * a_1 ~ᵤ x * y → IsUnit a ∨ IsUnit a_1
⊢ IsUnit x ∨ IsUnit y

tactic: exact h _ _ <| .refl _
state_before: case mp
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
x y : α
h : ∀ (a a_1 : α), a * a_1 ~ᵤ x * y → IsUnit a ∨ IsUnit a_1
⊢ IsUnit x ∨ IsUnit y
state_after: no goals

tactic: rintro h x y ⟨u, rfl⟩
state_before: case mpr
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
a : α
⊢ (∀ (a_1 b : α), a = a_1 * b → IsUnit a_1 ∨ IsUnit b) → ∀ (a_2 a_3 : α), a_2 * a_3 ~ᵤ a → IsUnit a_2 ∨ IsUnit a_3
state_after: case mpr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
x y : α
u : αˣ
h : ∀ (a b : α), x * y * ↑u = a * b → IsUnit a ∨ IsUnit b
⊢ IsUnit x ∨ IsUnit y

tactic: simpa using h x (y * u) (mul_assoc _ _ _)
state_before: case mpr.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CommMonoidWithZero α
x y : α
u : αˣ
h : ∀ (a b : α), x * y * ↑u = a * b → IsUnit a ∨ IsUnit b
⊢ IsUnit x ∨ IsUnit y
state_after: no goals
Theorem: Int.cast_nonpos
File: Mathlib/Algebra/Order/Ring/Cast.lean

tactic: rw [← cast_zero, cast_le]
state_before: R : Type u_1
inst✝¹ : OrderedRing R
inst✝ : Nontrivial R
m n : ℤ
⊢ ↑n ≤ 0 ↔ n ≤ 0
state_after: no goals
Theorem: ArithmeticFunction.isMultiplicative_moebius
File: Mathlib/NumberTheory/ArithmeticFunction.lean

tactic: rw [IsMultiplicative.iff_ne_zero]
state_before: R : Type u_1
⊢ μ.IsMultiplicative
state_after: R : Type u_1
⊢ μ 1 = 1 ∧ ∀ {m n : ℕ}, m ≠ 0 → n ≠ 0 → m.Coprime n → μ (m * n) = μ m * μ n

tactic: refine ⟨by simp, fun {n m} hn hm hnm => ?_⟩
state_before: R : Type u_1
⊢ μ 1 = 1 ∧ ∀ {m n : ℕ}, m ≠ 0 → n ≠ 0 → m.Coprime n → μ (m * n) = μ m * μ n
state_after: R : Type u_1
n m : ℕ
hn : n ≠ 0
hm : m ≠ 0
hnm : n.Coprime m
⊢ μ (n * m) = μ n * μ m

tactic: simp only [moebius, ZeroHom.coe_mk, coe_mk, ZeroHom.toFun_eq_coe, Eq.ndrec, ZeroHom.coe_mk,
  IsUnit.mul_iff, Nat.isUnit_iff, squarefree_mul hnm, ite_zero_mul_ite_zero,
  cardFactors_mul hn hm, pow_add]
state_before: R : Type u_1
n m : ℕ
hn : n ≠ 0
hm : m ≠ 0
hnm : n.Coprime m
⊢ μ (n * m) = μ n * μ m
state_after: no goals

tactic: simp
state_before: R : Type u_1
⊢ μ 1 = 1
state_after: no goals
Theorem: ENNReal.one_lt_rpow
File: Mathlib/Analysis/SpecialFunctions/Pow/NNReal.lean

tactic: cases x
state_before: x : ℝ≥0∞
z : ℝ
hx : 1 < x
hz : 0 < z
⊢ 1 < x ^ z
state_after: case top
z : ℝ
hz : 0 < z
hx : 1 < ⊤
⊢ 1 < ⊤ ^ z

case coe
z : ℝ
hz : 0 < z
x✝ : ℝ≥0
hx : 1 < ↑x✝
⊢ 1 < ↑x✝ ^ z

tactic: simp [top_rpow_of_pos hz]
state_before: case top
z : ℝ
hz : 0 < z
hx : 1 < ⊤
⊢ 1 < ⊤ ^ z
state_after: no goals

tactic: simp only [some_eq_coe, one_lt_coe_iff] at hx
state_before: case coe
z : ℝ
hz : 0 < z
x✝ : ℝ≥0
hx : 1 < ↑x✝
⊢ 1 < ↑x✝ ^ z
state_after: case coe
z : ℝ
hz : 0 < z
x✝ : ℝ≥0
hx : 1 < x✝
⊢ 1 < ↑x✝ ^ z

tactic: simp [coe_rpow_of_nonneg _ (le_of_lt hz), NNReal.one_lt_rpow hx hz]
state_before: case coe
z : ℝ
hz : 0 < z
x✝ : ℝ≥0
hx : 1 < x✝
⊢ 1 < ↑x✝ ^ z
state_after: no goals
Theorem: TypeVec.nilFun_comp
File: Mathlib/Data/TypeVec.lean

tactic: apply Fin2.elim0 x
state_before: n : ℕ
α₀ : TypeVec.{u_1} 0
f₀ : α₀ ⟹ Fin2.elim0
x : Fin2 0
⊢ (nilFun ⊚ f₀) x = f₀ x
state_after: no goals