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

tactic: constructor
state_before: Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x ≠ 0 ↔ x.orderTop ≠ ⊤
state_after: case mp
Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x ≠ 0 → x.orderTop ≠ ⊤

case mpr
Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x.orderTop ≠ ⊤ → x ≠ 0

tactic: exact fun hx => Eq.mpr (congrArg (fun h ↦ h ≠ ⊤) (orderTop_of_ne hx)) WithTop.coe_ne_top
state_before: case mp
Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x ≠ 0 → x.orderTop ≠ ⊤
state_after: no goals

tactic: contrapose!
state_before: case mpr
Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x.orderTop ≠ ⊤ → x ≠ 0
state_after: case mpr
Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x = 0 → x.orderTop = ⊤

tactic: simp_all only [orderTop_zero, implies_true]
state_before: case mpr
Γ : Type u_1
R : Type u_2
inst✝¹ : PartialOrder Γ
inst✝ : Zero R
a b : Γ
r : R
x : HahnSeries Γ R
⊢ x = 0 → x.orderTop = ⊤
state_after: no goals
Theorem: AlternatingMap.curryLeft_same
File: Mathlib/LinearAlgebra/Alternating/Basic.lean

tactic: simp
state_before: R : Type u_1
inst✝¹⁹ : Semiring R
M : Type u_2
inst✝¹⁸ : AddCommMonoid M
inst✝¹⁷ : Module R M
N : Type u_3
inst✝¹⁶ : AddCommMonoid N
inst✝¹⁵ : Module R N
P : Type u_4
inst✝¹⁴ : AddCommMonoid P
inst✝¹³ : Module R P
M' : Type u_5
inst✝¹² : AddCommGroup M'
inst✝¹¹ : Module R M'
N' : Type u_6
inst✝¹⁰ : AddCommGroup N'
inst✝⁹ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
R' : Type u_10
M'' : Type u_11
M₂'' : Type u_12
N'' : Type u_13
N₂'' : Type u_14
inst✝⁸ : CommSemiring R'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : AddCommMonoid N''
inst✝⁴ : AddCommMonoid N₂''
inst✝³ : Module R' M''
inst✝² : Module R' M₂''
inst✝¹ : Module R' N''
inst✝ : Module R' N₂''
n : ℕ
f : M'' [⋀^Fin n.succ.succ]→ₗ[R'] N''
m : M''
x : Fin n → M''
⊢ Matrix.vecCons m (Matrix.vecCons m x) 0 = Matrix.vecCons m (Matrix.vecCons m x) 1
state_after: no goals
Theorem: integral_sin_pow_even_mul_cos_pow_even
File: Mathlib/Analysis/SpecialFunctions/Integrals.lean

tactic: field_simp [pow_mul, sin_sq, cos_sq, ← sub_sub, (by ring : (2 : ℝ) - 1 = 1)]
state_before: a b : ℝ
n✝ m n : ℕ
⊢ ∫ (x : ℝ) in a..b, sin x ^ (2 * m) * cos x ^ (2 * n) =
    ∫ (x : ℝ) in a..b, ((1 - cos (2 * x)) / 2) ^ m * ((1 + cos (2 * x)) / 2) ^ n
state_after: no goals

tactic: ring
state_before: a b : ℝ
n✝ m n : ℕ
⊢ 2 - 1 = 1
state_after: no goals
Theorem: CoxeterSystem.isRightDescent_iff_not_isRightDescent_mul
File: Mathlib/GroupTheory/Coxeter/Length.lean

tactic: rw [isRightDescent_iff, not_isRightDescent_iff, simple_mul_simple_cancel_right]
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
⊢ cs.IsRightDescent w i ↔ ¬cs.IsRightDescent (w * cs.simple i) i
state_after: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
⊢ cs.length (w * cs.simple i) + 1 = cs.length w ↔ cs.length w = cs.length (w * cs.simple i) + 1

tactic: tauto
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
⊢ cs.length (w * cs.simple i) + 1 = cs.length w ↔ cs.length w = cs.length (w * cs.simple i) + 1
state_after: no goals
Theorem: PFunctor.W.dest_mk
File: Mathlib/Data/PFunctor/Univariate/Basic.lean

tactic: cases p
state_before: P : PFunctor.{u}
α : Type v₁
β : Type v₂
γ : Type v₃
p : ↑P P.W
⊢ (mk p).dest = p
state_after: case mk
P : PFunctor.{u}
α : Type v₁
β : Type v₂
γ : Type v₃
fst✝ : P.A
snd✝ : P.B fst✝ → P.W
⊢ (mk ⟨fst✝, snd✝⟩).dest = ⟨fst✝, snd✝⟩

tactic: rfl
state_before: case mk
P : PFunctor.{u}
α : Type v₁
β : Type v₂
γ : Type v₃
fst✝ : P.A
snd✝ : P.B fst✝ → P.W
⊢ (mk ⟨fst✝, snd✝⟩).dest = ⟨fst✝, snd✝⟩
state_after: no goals
Theorem: CochainComplex.HomComplex.Cochain.ofHom_add
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplex.lean

tactic: aesop_cat
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
φ₁ φ₂ : F ⟶ G
⊢ ofHom (φ₁ + φ₂) = ofHom φ₁ + ofHom φ₂
state_after: no goals
Theorem: TopologicalSpace.IsTopologicalBasis.isOpen
File: Mathlib/Topology/Bases.lean

tactic: exact .basic s hs
state_before: α : Type u
β : Type u_1
t : TopologicalSpace α
B : Set (Set α)
s✝ s : Set α
b : Set (Set α)
hb : IsTopologicalBasis b
hs : s ∈ b
⊢ IsOpen s
state_after: no goals
Theorem: irrational_sqrt_intCast_iff
File: Mathlib/Data/Real/Irrational.lean

tactic: rw [← Rat.cast_intCast, irrational_sqrt_ratCast_iff, Rat.isSquare_intCast_iff, Int.cast_nonneg]
state_before: z : ℤ
⊢ Irrational √↑z ↔ ¬IsSquare z ∧ 0 ≤ z
state_after: no goals
Theorem: max_lt
File: Mathlib/Init/Order/LinearOrder.lean

tactic: rwa [max_eq_right h]
state_before: α : Type u
inst✝ : LinearOrder α
a b c : α
h₁ : a < c
h₂ : b < c
h : a ≤ b
⊢ max a b < c
state_after: no goals

tactic: rwa [max_eq_left_of_lt h]
state_before: α : Type u
inst✝ : LinearOrder α
a b c : α
h₁ : a < c
h₂ : b < c
h : a > b
⊢ max a b < c
state_after: no goals
Theorem: Polynomial.irreducible_iff_degree_lt
File: Mathlib/Algebra/Polynomial/FieldDivision.lean

tactic: rw [← irreducible_mul_leadingCoeff_inv,
    (monic_mul_leadingCoeff_inv hp0).irreducible_iff_degree_lt]
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : ¬IsUnit p
⊢ Irreducible p ↔ ∀ (q : R[X]), q.degree ≤ ↑(p.natDegree / 2) → q ∣ p → IsUnit q
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : ¬IsUnit p
⊢ (∀ (q : R[X]), q.degree ≤ ↑((p * C p.leadingCoeff⁻¹).natDegree / 2) → q ∣ p * C p.leadingCoeff⁻¹ → IsUnit q) ↔
    ∀ (q : R[X]), q.degree ≤ ↑(p.natDegree / 2) → q ∣ p → IsUnit q

R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : ¬IsUnit p
⊢ p * C p.leadingCoeff⁻¹ ≠ 1

tactic: simp [hp0, natDegree_mul_leadingCoeff_inv]
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : ¬IsUnit p
⊢ (∀ (q : R[X]), q.degree ≤ ↑((p * C p.leadingCoeff⁻¹).natDegree / 2) → q ∣ p * C p.leadingCoeff⁻¹ → IsUnit q) ↔
    ∀ (q : R[X]), q.degree ≤ ↑(p.natDegree / 2) → q ∣ p → IsUnit q
state_after: no goals

tactic: contrapose! hpu
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : ¬IsUnit p
⊢ p * C p.leadingCoeff⁻¹ ≠ 1
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : p * C p.leadingCoeff⁻¹ = 1
⊢ IsUnit p

tactic: exact isUnit_of_mul_eq_one _ _ hpu
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p✝ q p : R[X]
hp0 : p ≠ 0
hpu : p * C p.leadingCoeff⁻¹ = 1
⊢ IsUnit p
state_after: no goals
Theorem: Int.toNat_pred_coe_of_pos
File: Mathlib/Data/Int/Defs.lean

tactic: simp [h, Int.le_of_lt h, push_cast]
state_before: a b c d m n i : ℤ
h : 0 < i
⊢ ↑(i.toNat - 1) = i - 1
state_after: no goals
Theorem: LinearMap.finrank_range_dualMap_eq_finrank_range
File: Mathlib/LinearAlgebra/Dual.lean

tactic: rw [congr_arg dualMap (show f = (range f).subtype.comp f.rangeRestrict by rfl),
  ← dualMap_comp_dualMap, range_comp,
  range_eq_top.mpr (dualMap_surjective_of_injective (range f).injective_subtype),
  Submodule.map_top, finrank_range_of_inj, Subspace.dual_finrank_eq]
state_before: K : Type uK
inst✝⁴ : Field K
V₁ : Type uV₁
V₂ : Type uV₂
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
f : V₁ →ₗ[K] V₂
⊢ finrank K ↥(range f.dualMap) = finrank K ↥(range f)
state_after: K : Type uK
inst✝⁴ : Field K
V₁ : Type uV₁
V₂ : Type uV₂
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
f : V₁ →ₗ[K] V₂
⊢ Function.Injective ⇑f.rangeRestrict.dualMap

tactic: exact dualMap_injective_of_surjective (range_eq_top.mp f.range_rangeRestrict)
state_before: K : Type uK
inst✝⁴ : Field K
V₁ : Type uV₁
V₂ : Type uV₂
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
f : V₁ →ₗ[K] V₂
⊢ Function.Injective ⇑f.rangeRestrict.dualMap
state_after: no goals

tactic: rfl
state_before: K : Type uK
inst✝⁴ : Field K
V₁ : Type uV₁
V₂ : Type uV₂
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V₂
inst✝ : Module K V₂
f : V₁ →ₗ[K] V₂
⊢ f = (range f).subtype ∘ₗ f.rangeRestrict
state_after: no goals
Theorem: Rat.add_def'
File: .lake/packages/batteries/Batteries/Data/Rat/Lemmas.lean

tactic: rw [add_def, normalize_eq_mkRat]
state_before: a b : Rat
⊢ a + b = mkRat (a.num * ↑b.den + b.num * ↑a.den) (a.den * b.den)
state_after: no goals
Theorem: Batteries.RBNode.all_iff
File: .lake/packages/batteries/Batteries/Data/RBMap/Basic.lean

tactic: induction t <;> simp [*, all, All, and_assoc]
state_before: α : Type u_1
p : α → Bool
t : RBNode α
⊢ all p t = true ↔ All (fun x => p x = true) t
state_after: no goals
Theorem: Submodule.span_zero
File: Mathlib/LinearAlgebra/Span.lean

tactic: rw [← singleton_zero, span_singleton_eq_bot]
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
⊢ span R 0 = ⊥
state_after: no goals
Theorem: AlternatingMap.coe_multilinearMap_mk
File: Mathlib/LinearAlgebra/Alternating/Basic.lean

tactic: simp
state_before: R : Type u_1
inst✝¹⁰ : Semiring R
M : Type u_2
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
N : Type u_3
inst✝⁷ : AddCommMonoid N
inst✝⁶ : Module R N
P : Type u_4
inst✝⁵ : AddCommMonoid P
inst✝⁴ : Module R P
M' : Type u_5
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
N' : Type u_6
inst✝¹ : AddCommGroup N'
inst✝ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
f✝ f' : M [⋀^ι]→ₗ[R] N
g g₂ : M [⋀^ι]→ₗ[R] N'
g' : M' [⋀^ι]→ₗ[R] N'
v : ι → M
v' : ι → M'
f : (ι → M) → N
h₁ :
  ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (x y : M), f (update m i (x + y)) = f (update m i x) + f (update m i y)
h₂ : ∀ [inst : DecidableEq ι] (m : ι → M) (i : ι) (c : R) (x : M), f (update m i (c • x)) = c • f (update m i x)
h₃ : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → { toFun := f, map_add' := ⋯, map_smul' := ⋯ }.toFun v = 0
⊢ ↑{ toFun := f, map_add' := ⋯, map_smul' := ⋯, map_eq_zero_of_eq' := h₃ } =
    { toFun := f, map_add' := h₁, map_smul' := h₂ }
state_after: no goals
Theorem: Ordinal.bddAbove_range
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: rintro a ⟨i, rfl⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
⊢ (iSup (succ ∘ card ∘ f)).ord ∈ upperBounds (range f)
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
i : ι
⊢ f i ≤ (iSup (succ ∘ card ∘ f)).ord

tactic: exact le_of_lt (Cardinal.lt_ord.2 ((lt_succ _).trans_le
  (le_ciSup (Cardinal.bddAbove_range.{_, v} _) _)))
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
i : ι
⊢ f i ≤ (iSup (succ ∘ card ∘ f)).ord
state_after: no goals
Theorem: Real.Angle.sign_toReal
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rcases lt_trichotomy θ.toReal 0 with (ht | ht | ht)
state_before: θ : Angle
h : θ ≠ ↑π
⊢ SignType.sign θ.toReal = θ.sign
state_after: case inl
θ : Angle
h : θ ≠ ↑π
ht : θ.toReal < 0
⊢ SignType.sign θ.toReal = θ.sign

case inr.inl
θ : Angle
h : θ ≠ ↑π
ht : θ.toReal = 0
⊢ SignType.sign θ.toReal = θ.sign

case inr.inr
θ : Angle
h : θ ≠ ↑π
ht : 0 < θ.toReal
⊢ SignType.sign θ.toReal = θ.sign

tactic: simp [ht, toReal_neg_iff_sign_neg.1 ht]
state_before: case inl
θ : Angle
h : θ ≠ ↑π
ht : θ.toReal < 0
⊢ SignType.sign θ.toReal = θ.sign
state_after: no goals

tactic: simp [sign, ht, ← sin_toReal]
state_before: case inr.inl
θ : Angle
h : θ ≠ ↑π
ht : θ.toReal = 0
⊢ SignType.sign θ.toReal = θ.sign
state_after: no goals

tactic: rw [sign, ← sin_toReal, sign_pos ht,
  sign_pos
    (sin_pos_of_pos_of_lt_pi ht ((toReal_le_pi θ).lt_of_ne (toReal_eq_pi_iff.not.2 h)))]
state_before: case inr.inr
θ : Angle
h : θ ≠ ↑π
ht : 0 < θ.toReal
⊢ SignType.sign θ.toReal = θ.sign
state_after: no goals
Theorem: nndist_div_left
File: Mathlib/Topology/MetricSpace/IsometricSMul.lean

tactic: simp [div_eq_mul_inv]
state_before: M : Type u
G : Type v
X : Type w
inst✝³ : Group G
inst✝² : PseudoMetricSpace G
inst✝¹ : IsometricSMul G G
inst✝ : IsometricSMul Gᵐᵒᵖ G
a b c : G
⊢ nndist (a / b) (a / c) = nndist b c
state_after: no goals
Theorem: CategoryTheory.ShortComplex.RightHomologyMapData.congr_φQ
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

tactic: rw [eq]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ : S₁ ⟶ S₂
h₁ : S₁.RightHomologyData
h₂ : S₂.RightHomologyData
γ₁ γ₂ : RightHomologyMapData φ h₁ h₂
eq : γ₁ = γ₂
⊢ γ₁.φQ = γ₂.φQ
state_after: no goals
Theorem: inv_eq_of_aeval_divX_ne_zero
File: Mathlib/RingTheory/Algebraic.lean

tactic: rw [inv_eq_iff_eq_inv, inv_div, eq_comm, div_eq_iff, sub_eq_iff_eq_add, mul_comm]
state_before: R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ x⁻¹ = (aeval x) p.divX / ((aeval x) p - (algebraMap K L) (p.coeff 0))
state_after: R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) p = (aeval x) p.divX * x + (algebraMap K L) (p.coeff 0)

R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) p.divX ≠ 0

tactic: conv_lhs => rw [← divX_mul_X_add p]
state_before: R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) p = (aeval x) p.divX * x + (algebraMap K L) (p.coeff 0)

R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) p.divX ≠ 0
state_after: R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) (p.divX * X + C (p.coeff 0)) = (aeval x) p.divX * x + (algebraMap K L) (p.coeff 0)

R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) p.divX ≠ 0

tactic: rw [AlgHom.map_add, AlgHom.map_mul, aeval_X, aeval_C]
state_before: R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) (p.divX * X + C (p.coeff 0)) = (aeval x) p.divX * x + (algebraMap K L) (p.coeff 0)
state_after: no goals

tactic: exact aeval_ne
state_before: R : Type u_1
S : Type u_2
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
inst✝³ : CommRing S
K : Type u_3
L : Type u_4
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
A : Subalgebra K L
x : L
p : K[X]
aeval_ne : (aeval x) p.divX ≠ 0
⊢ (aeval x) p.divX ≠ 0
state_after: no goals
Theorem: HasStrictFDerivAt.smul_const
File: Mathlib/Analysis/Calculus/FDeriv/Mul.lean

tactic: simpa only [smul_zero, zero_add] using hc.smul (hasStrictFDerivAt_const f x)
state_before: 𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
F : Type u_3
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : NormedSpace 𝕜 F
G : Type u_4
inst✝⁷ : NormedAddCommGroup G
inst✝⁶ : NormedSpace 𝕜 G
G' : Type u_5
inst✝⁵ : NormedAddCommGroup G'
inst✝⁴ : NormedSpace 𝕜 G'
f✝ f₀ f₁ g : E → F
f' f₀' f₁' g' e : E →L[𝕜] F
x : E
s t : Set E
L L₁ L₂ : Filter E
𝕜' : Type u_6
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
c : E → 𝕜'
c' : E →L[𝕜] 𝕜'
hc : HasStrictFDerivAt c c' x
f : F
⊢ HasStrictFDerivAt (fun y => c y • f) (c'.smulRight f) x
state_after: no goals
Theorem: Fin.cycleRange_symm_zero
File: Mathlib/GroupTheory/Perm/Fin.lean

tactic: simp
state_before: n : ℕ
i : Fin (n + 1)
⊢ i.cycleRange ((Equiv.symm i.cycleRange) 0) = i.cycleRange i
state_after: no goals
Theorem: EuclideanGeometry.dist_eq_abs_sub_dist_of_angle_eq_zero
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Affine.lean

tactic: rw [dist_eq_norm_vsub V, dist_eq_norm_vsub V, dist_eq_norm_vsub V, ← vsub_sub_vsub_cancel_right]
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : ∠ p1 p2 p3 = 0
⊢ dist p1 p3 = |dist p1 p2 - dist p3 p2|
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : ∠ p1 p2 p3 = 0
⊢ ‖p1 -ᵥ ?p₃ - (p3 -ᵥ ?p₃)‖ = |‖p1 -ᵥ p2‖ - ‖p3 -ᵥ p2‖|

case p₃
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : ∠ p1 p2 p3 = 0
⊢ P

tactic: exact norm_sub_eq_abs_sub_norm_of_angle_eq_zero h
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : ∠ p1 p2 p3 = 0
⊢ ‖p1 -ᵥ ?p₃ - (p3 -ᵥ ?p₃)‖ = |‖p1 -ᵥ p2‖ - ‖p3 -ᵥ p2‖|

case p₃
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : ∠ p1 p2 p3 = 0
⊢ P
state_after: no goals
Theorem: PiTensorProduct.span_tprod_eq_top
File: Mathlib/LinearAlgebra/PiTensorProduct.lean

tactic: simp only [Set.mem_range, exists_apply_eq_apply]
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type u_5
R₂ : Type u_6
s : ι → Type u_7
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_8
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type u_9
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type u_10
inst✝ : AddCommMonoid F
t : ⨂[R] (i : ι), s i
x✝¹ : R
x✝ : (i : ι) → s i
⊢ (tprod R) x✝ ∈ Set.range ⇑(tprod R)
state_after: no goals
Theorem: isClosedMap_iff_closure_image
File: Mathlib/Topology/Maps.lean

tactic: rw [hc.closure_eq]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
hs : ∀ (s : Set X), closure (f '' s) ⊆ f '' closure s
c : Set X
hc : IsClosed c
⊢ f '' closure c = f '' c
state_after: no goals
Theorem: arg_expMapCircle
File: Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean

tactic: rw [expMapCircle_apply, exp_mul_I, arg_cos_add_sin_mul_I ⟨h₁, h₂⟩]
state_before: x : ℝ
h₁ : -π < x
h₂ : x ≤ π
⊢ (↑(expMapCircle x)).arg = x
state_after: no goals
Theorem: WithBot.coe_mul_eq_bind
File: Mathlib/Algebra/Order/Ring/WithTop.lean

tactic: simp only [ne_eq, coe_eq_zero, ha, not_false_eq_true, mul_bot]
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b : WithBot α
a : α
ha : a ≠ 0
⊢ ↑a * ⊥ = Option.bind ⊥ fun b => Option.some (a * b)
state_after: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b : WithBot α
a : α
ha : a ≠ 0
⊢ ⊥ = Option.bind ⊥ fun b => Option.some (a * b)

tactic: rfl
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b : WithBot α
a : α
ha : a ≠ 0
⊢ ⊥ = Option.bind ⊥ fun b => Option.some (a * b)
state_after: no goals
Theorem: Set.Countable.image2
File: Mathlib/Data/Set/Countable.lean

tactic: rw [← image_prod]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
t : Set β
hs : s.Countable
ht : t.Countable
f : α → β → γ
⊢ (Set.image2 f s t).Countable
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
t : Set β
hs : s.Countable
ht : t.Countable
f : α → β → γ
⊢ ((fun x => f x.1 x.2) '' s ×ˢ t).Countable

tactic: exact (hs.prod ht).image _
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
t : Set β
hs : s.Countable
ht : t.Countable
f : α → β → γ
⊢ ((fun x => f x.1 x.2) '' s ×ˢ t).Countable
state_after: no goals
Theorem: IsCoprime.of_mul_add_right_left
File: Mathlib/RingTheory/Coprime/Basic.lean

tactic: rw [add_comm] at h
state_before: R : Type u
inst✝ : CommSemiring R
x y z : R
h : IsCoprime (z * y + x) y
⊢ IsCoprime x y
state_after: R : Type u
inst✝ : CommSemiring R
x y z : R
h : IsCoprime (x + z * y) y
⊢ IsCoprime x y

tactic: exact h.of_add_mul_right_left
state_before: R : Type u
inst✝ : CommSemiring R
x y z : R
h : IsCoprime (x + z * y) y
⊢ IsCoprime x y
state_after: no goals
Theorem: Orientation.sin_oangle_add_right_mul_norm_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: have hs : (o.oangle x (x + y)).sign = 1 := by
  rw [oangle_sign_add_right, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ (o.oangle x (x + y)).sin * ‖x + y‖ = ‖y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
hs : (o.oangle x (x + y)).sign = 1
⊢ (o.oangle x (x + y)).sin * ‖x + y‖ = ‖y‖

tactic: rw [o.oangle_eq_angle_of_sign_eq_one hs, Real.Angle.sin_coe,
  InnerProductGeometry.sin_angle_add_mul_norm_of_inner_eq_zero
    (o.inner_eq_zero_of_oangle_eq_pi_div_two h)]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
hs : (o.oangle x (x + y)).sign = 1
⊢ (o.oangle x (x + y)).sin * ‖x + y‖ = ‖y‖
state_after: no goals

tactic: rw [oangle_sign_add_right, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ (o.oangle x (x + y)).sign = 1
state_after: no goals
Theorem: Finset.compl_erase
File: Mathlib/Data/Fintype/Basic.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : Fintype α
s t : Finset α
inst✝ : DecidableEq α
a : α
⊢ (s.erase a)ᶜ = insert a sᶜ
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : Fintype α
s t : Finset α
inst✝ : DecidableEq α
a a✝ : α
⊢ a✝ ∈ (s.erase a)ᶜ ↔ a✝ ∈ insert a sᶜ

tactic: simp only [or_iff_not_imp_left, mem_insert, not_and, mem_compl, mem_erase]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝¹ : Fintype α
s t : Finset α
inst✝ : DecidableEq α
a a✝ : α
⊢ a✝ ∈ (s.erase a)ᶜ ↔ a✝ ∈ insert a sᶜ
state_after: no goals