1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: X_pow_sub_C_splits_of_isPrimitiveRoot
File: Mathlib/FieldTheory/KummerExtension.lean

tactic: cases n.eq_zero_or_pos with
| inl hn =>
  rw [hn, pow_zero, ← C.map_one, ← map_sub]
  exact splits_C _ _
| inr hn =>
  rw [splits_iff_card_roots, ← nthRoots, hζ.card_nthRoots, natDegree_X_pow_sub_C, if_pos ⟨α, e⟩]
state_before: K : Type u
inst✝ : Field K
n : ℕ
ζ : K
hζ : IsPrimitiveRoot ζ n
α a : K
e : α ^ n = a
⊢ Splits (RingHom.id K) (X ^ n - C a)
state_after: no goals

tactic: rw [hn, pow_zero, ← C.map_one, ← map_sub]
state_before: case inl
K : Type u
inst✝ : Field K
n : ℕ
ζ : K
hζ : IsPrimitiveRoot ζ n
α a : K
e : α ^ n = a
hn : n = 0
⊢ Splits (RingHom.id K) (X ^ n - C a)
state_after: case inl
K : Type u
inst✝ : Field K
n : ℕ
ζ : K
hζ : IsPrimitiveRoot ζ n
α a : K
e : α ^ n = a
hn : n = 0
⊢ Splits (RingHom.id K) (C (1 - a))

tactic: exact splits_C _ _
state_before: case inl
K : Type u
inst✝ : Field K
n : ℕ
ζ : K
hζ : IsPrimitiveRoot ζ n
α a : K
e : α ^ n = a
hn : n = 0
⊢ Splits (RingHom.id K) (C (1 - a))
state_after: no goals

tactic: rw [splits_iff_card_roots, ← nthRoots, hζ.card_nthRoots, natDegree_X_pow_sub_C, if_pos ⟨α, e⟩]
state_before: case inr
K : Type u
inst✝ : Field K
n : ℕ
ζ : K
hζ : IsPrimitiveRoot ζ n
α a : K
e : α ^ n = a
hn : n > 0
⊢ Splits (RingHom.id K) (X ^ n - C a)
state_after: no goals
Theorem: CategoryTheory.Limits.epi_image_of_epi
File: Mathlib/CategoryTheory/Limits/Shapes/Images.lean

tactic: rw [← image.fac f] at E
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
X Y : C
f : X ⟶ Y
inst✝ : HasImage f
E : Epi f
⊢ Epi (image.ι f)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
X Y : C
f : X ⟶ Y
inst✝ : HasImage f
E : Epi (factorThruImage f ≫ image.ι f)
⊢ Epi (image.ι f)

tactic: exact epi_of_epi (factorThruImage f) (image.ι f)
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ : C
f✝ : X✝ ⟶ Y✝
X Y : C
f : X ⟶ Y
inst✝ : HasImage f
E : Epi (factorThruImage f ≫ image.ι f)
⊢ Epi (image.ι f)
state_after: no goals
Theorem: cross_dot_cross
File: Mathlib/LinearAlgebra/CrossProduct.lean

tactic: simp_rw [cross_apply, vec3_dotProduct]
state_before: R : Type u_1
inst✝ : CommRing R
u v w x : Fin 3 → R
⊢ (crossProduct u) v ⬝ᵥ (crossProduct w) x = u ⬝ᵥ w * v ⬝ᵥ x - u ⬝ᵥ x * v ⬝ᵥ w
state_after: R : Type u_1
inst✝ : CommRing R
u v w x : Fin 3 → R
⊢ ![u 1 * v 2 - u 2 * v 1, u 2 * v 0 - u 0 * v 2, u 0 * v 1 - u 1 * v 0] 0 *
          ![w 1 * x 2 - w 2 * x 1, w 2 * x 0 - w 0 * x 2, w 0 * x 1 - w 1 * x 0] 0 +
        ![u 1 * v 2 - u 2 * v 1, u 2 * v 0 - u 0 * v 2, u 0 * v 1 - u 1 * v 0] 1 *
          ![w 1 * x 2 - w 2 * x 1, w 2 * x 0 - w 0 * x 2, w 0 * x 1 - w 1 * x 0] 1 +
      ![u 1 * v 2 - u 2 * v 1, u 2 * v 0 - u 0 * v 2, u 0 * v 1 - u 1 * v 0] 2 *
        ![w 1 * x 2 - w 2 * x 1, w 2 * x 0 - w 0 * x 2, w 0 * x 1 - w 1 * x 0] 2 =
    (u 0 * w 0 + u 1 * w 1 + u 2 * w 2) * (v 0 * x 0 + v 1 * x 1 + v 2 * x 2) -
      (u 0 * x 0 + u 1 * x 1 + u 2 * x 2) * (v 0 * w 0 + v 1 * w 1 + v 2 * w 2)

tactic: norm_num
state_before: R : Type u_1
inst✝ : CommRing R
u v w x : Fin 3 → R
⊢ ![u 1 * v 2 - u 2 * v 1, u 2 * v 0 - u 0 * v 2, u 0 * v 1 - u 1 * v 0] 0 *
          ![w 1 * x 2 - w 2 * x 1, w 2 * x 0 - w 0 * x 2, w 0 * x 1 - w 1 * x 0] 0 +
        ![u 1 * v 2 - u 2 * v 1, u 2 * v 0 - u 0 * v 2, u 0 * v 1 - u 1 * v 0] 1 *
          ![w 1 * x 2 - w 2 * x 1, w 2 * x 0 - w 0 * x 2, w 0 * x 1 - w 1 * x 0] 1 +
      ![u 1 * v 2 - u 2 * v 1, u 2 * v 0 - u 0 * v 2, u 0 * v 1 - u 1 * v 0] 2 *
        ![w 1 * x 2 - w 2 * x 1, w 2 * x 0 - w 0 * x 2, w 0 * x 1 - w 1 * x 0] 2 =
    (u 0 * w 0 + u 1 * w 1 + u 2 * w 2) * (v 0 * x 0 + v 1 * x 1 + v 2 * x 2) -
      (u 0 * x 0 + u 1 * x 1 + u 2 * x 2) * (v 0 * w 0 + v 1 * w 1 + v 2 * w 2)
state_after: R : Type u_1
inst✝ : CommRing R
u v w x : Fin 3 → R
⊢ (u 1 * v 2 - u 2 * v 1) * (w 1 * x 2 - w 2 * x 1) + (u 2 * v 0 - u 0 * v 2) * (w 2 * x 0 - w 0 * x 2) +
      (u 0 * v 1 - u 1 * v 0) * (w 0 * x 1 - w 1 * x 0) =
    (u 0 * w 0 + u 1 * w 1 + u 2 * w 2) * (v 0 * x 0 + v 1 * x 1 + v 2 * x 2) -
      (u 0 * x 0 + u 1 * x 1 + u 2 * x 2) * (v 0 * w 0 + v 1 * w 1 + v 2 * w 2)

tactic: ring
state_before: R : Type u_1
inst✝ : CommRing R
u v w x : Fin 3 → R
⊢ (u 1 * v 2 - u 2 * v 1) * (w 1 * x 2 - w 2 * x 1) + (u 2 * v 0 - u 0 * v 2) * (w 2 * x 0 - w 0 * x 2) +
      (u 0 * v 1 - u 1 * v 0) * (w 0 * x 1 - w 1 * x 0) =
    (u 0 * w 0 + u 1 * w 1 + u 2 * w 2) * (v 0 * x 0 + v 1 * x 1 + v 2 * x 2) -
      (u 0 * x 0 + u 1 * x 1 + u 2 * x 2) * (v 0 * w 0 + v 1 * w 1 + v 2 * w 2)
state_after: no goals
Theorem: Nat.not_even_bit1
File: Mathlib/Algebra/Ring/Parity.lean

tactic: simp [bit1, parity_simps]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n✝ n : ℕ
⊢ ¬Even (bit1 n)
state_after: no goals
Theorem: AffineBasis.exists_affine_subbasis
File: Mathlib/LinearAlgebra/AffineSpace/Basis.lean

tactic: obtain ⟨s, hst, h_tot, h_ind⟩ := exists_affineIndependent k V t
state_before: ι : Type u_1
ι' : Type u_2
k : Type u_3
V : Type u_4
P : Type u_5
inst✝³ : AddCommGroup V
inst✝² : AffineSpace V P
inst✝¹ : DivisionRing k
inst✝ : Module k V
t : Set P
ht : affineSpan k t = ⊤
⊢ ∃ s ⊆ t, ∃ b, ⇑b = Subtype.val
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
k : Type u_3
V : Type u_4
P : Type u_5
inst✝³ : AddCommGroup V
inst✝² : AffineSpace V P
inst✝¹ : DivisionRing k
inst✝ : Module k V
t : Set P
ht : affineSpan k t = ⊤
s : Set P
hst : s ⊆ t
h_tot : affineSpan k s = affineSpan k t
h_ind : AffineIndependent k Subtype.val
⊢ ∃ s ⊆ t, ∃ b, ⇑b = Subtype.val

tactic: refine ⟨s, hst, ⟨(↑), h_ind, ?_⟩, rfl⟩
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
k : Type u_3
V : Type u_4
P : Type u_5
inst✝³ : AddCommGroup V
inst✝² : AffineSpace V P
inst✝¹ : DivisionRing k
inst✝ : Module k V
t : Set P
ht : affineSpan k t = ⊤
s : Set P
hst : s ⊆ t
h_tot : affineSpan k s = affineSpan k t
h_ind : AffineIndependent k Subtype.val
⊢ ∃ s ⊆ t, ∃ b, ⇑b = Subtype.val
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
k : Type u_3
V : Type u_4
P : Type u_5
inst✝³ : AddCommGroup V
inst✝² : AffineSpace V P
inst✝¹ : DivisionRing k
inst✝ : Module k V
t : Set P
ht : affineSpan k t = ⊤
s : Set P
hst : s ⊆ t
h_tot : affineSpan k s = affineSpan k t
h_ind : AffineIndependent k Subtype.val
⊢ affineSpan k (range Subtype.val) = ⊤

tactic: rw [Subtype.range_coe, h_tot, ht]
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
k : Type u_3
V : Type u_4
P : Type u_5
inst✝³ : AddCommGroup V
inst✝² : AffineSpace V P
inst✝¹ : DivisionRing k
inst✝ : Module k V
t : Set P
ht : affineSpan k t = ⊤
s : Set P
hst : s ⊆ t
h_tot : affineSpan k s = affineSpan k t
h_ind : AffineIndependent k Subtype.val
⊢ affineSpan k (range Subtype.val) = ⊤
state_after: no goals
Theorem: IntermediateField.adjoin_finset_isCompactElement
File: Mathlib/FieldTheory/Adjoin.lean

tactic: rw [← biSup_adjoin_simple]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S✝ : Set E
α : E
S : Finset E
⊢ IsCompactElement (adjoin F ↑S)
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S✝ : Set E
α : E
S : Finset E
⊢ IsCompactElement (⨆ x ∈ ↑S, F⟮x⟯)

tactic: simp_rw [Finset.mem_coe, ← Finset.sup_eq_iSup]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S✝ : Set E
α : E
S : Finset E
⊢ IsCompactElement (⨆ x ∈ ↑S, F⟮x⟯)
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S✝ : Set E
α : E
S : Finset E
⊢ IsCompactElement (S.sup fun a => F⟮a⟯)

tactic: exact isCompactElement_finsetSup S fun x _ => adjoin_simple_isCompactElement x
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S✝ : Set E
α : E
S : Finset E
⊢ IsCompactElement (S.sup fun a => F⟮a⟯)
state_after: no goals
Theorem: List.iterate_eq_nil
File: Mathlib/Data/List/Iterate.lean

tactic: rw [← length_eq_zero, length_iterate]
state_before: α : Type u_1
f : α → α
a : α
n : ℕ
⊢ iterate f a n = [] ↔ n = 0
state_after: no goals
Theorem: AlgebraicGeometry.PresheafedSpace.IsOpenImmersion.isIso_of_subset
File: Mathlib/Geometry/RingedSpace/OpenImmersion.lean

tactic: have : U = H.base_open.isOpenMap.functor.obj ((Opens.map f.base).obj U) := by
  ext1
  exact (Set.inter_eq_left.mpr hU).symm.trans Set.image_preimage_eq_inter_range.symm
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : PresheafedSpace C
f : X ⟶ Y
H : IsOpenImmersion f
U : Opens ↑↑Y
hU : ↑U ⊆ Set.range ⇑f.base
⊢ IsIso (f.c.app { unop := U })
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y : PresheafedSpace C
f : X ⟶ Y
H : IsOpenImmersion f
U : Opens ↑↑Y
hU : ↑U ⊆ Set.range ⇑f.base
this : U = ⋯.functor.obj ((Opens.map f.base).obj U)
⊢ IsIso (f.c.app { unop := U })

tactic: convert H.c_iso ((Opens.map f.base).obj U)
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : PresheafedSpace C
f : X ⟶ Y
H : IsOpenImmersion f
U : Opens ↑↑Y
hU : ↑U ⊆ Set.range ⇑f.base
this : U = ⋯.functor.obj ((Opens.map f.base).obj U)
⊢ IsIso (f.c.app { unop := U })
state_after: no goals

tactic: ext1
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : PresheafedSpace C
f : X ⟶ Y
H : IsOpenImmersion f
U : Opens ↑↑Y
hU : ↑U ⊆ Set.range ⇑f.base
⊢ U = ⋯.functor.obj ((Opens.map f.base).obj U)
state_after: case h
C : Type u
inst✝ : Category.{v, u} C
X Y : PresheafedSpace C
f : X ⟶ Y
H : IsOpenImmersion f
U : Opens ↑↑Y
hU : ↑U ⊆ Set.range ⇑f.base
⊢ ↑U = ↑(⋯.functor.obj ((Opens.map f.base).obj U))

tactic: exact (Set.inter_eq_left.mpr hU).symm.trans Set.image_preimage_eq_inter_range.symm
state_before: case h
C : Type u
inst✝ : Category.{v, u} C
X Y : PresheafedSpace C
f : X ⟶ Y
H : IsOpenImmersion f
U : Opens ↑↑Y
hU : ↑U ⊆ Set.range ⇑f.base
⊢ ↑U = ↑(⋯.functor.obj ((Opens.map f.base).obj U))
state_after: no goals
Theorem: MeasureTheory.integrable_stoppedValue_of_mem_finset
File: Mathlib/Probability/Process/Stopping.lean

tactic: simp_rw [← memℒp_one_iff_integrable] at hu ⊢
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
μ : Measure Ω
τ σ : Ω → ι
E : Type u_4
p : ℝ≥0∞
u : ι → Ω → E
inst✝¹ : PartialOrder ι
ℱ : Filtration ι m
inst✝ : NormedAddCommGroup E
hτ : IsStoppingTime ℱ τ
hu : ∀ (n : ι), Integrable (u n) μ
s : Finset ι
hbdd : ∀ (ω : Ω), τ ω ∈ s
⊢ Integrable (stoppedValue u τ) μ
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
μ : Measure Ω
τ σ : Ω → ι
E : Type u_4
p : ℝ≥0∞
u : ι → Ω → E
inst✝¹ : PartialOrder ι
ℱ : Filtration ι m
inst✝ : NormedAddCommGroup E
hτ : IsStoppingTime ℱ τ
s : Finset ι
hbdd : ∀ (ω : Ω), τ ω ∈ s
hu : ∀ (n : ι), Memℒp (u n) 1 μ
⊢ Memℒp (stoppedValue u τ) 1 μ

tactic: exact memℒp_stoppedValue_of_mem_finset hτ hu hbdd
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
μ : Measure Ω
τ σ : Ω → ι
E : Type u_4
p : ℝ≥0∞
u : ι → Ω → E
inst✝¹ : PartialOrder ι
ℱ : Filtration ι m
inst✝ : NormedAddCommGroup E
hτ : IsStoppingTime ℱ τ
s : Finset ι
hbdd : ∀ (ω : Ω), τ ω ∈ s
hu : ∀ (n : ι), Memℒp (u n) 1 μ
⊢ Memℒp (stoppedValue u τ) 1 μ
state_after: no goals
Theorem: Matrix.transpose_fromRows
File: Mathlib/Data/Matrix/ColumnRowPartitioned.lean

tactic: ext i (j | j) <;> simp
state_before: R : Type u_1
m : Type u_2
m₁ : Type u_3
m₂ : Type u_4
n : Type u_5
n₁ : Type u_6
n₂ : Type u_7
inst✝¹¹ : Fintype m
inst✝¹⁰ : Fintype m₁
inst✝⁹ : Fintype m₂
inst✝⁸ : Fintype n
inst✝⁷ : Fintype n₁
inst✝⁶ : Fintype n₂
inst✝⁵ : DecidableEq m
inst✝⁴ : DecidableEq m₁
inst✝³ : DecidableEq m₂
inst✝² : DecidableEq n
inst✝¹ : DecidableEq n₁
inst✝ : DecidableEq n₂
A₁ : Matrix m₁ n R
A₂ : Matrix m₂ n R
⊢ (A₁.fromRows A₂)ᵀ = A₁ᵀ.fromColumns A₂ᵀ
state_after: no goals
Theorem: Set.eq_preimage_subtype_val_iff
File: Mathlib/Data/Set/Image.lean

tactic: rw [s_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
g : β → γ
p : α → Prop
s : Set (Subtype p)
t : Set α
s_eq : s = Subtype.val ⁻¹' t
x : α
h : p x
⊢ ⟨x, h⟩ ∈ s ↔ x ∈ t
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
g : β → γ
p : α → Prop
s : Set (Subtype p)
t : Set α
s_eq : s = Subtype.val ⁻¹' t
x : α
h : p x
⊢ ⟨x, h⟩ ∈ Subtype.val ⁻¹' t ↔ x ∈ t

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
g : β → γ
p : α → Prop
s : Set (Subtype p)
t : Set α
s_eq : s = Subtype.val ⁻¹' t
x : α
h : p x
⊢ ⟨x, h⟩ ∈ Subtype.val ⁻¹' t ↔ x ∈ t
state_after: no goals

tactic: simp [h]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
g : β → γ
p : α → Prop
s : Set (Subtype p)
t : Set α
h : ∀ (x : α) (h : p x), ⟨x, h⟩ ∈ s ↔ x ∈ t
x✝ : Subtype p
x : α
hx : p x
⊢ ⟨x, hx⟩ ∈ s ↔ ⟨x, hx⟩ ∈ Subtype.val ⁻¹' t
state_after: no goals
Theorem: WithBot.image_coe_Icc
File: Mathlib/Order/Interval/Set/WithBotTop.lean

tactic: rw [← preimage_coe_Icc, image_preimage_eq_inter_range, range_coe,
  inter_eq_self_of_subset_left
    (Subset.trans Icc_subset_Ici_self <| Ici_subset_Ioi.2 <| bot_lt_coe a)]
state_before: α : Type u_1
inst✝ : Preorder α
a b : α
⊢ some '' Icc a b = Icc ↑a ↑b
state_after: no goals
Theorem: MeasureTheory.OuterMeasure.restrict_mono
File: Mathlib/MeasureTheory/OuterMeasure/Operations.lean

tactic: simp only [restrict_apply]
state_before: α : Type u_1
β : Type u_2
m✝ : OuterMeasure α
s t : Set α
h : s ⊆ t
m m' : OuterMeasure α
hm : m ≤ m'
u : Set α
⊢ ((restrict s) m) u ≤ ((restrict t) m') u
state_after: α : Type u_1
β : Type u_2
m✝ : OuterMeasure α
s t : Set α
h : s ⊆ t
m m' : OuterMeasure α
hm : m ≤ m'
u : Set α
⊢ m (u ∩ s) ≤ m' (u ∩ t)

tactic: exact (hm _).trans (m'.mono <| inter_subset_inter_right _ h)
state_before: α : Type u_1
β : Type u_2
m✝ : OuterMeasure α
s t : Set α
h : s ⊆ t
m m' : OuterMeasure α
hm : m ≤ m'
u : Set α
⊢ m (u ∩ s) ≤ m' (u ∩ t)
state_after: no goals
Theorem: LaurentPolynomial.degree_eq_bot_iff
File: Mathlib/Algebra/Polynomial/Laurent.lean

tactic: refine ⟨fun h => ?_, fun h => by rw [h, degree_zero]⟩
state_before: R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
⊢ f.degree = ⊥ ↔ f = 0
state_after: R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.degree = ⊥
⊢ f = 0

tactic: rw [degree, Finset.max_eq_sup_withBot] at h
state_before: R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.degree = ⊥
⊢ f = 0
state_after: R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.support.sup WithBot.some = ⊥
⊢ f = 0

tactic: ext n
state_before: R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.support.sup WithBot.some = ⊥
⊢ f = 0
state_after: case h
R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.support.sup WithBot.some = ⊥
n : ℤ
⊢ f n = 0 n

tactic: refine not_not.mp fun f0 => ?_
state_before: case h
R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.support.sup WithBot.some = ⊥
n : ℤ
⊢ f n = 0 n
state_after: case h
R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.support.sup WithBot.some = ⊥
n : ℤ
f0 : ¬f n = 0 n
⊢ False

tactic: simp_rw [Finset.sup_eq_bot_iff, Finsupp.mem_support_iff, Ne, WithBot.coe_ne_bot] at h
state_before: case h
R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f.support.sup WithBot.some = ⊥
n : ℤ
f0 : ¬f n = 0 n
⊢ False
state_after: case h
R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
n : ℤ
f0 : ¬f n = 0 n
h : ∀ (s : ℤ), ¬f s = 0 → False
⊢ False

tactic: exact h n f0
state_before: case h
R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
n : ℤ
f0 : ¬f n = 0 n
h : ∀ (s : ℤ), ¬f s = 0 → False
⊢ False
state_after: no goals

tactic: rw [h, degree_zero]
state_before: R : Type u_1
inst✝ : Semiring R
f : R[T;T⁻¹]
h : f = 0
⊢ f.degree = ⊥
state_after: no goals
Theorem: Int.cast_ofNat
File: Mathlib/Data/Int/Cast/Basic.lean

tactic: simpa only [OfNat.ofNat] using AddGroupWithOne.intCast_ofNat (R := R) n
state_before: R : Type u
inst✝¹ : AddGroupWithOne R
n : ℕ
inst✝ : n.AtLeastTwo
⊢ ↑(OfNat.ofNat n) = OfNat.ofNat n
state_after: no goals
Theorem: Configuration.ProjectivePlane.pointCount_eq_pointCount
File: Mathlib/Combinatorics/Configuration.lean

tactic: apply lineCount_eq_lineCount (Dual P)
state_before: P : Type u_1
L : Type u_2
inst✝³ : Membership P L
inst✝² : ProjectivePlane P L
inst✝¹ : Finite P
inst✝ : Finite L
l m : L
⊢ pointCount P l = pointCount P m
state_after: no goals
Theorem: NumberField.mixedEmbedding.convexBodySumFun_continuous
File: Mathlib/NumberTheory/NumberField/CanonicalEmbedding/ConvexBody.lean

tactic: refine continuous_finset_sum Finset.univ fun w ↦ ?_
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
⊢ Continuous convexBodySumFun
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * (normAtPlace w) a

tactic: obtain hw | hw := isReal_or_isComplex w
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * (normAtPlace w) a
state_after: case inl
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
hw : w.IsReal
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * (normAtPlace w) a

case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
hw : w.IsComplex
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * (normAtPlace w) a

tactic: simp only [normAtPlace_apply_isReal, normAtPlace_apply_isComplex, hw]
state_before: case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
hw : w.IsComplex
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * (normAtPlace w) a
state_after: case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
hw : w.IsComplex
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * ‖a.2 ⟨w, ⋯⟩‖

tactic: fun_prop
state_before: case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
w : InfinitePlace K
hw : w.IsComplex
⊢ w ∈ Finset.univ → Continuous fun a => ↑w.mult * ‖a.2 ⟨w, ⋯⟩‖
state_after: no goals
Theorem: Set.le_einfsep_image_iff
File: Mathlib/Topology/MetricSpace/Infsep.lean

tactic: simp_rw [le_einfsep_iff, forall_mem_image]
state_before: α : Type u_1
β : Type u_2
inst✝ : EDist α
x y : α
s✝ t : Set α
d : ℝ≥0∞
f : β → α
s : Set β
⊢ d ≤ (f '' s).einfsep ↔ ∀ x ∈ s, ∀ y ∈ s, f x ≠ f y → d ≤ edist (f x) (f y)
state_after: no goals
Theorem: Prefunctor.congr_map
File: Mathlib/Combinatorics/Quiver/Basic.lean

tactic: rw [h]
state_before: U : Type u_1
V : Type u_2
inst✝¹ : Quiver U
inst✝ : Quiver V
F : U ⥤q V
X Y : U
f g : X ⟶ Y
h : f = g
⊢ F.map f = F.map g
state_after: no goals
Theorem: Polynomial.natDegree_add_le_iff_right
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

tactic: rw [add_comm]
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n✝ : ℕ
inst✝ : Semiring R
p✝ q✝ r : R[X]
n : ℕ
p q : R[X]
pn : p.natDegree ≤ n
⊢ (p + q).natDegree ≤ n ↔ q.natDegree ≤ n
state_after: R : Type u
S : Type v
ι : Type w
a b : R
m n✝ : ℕ
inst✝ : Semiring R
p✝ q✝ r : R[X]
n : ℕ
p q : R[X]
pn : p.natDegree ≤ n
⊢ (q + p).natDegree ≤ n ↔ q.natDegree ≤ n

tactic: exact natDegree_add_le_iff_left _ _ pn
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n✝ : ℕ
inst✝ : Semiring R
p✝ q✝ r : R[X]
n : ℕ
p q : R[X]
pn : p.natDegree ≤ n
⊢ (q + p).natDegree ≤ n ↔ q.natDegree ≤ n
state_after: no goals
Theorem: Set.Ioi_diff_Ioi
File: Mathlib/Order/Interval/Set/Basic.lean

tactic: rw [diff_eq, compl_Ioi, Ioi_inter_Iic]
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrder α
a a₁ a₂ b b₁ b₂ c d : α
⊢ Ioi a \ Ioi b = Ioc a b
state_after: no goals
Theorem: WeierstrassCurve.Jacobian.dblXYZ_of_Y_eq
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

tactic: erw [dblXYZ_of_Y_eq' hQz hx hy hy', smul_fin3, mul_one, mul_one, mul_zero]
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P Q : Fin 3 → F
hQz : Q z ≠ 0
hx : P x * Q z ^ 2 = Q x * P z ^ 2
hy : P y * Q z ^ 3 = Q y * P z ^ 3
hy' : P y * Q z ^ 3 = W.negY Q * P z ^ 3
⊢ W.dblXYZ P = W.dblU P • ![1, 1, 0]
state_after: no goals
Theorem: Filter.exists_mem_and_iff
File: Mathlib/Order/Filter/Basic.lean

tactic: constructor
state_before: α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
⊢ ((∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u) ↔ ∃ u ∈ f, P u ∧ Q u
state_after: case mp
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
⊢ ((∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u) → ∃ u ∈ f, P u ∧ Q u

case mpr
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
⊢ (∃ u ∈ f, P u ∧ Q u) → (∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u

tactic: rintro ⟨⟨u, huf, hPu⟩, v, hvf, hQv⟩
state_before: case mp
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
⊢ ((∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u) → ∃ u ∈ f, P u ∧ Q u
state_after: case mp.intro.intro.intro.intro.intro
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
u : Set α
huf : u ∈ f
hPu : P u
v : Set α
hvf : v ∈ f
hQv : Q v
⊢ ∃ u ∈ f, P u ∧ Q u

tactic: exact
  ⟨u ∩ v, inter_mem huf hvf, hP inter_subset_left hPu, hQ inter_subset_right hQv⟩
state_before: case mp.intro.intro.intro.intro.intro
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
u : Set α
huf : u ∈ f
hPu : P u
v : Set α
hvf : v ∈ f
hQv : Q v
⊢ ∃ u ∈ f, P u ∧ Q u
state_after: no goals

tactic: rintro ⟨u, huf, hPu, hQu⟩
state_before: case mpr
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
⊢ (∃ u ∈ f, P u ∧ Q u) → (∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u
state_after: case mpr.intro.intro.intro
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
u : Set α
huf : u ∈ f
hPu : P u
hQu : Q u
⊢ (∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u

tactic: exact ⟨⟨u, huf, hPu⟩, u, huf, hQu⟩
state_before: case mpr.intro.intro.intro
α : Type u
f g : Filter α
s t : Set α
P Q : Set α → Prop
hP : Antitone P
hQ : Antitone Q
u : Set α
huf : u ∈ f
hPu : P u
hQu : Q u
⊢ (∃ u ∈ f, P u) ∧ ∃ u ∈ f, Q u
state_after: no goals
Theorem: CategoryTheory.Limits.pushoutCoconeOfLeftIso_ι_app_none
File: Mathlib/CategoryTheory/Limits/Shapes/Pullbacks.lean

tactic: simp
state_before: C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
W X Y Z : C
f : X ⟶ Y
g : X ⟶ Z
inst✝ : IsIso f
⊢ (pushoutCoconeOfLeftIso f g).ι.app none = g
state_after: no goals
Theorem: BoxIntegral.norm_integral_le_of_le_const
File: Mathlib/Analysis/BoxIntegral/Basic.lean

tactic: simpa only [integral_const] using norm_integral_le_of_norm_le hc μ (integrable_const c)
state_before: ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hc : ∀ x ∈ Box.Icc I, ‖f x‖ ≤ c
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
⊢ ‖integral I l f μ.toBoxAdditive.toSMul‖ ≤ (μ ↑I).toReal * c
state_after: no goals
Theorem: WeierstrassCurve.Jacobian.addXYZ_of_Z_eq_zero_left
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

tactic: rw [addXYZ, addX_of_Z_eq_zero_left hPz, addY_of_Z_eq_zero_left hP hPz, addZ_of_Z_eq_zero_left hPz,
  smul_fin3]
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
hP : W'.Equation P
hPz : P z = 0
⊢ W'.addXYZ P Q = (P x * Q z) • Q
state_after: no goals
Theorem: MeromorphicOn.inv_iff
File: Mathlib/Analysis/Analytic/Meromorphic.lean

tactic: simpa only [inv_inv] using h.inv
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
s t : 𝕜 → 𝕜
f g : 𝕜 → E
U : Set 𝕜
hs : MeromorphicOn s U
ht : MeromorphicOn t U
hf : MeromorphicOn f U
hg : MeromorphicOn g U
h : MeromorphicOn s⁻¹ U
⊢ MeromorphicOn s U
state_after: no goals
Theorem: AddCommGroup.sub_modEq_zero
File: Mathlib/Algebra/ModEq.lean

tactic: simp [sub_modEq_iff_modEq_add]
state_before: α : Type u_1
inst✝ : AddCommGroup α
p a a₁ a₂ b b₁ b₂ c : α
n : ℕ
z : ℤ
⊢ a - b ≡ 0 [PMOD p] ↔ a ≡ b [PMOD p]
state_after: no goals