1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: HahnSeries.C_injective
File: Mathlib/RingTheory/HahnSeries/Multiplication.lean

tactic: intro r s rs
state_before: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
⊢ Injective ⇑C
state_after: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
r s : R
rs : C r = C s
⊢ r = s

tactic: rw [HahnSeries.ext_iff, Function.funext_iff] at rs
state_before: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
r s : R
rs : C r = C s
⊢ r = s
state_after: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
r s : R
rs : ∀ (a : Γ), (C r).coeff a = (C s).coeff a
⊢ r = s

tactic: have h := rs 0
state_before: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
r s : R
rs : ∀ (a : Γ), (C r).coeff a = (C s).coeff a
⊢ r = s
state_after: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
r s : R
rs : ∀ (a : Γ), (C r).coeff a = (C s).coeff a
h : (C r).coeff 0 = (C s).coeff 0
⊢ r = s

tactic: rwa [C_apply, single_coeff_same, C_apply, single_coeff_same] at h
state_before: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonAssocSemiring R
r s : R
rs : ∀ (a : Γ), (C r).coeff a = (C s).coeff a
h : (C r).coeff 0 = (C s).coeff 0
⊢ r = s
state_after: no goals
Theorem: Finset.product_eq_univ
File: Mathlib/Data/Fintype/Prod.lean

tactic: simp [eq_univ_iff_forall, forall_and]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : Fintype α
inst✝² : Fintype β
s : Finset α
t : Finset β
inst✝¹ : Nonempty α
inst✝ : Nonempty β
⊢ s ×ˢ t = univ ↔ s = univ ∧ t = univ
state_after: no goals
Theorem: Complex.differentiable_at_Gamma_nat_add_one
File: Mathlib/NumberTheory/Harmonic/GammaDeriv.lean

tactic: refine differentiableAt_Gamma _ (fun m ↦ ?_)
state_before: n : ℕ
⊢ DifferentiableAt ℂ Gamma (↑n + 1)
state_after: n m : ℕ
⊢ ↑n + 1 ≠ -↑m

tactic: simp only [Ne, ← ofReal_natCast, ← ofReal_one, ← ofReal_add, ← ofReal_neg, ofReal_inj,
  eq_neg_iff_add_eq_zero]
state_before: n m : ℕ
⊢ ↑n + 1 ≠ -↑m
state_after: n m : ℕ
⊢ ¬↑n + 1 + ↑m = 0

tactic: positivity
state_before: n m : ℕ
⊢ ¬↑n + 1 + ↑m = 0
state_after: no goals
Theorem: div_le_self
File: Mathlib/Algebra/Order/Field/Basic.lean

tactic: simpa only [div_one] using div_le_div_of_nonneg_left ha zero_lt_one hb
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb : 1 ≤ b
⊢ a / b ≤ a
state_after: no goals
Theorem: Complex.integral_comp_polarCoord_symm
File: Mathlib/Analysis/SpecialFunctions/PolarCoord.lean

tactic: rw [← (Complex.volume_preserving_equiv_real_prod.symm).integral_comp
  measurableEquivRealProd.symm.measurableEmbedding, ← integral_comp_polarCoord_symm]
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℂ → E
⊢ ∫ (p : ℝ × ℝ) in polarCoord.target, p.1 • f (↑Complex.polarCoord.symm p) = ∫ (p : ℂ), f p
state_after: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℂ → E
⊢ ∫ (p : ℝ × ℝ) in polarCoord.target, p.1 • f (↑Complex.polarCoord.symm p) =
    ∫ (p : ℝ × ℝ) in polarCoord.target, p.1 • f (measurableEquivRealProd.symm (↑polarCoord.symm p))

tactic: rfl
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f : ℂ → E
⊢ ∫ (p : ℝ × ℝ) in polarCoord.target, p.1 • f (↑Complex.polarCoord.symm p) =
    ∫ (p : ℝ × ℝ) in polarCoord.target, p.1 • f (measurableEquivRealProd.symm (↑polarCoord.symm p))
state_after: no goals
Theorem: Matrix.posSemidef_iff_eq_transpose_mul_self
File: Mathlib/LinearAlgebra/Matrix/PosDef.lean

tactic: classical
refine ⟨fun hA ↦ ⟨hA.sqrt, ?_⟩, fun ⟨B, hB⟩ ↦ (hB ▸ posSemidef_conjTranspose_mul_self B)⟩
simp_rw [← PosSemidef.sq_sqrt hA, pow_two]
rw [hA.posSemidef_sqrt.1]
state_before: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A : Matrix n n 𝕜
⊢ A.PosSemidef ↔ ∃ B, A = Bᴴ * B
state_after: no goals

tactic: refine ⟨fun hA ↦ ⟨hA.sqrt, ?_⟩, fun ⟨B, hB⟩ ↦ (hB ▸ posSemidef_conjTranspose_mul_self B)⟩
state_before: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A : Matrix n n 𝕜
⊢ A.PosSemidef ↔ ∃ B, A = Bᴴ * B
state_after: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A : Matrix n n 𝕜
hA : A.PosSemidef
⊢ A = hA.sqrtᴴ * hA.sqrt

tactic: simp_rw [← PosSemidef.sq_sqrt hA, pow_two]
state_before: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A : Matrix n n 𝕜
hA : A.PosSemidef
⊢ A = hA.sqrtᴴ * hA.sqrt
state_after: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A : Matrix n n 𝕜
hA : A.PosSemidef
⊢ hA.sqrt * hA.sqrt = hA.sqrtᴴ * hA.sqrt

tactic: rw [hA.posSemidef_sqrt.1]
state_before: m : Type u_1
n : Type u_2
R : Type u_3
𝕜 : Type u_4
inst✝⁶ : Fintype m
inst✝⁵ : Fintype n
inst✝⁴ : CommRing R
inst✝³ : PartialOrder R
inst✝² : StarRing R
inst✝¹ : StarOrderedRing R
inst✝ : RCLike 𝕜
A : Matrix n n 𝕜
hA : A.PosSemidef
⊢ hA.sqrt * hA.sqrt = hA.sqrtᴴ * hA.sqrt
state_after: no goals
Theorem: Polynomial.monomial_left_inj
File: Mathlib/Algebra/Polynomial/Basic.lean

tactic: simp only [← ofFinsupp_single, ofFinsupp.injEq, Finsupp.single_left_inj ha]
state_before: R : Type u
a✝ b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
a : R
ha : a ≠ 0
i j : ℕ
⊢ (monomial i) a = (monomial j) a ↔ i = j
state_after: no goals
Theorem: ZeroAtInftyContinuousMap.zeroAtInftyContinuousMapClass.ofCompact
File: Mathlib/Topology/ContinuousFunction/ZeroAtInfty.lean

tactic: simp
state_before: F : Type u_1
α : Type u
β : Type v
γ : Type w
inst✝⁷ : TopologicalSpace α
inst✝⁶ : TopologicalSpace β
inst✝⁵ : Zero β
inst✝⁴ : FunLike F α β
inst✝³ : ZeroAtInftyContinuousMapClass F α β
G : Type u_2
inst✝² : FunLike G α β
inst✝¹ : ContinuousMapClass G α β
inst✝ : CompactSpace α
⊢ ∀ (f : G), Tendsto (⇑f) (cocompact α) (𝓝 0)
state_after: no goals
Theorem: ack_one
File: Mathlib/Computability/Ackermann.lean

tactic: induction' n with n IH
state_before: n : ℕ
⊢ ack 1 n = n + 2
state_after: case zero

⊢ ack 1 0 = 0 + 2

case succ
n : ℕ
IH : ack 1 n = n + 2
⊢ ack 1 (n + 1) = n + 1 + 2

tactic: rfl
state_before: case zero

⊢ ack 1 0 = 0 + 2
state_after: no goals

tactic: simp [IH]
state_before: case succ
n : ℕ
IH : ack 1 n = n + 2
⊢ ack 1 (n + 1) = n + 1 + 2
state_after: no goals
Theorem: Submonoid.LocalizationMap.eq_of_eq
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: obtain ⟨c, hc⟩ := f.eq_iff_exists.1 h
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
⊢ g x = g y
state_after: case intro
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
c : ↥S
hc : ↑c * x = ↑c * y
⊢ g x = g y

tactic: rw [← one_mul (g x), ← IsUnit.liftRight_inv_mul (g.restrict S) hg c]
state_before: case intro
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
c : ↥S
hc : ↑c * x = ↑c * y
⊢ g x = g y
state_after: case intro
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
c : ↥S
hc : ↑c * x = ↑c * y
⊢ ↑((IsUnit.liftRight (g.restrict S) hg) c)⁻¹ * (g.restrict S) c * g x = g y

tactic: show _ * g c * _ = _
state_before: case intro
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
c : ↥S
hc : ↑c * x = ↑c * y
⊢ ↑((IsUnit.liftRight (g.restrict S) hg) c)⁻¹ * (g.restrict S) c * g x = g y
state_after: case intro
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
c : ↥S
hc : ↑c * x = ↑c * y
⊢ ↑((IsUnit.liftRight (g.restrict S) hg) c)⁻¹ * g ↑c * g x = g y

tactic: rw [mul_assoc, ← g.map_mul, hc, mul_comm, mul_inv_left hg, g.map_mul]
state_before: case intro
M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
g : M →* P
hg : ∀ (y : ↥S), IsUnit (g ↑y)
x y : M
h : f.toMap x = f.toMap y
c : ↥S
hc : ↑c * x = ↑c * y
⊢ ↑((IsUnit.liftRight (g.restrict S) hg) c)⁻¹ * g ↑c * g x = g y
state_after: no goals
Theorem: equivShrink_symm_mul
File: Mathlib/Logic/Small/Group.lean

tactic: rw [Equiv.mul_def]
state_before: α : Type u_1
inst✝¹ : Mul α
inst✝ : Small.{u_2, u_1} α
x y : Shrink.{u_2, u_1} α
⊢ (equivShrink α).symm (x * y) = (equivShrink α).symm x * (equivShrink α).symm y
state_after: α : Type u_1
inst✝¹ : Mul α
inst✝ : Small.{u_2, u_1} α
x y : Shrink.{u_2, u_1} α
⊢ (equivShrink α).symm ((equivShrink α).symm.symm ((equivShrink α).symm x * (equivShrink α).symm y)) =
    (equivShrink α).symm x * (equivShrink α).symm y

tactic: simp
state_before: α : Type u_1
inst✝¹ : Mul α
inst✝ : Small.{u_2, u_1} α
x y : Shrink.{u_2, u_1} α
⊢ (equivShrink α).symm ((equivShrink α).symm.symm ((equivShrink α).symm x * (equivShrink α).symm y)) =
    (equivShrink α).symm x * (equivShrink α).symm y
state_after: no goals
Theorem: Nat.pairwise_coprime_coprimes
File: Mathlib/Logic/Godel/GodelBetaFunction.lean

tactic: intro i j hij
state_before: m : ℕ
a : Fin m → ℕ
⊢ Pairwise (Coprime on Nat.coprimes a)
state_after: m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
⊢ (Coprime on Nat.coprimes a) i j

tactic: wlog ltij : i < j
state_before: m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
⊢ (Coprime on Nat.coprimes a) i j
state_after: case inr
m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
this : ∀ {m : ℕ} (a : Fin m → ℕ) ⦃i j : Fin m⦄, i ≠ j → i < j → (Coprime on Nat.coprimes a) i j
ltij : ¬i < j
⊢ (Coprime on Nat.coprimes a) i j

m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
⊢ (Coprime on Nat.coprimes a) i j

tactic: unfold Function.onFun coprimes
state_before: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
⊢ (Coprime on Nat.coprimes a) i j
state_after: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
⊢ ((↑i + 1) * (Nat.supOfSeq a)! + 1).Coprime ((↑j + 1) * (Nat.supOfSeq a)! + 1)

tactic: have hja : j < supOfSeq a := lt_of_lt_of_le j.prop (le_step (le_max_left _ _))
state_before: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
⊢ ((↑i + 1) * (Nat.supOfSeq a)! + 1).Coprime ((↑j + 1) * (Nat.supOfSeq a)! + 1)
state_after: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
hja : ↑j < Nat.supOfSeq a
⊢ ((↑i + 1) * (Nat.supOfSeq a)! + 1).Coprime ((↑j + 1) * (Nat.supOfSeq a)! + 1)

tactic: exact coprime_mul_succ
  (Nat.succ_le_succ $ le_of_lt ltij)
  (Nat.dvd_factorial
    (by simp [Nat.succ_sub_succ, ltij])
    (by simpa only [Nat.succ_sub_succ] using le_of_lt (lt_of_le_of_lt (sub_le j i) hja)))
state_before: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
hja : ↑j < Nat.supOfSeq a
⊢ ((↑i + 1) * (Nat.supOfSeq a)! + 1).Coprime ((↑j + 1) * (Nat.supOfSeq a)! + 1)
state_after: no goals

tactic: exact (this a hij.symm (lt_of_le_of_ne (Fin.not_lt.mp ltij) hij.symm)).symm
state_before: case inr
m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
this : ∀ {m : ℕ} (a : Fin m → ℕ) ⦃i j : Fin m⦄, i ≠ j → i < j → (Coprime on Nat.coprimes a) i j
ltij : ¬i < j
⊢ (Coprime on Nat.coprimes a) i j
state_after: no goals

tactic: simp [Nat.succ_sub_succ, ltij]
state_before: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
hja : ↑j < Nat.supOfSeq a
⊢ 0 < ↑j + 1 - (↑i + 1)
state_after: no goals

tactic: simpa only [Nat.succ_sub_succ] using le_of_lt (lt_of_le_of_lt (sub_le j i) hja)
state_before: m✝ m : ℕ
a : Fin m → ℕ
i j : Fin m
hij : i ≠ j
ltij : i < j
hja : ↑j < Nat.supOfSeq a
⊢ ↑j + 1 - (↑i + 1) ≤ Nat.supOfSeq a
state_after: no goals
Theorem: Finset.biUnion_image
File: Mathlib/Data/Finset/Image.lean

tactic: simp only [biUnion_insert, image_union, ih]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : DecidableEq β
f✝ g : α → β
s✝¹ : Finset α
t✝ : Finset β
a✝ : α
b c : β
inst✝ : DecidableEq γ
s✝ : Finset α
t : α → Finset β
f : β → γ
this : DecidableEq α
a : α
s : Finset α
x✝ : a ∉ s
ih : image f (s.biUnion t) = s.biUnion fun a => image f (t a)
⊢ image f ((insert a s).biUnion t) = (insert a s).biUnion fun a => image f (t a)
state_after: no goals
Theorem: Turing.PartrecToTM2.K'.elim_update_main
File: Mathlib/Computability/TMToPartrec.lean

tactic: funext x
state_before: a b c d a' : List Γ'
⊢ update (elim a b c d) main a' = elim a' b c d
state_after: case h
a b c d a' : List Γ'
x : K'
⊢ update (elim a b c d) main a' x = elim a' b c d x

tactic: cases x <;> rfl
state_before: case h
a b c d a' : List Γ'
x : K'
⊢ update (elim a b c d) main a' x = elim a' b c d x
state_after: no goals
Theorem: List.Ico.filter_le_of_le
File: Mathlib/Data/List/Intervals.lean

tactic: rcases le_total l m with hlm | hml
state_before: n m l : ℕ
hnl : n ≤ l
⊢ filter (fun x => decide (l ≤ x)) (Ico n m) = Ico l m
state_after: case inl
n m l : ℕ
hnl : n ≤ l
hlm : l ≤ m
⊢ filter (fun x => decide (l ≤ x)) (Ico n m) = Ico l m

case inr
n m l : ℕ
hnl : n ≤ l
hml : m ≤ l
⊢ filter (fun x => decide (l ≤ x)) (Ico n m) = Ico l m

tactic: rw [← append_consecutive hnl hlm, filter_append, filter_le_of_top_le (le_refl l),
  filter_le_of_le_bot (le_refl l), nil_append]
state_before: case inl
n m l : ℕ
hnl : n ≤ l
hlm : l ≤ m
⊢ filter (fun x => decide (l ≤ x)) (Ico n m) = Ico l m
state_after: no goals

tactic: rw [eq_nil_of_le hml, filter_le_of_top_le hml]
state_before: case inr
n m l : ℕ
hnl : n ≤ l
hml : m ≤ l
⊢ filter (fun x => decide (l ≤ x)) (Ico n m) = Ico l m
state_after: no goals
Theorem: CategoryTheory.Limits.fst_of_isColimit
File: Mathlib/CategoryTheory/Preadditive/Biproducts.lean

tactic: apply ht.uniq (BinaryCofan.mk (𝟙 X) 0)
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
t : BinaryBicone X Y
ht : IsColimit t.toCocone
⊢ t.fst = ht.desc (BinaryCofan.mk (𝟙 X) 0)
state_after: case x
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
t : BinaryBicone X Y
ht : IsColimit t.toCocone
⊢ ∀ (j : Discrete WalkingPair), t.toCocone.ι.app j ≫ t.fst = (BinaryCofan.mk (𝟙 X) 0).ι.app j

tactic: rintro ⟨⟨⟩⟩ <;> dsimp <;> simp
state_before: case x
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
t : BinaryBicone X Y
ht : IsColimit t.toCocone
⊢ ∀ (j : Discrete WalkingPair), t.toCocone.ι.app j ≫ t.fst = (BinaryCofan.mk (𝟙 X) 0).ι.app j
state_after: no goals
Theorem: lift_rank_lt_rank_dual
File: Mathlib/LinearAlgebra/Dimension/DivisionRing.lean

tactic: rw [rank_dual_eq_card_dual_of_aleph0_le_rank h, ← rank_dual_eq_card_dual_of_aleph0_le_rank' h]
state_before: K✝ R : Type u
V✝ V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝³ : DivisionRing K✝
K : Type u
V : Type v
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
h : ℵ₀ ≤ Module.rank K V
⊢ lift.{u, v} (Module.rank K V) < Module.rank K (V →ₗ[K] K)
state_after: K✝ R : Type u
V✝ V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝³ : DivisionRing K✝
K : Type u
V : Type v
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
h : ℵ₀ ≤ Module.rank K V
⊢ lift.{u, v} (Module.rank K V) < Module.rank Kᵐᵒᵖ (V →ₗ[K] K)

tactic: exact lift_rank_lt_rank_dual' h
state_before: K✝ R : Type u
V✝ V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝³ : DivisionRing K✝
K : Type u
V : Type v
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
h : ℵ₀ ≤ Module.rank K V
⊢ lift.{u, v} (Module.rank K V) < Module.rank Kᵐᵒᵖ (V →ₗ[K] K)
state_after: no goals
Theorem: Polynomial.coeff_add
File: Mathlib/Algebra/Polynomial/Coeff.lean

tactic: rcases p with ⟨⟩
state_before: R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p✝ q✝ r p q : R[X]
n : ℕ
⊢ (p + q).coeff n = p.coeff n + q.coeff n
state_after: case ofFinsupp
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q✝ r q : R[X]
n : ℕ
toFinsupp✝ : R[ℕ]
⊢ ({ toFinsupp := toFinsupp✝ } + q).coeff n = { toFinsupp := toFinsupp✝ }.coeff n + q.coeff n

tactic: rcases q with ⟨⟩
state_before: case ofFinsupp
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q✝ r q : R[X]
n : ℕ
toFinsupp✝ : R[ℕ]
⊢ ({ toFinsupp := toFinsupp✝ } + q).coeff n = { toFinsupp := toFinsupp✝ }.coeff n + q.coeff n
state_after: case ofFinsupp.ofFinsupp
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
toFinsupp✝¹ toFinsupp✝ : R[ℕ]
⊢ ({ toFinsupp := toFinsupp✝¹ } + { toFinsupp := toFinsupp✝ }).coeff n =
    { toFinsupp := toFinsupp✝¹ }.coeff n + { toFinsupp := toFinsupp✝ }.coeff n

tactic: simp_rw [← ofFinsupp_add, coeff]
state_before: case ofFinsupp.ofFinsupp
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
toFinsupp✝¹ toFinsupp✝ : R[ℕ]
⊢ ({ toFinsupp := toFinsupp✝¹ } + { toFinsupp := toFinsupp✝ }).coeff n =
    { toFinsupp := toFinsupp✝¹ }.coeff n + { toFinsupp := toFinsupp✝ }.coeff n
state_after: case ofFinsupp.ofFinsupp
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
toFinsupp✝¹ toFinsupp✝ : R[ℕ]
⊢ (toFinsupp✝¹ + toFinsupp✝) n = toFinsupp✝¹ n + toFinsupp✝ n

tactic: exact Finsupp.add_apply _ _ _
state_before: case ofFinsupp.ofFinsupp
R : Type u
S : Type v
a b : R
n✝ m : ℕ
inst✝ : Semiring R
p q r : R[X]
n : ℕ
toFinsupp✝¹ toFinsupp✝ : R[ℕ]
⊢ (toFinsupp✝¹ + toFinsupp✝) n = toFinsupp✝¹ n + toFinsupp✝ n
state_after: no goals
Theorem: Finset.prod_prod_Ioi_mul_eq_prod_prod_off_diag
File: Mathlib/Algebra/BigOperators/Intervals.lean

tactic: simp_rw [← Ioi_disjUnion_Iio, prod_disjUnion, prod_mul_distrib]
state_before: α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ ∏ i : α, ∏ j ∈ Ioi i, f j i * f i j = ∏ i : α, ∏ j ∈ {i}ᶜ, f j i
state_after: α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ (∏ x : α, ∏ x_1 ∈ Ioi x, f x_1 x) * ∏ x : α, ∏ x_1 ∈ Ioi x, f x x_1 =
    (∏ x : α, ∏ x_1 ∈ Ioi x, f x_1 x) * ∏ x : α, ∏ x_1 ∈ Iio x, f x_1 x

tactic: congr 1
state_before: α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ (∏ x : α, ∏ x_1 ∈ Ioi x, f x_1 x) * ∏ x : α, ∏ x_1 ∈ Ioi x, f x x_1 =
    (∏ x : α, ∏ x_1 ∈ Ioi x, f x_1 x) * ∏ x : α, ∏ x_1 ∈ Iio x, f x_1 x
state_after: case e_a
α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ ∏ x : α, ∏ x_1 ∈ Ioi x, f x x_1 = ∏ x : α, ∏ x_1 ∈ Iio x, f x_1 x

tactic: rw [prod_sigma', prod_sigma']
state_before: case e_a
α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ ∏ x : α, ∏ x_1 ∈ Ioi x, f x x_1 = ∏ x : α, ∏ x_1 ∈ Iio x, f x_1 x
state_after: case e_a
α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ ∏ x ∈ univ.sigma Ioi, f x.fst x.snd = ∏ x ∈ univ.sigma Iio, f x.snd x.fst

tactic: refine prod_nbij' (fun i ↦ ⟨i.2, i.1⟩) (fun i ↦ ⟨i.2, i.1⟩) ?_ ?_ ?_ ?_ ?_ <;> simp
state_before: case e_a
α : Type u_1
M : Type u_2
inst✝⁴ : Fintype α
inst✝³ : LinearOrder α
inst✝² : LocallyFiniteOrderTop α
inst✝¹ : LocallyFiniteOrderBot α
inst✝ : CommMonoid M
f : α → α → M
⊢ ∏ x ∈ univ.sigma Ioi, f x.fst x.snd = ∏ x ∈ univ.sigma Iio, f x.snd x.fst
state_after: no goals
Theorem: Polynomial.natDegree_prod
File: Mathlib/Algebra/Polynomial/BigOperators.lean

tactic: nontriviality R
state_before: R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
⊢ (∏ i ∈ s, f i).natDegree = ∑ i ∈ s, (f i).natDegree
state_after: R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
⊢ (∏ i ∈ s, f i).natDegree = ∑ i ∈ s, (f i).natDegree

tactic: apply natDegree_prod'
state_before: R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
⊢ (∏ i ∈ s, f i).natDegree = ∑ i ∈ s, (f i).natDegree
state_after: case h
R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
⊢ ∏ i ∈ s, (f i).leadingCoeff ≠ 0

tactic: rw [prod_ne_zero_iff]
state_before: case h
R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
⊢ ∏ i ∈ s, (f i).leadingCoeff ≠ 0
state_after: case h
R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
⊢ ∀ a ∈ s, (f a).leadingCoeff ≠ 0

tactic: intro x hx
state_before: case h
R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
⊢ ∀ a ∈ s, (f a).leadingCoeff ≠ 0
state_after: case h
R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
x : ι
hx : x ∈ s
⊢ (f x).leadingCoeff ≠ 0

tactic: simp [h x hx]
state_before: case h
R : Type u
ι : Type w
s : Finset ι
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
f : ι → R[X]
t : Multiset R[X]
h : ∀ i ∈ s, f i ≠ 0
a✝ : Nontrivial R
x : ι
hx : x ∈ s
⊢ (f x).leadingCoeff ≠ 0
state_after: no goals
Theorem: WeierstrassCurve.map_ψ
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Basic.lean

tactic: simp only [ψ, map_ψ₂, map_Ψ₃, map_preΨ₄, ← coe_mapRingHom, map_normEDS]
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
f : R →+* S
n : ℤ
⊢ (W.map f).ψ n = Polynomial.map (mapRingHom f) (W.ψ n)
state_after: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
f : R →+* S
n : ℤ
⊢ normEDS ((mapRingHom (mapRingHom f)) W.ψ₂) (C ((mapRingHom f) W.Ψ₃)) (C ((mapRingHom f) W.preΨ₄)) n =
    normEDS ((mapRingHom (mapRingHom f)) W.ψ₂) ((mapRingHom (mapRingHom f)) (C W.Ψ₃))
      ((mapRingHom (mapRingHom f)) (C W.preΨ₄)) n

tactic: map_simp
state_before: R : Type r
S : Type s
inst✝¹ : CommRing R
inst✝ : CommRing S
W : WeierstrassCurve R
f : R →+* S
n : ℤ
⊢ normEDS ((mapRingHom (mapRingHom f)) W.ψ₂) (C ((mapRingHom f) W.Ψ₃)) (C ((mapRingHom f) W.preΨ₄)) n =
    normEDS ((mapRingHom (mapRingHom f)) W.ψ₂) ((mapRingHom (mapRingHom f)) (C W.Ψ₃))
      ((mapRingHom (mapRingHom f)) (C W.preΨ₄)) n
state_after: no goals