1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Complex.abs_cpow_eq_rpow_re_of_pos
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: rw [abs_cpow_of_ne_zero (ofReal_ne_zero.mpr hx.ne'), arg_ofReal_of_nonneg hx.le,
  zero_mul, Real.exp_zero, div_one, abs_of_nonneg hx.le]
state_before: x : ℝ
hx : 0 < x
y : ℂ
⊢ abs (↑x ^ y) = x ^ y.re
state_after: no goals
Theorem: Fin.lt_or_eq_of_le
File: Mathlib/Data/Fin/Basic.lean

tactic: rw [ext_iff]
state_before: n m : ℕ
a b c : Fin n
⊢ a ≤ b → a < b ∨ a = b
state_after: n m : ℕ
a b c : Fin n
⊢ a ≤ b → a < b ∨ ↑a = ↑b

tactic: exact Nat.lt_or_eq_of_le
state_before: n m : ℕ
a b c : Fin n
⊢ a ≤ b → a < b ∨ ↑a = ↑b
state_after: no goals
Theorem: ProbabilityTheory.kernel.measurableSet_absolutelyContinuous
File: Mathlib/Probability/Kernel/RadonNikodym.lean

tactic: simp_rw [← singularPart_eq_zero_iff_absolutelyContinuous,
  singularPart_eq_zero_iff_measure_eq_zero]
state_before: α : Type u_1
γ : Type u_2
mα : MeasurableSpace α
mγ : MeasurableSpace γ
κ✝ η✝ : ↥(kernel α γ)
hαγ : MeasurableSpace.CountableOrCountablyGenerated α γ
κ η : ↥(kernel α γ)
inst✝¹ : IsFiniteKernel κ
inst✝ : IsFiniteKernel η
⊢ MeasurableSet {a | κ a ≪ η a}
state_after: α : Type u_1
γ : Type u_2
mα : MeasurableSpace α
mγ : MeasurableSpace γ
κ✝ η✝ : ↥(kernel α γ)
hαγ : MeasurableSpace.CountableOrCountablyGenerated α γ
κ η : ↥(kernel α γ)
inst✝¹ : IsFiniteKernel κ
inst✝ : IsFiniteKernel η
⊢ MeasurableSet {a | (κ a) (mutuallySingularSetSlice κ η a) = 0}

tactic: exact measurable_kernel_prod_mk_left (measurableSet_mutuallySingularSet κ η)
  (measurableSet_singleton 0)
state_before: α : Type u_1
γ : Type u_2
mα : MeasurableSpace α
mγ : MeasurableSpace γ
κ✝ η✝ : ↥(kernel α γ)
hαγ : MeasurableSpace.CountableOrCountablyGenerated α γ
κ η : ↥(kernel α γ)
inst✝¹ : IsFiniteKernel κ
inst✝ : IsFiniteKernel η
⊢ MeasurableSet {a | (κ a) (mutuallySingularSetSlice κ η a) = 0}
state_after: no goals
Theorem: Submodule.topologicalClosure_eq_top_iff
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: rw [← Submodule.orthogonal_orthogonal_eq_closure]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ K.topologicalClosure = ⊤ ↔ Kᗮ = ⊥
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ = ⊤ ↔ Kᗮ = ⊥

tactic: constructor <;> intro h
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
⊢ Kᗮᗮ = ⊤ ↔ Kᗮ = ⊥
state_after: case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
h : Kᗮᗮ = ⊤
⊢ Kᗮ = ⊥

case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
h : Kᗮ = ⊥
⊢ Kᗮᗮ = ⊤

tactic: rw [← Submodule.triorthogonal_eq_orthogonal, h, Submodule.top_orthogonal_eq_bot]
state_before: case mp
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
h : Kᗮᗮ = ⊤
⊢ Kᗮ = ⊥
state_after: no goals

tactic: rw [h, Submodule.bot_orthogonal_eq_top]
state_before: case mpr
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : CompleteSpace E
h : Kᗮ = ⊥
⊢ Kᗮᗮ = ⊤
state_after: no goals
Theorem: Finset.disjoint_filter_filter'
File: Mathlib/Data/Finset/Basic.lean

tactic: simp_rw [disjoint_left, mem_filter]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : _root_.Disjoint p q
⊢ _root_.Disjoint (filter p s) (filter q t)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : _root_.Disjoint p q
⊢ ∀ ⦃a : α⦄, a ∈ s ∧ p a → ¬(a ∈ t ∧ q a)

tactic: rintro a ⟨_, hp⟩ ⟨_, hq⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : _root_.Disjoint p q
⊢ ∀ ⦃a : α⦄, a ∈ s ∧ p a → ¬(a ∈ t ∧ q a)
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : _root_.Disjoint p q
a : α
left✝¹ : a ∈ s
hp : p a
left✝ : a ∈ t
hq : q a
⊢ False

tactic: rw [Pi.disjoint_iff] at h
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : _root_.Disjoint p q
a : α
left✝¹ : a ∈ s
hp : p a
left✝ : a ∈ t
hq : q a
⊢ False
state_after: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∀ (i : α), _root_.Disjoint (p i) (q i)
a : α
left✝¹ : a ∈ s
hp : p a
left✝ : a ∈ t
hq : q a
⊢ False

tactic: simpa [hp, hq] using h a
state_before: case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
p✝ q✝ : α → Prop
inst✝³ : DecidablePred p✝
inst✝² : DecidablePred q✝
s✝ s t : Finset α
p q : α → Prop
inst✝¹ : DecidablePred p
inst✝ : DecidablePred q
h : ∀ (i : α), _root_.Disjoint (p i) (q i)
a : α
left✝¹ : a ∈ s
hp : p a
left✝ : a ∈ t
hq : q a
⊢ False
state_after: no goals
Theorem: IsLprojection.compl_mul
File: Mathlib/Analysis/NormedSpace/MStructure.lean

tactic: rw [coe_compl, sub_mul, one_mul]
state_before: X : Type u_1
inst✝² : NormedAddCommGroup X
M : Type u_2
inst✝¹ : Ring M
inst✝ : Module M X
P : { P // IsLprojection X P }
Q : M
⊢ ↑Pᶜ * Q = Q - ↑P * Q
state_after: no goals
Theorem: Multiset.prod_map_neg
File: Mathlib/Algebra/BigOperators/Ring/Multiset.lean

tactic: simp
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : CommMonoid α
inst✝ : HasDistribNeg α
s : Multiset α
⊢ ∀ (a : List α), (map Neg.neg ⟦a⟧).prod = (-1) ^ card ⟦a⟧ * prod ⟦a⟧
state_after: no goals
Theorem: WeierstrassCurve.Affine.baseChange_equation
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

tactic: erw [← map_equation _ hf, map_baseChange]
state_before: R✝ : Type u
inst✝¹¹ : CommRing R✝
W✝ : Affine R✝
R : Type r
inst✝¹⁰ : CommRing R
W : Affine R
S : Type s
inst✝⁹ : CommRing S
inst✝⁸ : Algebra R S
A : Type u
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra S A
inst✝⁴ : IsScalarTower R S A
B : Type v
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra S B
inst✝ : IsScalarTower R S B
f : A →ₐ[S] B
g : ?m.777343
hf : Function.Injective ⇑f
x y : A
⊢ (baseChange W B).toAffine.Equation (f x) (f y) ↔ (baseChange W A).toAffine.Equation x y
state_after: R✝ : Type u
inst✝¹¹ : CommRing R✝
W✝ : Affine R✝
R : Type r
inst✝¹⁰ : CommRing R
W : Affine R
S : Type s
inst✝⁹ : CommRing S
inst✝⁸ : Algebra R S
A : Type u
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra S A
inst✝⁴ : IsScalarTower R S A
B : Type v
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra S B
inst✝ : IsScalarTower R S B
f : A →ₐ[S] B
g : ?m.777343
hf : Function.Injective ⇑f
x y : A
⊢ (baseChange W B).toAffine.Equation (f x) (f y) ↔ (baseChange W B).toAffine.Equation (f.toRingHom x) (f.toRingHom y)

tactic: rfl
state_before: R✝ : Type u
inst✝¹¹ : CommRing R✝
W✝ : Affine R✝
R : Type r
inst✝¹⁰ : CommRing R
W : Affine R
S : Type s
inst✝⁹ : CommRing S
inst✝⁸ : Algebra R S
A : Type u
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra S A
inst✝⁴ : IsScalarTower R S A
B : Type v
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra S B
inst✝ : IsScalarTower R S B
f : A →ₐ[S] B
g : ?m.777343
hf : Function.Injective ⇑f
x y : A
⊢ (baseChange W B).toAffine.Equation (f x) (f y) ↔ (baseChange W B).toAffine.Equation (f.toRingHom x) (f.toRingHom y)
state_after: no goals
Theorem: LinearMap.toSeminorm_ball_zero
File: Mathlib/Analysis/LocallyConvex/WeakDual.lean

tactic: simp only [Seminorm.ball_zero_eq, toSeminorm_apply]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
ι : Type u_4
inst✝⁴ : NormedField 𝕜
inst✝³ : AddCommGroup E
inst✝² : Module 𝕜 E
inst✝¹ : AddCommGroup F
inst✝ : Module 𝕜 F
f : E →ₗ[𝕜] 𝕜
r : ℝ
⊢ f.toSeminorm.ball 0 r = {x | ‖f x‖ < r}
state_after: no goals
Theorem: PartialHomeomorph.map_extend_nhdsWithin
File: Mathlib/Geometry/Manifold/SmoothManifoldWithCorners.lean

tactic: rw [map_extend_nhdsWithin_eq_image f I hy, nhdsWithin_inter, ←
  nhdsWithin_extend_target_eq _ _ hy, ← nhdsWithin_inter, (f.extend I).image_source_inter_eq',
  inter_comm]
state_before: 𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : PartialHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
s t : Set M
y : M
hy : y ∈ f.source
⊢ map (↑(f.extend I)) (𝓝[s] y) = 𝓝[↑(f.extend I).symm ⁻¹' s ∩ range ↑I] ↑(f.extend I) y
state_after: no goals
Theorem: Polynomial.coeff_hermite_of_lt
File: Mathlib/RingTheory/Polynomial/Hermite/Basic.lean

tactic: obtain ⟨k, rfl⟩ := Nat.exists_eq_add_of_lt hnk
state_before: n k : ℕ
hnk : n < k
⊢ (hermite n).coeff k = 0
state_after: case intro
n k : ℕ
hnk : n < n + k + 1
⊢ (hermite n).coeff (n + k + 1) = 0

tactic: clear hnk
state_before: case intro
n k : ℕ
hnk : n < n + k + 1
⊢ (hermite n).coeff (n + k + 1) = 0
state_after: case intro
n k : ℕ
⊢ (hermite n).coeff (n + k + 1) = 0

tactic: induction' n with n ih generalizing k
state_before: case intro
n k : ℕ
⊢ (hermite n).coeff (n + k + 1) = 0
state_after: case intro.zero
k : ℕ
⊢ (hermite 0).coeff (0 + k + 1) = 0

case intro.succ
n : ℕ
ih : ∀ (k : ℕ), (hermite n).coeff (n + k + 1) = 0
k : ℕ
⊢ (hermite (n + 1)).coeff (n + 1 + k + 1) = 0

tactic: apply coeff_C
state_before: case intro.zero
k : ℕ
⊢ (hermite 0).coeff (0 + k + 1) = 0
state_after: no goals

tactic: have : n + k + 1 + 2 = n + (k + 2) + 1 := by ring
state_before: case intro.succ
n : ℕ
ih : ∀ (k : ℕ), (hermite n).coeff (n + k + 1) = 0
k : ℕ
⊢ (hermite (n + 1)).coeff (n + 1 + k + 1) = 0
state_after: case intro.succ
n : ℕ
ih : ∀ (k : ℕ), (hermite n).coeff (n + k + 1) = 0
k : ℕ
this : n + k + 1 + 2 = n + (k + 2) + 1
⊢ (hermite (n + 1)).coeff (n + 1 + k + 1) = 0

tactic: rw [coeff_hermite_succ_succ, add_right_comm, this, ih k, ih (k + 2),
  mul_zero, sub_zero]
state_before: case intro.succ
n : ℕ
ih : ∀ (k : ℕ), (hermite n).coeff (n + k + 1) = 0
k : ℕ
this : n + k + 1 + 2 = n + (k + 2) + 1
⊢ (hermite (n + 1)).coeff (n + 1 + k + 1) = 0
state_after: no goals

tactic: ring
state_before: n : ℕ
ih : ∀ (k : ℕ), (hermite n).coeff (n + k + 1) = 0
k : ℕ
⊢ n + k + 1 + 2 = n + (k + 2) + 1
state_after: no goals
Theorem: Num.succ_ofInt'
File: Mathlib/Data/Num/Lemmas.lean

tactic: change ZNum.ofInt' (n + 1 : ℕ) = ZNum.ofInt' (n : ℕ) + 1
state_before: α : Type u_1
n : ℕ
⊢ ZNum.ofInt' (↑n + 1) = ZNum.ofInt' ↑n + 1
state_after: α : Type u_1
n : ℕ
⊢ ZNum.ofInt' ↑(n + 1) = ZNum.ofInt' ↑n + 1

tactic: dsimp only [ZNum.ofInt', ZNum.ofInt']
state_before: α : Type u_1
n : ℕ
⊢ ZNum.ofInt' ↑(n + 1) = ZNum.ofInt' ↑n + 1
state_after: α : Type u_1
n : ℕ
⊢ (ofNat' (n + 1)).toZNum = (ofNat' n).toZNum + 1

tactic: rw [Num.ofNat'_succ, Num.add_one, toZNum_succ, ZNum.add_one]
state_before: α : Type u_1
n : ℕ
⊢ (ofNat' (n + 1)).toZNum = (ofNat' n).toZNum + 1
state_after: no goals

tactic: change ZNum.ofInt' 0 = ZNum.ofInt' (-[0+1]) + 1
state_before: α : Type u_1
⊢ ZNum.ofInt' (-[0+1] + 1) = ZNum.ofInt' -[0+1] + 1
state_after: α : Type u_1
⊢ ZNum.ofInt' 0 = ZNum.ofInt' -[0+1] + 1

tactic: dsimp only [ZNum.ofInt', ZNum.ofInt']
state_before: α : Type u_1
⊢ ZNum.ofInt' 0 = ZNum.ofInt' -[0+1] + 1
state_after: α : Type u_1
⊢ (ofNat' 0).toZNum = (ofNat' (0 + 1)).toZNumNeg + 1

tactic: rw [ofNat'_succ, ofNat'_zero]
state_before: α : Type u_1
⊢ (ofNat' 0).toZNum = (ofNat' (0 + 1)).toZNumNeg + 1
state_after: α : Type u_1
⊢ toZNum 0 = (0 + 1).toZNumNeg + 1

tactic: rfl
state_before: α : Type u_1
⊢ toZNum 0 = (0 + 1).toZNumNeg + 1
state_after: no goals

tactic: change ZNum.ofInt' -[n+1] = ZNum.ofInt' -[(n + 1)+1] + 1
state_before: α : Type u_1
n : ℕ
⊢ ZNum.ofInt' (-[n + 1+1] + 1) = ZNum.ofInt' -[n + 1+1] + 1
state_after: α : Type u_1
n : ℕ
⊢ ZNum.ofInt' -[n+1] = ZNum.ofInt' -[n + 1+1] + 1

tactic: dsimp only [ZNum.ofInt', ZNum.ofInt']
state_before: α : Type u_1
n : ℕ
⊢ ZNum.ofInt' -[n+1] = ZNum.ofInt' -[n + 1+1] + 1
state_after: α : Type u_1
n : ℕ
⊢ (ofNat' (n + 1)).toZNumNeg = (ofNat' (n + 1 + 1)).toZNumNeg + 1

tactic: rw [@Num.ofNat'_succ (n + 1), Num.add_one, toZNumNeg_succ,
  @ofNat'_succ n, Num.add_one, ZNum.add_one, pred_succ]
state_before: α : Type u_1
n : ℕ
⊢ (ofNat' (n + 1)).toZNumNeg = (ofNat' (n + 1 + 1)).toZNumNeg + 1
state_after: no goals
Theorem: LightProfinite.pullback_snd_eq
File: Mathlib/Topology/Category/LightProfinite/Limits.lean

tactic: dsimp [pullbackIsoPullback]
state_before: X Y B : LightProfinite
f : X ⟶ B
g : Y ⟶ B
⊢ pullback.snd f g = (pullbackIsoPullback f g).hom ≫ Limits.pullback.snd
state_after: X Y B : LightProfinite
f : X ⟶ B
g : Y ⟶ B
⊢ pullback.snd f g =
    ((pullback.isLimit f g).conePointUniqueUpToIso (limit.isLimit (cospan f g))).hom ≫ Limits.pullback.snd

tactic: simp only [Limits.limit.conePointUniqueUpToIso_hom_comp, pullback.cone_pt, pullback.cone_π]
state_before: X Y B : LightProfinite
f : X ⟶ B
g : Y ⟶ B
⊢ pullback.snd f g =
    ((pullback.isLimit f g).conePointUniqueUpToIso (limit.isLimit (cospan f g))).hom ≫ Limits.pullback.snd
state_after: no goals
Theorem: SimpleGraph.edgeFinset_inj
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

tactic: simp
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
G₁ G₂ : SimpleGraph V
inst✝² : Fintype ↑G.edgeSet
inst✝¹ : Fintype ↑G₁.edgeSet
inst✝ : Fintype ↑G₂.edgeSet
⊢ G₁.edgeFinset = G₂.edgeFinset ↔ G₁ = G₂
state_after: no goals
Theorem: Polynomial.degree_lt_degree
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: by_cases hp : p = 0
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
⊢ p.degree < q.degree
state_after: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
⊢ p.degree < q.degree

case neg
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : ¬p = 0
⊢ p.degree < q.degree

tactic: simp [hp]
state_before: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
⊢ p.degree < q.degree
state_after: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
⊢ ⊥ < q.degree

tactic: rw [bot_lt_iff_ne_bot]
state_before: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
⊢ ⊥ < q.degree
state_after: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
⊢ q.degree ≠ ⊥

tactic: intro hq
state_before: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
⊢ q.degree ≠ ⊥
state_after: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
hq : q.degree = ⊥
⊢ False

tactic: simp [hp, degree_eq_bot.mp hq, lt_irrefl] at h
state_before: case pos
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : p = 0
hq : q.degree = ⊥
⊢ False
state_after: no goals

tactic: rwa [degree_eq_natDegree hp, degree_eq_natDegree <| ne_zero_of_natDegree_gt h, Nat.cast_lt]
state_before: case neg
R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝ p q : R[X]
ι : Type u_1
h : p.natDegree < q.natDegree
hp : ¬p = 0
⊢ p.degree < q.degree
state_after: no goals
Theorem: matPolyEquiv_diagonal_X
File: Mathlib/RingTheory/PolynomialAlgebra.lean

tactic: rw [← matPolyEquiv_symm_X, AlgEquiv.apply_symm_apply]
state_before: R : Type u_1
A : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
n : Type w
inst✝¹ : DecidableEq n
inst✝ : Fintype n
⊢ matPolyEquiv (diagonal fun x => X) = X
state_after: no goals
Theorem: Trivialization.toPretrivialization_injective
File: Mathlib/Topology/FiberBundle/Trivialization.lean

tactic: ext1
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
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e✝ : Trivialization F proj
x : Z
e e' : Trivialization F proj
h : (fun e => e.toPretrivialization) e = (fun e => e.toPretrivialization) e'
⊢ e = e'
state_after: case h₁
ι : 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
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e✝ : Trivialization F proj
x : Z
e e' : Trivialization F proj
h : (fun e => e.toPretrivialization) e = (fun e => e.toPretrivialization) e'
⊢ e.toPartialHomeomorph = e'.toPartialHomeomorph

case h₂
ι : 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
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e✝ : Trivialization F proj
x : Z
e e' : Trivialization F proj
h : (fun e => e.toPretrivialization) e = (fun e => e.toPretrivialization) e'
⊢ e.baseSet = e'.baseSet

tactic: exacts [PartialHomeomorph.toPartialEquiv_injective (congr_arg Pretrivialization.toPartialEquiv h),
  congr_arg Pretrivialization.baseSet h]
state_before: case h₁
ι : 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
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e✝ : Trivialization F proj
x : Z
e e' : Trivialization F proj
h : (fun e => e.toPretrivialization) e = (fun e => e.toPretrivialization) e'
⊢ e.toPartialHomeomorph = e'.toPartialHomeomorph

case h₂
ι : 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
inst✝¹ : TopologicalSpace Z
inst✝ : TopologicalSpace (TotalSpace F E)
e✝ : Trivialization F proj
x : Z
e e' : Trivialization F proj
h : (fun e => e.toPretrivialization) e = (fun e => e.toPretrivialization) e'
⊢ e.baseSet = e'.baseSet
state_after: no goals
Theorem: Submonoid.iSup_induction
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

tactic: rw [iSup_eq_closure] at hx
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x : M
hx : x ∈ ⨆ i, S i
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
⊢ C x
state_after: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x : M
hx : x ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
⊢ C x

tactic: refine closure_induction hx (fun x hx => ?_) one mul
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x : M
hx : x ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
⊢ C x
state_after: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x✝ : M
hx✝ : x✝ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
x : M
hx : x ∈ ⋃ i, ↑(S i)
⊢ C x

tactic: obtain ⟨i, hi⟩ := Set.mem_iUnion.mp hx
state_before: M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x✝ : M
hx✝ : x✝ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
x : M
hx : x ∈ ⋃ i, ↑(S i)
⊢ C x
state_after: case intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x✝ : M
hx✝ : x✝ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
x : M
hx : x ∈ ⋃ i, ↑(S i)
i : ι
hi : x ∈ ↑(S i)
⊢ C x

tactic: exact mem _ _ hi
state_before: case intro
M : Type u_1
A : Type u_2
B : Type u_3
inst✝ : MulOneClass M
ι : Sort u_4
S : ι → Submonoid M
C : M → Prop
x✝ : M
hx✝ : x✝ ∈ closure (⋃ i, ↑(S i))
mem : ∀ (i : ι), ∀ x ∈ S i, C x
one : C 1
mul : ∀ (x y : M), C x → C y → C (x * y)
x : M
hx : x ∈ ⋃ i, ↑(S i)
i : ι
hi : x ∈ ↑(S i)
⊢ C x
state_after: no goals
Theorem: Commute.isNilpotent_mul_left_iff
File: Mathlib/RingTheory/Nilpotent/Basic.lean

tactic: refine ⟨?_, h_comm.isNilpotent_mul_left⟩
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
⊢ IsNilpotent (x * y) ↔ IsNilpotent x
state_after: R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
⊢ IsNilpotent (x * y) → IsNilpotent x

tactic: rintro ⟨k, hk⟩
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
⊢ IsNilpotent (x * y) → IsNilpotent x
state_after: case intro
R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
k : ℕ
hk : (x * y) ^ k = 0
⊢ IsNilpotent x

tactic: rw [mul_pow h_comm] at hk
state_before: case intro
R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
k : ℕ
hk : (x * y) ^ k = 0
⊢ IsNilpotent x
state_after: case intro
R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
k : ℕ
hk : x ^ k * y ^ k = 0
⊢ IsNilpotent x

tactic: exact ⟨k, (nonZeroDivisorsLeft R).pow_mem hy k _ hk⟩
state_before: case intro
R : Type u_1
S : Type u_2
x y : R
inst✝ : Semiring R
h_comm : Commute x y
hy : y ∈ nonZeroDivisorsLeft R
k : ℕ
hk : x ^ k * y ^ k = 0
⊢ IsNilpotent x
state_after: no goals
Theorem: Stream'.tail_drop
File: Mathlib/Data/Stream/Init.lean

tactic: simp
state_before: α : Type u
β : Type v
δ : Type w
n : ℕ
s : Stream' α
⊢ (drop n s).tail = drop n s.tail
state_after: no goals