1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: AddCommGroup.equiv_directSum_zmod_of_finite'
File: Mathlib/GroupTheory/FiniteAbelian.lean

tactic: classical
obtain ⟨ι, hι, p, hp, n, ⟨e⟩⟩ := AddCommGroup.equiv_directSum_zmod_of_finite G
refine ⟨{i : ι // n i ≠ 0}, inferInstance, fun i ↦ p i ^ n i, ?_,
  ⟨e.trans (directSumNeZeroMulEquiv ι _ _).symm⟩⟩
rintro ⟨i, hi⟩
exact one_lt_pow (hp _).one_lt hi
state_before: G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
⊢ ∃ ι x n, (∀ (i : ι), 1 < n i) ∧ Nonempty (G ≃+ ⨁ (i : ι), ZMod (n i))
state_after: no goals

tactic: obtain ⟨ι, hι, p, hp, n, ⟨e⟩⟩ := AddCommGroup.equiv_directSum_zmod_of_finite G
state_before: G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
⊢ ∃ ι x n, (∀ (i : ι), 1 < n i) ∧ Nonempty (G ≃+ ⨁ (i : ι), ZMod (n i))
state_after: case intro.intro.intro.intro.intro.intro
G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
ι : Type
hι : Fintype ι
p : ι → ℕ
hp : ∀ (i : ι), Nat.Prime (p i)
n : ι → ℕ
e : G ≃+ ⨁ (i : ι), ZMod (p i ^ n i)
⊢ ∃ ι x n, (∀ (i : ι), 1 < n i) ∧ Nonempty (G ≃+ ⨁ (i : ι), ZMod (n i))

tactic: refine ⟨{i : ι // n i ≠ 0}, inferInstance, fun i ↦ p i ^ n i, ?_,
  ⟨e.trans (directSumNeZeroMulEquiv ι _ _).symm⟩⟩
state_before: case intro.intro.intro.intro.intro.intro
G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
ι : Type
hι : Fintype ι
p : ι → ℕ
hp : ∀ (i : ι), Nat.Prime (p i)
n : ι → ℕ
e : G ≃+ ⨁ (i : ι), ZMod (p i ^ n i)
⊢ ∃ ι x n, (∀ (i : ι), 1 < n i) ∧ Nonempty (G ≃+ ⨁ (i : ι), ZMod (n i))
state_after: case intro.intro.intro.intro.intro.intro
G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
ι : Type
hι : Fintype ι
p : ι → ℕ
hp : ∀ (i : ι), Nat.Prime (p i)
n : ι → ℕ
e : G ≃+ ⨁ (i : ι), ZMod (p i ^ n i)
⊢ ∀ (i : { i // n i ≠ 0 }), 1 < (fun i => p ↑i ^ n ↑i) i

tactic: rintro ⟨i, hi⟩
state_before: case intro.intro.intro.intro.intro.intro
G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
ι : Type
hι : Fintype ι
p : ι → ℕ
hp : ∀ (i : ι), Nat.Prime (p i)
n : ι → ℕ
e : G ≃+ ⨁ (i : ι), ZMod (p i ^ n i)
⊢ ∀ (i : { i // n i ≠ 0 }), 1 < (fun i => p ↑i ^ n ↑i) i
state_after: case intro.intro.intro.intro.intro.intro.mk
G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
ι : Type
hι : Fintype ι
p : ι → ℕ
hp : ∀ (i : ι), Nat.Prime (p i)
n : ι → ℕ
e : G ≃+ ⨁ (i : ι), ZMod (p i ^ n i)
i : ι
hi : n i ≠ 0
⊢ 1 < (fun i => p ↑i ^ n ↑i) ⟨i, hi⟩

tactic: exact one_lt_pow (hp _).one_lt hi
state_before: case intro.intro.intro.intro.intro.intro.mk
G✝ : Type u
inst✝² : AddCommGroup G✝
G : Type u_1
inst✝¹ : AddCommGroup G
inst✝ : Finite G
ι : Type
hι : Fintype ι
p : ι → ℕ
hp : ∀ (i : ι), Nat.Prime (p i)
n : ι → ℕ
e : G ≃+ ⨁ (i : ι), ZMod (p i ^ n i)
i : ι
hi : n i ≠ 0
⊢ 1 < (fun i => p ↑i ^ n ↑i) ⟨i, hi⟩
state_after: no goals
Theorem: SetTheory.PGame.numeric_powHalf
File: Mathlib/SetTheory/Surreal/Dyadic.lean

tactic: induction' n with n hn
state_before: n : ℕ
⊢ (powHalf n).Numeric
state_after: case zero

⊢ (powHalf 0).Numeric

case succ
n : ℕ
hn : (powHalf n).Numeric
⊢ (powHalf (n + 1)).Numeric

tactic: exact numeric_one
state_before: case zero

⊢ (powHalf 0).Numeric
state_after: no goals

tactic: constructor
state_before: case succ
n : ℕ
hn : (powHalf n).Numeric
⊢ (powHalf (n + 1)).Numeric
state_after: case succ.left
n : ℕ
hn : (powHalf n).Numeric
⊢ ∀ (i j : PUnit.{u_1 + 1}), 0 i < (fun x => powHalf n) j

case succ.right
n : ℕ
hn : (powHalf n).Numeric
⊢ (∀ (i : PUnit.{u_1 + 1}), (0 i).Numeric) ∧ ∀ (j : PUnit.{u_1 + 1}), ((fun x => powHalf n) j).Numeric

tactic: simpa using hn.moveLeft_lt default
state_before: case succ.left
n : ℕ
hn : (powHalf n).Numeric
⊢ ∀ (i j : PUnit.{u_1 + 1}), 0 i < (fun x => powHalf n) j
state_after: no goals

tactic: exact ⟨fun _ => numeric_zero, fun _ => hn⟩
state_before: case succ.right
n : ℕ
hn : (powHalf n).Numeric
⊢ (∀ (i : PUnit.{u_1 + 1}), (0 i).Numeric) ∧ ∀ (j : PUnit.{u_1 + 1}), ((fun x => powHalf n) j).Numeric
state_after: no goals
Theorem: sup_eq_half_smul_add_add_abs_sub'
File: Mathlib/Algebra/Order/Module/OrderedSMul.lean

tactic: letI := invertibleOfNonzero (two_ne_zero' α)
state_before: ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
𝕜 : Type u_5
R : Type u_6
M : Type u_7
N : Type u_8
α : Type u_9
β : Type u_10
inst✝⁵ : DivisionSemiring α
inst✝⁴ : NeZero 2
inst✝³ : Lattice β
inst✝² : AddCommGroup β
inst✝¹ : Module α β
inst✝ : CovariantClass β β (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
x y : β
⊢ x ⊔ y = 2⁻¹ • (x + y + |y - x|)
state_after: ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
𝕜 : Type u_5
R : Type u_6
M : Type u_7
N : Type u_8
α : Type u_9
β : Type u_10
inst✝⁵ : DivisionSemiring α
inst✝⁴ : NeZero 2
inst✝³ : Lattice β
inst✝² : AddCommGroup β
inst✝¹ : Module α β
inst✝ : CovariantClass β β (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
x y : β
this : Invertible 2 := invertibleOfNonzero ⋯
⊢ x ⊔ y = 2⁻¹ • (x + y + |y - x|)

tactic: exact sup_eq_half_smul_add_add_abs_sub α x y
state_before: ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
γ : Type u_4
𝕜 : Type u_5
R : Type u_6
M : Type u_7
N : Type u_8
α : Type u_9
β : Type u_10
inst✝⁵ : DivisionSemiring α
inst✝⁴ : NeZero 2
inst✝³ : Lattice β
inst✝² : AddCommGroup β
inst✝¹ : Module α β
inst✝ : CovariantClass β β (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
x y : β
this : Invertible 2 := invertibleOfNonzero ⋯
⊢ x ⊔ y = 2⁻¹ • (x + y + |y - x|)
state_after: no goals
Theorem: CategoryTheory.MonoidalOfChosenFiniteProducts.tensor_comp
File: Mathlib/CategoryTheory/Monoidal/OfChosenFiniteProducts/Basic.lean

tactic: apply IsLimit.hom_ext (ℬ _ _).isLimit
state_before: C : Type u
inst✝ : Category.{v, u} C
X Y : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C
f₁ : X₁ ⟶ Y₁
f₂ : X₂ ⟶ Y₂
g₁ : Y₁ ⟶ Z₁
g₂ : Y₂ ⟶ Z₂
⊢ tensorHom ℬ (f₁ ≫ g₁) (f₂ ≫ g₂) = tensorHom ℬ f₁ f₂ ≫ tensorHom ℬ g₁ g₂
state_after: C : Type u
inst✝ : Category.{v, u} C
X Y : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C
f₁ : X₁ ⟶ Y₁
f₂ : X₂ ⟶ Y₂
g₁ : Y₁ ⟶ Z₁
g₂ : Y₂ ⟶ Z₂
⊢ ∀ (j : Discrete WalkingPair),
    tensorHom ℬ (f₁ ≫ g₁) (f₂ ≫ g₂) ≫ (ℬ Z₁ Z₂).cone.π.app j =
      (tensorHom ℬ f₁ f₂ ≫ tensorHom ℬ g₁ g₂) ≫ (ℬ Z₁ Z₂).cone.π.app j

tactic: dsimp [tensorHom]
state_before: case mk.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C
f₁ : X₁ ⟶ Y₁
f₂ : X₂ ⟶ Y₂
g₁ : Y₁ ⟶ Z₁
g₂ : Y₂ ⟶ Z₂
⊢ tensorHom ℬ (f₁ ≫ g₁) (f₂ ≫ g₂) ≫ (ℬ Z₁ Z₂).cone.π.app { as := WalkingPair.right } =
    (tensorHom ℬ f₁ f₂ ≫ tensorHom ℬ g₁ g₂) ≫ (ℬ Z₁ Z₂).cone.π.app { as := WalkingPair.right }
state_after: case mk.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C
f₁ : X₁ ⟶ Y₁
f₂ : X₂ ⟶ Y₂
g₁ : Y₁ ⟶ Z₁
g₂ : Y₂ ⟶ Z₂
⊢ (ℬ Z₁ Z₂).isLimit.lift
        (BinaryFan.mk (BinaryFan.fst (ℬ X₁ X₂).cone ≫ f₁ ≫ g₁) (BinaryFan.snd (ℬ X₁ X₂).cone ≫ f₂ ≫ g₂)) ≫
      BinaryFan.snd (ℬ Z₁ Z₂).cone =
    ((ℬ Y₁ Y₂).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X₁ X₂).cone ≫ f₁) (BinaryFan.snd (ℬ X₁ X₂).cone ≫ f₂)) ≫
        (ℬ Z₁ Z₂).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ Y₁ Y₂).cone ≫ g₁) (BinaryFan.snd (ℬ Y₁ Y₂).cone ≫ g₂))) ≫
      BinaryFan.snd (ℬ Z₁ Z₂).cone

tactic: simp
state_before: case mk.right
C : Type u
inst✝ : Category.{v, u} C
X Y : C
𝒯 : LimitCone (Functor.empty C)
ℬ : (X Y : C) → LimitCone (pair X Y)
X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C
f₁ : X₁ ⟶ Y₁
f₂ : X₂ ⟶ Y₂
g₁ : Y₁ ⟶ Z₁
g₂ : Y₂ ⟶ Z₂
⊢ (ℬ Z₁ Z₂).isLimit.lift
        (BinaryFan.mk (BinaryFan.fst (ℬ X₁ X₂).cone ≫ f₁ ≫ g₁) (BinaryFan.snd (ℬ X₁ X₂).cone ≫ f₂ ≫ g₂)) ≫
      BinaryFan.snd (ℬ Z₁ Z₂).cone =
    ((ℬ Y₁ Y₂).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ X₁ X₂).cone ≫ f₁) (BinaryFan.snd (ℬ X₁ X₂).cone ≫ f₂)) ≫
        (ℬ Z₁ Z₂).isLimit.lift (BinaryFan.mk (BinaryFan.fst (ℬ Y₁ Y₂).cone ≫ g₁) (BinaryFan.snd (ℬ Y₁ Y₂).cone ≫ g₂))) ≫
      BinaryFan.snd (ℬ Z₁ Z₂).cone
state_after: no goals
Theorem: LinearIsometry.re_apply_eq_re_of_add_conj_eq
File: Mathlib/Analysis/Complex/Isometry.lean

tactic: simpa [ext_iff, add_re, add_im, conj_re, conj_im, ← two_mul,
  show (2 : ℝ) ≠ 0 by simp [two_ne_zero]] using (h₃ z).symm
state_before: f : ℂ →ₗᵢ[ℝ] ℂ
h₃ : ∀ (z : ℂ), z + (starRingEnd ℂ) z = f z + (starRingEnd ℂ) (f z)
z : ℂ
⊢ (f z).re = z.re
state_after: no goals

tactic: simp [two_ne_zero]
state_before: f : ℂ →ₗᵢ[ℝ] ℂ
h₃ : ∀ (z : ℂ), z + (starRingEnd ℂ) z = f z + (starRingEnd ℂ) (f z)
z : ℂ
⊢ 2 ≠ 0
state_after: no goals
Theorem: Function.iterate_prod_map
File: Mathlib/Dynamics/PeriodicPts.lean

tactic: induction n <;> simp [*, Prod.map_comp_map]
state_before: α : Type u_1
β : Type u_2
f✝ : α → α
g✝ : β → β
x : α × β
a : α
b : β
m n✝ : ℕ
f : α → α
g : β → β
n : ℕ
⊢ (Prod.map f g)^[n] = Prod.map f^[n] g^[n]
state_after: no goals
Theorem: Polynomial.addSubmonoid_closure_setOf_eq_monomial
File: Mathlib/Algebra/Polynomial/Basic.lean

tactic: apply top_unique
state_before: R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ AddSubmonoid.closure {p | ∃ n a, p = (monomial n) a} = ⊤
state_after: case h
R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ ⊤ ≤ AddSubmonoid.closure {p | ∃ n a, p = (monomial n) a}

tactic: rw [← AddSubmonoid.map_equiv_top (toFinsuppIso R).symm.toAddEquiv, ←
  Finsupp.add_closure_setOf_eq_single, AddMonoidHom.map_mclosure]
state_before: case h
R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ ⊤ ≤ AddSubmonoid.closure {p | ∃ n a, p = (monomial n) a}
state_after: case h
R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ AddSubmonoid.closure (⇑(toFinsuppIso R).symm.toAddEquiv '' {f | ∃ a b, f = Finsupp.single a b}) ≤
    AddSubmonoid.closure {p | ∃ n a, p = (monomial n) a}

tactic: refine AddSubmonoid.closure_mono (Set.image_subset_iff.2 ?_)
state_before: case h
R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ AddSubmonoid.closure (⇑(toFinsuppIso R).symm.toAddEquiv '' {f | ∃ a b, f = Finsupp.single a b}) ≤
    AddSubmonoid.closure {p | ∃ n a, p = (monomial n) a}
state_after: case h
R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ {f | ∃ a b, f = Finsupp.single a b} ⊆ ⇑(toFinsuppIso R).symm.toAddEquiv ⁻¹' {p | ∃ n a, p = (monomial n) a}

tactic: rintro _ ⟨n, a, rfl⟩
state_before: case h
R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ {f | ∃ a b, f = Finsupp.single a b} ⊆ ⇑(toFinsuppIso R).symm.toAddEquiv ⁻¹' {p | ∃ n a, p = (monomial n) a}
state_after: case h.intro.intro
R : Type u
a✝ b : R
m n✝ : ℕ
inst✝ : Semiring R
p q : R[X]
n : ℕ
a : R
⊢ Finsupp.single n a ∈ ⇑(toFinsuppIso R).symm.toAddEquiv ⁻¹' {p | ∃ n a, p = (monomial n) a}

tactic: exact ⟨n, a, Polynomial.ofFinsupp_single _ _⟩
state_before: case h.intro.intro
R : Type u
a✝ b : R
m n✝ : ℕ
inst✝ : Semiring R
p q : R[X]
n : ℕ
a : R
⊢ Finsupp.single n a ∈ ⇑(toFinsuppIso R).symm.toAddEquiv ⁻¹' {p | ∃ n a, p = (monomial n) a}
state_after: no goals
Theorem: Rat.cast_eq_zero
File: Mathlib/Data/Rat/Cast/CharZero.lean

tactic: rw [← cast_zero, cast_inj]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝¹ : DivisionRing α
inst✝ : CharZero α
n : ℚ
⊢ ↑n = 0 ↔ n = 0
state_after: no goals
Theorem: Submodule.fg_biSup
File: Mathlib/RingTheory/Finiteness.lean

tactic: simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
state_before: R : Type u_1
M : Type u_2
inst✝² : Semiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
ι : Type u_3
s : Finset ι
N : ι → Submodule R M
h : ∀ i ∈ s, (N i).FG
⊢ (⨆ i ∈ s, N i).FG
state_after: no goals
Theorem: CategoryTheory.Sheaf.isLocallyInjective_iff_injective
File: Mathlib/CategoryTheory/Sites/LocallyInjective.lean

tactic: apply Presieve.isSeparated_of_isSheaf
state_before: C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ : Sheaf J D
φ : F₁ ⟶ F₂
inst✝ : J.HasSheafCompose (forget D)
⊢ Presieve.IsSeparated J (F₁.val ⋙ forget D)
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ : Sheaf J D
φ : F₁ ⟶ F₂
inst✝ : J.HasSheafCompose (forget D)
⊢ Presieve.IsSheaf J (F₁.val ⋙ forget D)

tactic: rw [← isSheaf_iff_isSheaf_of_type]
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ : Sheaf J D
φ : F₁ ⟶ F₂
inst✝ : J.HasSheafCompose (forget D)
⊢ Presieve.IsSheaf J (F₁.val ⋙ forget D)
state_after: case h
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ : Sheaf J D
φ : F₁ ⟶ F₂
inst✝ : J.HasSheafCompose (forget D)
⊢ Presheaf.IsSheaf J (F₁.val ⋙ forget D)

tactic: exact ((sheafCompose J (forget D)).obj F₁).2
state_before: case h
C : Type u
inst✝³ : Category.{v, u} C
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : ConcreteCategory D
J : GrothendieckTopology C
F₁ F₂ : Sheaf J D
φ : F₁ ⟶ F₂
inst✝ : J.HasSheafCompose (forget D)
⊢ Presheaf.IsSheaf J (F₁.val ⋙ forget D)
state_after: no goals
Theorem: Ideal.iInf_sup_eq_top
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: rw [sup_comm, sup_iInf_eq_top]
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ (⨅ i ∈ s, J i) ⊔ I = ⊤
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ ∀ i ∈ s, I ⊔ J i = ⊤

tactic: intro i hi
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
⊢ ∀ i ∈ s, I ⊔ J i = ⊤
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
i : ι
hi : i ∈ s
⊢ I ⊔ J i = ⊤

tactic: rw [sup_comm, h i hi]
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ i ∈ s, J i ⊔ I = ⊤
i : ι
hi : i ∈ s
⊢ I ⊔ J i = ⊤
state_after: no goals
Theorem: PowerSeries.coeff_succ_X_mul
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: simp only [coeff, Finsupp.single_add, add_comm n 1]
state_before: R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (coeff R (n + 1)) (X * φ) = (coeff R n) φ
state_after: R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (MvPowerSeries.coeff R (single () 1 + single () n)) (X * φ) = (MvPowerSeries.coeff R (single () n)) φ

tactic: convert φ.coeff_add_monomial_mul (single () 1) (single () n) _
state_before: R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (MvPowerSeries.coeff R (single () 1 + single () n)) (X * φ) = (MvPowerSeries.coeff R (single () n)) φ
state_after: case h.e'_3
R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (MvPowerSeries.coeff R (single () n)) φ = 1 * (MvPowerSeries.coeff R (single () n)) φ

tactic: rw [one_mul]
state_before: case h.e'_3
R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (MvPowerSeries.coeff R (single () n)) φ = 1 * (MvPowerSeries.coeff R (single () n)) φ
state_after: case h.e'_3
R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (MvPowerSeries.coeff R (single () n)) φ = (MvPowerSeries.coeff R (single () n)) φ

tactic: rfl
state_before: case h.e'_3
R : Type u_1
inst✝ : Semiring R
n : ℕ
φ : R⟦X⟧
⊢ (MvPowerSeries.coeff R (single () n)) φ = (MvPowerSeries.coeff R (single () n)) φ
state_after: no goals
Theorem: isEmpty_psum
File: Mathlib/Logic/IsEmpty.lean

tactic: simp only [← not_nonempty_iff, nonempty_psum, not_or]
state_before: α✝ : Sort u_1
β✝ : Sort u_2
γ : Sort u_3
α : Sort u_4
β : Sort u_5
⊢ IsEmpty (α ⊕' β) ↔ IsEmpty α ∧ IsEmpty β
state_after: no goals
Theorem: Multiset.union_add_inter
File: Mathlib/Data/Multiset/Basic.lean

tactic: apply _root_.le_antisymm
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s ∪ t + s ∩ t = s + t
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s ∪ t + s ∩ t ≤ s + t

case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s + t ≤ s ∪ t + s ∩ t

tactic: rw [union_add_distrib]
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s ∪ t + s ∩ t ≤ s + t
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s + s ∩ t ∪ (t + s ∩ t) ≤ s + t

tactic: refine union_le (add_le_add_left (inter_le_right _ _) _) ?_
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s + s ∩ t ∪ (t + s ∩ t) ≤ s + t
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ t + s ∩ t ≤ s + t

tactic: rw [add_comm]
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ t + s ∩ t ≤ s + t
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s ∩ t + t ≤ s + t

tactic: exact add_le_add_right (inter_le_left _ _) _
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s ∩ t + t ≤ s + t
state_after: no goals

tactic: rw [add_comm, add_inter_distrib]
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s + t ≤ s ∪ t + s ∩ t
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ t + s ≤ (s ∪ t + s) ∩ (s ∪ t + t)

tactic: refine le_inter (add_le_add_right (le_union_right _ _) _) ?_
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ t + s ≤ (s ∪ t + s) ∩ (s ∪ t + t)
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ t + s ≤ s ∪ t + t

tactic: rw [add_comm]
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ t + s ≤ s ∪ t + t
state_after: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s + t ≤ s ∪ t + t

tactic: exact add_le_add_right (le_union_left _ _) _
state_before: case a
α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a b : α
s t : Multiset α
⊢ s + t ≤ s ∪ t + t
state_after: no goals
Theorem: PowerSeries.trunc_trunc_of_le
File: Mathlib/RingTheory/PowerSeries/Trunc.lean

tactic: ext d
state_before: R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
⊢ trunc n ↑(trunc m f) = trunc n f
state_after: case a
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
⊢ (trunc n ↑(trunc m f)).coeff d = (trunc n f).coeff d

tactic: rw [coeff_trunc, coeff_trunc, coeff_coe]
state_before: case a
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
⊢ (trunc n ↑(trunc m f)).coeff d = (trunc n f).coeff d
state_after: case a
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
⊢ (if d < n then (trunc m f).coeff d else 0) = if d < n then (coeff R d) f else 0

tactic: split_ifs with h
state_before: case a
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
⊢ (if d < n then (trunc m f).coeff d else 0) = if d < n then (coeff R d) f else 0
state_after: case pos
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
h : d < n
⊢ (trunc m f).coeff d = (coeff R d) f

case neg
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
h : ¬d < n
⊢ 0 = 0

tactic: rw [coeff_trunc, if_pos <| lt_of_lt_of_le h hnm]
state_before: case pos
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
h : d < n
⊢ (trunc m f).coeff d = (coeff R d) f
state_after: no goals

tactic: rfl
state_before: case neg
R✝ : Type u_1
R : Type u_2
inst✝ : CommSemiring R
n m : ℕ
f : R⟦X⟧
hnm : autoParam (n ≤ m) _auto✝
d : ℕ
h : ¬d < n
⊢ 0 = 0
state_after: no goals
Theorem: isClosed_imp
File: Mathlib/Topology/Basic.lean

tactic: simpa only [imp_iff_not_or] using hp.isClosed_compl.union hq
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p✝ p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
p q : X → Prop
hp : IsOpen {x | p x}
hq : IsClosed {x | q x}
⊢ IsClosed {x | p x → q x}
state_after: no goals
Theorem: nonempty_sections_of_finite_inverse_system
File: Mathlib/CategoryTheory/CofilteredSystem.lean

tactic: cases isEmpty_or_nonempty J
state_before: J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
⊢ F.sections.Nonempty
state_after: case inl
J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : IsEmpty J
⊢ F.sections.Nonempty

case inr
J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : Nonempty J
⊢ F.sections.Nonempty

tactic: haveI : IsEmpty Jᵒᵖ := ⟨fun j => isEmptyElim j.unop⟩
state_before: case inl
J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : IsEmpty J
⊢ F.sections.Nonempty
state_after: case inl
J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : IsEmpty J
this : IsEmpty Jᵒᵖ
⊢ F.sections.Nonempty

tactic: exact ⟨isEmptyElim, by apply isEmptyElim⟩
state_before: case inl
J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : IsEmpty J
this : IsEmpty Jᵒᵖ
⊢ F.sections.Nonempty
state_after: no goals

tactic: apply isEmptyElim
state_before: J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : IsEmpty J
this : IsEmpty Jᵒᵖ
⊢ (fun a => isEmptyElim a) ∈ F.sections
state_after: no goals

tactic: exact nonempty_sections_of_finite_cofiltered_system _
state_before: case inr
J : Type u
inst✝³ : Preorder J
inst✝² : IsDirected J fun x x_1 => x ≤ x_1
F : Jᵒᵖ ⥤ Type v
inst✝¹ : ∀ (j : Jᵒᵖ), Finite (F.obj j)
inst✝ : ∀ (j : Jᵒᵖ), Nonempty (F.obj j)
h✝ : Nonempty J
⊢ F.sections.Nonempty
state_after: no goals
Theorem: Pretrivialization.symm_trans_target_eq
File: Mathlib/Topology/FiberBundle/Trivialization.lean

tactic: rw [← PartialEquiv.symm_source, symm_trans_symm, symm_trans_source_eq, inter_comm]
state_before: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝¹ : TopologicalSpace B
inst✝ : TopologicalSpace F
proj : Z → B
e✝ : Pretrivialization F proj
x : Z
e e' : Pretrivialization F proj
⊢ (e.symm.trans e'.toPartialEquiv).target = (e.baseSet ∩ e'.baseSet) ×ˢ univ
state_after: no goals