1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Even.strictConvexOn_pow
File: Mathlib/Analysis/Convex/SpecificFunctions/Deriv.lean

tactic: apply StrictMono.strictConvexOn_univ_of_deriv (continuous_pow n)
state_before: n : ℕ
hn : Even n
h : n ≠ 0
⊢ StrictConvexOn ℝ univ fun x => x ^ n
state_after: n : ℕ
hn : Even n
h : n ≠ 0
⊢ StrictMono (deriv fun a => a ^ n)

tactic: rw [deriv_pow']
state_before: n : ℕ
hn : Even n
h : n ≠ 0
⊢ StrictMono (deriv fun a => a ^ n)
state_after: n : ℕ
hn : Even n
h : n ≠ 0
⊢ StrictMono fun x => ↑n * x ^ (n - 1)

tactic: replace h := Nat.pos_of_ne_zero h
state_before: n : ℕ
hn : Even n
h : n ≠ 0
⊢ StrictMono fun x => ↑n * x ^ (n - 1)
state_after: n : ℕ
hn : Even n
h : 0 < n
⊢ StrictMono fun x => ↑n * x ^ (n - 1)

tactic: exact StrictMono.const_mul (Odd.strictMono_pow <| Nat.Even.sub_odd h hn <| Nat.odd_iff.2 rfl)
  (Nat.cast_pos.2 h)
state_before: n : ℕ
hn : Even n
h : 0 < n
⊢ StrictMono fun x => ↑n * x ^ (n - 1)
state_after: no goals
Theorem: LinearMap.isNilpotent_toMatrix_iff
File: Mathlib/RingTheory/Nilpotent/Lemmas.lean

tactic: refine exists_congr fun k ↦ ?_
state_before: R : Type u_1
S : Type u_2
x y : R
A : Type v
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
ι : Type u_3
M : Type u_4
inst✝³ : Fintype ι
inst✝² : DecidableEq ι
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
b : Basis ι R M
f : M →ₗ[R] M
⊢ IsNilpotent ((toMatrix b b) f) ↔ IsNilpotent f
state_after: R : Type u_1
S : Type u_2
x y : R
A : Type v
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
ι : Type u_3
M : Type u_4
inst✝³ : Fintype ι
inst✝² : DecidableEq ι
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
b : Basis ι R M
f : M →ₗ[R] M
k : ℕ
⊢ (toMatrix b b) f ^ k = 0 ↔ f ^ k = 0

tactic: rw [toMatrix_pow]
state_before: R : Type u_1
S : Type u_2
x y : R
A : Type v
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
ι : Type u_3
M : Type u_4
inst✝³ : Fintype ι
inst✝² : DecidableEq ι
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
b : Basis ι R M
f : M →ₗ[R] M
k : ℕ
⊢ (toMatrix b b) f ^ k = 0 ↔ f ^ k = 0
state_after: R : Type u_1
S : Type u_2
x y : R
A : Type v
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
ι : Type u_3
M : Type u_4
inst✝³ : Fintype ι
inst✝² : DecidableEq ι
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
b : Basis ι R M
f : M →ₗ[R] M
k : ℕ
⊢ (toMatrix b b) (f ^ k) = 0 ↔ f ^ k = 0

tactic: exact (toMatrix b b).map_eq_zero_iff
state_before: R : Type u_1
S : Type u_2
x y : R
A : Type v
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring A
inst✝⁴ : Algebra R A
ι : Type u_3
M : Type u_4
inst✝³ : Fintype ι
inst✝² : DecidableEq ι
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
b : Basis ι R M
f : M →ₗ[R] M
k : ℕ
⊢ (toMatrix b b) (f ^ k) = 0 ↔ f ^ k = 0
state_after: no goals
Theorem: LinearMap.span_singleton_sup_orthogonal_eq_top
File: Mathlib/LinearAlgebra/SesquilinearForm.lean

tactic: rw [orthogonal_span_singleton_eq_to_lin_ker]
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
inst✝⁴ : Field K₁
inst✝³ : AddCommGroup V₁
inst✝² : Module K₁ V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
J : K →+* K
J₁ J₁' : K₁ →+* K
B : V →ₗ[K] V →ₗ[K] K
x : V
hx : ¬B.IsOrtho x x
⊢ Submodule.span K {x} ⊔ (Submodule.span K {x}).orthogonalBilin B = ⊤
state_after: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
inst✝⁴ : Field K₁
inst✝³ : AddCommGroup V₁
inst✝² : Module K₁ V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
J : K →+* K
J₁ J₁' : K₁ →+* K
B : V →ₗ[K] V →ₗ[K] K
x : V
hx : ¬B.IsOrtho x x
⊢ Submodule.span K {x} ⊔ ker (B x) = ⊤

tactic: exact (B x).span_singleton_sup_ker_eq_top hx
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁷ : Field K
inst✝⁶ : AddCommGroup V
inst✝⁵ : Module K V
inst✝⁴ : Field K₁
inst✝³ : AddCommGroup V₁
inst✝² : Module K₁ V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
J : K →+* K
J₁ J₁' : K₁ →+* K
B : V →ₗ[K] V →ₗ[K] K
x : V
hx : ¬B.IsOrtho x x
⊢ Submodule.span K {x} ⊔ ker (B x) = ⊤
state_after: no goals
Theorem: Function.support_smul_subset_right
File: Mathlib/Algebra/Module/Basic.lean

tactic: rw [Pi.smul_apply', hf, smul_zero]
state_before: α : Type u_1
R : Type u_2
M : Type u_3
M₂ : Type u_4
inst✝¹ : Zero M
inst✝ : SMulZeroClass R M
f : α → R
g : α → M
x : α
hbf : x ∈ support (f • g)
hf : g x = 0
⊢ (f • g) x = 0
state_after: no goals
Theorem: Fintype.one_lt_prod_iff_of_one_le
File: Mathlib/Algebra/Order/BigOperators/Group/Finset.lean

tactic: obtain rfl | hf := hf.eq_or_lt <;> simp [*, one_lt_prod]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
G : Type u_6
k : Type u_7
R : Type u_8
inst✝¹ : Fintype ι
inst✝ : OrderedCancelCommMonoid M
f : ι → M
hf : 1 ≤ f
⊢ 1 < ∏ i : ι, f i ↔ 1 < f
state_after: no goals
Theorem: Finset.isAtom_iff
File: Mathlib/Data/Finset/Grade.lean

tactic: simp [← bot_covBy_iff, covBy_iff_exists_cons, eq_comm]
state_before: α : Type u_1
s t : Finset α
a : α
⊢ IsAtom s ↔ ∃ a, s = {a}
state_after: no goals
Theorem: Ordinal.nhds_left_eq_nhds
File: Mathlib/SetTheory/Ordinal/Topology.lean

tactic: rw [← nhds_left_sup_nhds_right', nhds_right', sup_bot_eq]
state_before: s : Set Ordinal.{u}
a✝ : Ordinal.{u}
a : Ordinal.{u_1}
⊢ 𝓝[≤] a = 𝓝 a
state_after: no goals
Theorem: Nat.dvd_right_iff_eq
File: Mathlib/Data/Nat/Defs.lean

tactic: rw [h]
state_before: a b c d m n✝ k : ℕ
p q : ℕ → Prop
h : m = n✝
n : ℕ
⊢ m ∣ n ↔ n✝ ∣ n
state_after: no goals
Theorem: div_mul_eq_div_div_swap
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp only [mul_assoc, mul_inv_rev, div_eq_mul_inv]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionMonoid α
a b c d : α
⊢ a / (b * c) = a / c / b
state_after: no goals
Theorem: EulerSine.integral_cos_mul_cos_pow_even
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/EulerSineProd.lean

tactic: convert integral_cos_mul_cos_pow (by omega : 2 ≤ 2 * n + 2) hz using 3
state_before: z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ (1 - z ^ 2 / (↑n + 1) ^ 2) * ∫ (x : ℝ) in 0 ..π / 2, Complex.cos (2 * z * ↑x) * ↑(cos x) ^ (2 * n + 2) =
    (2 * ↑n + 1) / (2 * ↑n + 2) * ∫ (x : ℝ) in 0 ..π / 2, Complex.cos (2 * z * ↑x) * ↑(cos x) ^ (2 * n)
state_after: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / ↑(2 * n + 2) ^ 2

case h.e'_3.h.e'_5.h.e'_5
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 1 = ↑(2 * n + 2) - 1

case h.e'_3.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 2 = ↑(2 * n + 2)

tactic: omega
state_before: z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 ≤ 2 * n + 2
state_after: no goals

tactic: simp only [Nat.cast_add, Nat.cast_mul, Nat.cast_two]
state_before: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / ↑(2 * n + 2) ^ 2
state_after: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / (2 * ↑n + 2) ^ 2

tactic: nth_rw 2 [← mul_one (2 : ℂ)]
state_before: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / (2 * ↑n + 2) ^ 2
state_after: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / (2 * ↑n + 2 * 1) ^ 2

tactic: rw [← mul_add, mul_pow, ← div_div]
state_before: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / (2 * ↑n + 2 * 1) ^ 2
state_after: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / 2 ^ 2 / (↑n + 1) ^ 2

tactic: ring
state_before: case h.e'_2.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ z ^ 2 / (↑n + 1) ^ 2 = 4 * z ^ 2 / 2 ^ 2 / (↑n + 1) ^ 2
state_after: no goals

tactic: push_cast
state_before: case h.e'_3.h.e'_5.h.e'_5
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 1 = ↑(2 * n + 2) - 1
state_after: case h.e'_3.h.e'_5.h.e'_5
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 1 = 2 * ↑n + 2 - 1

tactic: ring
state_before: case h.e'_3.h.e'_5.h.e'_5
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 1 = 2 * ↑n + 2 - 1
state_after: no goals

tactic: push_cast
state_before: case h.e'_3.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 2 = ↑(2 * n + 2)
state_after: case h.e'_3.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 2 = 2 * ↑n + 2

tactic: ring
state_before: case h.e'_3.h.e'_5.h.e'_6
z : ℂ
n✝ n : ℕ
hz : z ≠ 0
⊢ 2 * ↑n + 2 = 2 * ↑n + 2
state_after: no goals
Theorem: Stream'.WSeq.LiftRelO.swap
File: Mathlib/Data/Seq/WSeq.lean

tactic: funext x y
state_before: α : Type u
β : Type v
γ : Type w
R : α → β → Prop
C : WSeq α → WSeq β → Prop
⊢ Function.swap (LiftRelO R C) = LiftRelO (Function.swap R) (Function.swap C)
state_after: case h.h
α : Type u
β : Type v
γ : Type w
R : α → β → Prop
C : WSeq α → WSeq β → Prop
x : Option (β × WSeq β)
y : Option (α × WSeq α)
⊢ Function.swap (LiftRelO R C) x y = LiftRelO (Function.swap R) (Function.swap C) x y

tactic: rcases x with ⟨⟩ | ⟨hx, jx⟩ <;> rcases y with ⟨⟩ | ⟨hy, jy⟩ <;> rfl
state_before: case h.h
α : Type u
β : Type v
γ : Type w
R : α → β → Prop
C : WSeq α → WSeq β → Prop
x : Option (β × WSeq β)
y : Option (α × WSeq α)
⊢ Function.swap (LiftRelO R C) x y = LiftRelO (Function.swap R) (Function.swap C) x y
state_after: no goals
Theorem: Rep.leftRegularHomEquiv_symm_single
File: Mathlib/RepresentationTheory/Rep.lean

tactic: erw [leftRegularHomEquiv_symm_apply, leftRegularHom_hom, Finsupp.lift_apply,
  Finsupp.sum_single_index, one_smul]
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Monoid G
X Y : Action (Type u) (MonCat.of G)
f : X ⟶ Y
A : Rep k G
x : CoeSort.coe A
g : G
⊢ (A.leftRegularHomEquiv.symm x).hom (Finsupp.single g 1) = (A.ρ g) x
state_after: k G : Type u
inst✝¹ : CommRing k
inst✝ : Monoid G
X Y : Action (Type u) (MonCat.of G)
f : X ⟶ Y
A : Rep k G
x : CoeSort.coe A
g : G
⊢ 0 • (A.ρ g) x = 0

tactic: rw [zero_smul]
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Monoid G
X Y : Action (Type u) (MonCat.of G)
f : X ⟶ Y
A : Rep k G
x : CoeSort.coe A
g : G
⊢ 0 • (A.ρ g) x = 0
state_after: no goals
Theorem: Polynomial.map_scaleRoots
File: Mathlib/RingTheory/Polynomial/ScaleRoots.lean

tactic: ext
state_before: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
x : R
f : R →+* S
h : f p.leadingCoeff ≠ 0
⊢ map f (p.scaleRoots x) = (map f p).scaleRoots (f x)
state_after: case a
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
x : R
f : R →+* S
h : f p.leadingCoeff ≠ 0
n✝ : ℕ
⊢ (map f (p.scaleRoots x)).coeff n✝ = ((map f p).scaleRoots (f x)).coeff n✝

tactic: simp [Polynomial.natDegree_map_of_leadingCoeff_ne_zero _ h]
state_before: case a
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
x : R
f : R →+* S
h : f p.leadingCoeff ≠ 0
n✝ : ℕ
⊢ (map f (p.scaleRoots x)).coeff n✝ = ((map f p).scaleRoots (f x)).coeff n✝
state_after: no goals
Theorem: fourier_neg
File: Mathlib/Analysis/Fourier/AddCircle.lean

tactic: induction x using QuotientAddGroup.induction_on'
state_before: T : ℝ
n : ℤ
x : AddCircle T
⊢ (fourier (-n)) x = (starRingEnd ℂ) ((fourier n) x)
state_after: case H
T : ℝ
n : ℤ
z✝ : ℝ
⊢ (fourier (-n)) ↑z✝ = (starRingEnd ℂ) ((fourier n) ↑z✝)

tactic: simp_rw [fourier_apply, toCircle]
state_before: case H
T : ℝ
n : ℤ
z✝ : ℝ
⊢ (fourier (-n)) ↑z✝ = (starRingEnd ℂ) ((fourier n) ↑z✝)
state_after: case H
T : ℝ
n : ℤ
z✝ : ℝ
⊢ ↑(⋯.lift (-n • ↑z✝)) = (starRingEnd ℂ) ↑(⋯.lift (n • ↑z✝))

tactic: rw [← QuotientAddGroup.mk_zsmul, ← QuotientAddGroup.mk_zsmul]
state_before: case H
T : ℝ
n : ℤ
z✝ : ℝ
⊢ ↑(⋯.lift (-n • ↑z✝)) = (starRingEnd ℂ) ↑(⋯.lift (n • ↑z✝))
state_after: case H
T : ℝ
n : ℤ
z✝ : ℝ
⊢ ↑(⋯.lift ↑(-n • z✝)) = (starRingEnd ℂ) ↑(⋯.lift ↑(n • z✝))

tactic: simp_rw [Function.Periodic.lift_coe, ← coe_inv_circle_eq_conj, ← expMapCircle_neg,
  neg_smul, mul_neg]
state_before: case H
T : ℝ
n : ℤ
z✝ : ℝ
⊢ ↑(⋯.lift ↑(-n • z✝)) = (starRingEnd ℂ) ↑(⋯.lift ↑(n • z✝))
state_after: no goals
Theorem: WeierstrassCurve.Affine.CoordinateRing.XYIdeal'_mul_inv
File: Mathlib/AlgebraicGeometry/EllipticCurve/Group.lean

tactic: rw [← mul_assoc, ← FractionalIdeal.coeIdeal_mul, mul_comm <| XYIdeal W .., XYIdeal_neg_mul h,
  XIdeal, FractionalIdeal.coe_ideal_span_singleton_mul_inv W.FunctionField <| XClass_ne_zero W x]
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : CommRing S
W✝ : Affine R
f : R →+* S
F : Type u
inst✝ : Field F
W : Affine F
x y : F
h : W.Nonsingular x y
⊢ ↑(XYIdeal W x (C y)) * (↑(XYIdeal W x (C (W.negY x y))) * (↑(XIdeal W x))⁻¹) = 1
state_after: no goals
Theorem: WeierstrassCurve.Affine.CoordinateRing.C_addPolynomial_slope
File: Mathlib/AlgebraicGeometry/EllipticCurve/Group.lean

tactic: simp only [addPolynomial_slope h₁ h₂ hxy, C_neg, mk, map_neg, neg_inj, _root_.map_mul]
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : CommRing S
W✝ : Affine R
f : R →+* S
F : Type u
inst✝ : Field F
W : Affine F
x₁ x₂ y₁ y₂ : F
h₁ : W.Equation x₁ y₁
h₂ : W.Equation x₂ y₂
hxy : x₁ = x₂ → y₁ ≠ W.negY x₂ y₂
⊢ (mk W) (C (W.addPolynomial x₁ y₁ (W.slope x₁ x₂ y₁ y₂))) =
    -(XClass W x₁ * XClass W x₂ * XClass W (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)))
state_after: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : CommRing S
W✝ : Affine R
f : R →+* S
F : Type u
inst✝ : Field F
W : Affine F
x₁ x₂ y₁ y₂ : F
h₁ : W.Equation x₁ y₁
h₂ : W.Equation x₂ y₂
hxy : x₁ = x₂ → y₁ ≠ W.negY x₂ y₂
⊢ (AdjoinRoot.mk W.polynomial) (C (X - C x₁)) * (AdjoinRoot.mk W.polynomial) (C (X - C x₂)) *
      (AdjoinRoot.mk W.polynomial) (C (X - C (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)))) =
    XClass W x₁ * XClass W x₂ * XClass W (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂))

tactic: rfl
state_before: R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : CommRing S
W✝ : Affine R
f : R →+* S
F : Type u
inst✝ : Field F
W : Affine F
x₁ x₂ y₁ y₂ : F
h₁ : W.Equation x₁ y₁
h₂ : W.Equation x₂ y₂
hxy : x₁ = x₂ → y₁ ≠ W.negY x₂ y₂
⊢ (AdjoinRoot.mk W.polynomial) (C (X - C x₁)) * (AdjoinRoot.mk W.polynomial) (C (X - C x₂)) *
      (AdjoinRoot.mk W.polynomial) (C (X - C (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)))) =
    XClass W x₁ * XClass W x₂ * XClass W (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂))
state_after: no goals
Theorem: orthonormal_subtype_range
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: let f : ι ≃ Set.range v := Equiv.ofInjective v hv
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
⊢ Orthonormal 𝕜 Subtype.val ↔ Orthonormal 𝕜 v
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
⊢ Orthonormal 𝕜 Subtype.val ↔ Orthonormal 𝕜 v

tactic: refine ⟨fun h => h.comp f f.injective, fun h => ?_⟩
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
⊢ Orthonormal 𝕜 Subtype.val ↔ Orthonormal 𝕜 v
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 Subtype.val

tactic: rw [← Equiv.self_comp_ofInjective_symm hv]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 Subtype.val
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 (v ∘ ⇑(Equiv.ofInjective v hv).symm)

tactic: exact h.comp f.symm f.symm.injective
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
ι : Type u_4
v : ι → E
hv : Function.Injective v
f : ι ≃ ↑(Set.range v) := Equiv.ofInjective v hv
h : Orthonormal 𝕜 v
⊢ Orthonormal 𝕜 (v ∘ ⇑(Equiv.ofInjective v hv).symm)
state_after: no goals
Theorem: Polynomial.eval₂_mul_X
File: Mathlib/Algebra/Polynomial/Eval.lean

tactic: refine _root_.trans (eval₂_mul_noncomm _ _ fun k => ?_) (by rw [eval₂_X])
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
⊢ eval₂ f x (p * X) = eval₂ f x p * x
state_after: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
k : ℕ
⊢ Commute (f (X.coeff k)) x

tactic: rcases em (k = 1) with (rfl | hk)
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
k : ℕ
⊢ Commute (f (X.coeff k)) x
state_after: case inl
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
⊢ Commute (f (X.coeff 1)) x

case inr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
k : ℕ
hk : ¬k = 1
⊢ Commute (f (X.coeff k)) x

tactic: rw [eval₂_X]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
⊢ eval₂ f x p * eval₂ f x X = eval₂ f x p * x
state_after: no goals

tactic: simp
state_before: case inl
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
⊢ Commute (f (X.coeff 1)) x
state_after: no goals

tactic: simp [coeff_X_of_ne_one hk]
state_before: case inr
R : Type u
S : Type v
T : Type w
ι : Type y
a b : R
m n : ℕ
inst✝² : Semiring R
p q r : R[X]
inst✝¹ : Semiring S
f : R →+* S
x : S
inst✝ : Semiring T
k : ℕ
hk : ¬k = 1
⊢ Commute (f (X.coeff k)) x
state_after: no goals
Theorem: Matroid.Basis'.inter_eq_of_subset_indep
File: Mathlib/Data/Matroid/Basic.lean

tactic: rw [← hI.basis_inter_ground.inter_eq_of_subset_indep hIJ hJ, inter_comm X, ← inter_assoc,
  inter_eq_self_of_subset_left hJ.subset_ground]
state_before: α : Type u_1
M : Matroid α
I X J : Set α
hI : M.Basis' I X
hIJ : I ⊆ J
hJ : M.Indep J
⊢ J ∩ X = I
state_after: no goals
Theorem: HomologicalComplex.boundaries_eq_bot
File: Mathlib/Algebra/Homology/Homology.lean

tactic: rw [eq_bot_iff]
state_before: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝¹ : HasImages V
inst✝ : HasZeroObject V
j : ι
h : ¬c.Rel (c.prev j) j
⊢ C.boundaries j = ⊥
state_after: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝¹ : HasImages V
inst✝ : HasZeroObject V
j : ι
h : ¬c.Rel (c.prev j) j
⊢ C.boundaries j ≤ ⊥

tactic: refine imageSubobject_le _ 0 ?_
state_before: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝¹ : HasImages V
inst✝ : HasZeroObject V
j : ι
h : ¬c.Rel (c.prev j) j
⊢ C.boundaries j ≤ ⊥
state_after: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝¹ : HasImages V
inst✝ : HasZeroObject V
j : ι
h : ¬c.Rel (c.prev j) j
⊢ 0 ≫ ⊥.arrow = C.dTo j

tactic: rw [C.dTo_eq_zero h, zero_comp]
state_before: ι : Type u_1
V : Type u
inst✝³ : Category.{v, u} V
inst✝² : HasZeroMorphisms V
c : ComplexShape ι
C : HomologicalComplex V c
inst✝¹ : HasImages V
inst✝ : HasZeroObject V
j : ι
h : ¬c.Rel (c.prev j) j
⊢ 0 ≫ ⊥.arrow = C.dTo j
state_after: no goals
Theorem: AlgebraicGeometry.IsAffineOpen.basicOpen_fromSpec_app
File: Mathlib/AlgebraicGeometry/AffineScheme.lean

tactic: rw [← hU.fromSpec_preimage_basicOpen, Scheme.preimage_basicOpen]
state_before: X Y : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
f : ↑Γ(X, U)
⊢ (Spec Γ(X, U)).basicOpen ((Scheme.Hom.app hU.fromSpec U) f) = PrimeSpectrum.basicOpen f
state_after: no goals