1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: MvPolynomial.support_esymm'
File: Mathlib/RingTheory/MvPolynomial/Symmetric.lean

tactic: rw [support_esymm'']
state_before: σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
⊢ (esymm σ R n).support = (powersetCard n univ).biUnion fun t => {∑ i ∈ t, Finsupp.single i 1}
state_after: σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
⊢ ((powersetCard n univ).biUnion fun t => (Finsupp.single (∑ i ∈ t, Finsupp.single i 1) 1).support) =
    (powersetCard n univ).biUnion fun t => {∑ i ∈ t, Finsupp.single i 1}

tactic: congr
state_before: σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
⊢ ((powersetCard n univ).biUnion fun t => (Finsupp.single (∑ i ∈ t, Finsupp.single i 1) 1).support) =
    (powersetCard n univ).biUnion fun t => {∑ i ∈ t, Finsupp.single i 1}
state_after: case e_t
σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
⊢ (fun t => (Finsupp.single (∑ i ∈ t, Finsupp.single i 1) 1).support) = fun t => {∑ i ∈ t, Finsupp.single i 1}

tactic: funext
state_before: case e_t
σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
⊢ (fun t => (Finsupp.single (∑ i ∈ t, Finsupp.single i 1) 1).support) = fun t => {∑ i ∈ t, Finsupp.single i 1}
state_after: case e_t.h
σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
x✝ : Finset σ
⊢ (Finsupp.single (∑ i ∈ x✝, Finsupp.single i 1) 1).support = {∑ i ∈ x✝, Finsupp.single i 1}

tactic: exact Finsupp.support_single_ne_zero _ one_ne_zero
state_before: case e_t.h
σ : Type u_1
R : Type u_2
τ : Type u_3
S : Type u_4
inst✝⁵ : CommSemiring R
inst✝⁴ : CommSemiring S
inst✝³ : Fintype σ
inst✝² : Fintype τ
n : ℕ
inst✝¹ : DecidableEq σ
inst✝ : Nontrivial R
x✝ : Finset σ
⊢ (Finsupp.single (∑ i ∈ x✝, Finsupp.single i 1) 1).support = {∑ i ∈ x✝, Finsupp.single i 1}
state_after: no goals
Theorem: Polynomial.natSepDegree_X_pow_char_pow_sub_C
File: Mathlib/FieldTheory/SeparableDegree.lean

tactic: rw [← expand_X, ← expand_C (q ^ n), ← map_sub, natSepDegree_expand, natSepDegree_X_sub_C]
state_before: F : Type u
E : Type v
inst✝⁵ : Field F
inst✝⁴ : Field E
inst✝³ : Algebra F E
K : Type w
inst✝² : Field K
inst✝¹ : Algebra F K
f : F[X]
q : ℕ
inst✝ : ExpChar F q
n : ℕ
y : F
⊢ (X ^ q ^ n - C y).natSepDegree = 1
state_after: no goals
Theorem: WithTop.le_of_add_le_add_right
File: Mathlib/Algebra/Order/Monoid/WithTop.lean

tactic: lift a to α using ha
state_before: α : Type u
β : Type v
inst✝² : Add α
a b c d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
ha : a ≠ ⊤
h : b + a ≤ c + a
⊢ b ≤ c
state_after: case intro
α : Type u
β : Type v
inst✝² : Add α
b c d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : α
h : b + ↑a ≤ c + ↑a
⊢ b ≤ c

tactic: cases c
state_before: case intro
α : Type u
β : Type v
inst✝² : Add α
b c d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : α
h : b + ↑a ≤ c + ↑a
⊢ b ≤ c
state_after: case intro.top
α : Type u
β : Type v
inst✝² : Add α
b d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : α
h : b + ↑a ≤ ⊤ + ↑a
⊢ b ≤ ⊤

case intro.coe
α : Type u
β : Type v
inst✝² : Add α
b d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a a✝ : α
h : b + ↑a ≤ ↑a✝ + ↑a
⊢ b ≤ ↑a✝

tactic: exact le_top
state_before: case intro.top
α : Type u
β : Type v
inst✝² : Add α
b d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a : α
h : b + ↑a ≤ ⊤ + ↑a
⊢ b ≤ ⊤
state_after: no goals

tactic: cases b
state_before: case intro.coe
α : Type u
β : Type v
inst✝² : Add α
b d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a a✝ : α
h : b + ↑a ≤ ↑a✝ + ↑a
⊢ b ≤ ↑a✝
state_after: case intro.coe.top
α : Type u
β : Type v
inst✝² : Add α
d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a a✝ : α
h : ⊤ + ↑a ≤ ↑a✝ + ↑a
⊢ ⊤ ≤ ↑a✝

case intro.coe.coe
α : Type u
β : Type v
inst✝² : Add α
d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a a✝¹ a✝ : α
h : ↑a✝ + ↑a ≤ ↑a✝¹ + ↑a
⊢ ↑a✝ ≤ ↑a✝¹

tactic: exact (not_top_le_coe _ h).elim
state_before: case intro.coe.top
α : Type u
β : Type v
inst✝² : Add α
d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a a✝ : α
h : ⊤ + ↑a ≤ ↑a✝ + ↑a
⊢ ⊤ ≤ ↑a✝
state_after: no goals

tactic: exact coe_le_coe.2 (le_of_add_le_add_right <| coe_le_coe.1 h)
state_before: case intro.coe.coe
α : Type u
β : Type v
inst✝² : Add α
d : WithTop α
x y : α
inst✝¹ : LE α
inst✝ : ContravariantClass α α (swap fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
a a✝¹ a✝ : α
h : ↑a✝ + ↑a ≤ ↑a✝¹ + ↑a
⊢ ↑a✝ ≤ ↑a✝¹
state_after: no goals
Theorem: Metric.exists_isLocalMin_mem_ball
File: Mathlib/Topology/MetricSpace/ProperSpace.lean

tactic: simp_rw [← closedBall_diff_ball] at hf1
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝⁴ : PseudoMetricSpace α
inst✝³ : ProperSpace α
inst✝² : TopologicalSpace β
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderTopology β
f : α → β
a z : α
r : ℝ
hf : ContinuousOn f (closedBall a r)
hz : z ∈ closedBall a r
hf1 : ∀ z' ∈ sphere a r, f z < f z'
⊢ ∃ z ∈ ball a r, IsLocalMin f z
state_after: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝⁴ : PseudoMetricSpace α
inst✝³ : ProperSpace α
inst✝² : TopologicalSpace β
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderTopology β
f : α → β
a z : α
r : ℝ
hf : ContinuousOn f (closedBall a r)
hz : z ∈ closedBall a r
hf1 : ∀ z' ∈ closedBall a r \ ball a r, f z < f z'
⊢ ∃ z ∈ ball a r, IsLocalMin f z

tactic: exact (isCompact_closedBall a r).exists_isLocalMin_mem_open ball_subset_closedBall hf hz hf1
  isOpen_ball
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝⁴ : PseudoMetricSpace α
inst✝³ : ProperSpace α
inst✝² : TopologicalSpace β
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderTopology β
f : α → β
a z : α
r : ℝ
hf : ContinuousOn f (closedBall a r)
hz : z ∈ closedBall a r
hf1 : ∀ z' ∈ closedBall a r \ ball a r, f z < f z'
⊢ ∃ z ∈ ball a r, IsLocalMin f z
state_after: no goals
Theorem: Batteries.UnionFind.rankD_set
File: .lake/packages/batteries/Batteries/Data/UnionFind/Basic.lean

tactic: rw [rankD]
state_before: arr : Array UFNode
x : Fin arr.size
v : UFNode
i : Nat
⊢ rankD (arr.set x v) i = if ↑x = i then v.rank else rankD arr i
state_after: arr : Array UFNode
x : Fin arr.size
v : UFNode
i : Nat
⊢ (if h : i < (arr.set x v).size then ((arr.set x v).get ⟨i, h⟩).rank else 0) = if ↑x = i then v.rank else rankD arr i

tactic: simp [Array.get_eq_getElem, rankD]
state_before: arr : Array UFNode
x : Fin arr.size
v : UFNode
i : Nat
⊢ (if h : i < (arr.set x v).size then ((arr.set x v).get ⟨i, h⟩).rank else 0) = if ↑x = i then v.rank else rankD arr i
state_after: arr : Array UFNode
x : Fin arr.size
v : UFNode
i : Nat
⊢ (if h : i < arr.size then (arr.set x v)[i].rank else 0) =
    if ↑x = i then v.rank else if h : i < arr.size then arr[i].rank else 0

tactic: split <;> [split <;> simp [Array.get_set, *]; split <;> [(subst i; cases ‹¬_› x.2); rfl]]
state_before: arr : Array UFNode
x : Fin arr.size
v : UFNode
i : Nat
⊢ (if h : i < arr.size then (arr.set x v)[i].rank else 0) =
    if ↑x = i then v.rank else if h : i < arr.size then arr[i].rank else 0
state_after: no goals

tactic: subst i
state_before: case isFalse.isTrue
arr : Array UFNode
x : Fin arr.size
v : UFNode
i : Nat
h✝¹ : ¬i < arr.size
h✝ : ↑x = i
⊢ 0 = v.rank
state_after: case isFalse.isTrue
arr : Array UFNode
x : Fin arr.size
v : UFNode
h✝ : ¬↑x < arr.size
⊢ 0 = v.rank

tactic: cases ‹¬_› x.2
state_before: case isFalse.isTrue
arr : Array UFNode
x : Fin arr.size
v : UFNode
h✝ : ¬↑x < arr.size
⊢ 0 = v.rank
state_after: no goals
Theorem: Polynomial.separable_of_subsingleton
File: Mathlib/FieldTheory/Separable.lean

tactic: simp [Separable, IsCoprime, eq_iff_true_of_subsingleton]
state_before: R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Subsingleton R
f : R[X]
⊢ f.Separable
state_after: no goals
Theorem: AlgebraCat.forget₂_map_associator_inv
File: Mathlib/Algebra/Category/AlgebraCat/Monoidal.lean

tactic: rfl
state_before: R : Type u
inst✝ : CommRing R
X Y Z : AlgebraCat R
⊢ (forget₂ (AlgebraCat R) (ModuleCat R)).map (α_ X Y Z).inv =
    (α_ ((forget₂ (AlgebraCat R) (ModuleCat R)).obj X) ((forget₂ (AlgebraCat R) (ModuleCat R)).obj Y)
        ((forget₂ (AlgebraCat R) (ModuleCat R)).obj Z)).inv
state_after: no goals
Theorem: Substring.Valid.data_drop
File: .lake/packages/batteries/Batteries/Data/String/Lemmas.lean

tactic: simp [(h.drop _).toString, h.toString]
state_before: x✝¹ : Substring
h✝ : x✝¹.Valid
x✝ : Nat
w✝² w✝¹ w✝ : List Char
h : ValidFor w✝² w✝¹ w✝ x✝¹
⊢ (x✝¹.drop x✝).toString.data = List.drop x✝ x✝¹.toString.data
state_after: no goals
Theorem: Equiv.Perm.IsSwap.isCycle
File: Mathlib/GroupTheory/Perm/Cycle/Basic.lean

tactic: rintro ⟨x, y, hxy, rfl⟩
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
f g : Perm α
x y : α
inst✝ : DecidableEq α
⊢ f.IsSwap → f.IsCycle
state_after: case intro.intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
g : Perm α
x✝ y✝ : α
inst✝ : DecidableEq α
x y : α
hxy : x ≠ y
⊢ (swap x y).IsCycle

tactic: exact isCycle_swap hxy
state_before: case intro.intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
g : Perm α
x✝ y✝ : α
inst✝ : DecidableEq α
x y : α
hxy : x ≠ y
⊢ (swap x y).IsCycle
state_after: no goals
Theorem: CategoryTheory.exact_iff_shortComplex_exact
File: Mathlib/Algebra/Homology/ShortComplex/Exact.lean

tactic: simp only [Abelian.exact_iff, S.zero,
  S.exact_iff_kernel_ι_comp_cokernel_π_zero, true_and]
state_before: C : Type u_1
D : Type u_2
inst✝⁵ : Category.{?u.17849, u_1} C
inst✝⁴ : Category.{?u.17853, u_2} D
inst✝³ : HasZeroMorphisms C
inst✝² : HasZeroMorphisms D
S✝ S₁ S₂ : ShortComplex C
A : Type u_3
inst✝¹ : Category.{u_4, u_3} A
inst✝ : Abelian A
S : ShortComplex A
⊢ CategoryTheory.Exact S.f S.g ↔ S.Exact
state_after: no goals
Theorem: Monoid.exponent_eq_iSup_orderOf'
File: Mathlib/GroupTheory/Exponent.lean

tactic: split_ifs with h
state_before: G : Type u
inst✝ : CommMonoid G
⊢ exponent G = if ∃ g, orderOf g = 0 then 0 else ⨆ g, orderOf g
state_after: case pos
G : Type u
inst✝ : CommMonoid G
h : ∃ g, orderOf g = 0
⊢ exponent G = 0

case neg
G : Type u
inst✝ : CommMonoid G
h : ¬∃ g, orderOf g = 0
⊢ exponent G = ⨆ g, orderOf g

tactic: obtain ⟨g, hg⟩ := h
state_before: case pos
G : Type u
inst✝ : CommMonoid G
h : ∃ g, orderOf g = 0
⊢ exponent G = 0
state_after: case pos.intro
G : Type u
inst✝ : CommMonoid G
g : G
hg : orderOf g = 0
⊢ exponent G = 0

tactic: exact exponent_eq_zero_of_order_zero hg
state_before: case pos.intro
G : Type u
inst✝ : CommMonoid G
g : G
hg : orderOf g = 0
⊢ exponent G = 0
state_after: no goals

tactic: have := not_exists.mp h
state_before: case neg
G : Type u
inst✝ : CommMonoid G
h : ¬∃ g, orderOf g = 0
⊢ exponent G = ⨆ g, orderOf g
state_after: case neg
G : Type u
inst✝ : CommMonoid G
h : ¬∃ g, orderOf g = 0
this : ∀ (x : G), ¬orderOf x = 0
⊢ exponent G = ⨆ g, orderOf g

tactic: exact exponent_eq_iSup_orderOf fun g => Ne.bot_lt <| this g
state_before: case neg
G : Type u
inst✝ : CommMonoid G
h : ¬∃ g, orderOf g = 0
this : ∀ (x : G), ¬orderOf x = 0
⊢ exponent G = ⨆ g, orderOf g
state_after: no goals
Theorem: UpperHalfPlane.dist_le_iff_le_sinh
File: Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean

tactic: rw [← div_le_div_right (zero_lt_two' ℝ), ← sinh_le_sinh, sinh_half_dist]
state_before: z w : ℍ
r R : ℝ
⊢ dist z w ≤ r ↔ dist ↑z ↑w / (2 * √(z.im * w.im)) ≤ sinh (r / 2)
state_after: no goals
Theorem: Set.tsub_encard_le_encard_diff
File: Mathlib/Data/Set/Card.lean

tactic: rw [tsub_le_iff_left, add_comm]
state_before: α : Type u_1
β : Type u_2
s✝ t✝ s t : Set α
⊢ s.encard - t.encard ≤ (s \ t).encard
state_after: α : Type u_1
β : Type u_2
s✝ t✝ s t : Set α
⊢ s.encard ≤ (s \ t).encard + t.encard

tactic: apply encard_le_encard_diff_add_encard
state_before: α : Type u_1
β : Type u_2
s✝ t✝ s t : Set α
⊢ s.encard ≤ (s \ t).encard + t.encard
state_after: no goals
Theorem: lt_mul_iff_one_lt_left
File: Mathlib/Algebra/Order/GroupWithZero/Unbundled.lean

tactic: rw [one_mul]
state_before: α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : MulPosStrictMono α
inst✝ : MulPosReflectLT α
a0 : 0 < a
⊢ a < b * a ↔ 1 * a < b * a
state_after: no goals
Theorem: Set.Finite.toFinset_univ
File: Mathlib/Data/Set/Finite.lean

tactic: simp
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
a : α
hs : s.Finite
ht : t.Finite
inst✝ : Fintype α
h : univ.Finite
⊢ h.toFinset = Finset.univ
state_after: no goals
Theorem: List.toFinset_surj_on
File: Mathlib/Data/Finset/Basic.lean

tactic: rintro ⟨⟨l⟩, hl⟩ _
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
l l' : List α
a : α
⊢ Set.SurjOn toFinset {l | l.Nodup} Set.univ
state_after: case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
l✝ l' : List α
a : α
val✝ : Multiset α
l : List α
hl : Multiset.Nodup (Quot.mk Setoid.r l)
a✝ : { val := Quot.mk Setoid.r l, nodup := hl } ∈ Set.univ
⊢ { val := Quot.mk Setoid.r l, nodup := hl } ∈ toFinset '' {l | l.Nodup}

tactic: exact ⟨l, hl, (toFinset_eq hl).symm⟩
state_before: case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
l✝ l' : List α
a : α
val✝ : Multiset α
l : List α
hl : Multiset.Nodup (Quot.mk Setoid.r l)
a✝ : { val := Quot.mk Setoid.r l, nodup := hl } ∈ Set.univ
⊢ { val := Quot.mk Setoid.r l, nodup := hl } ∈ toFinset '' {l | l.Nodup}
state_after: no goals
Theorem: Associates.mem_factors'_of_dvd
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: obtain ⟨q, hq, hpq⟩ := exists_mem_factors_of_dvd ha0 hp hd
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
⊢ ⟨Associates.mk p, ⋯⟩ ∈ factors' a
state_after: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ⟨Associates.mk p, ⋯⟩ ∈ factors' a

tactic: apply Multiset.mem_pmap.mpr
state_before: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ⟨Associates.mk p, ⋯⟩ ∈ factors' a
state_after: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ∃ a_1, ∃ (h : a_1 ∈ UniqueFactorizationMonoid.factors a), ⟨Associates.mk a_1, ⋯⟩ = ⟨Associates.mk p, ⋯⟩

tactic: use q
state_before: case intro.intro
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ∃ a_1, ∃ (h : a_1 ∈ UniqueFactorizationMonoid.factors a), ⟨Associates.mk a_1, ⋯⟩ = ⟨Associates.mk p, ⋯⟩
state_after: case h
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ∃ (h : q ∈ UniqueFactorizationMonoid.factors a), ⟨Associates.mk q, ⋯⟩ = ⟨Associates.mk p, ⋯⟩

tactic: use hq
state_before: case h
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ∃ (h : q ∈ UniqueFactorizationMonoid.factors a), ⟨Associates.mk q, ⋯⟩ = ⟨Associates.mk p, ⋯⟩
state_after: case h
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ⟨Associates.mk q, ⋯⟩ = ⟨Associates.mk p, ⋯⟩

tactic: exact Subtype.eq (Eq.symm (mk_eq_mk_iff_associated.mpr hpq))
state_before: case h
α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
inst✝ : UniqueFactorizationMonoid α
a p : α
ha0 : a ≠ 0
hp : Irreducible p
hd : p ∣ a
q : α
hq : q ∈ UniqueFactorizationMonoid.factors a
hpq : p ~ᵤ q
⊢ ⟨Associates.mk q, ⋯⟩ = ⟨Associates.mk p, ⋯⟩
state_after: no goals
Theorem: lt_inv_self_iff
File: Mathlib/Algebra/Order/Group/Defs.lean

tactic: simp [← not_iff_not]
state_before: α : Type u
inst✝ : LinearOrderedCommGroup α
a b c : α
⊢ a < a⁻¹ ↔ a < 1
state_after: no goals
Theorem: Polynomial.natDegree_eq_zero_iff_degree_le_zero
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: rw [← nonpos_iff_eq_zero, natDegree_le_iff_degree_le, Nat.cast_zero]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
⊢ p.natDegree = 0 ↔ p.degree ≤ 0
state_after: no goals
Theorem: Asymptotics.isBigO_snd_prod'
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

tactic: simpa [IsBigO_def, IsBigOWith_def] using isBigO_snd_prod (E' := E') (F' := F')
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
E' : Type u_6
F' : Type u_7
G' : Type u_8
E'' : Type u_9
F'' : Type u_10
G'' : Type u_11
E''' : Type u_12
R : Type u_13
R' : Type u_14
𝕜 : Type u_15
𝕜' : Type u_16
inst✝¹³ : Norm E
inst✝¹² : Norm F
inst✝¹¹ : Norm G
inst✝¹⁰ : SeminormedAddCommGroup E'
inst✝⁹ : SeminormedAddCommGroup F'
inst✝⁸ : SeminormedAddCommGroup G'
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedAddCommGroup F''
inst✝⁵ : NormedAddCommGroup G''
inst✝⁴ : SeminormedRing R
inst✝³ : SeminormedAddGroup E'''
inst✝² : SeminormedRing R'
inst✝¹ : NormedDivisionRing 𝕜
inst✝ : NormedDivisionRing 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f'✝ : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
f' : α → E' × F'
⊢ (fun x => (f' x).2) =O[l] f'
state_after: no goals
Theorem: Finset.affineCombinationLineMapWeights_self
File: Mathlib/LinearAlgebra/AffineSpace/Combination.lean

tactic: simp [affineCombinationLineMapWeights]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
S : AffineSpace V P
ι : Type u_4
s : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝ : DecidableEq ι
i : ι
c : k
⊢ affineCombinationLineMapWeights i i c = affineCombinationSingleWeights k i
state_after: no goals
Theorem: isEmpty_pi
File: Mathlib/Logic/IsEmpty.lean

tactic: simp only [← not_nonempty_iff, Classical.nonempty_pi, not_forall]
state_before: α : Sort u_1
β : Sort u_2
γ : Sort u_3
π : α → Sort u_4
⊢ IsEmpty ((a : α) → π a) ↔ ∃ a, IsEmpty (π a)
state_after: no goals
Theorem: CliffordAlgebra.foldl_ι
File: Mathlib/LinearAlgebra/CliffordAlgebra/Fold.lean

tactic: rw [← foldr_reverse, reverse_ι, foldr_ι]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : AddCommGroup N
inst✝¹ : Module R M
inst✝ : Module R N
Q : QuadraticForm R M
f : M →ₗ[R] N →ₗ[R] N
hf : ∀ (m : M) (x : N), (f m) ((f m) x) = Q m • x
n : N
m : M
⊢ ((foldl Q f hf) n) ((ι Q) m) = (f m) n
state_after: no goals
Theorem: Int.even_xor'_odd
File: Mathlib/Algebra/Ring/Int.lean

tactic: cases even_or_odd n with
| inl h => exact Or.inl ⟨h, even_iff_not_odd.mp h⟩
| inr h => exact Or.inr ⟨h, odd_iff_not_even.mp h⟩
state_before: m n✝ n : ℤ
⊢ Xor' (Even n) (Odd n)
state_after: no goals

tactic: exact Or.inl ⟨h, even_iff_not_odd.mp h⟩
state_before: case inl
m n✝ n : ℤ
h : Even n
⊢ Xor' (Even n) (Odd n)
state_after: no goals

tactic: exact Or.inr ⟨h, odd_iff_not_even.mp h⟩
state_before: case inr
m n✝ n : ℤ
h : Odd n
⊢ Xor' (Even n) (Odd n)
state_after: no goals
Theorem: Complex.exp_eq_one_iff
File: Mathlib/Analysis/SpecialFunctions/Complex/Log.lean

tactic: constructor
state_before: x : ℂ
⊢ cexp x = 1 ↔ ∃ n, x = ↑n * (2 * ↑π * I)
state_after: case mp
x : ℂ
⊢ cexp x = 1 → ∃ n, x = ↑n * (2 * ↑π * I)

case mpr
x : ℂ
⊢ (∃ n, x = ↑n * (2 * ↑π * I)) → cexp x = 1

tactic: intro h
state_before: case mp
x : ℂ
⊢ cexp x = 1 → ∃ n, x = ↑n * (2 * ↑π * I)
state_after: case mp
x : ℂ
h : cexp x = 1
⊢ ∃ n, x = ↑n * (2 * ↑π * I)

tactic: rcases existsUnique_add_zsmul_mem_Ioc Real.two_pi_pos x.im (-π) with ⟨n, hn, -⟩
state_before: case mp
x : ℂ
h : cexp x = 1
⊢ ∃ n, x = ↑n * (2 * ↑π * I)
state_after: case mp.intro.intro
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ ∃ n, x = ↑n * (2 * ↑π * I)

tactic: use -n
state_before: case mp.intro.intro
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ ∃ n, x = ↑n * (2 * ↑π * I)
state_after: case h
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ x = ↑(-n) * (2 * ↑π * I)

tactic: rw [Int.cast_neg, neg_mul, eq_neg_iff_add_eq_zero]
state_before: case h
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ x = ↑(-n) * (2 * ↑π * I)
state_after: case h
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ x + ↑n * (2 * ↑π * I) = 0

tactic: have : (x + n * (2 * π * I)).im ∈ Set.Ioc (-π) π := by simpa [two_mul, mul_add] using hn
state_before: case h
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ x + ↑n * (2 * ↑π * I) = 0
state_after: case h
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
this : (x + ↑n * (2 * ↑π * I)).im ∈ Set.Ioc (-π) π
⊢ x + ↑n * (2 * ↑π * I) = 0

tactic: rw [← log_exp this.1 this.2, exp_periodic.int_mul n, h, log_one]
state_before: case h
x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
this : (x + ↑n * (2 * ↑π * I)).im ∈ Set.Ioc (-π) π
⊢ x + ↑n * (2 * ↑π * I) = 0
state_after: no goals

tactic: simpa [two_mul, mul_add] using hn
state_before: x : ℂ
h : cexp x = 1
n : ℤ
hn : x.im + n • (2 * π) ∈ Set.Ioc (-π) (-π + 2 * π)
⊢ (x + ↑n * (2 * ↑π * I)).im ∈ Set.Ioc (-π) π
state_after: no goals

tactic: rintro ⟨n, rfl⟩
state_before: case mpr
x : ℂ
⊢ (∃ n, x = ↑n * (2 * ↑π * I)) → cexp x = 1
state_after: case mpr.intro
n : ℤ
⊢ cexp (↑n * (2 * ↑π * I)) = 1

tactic: exact (exp_periodic.int_mul n).eq.trans exp_zero
state_before: case mpr.intro
n : ℤ
⊢ cexp (↑n * (2 * ↑π * I)) = 1
state_after: no goals