1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: AlgebraicGeometry.isBasis_affine_open
File: Mathlib/AlgebraicGeometry/AffineScheme.lean

tactic: rw [Opens.isBasis_iff_nbhd]
state_before: X : Scheme
⊢ Opens.IsBasis X.affineOpens
state_after: X : Scheme
⊢ ∀ {U : Opens ↑↑X.toPresheafedSpace} {x : ↑↑X.toPresheafedSpace}, x ∈ U → ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U

tactic: rintro U x (hU : x ∈ (U : Set X))
state_before: X : Scheme
⊢ ∀ {U : Opens ↑↑X.toPresheafedSpace} {x : ↑↑X.toPresheafedSpace}, x ∈ U → ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
state_after: X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U

tactic: obtain ⟨S, hS, hxS, hSU⟩ := X.affineBasisCover_is_basis.exists_subset_of_mem_open hU U.isOpen
state_before: X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
state_after: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U

tactic: refine ⟨⟨S, X.affineBasisCover_is_basis.isOpen hS⟩, ?_, hxS, hSU⟩
state_before: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ ∃ U' ∈ X.affineOpens, x ∈ U' ∧ U' ≤ U
state_after: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ { carrier := S, is_open' := ⋯ } ∈ X.affineOpens

tactic: rcases hS with ⟨i, rfl⟩
state_before: case intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
S : Set ↑↑X.toPresheafedSpace
hS : S ∈ {x | ∃ a, x = Set.range ⇑(X.affineBasisCover.map a).val.base}
hxS : x ∈ S
hSU : S ⊆ ↑U
⊢ { carrier := S, is_open' := ⋯ } ∈ X.affineOpens
state_after: case intro.intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
i : X.affineBasisCover.J
hxS : x ∈ Set.range ⇑(X.affineBasisCover.map i).val.base
hSU : Set.range ⇑(X.affineBasisCover.map i).val.base ⊆ ↑U
⊢ { carrier := Set.range ⇑(X.affineBasisCover.map i).val.base, is_open' := ⋯ } ∈ X.affineOpens

tactic: exact isAffineOpen_opensRange _
state_before: case intro.intro.intro.intro
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
x : ↑↑X.toPresheafedSpace
hU : x ∈ ↑U
i : X.affineBasisCover.J
hxS : x ∈ Set.range ⇑(X.affineBasisCover.map i).val.base
hSU : Set.range ⇑(X.affineBasisCover.map i).val.base ⊆ ↑U
⊢ { carrier := Set.range ⇑(X.affineBasisCover.map i).val.base, is_open' := ⋯ } ∈ X.affineOpens
state_after: no goals
Theorem: Real.sin_lt
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Bounds.lean

tactic: cases' lt_or_le 1 x with h' h'
state_before: x : ℝ
h : 0 < x
⊢ sin x < x
state_after: case inl
x : ℝ
h : 0 < x
h' : 1 < x
⊢ sin x < x

case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
⊢ sin x < x

tactic: have hx : |x| = x := abs_of_nonneg h.le
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
⊢ sin x < x
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
⊢ sin x < x

tactic: have := le_of_abs_le (sin_bound <| show |x| ≤ 1 by rwa [hx])
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
⊢ sin x < x
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x - (x - x ^ 3 / 6) ≤ |x| ^ 4 * (5 / 96)
⊢ sin x < x

tactic: rw [sub_le_iff_le_add', hx] at this
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x - (x - x ^ 3 / 6) ≤ |x| ^ 4 * (5 / 96)
⊢ sin x < x
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ sin x < x

tactic: apply this.trans_lt
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ sin x < x
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ x - x ^ 3 / 6 + x ^ 4 * (5 / 96) < x

tactic: rw [sub_add, sub_lt_self_iff, sub_pos, div_eq_mul_inv (x ^ 3)]
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ x - x ^ 3 / 6 + x ^ 4 * (5 / 96) < x
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ x ^ 4 * (5 / 96) < x ^ 3 * 6⁻¹

tactic: refine mul_lt_mul' ?_ (by norm_num) (by norm_num) (pow_pos h 3)
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ x ^ 4 * (5 / 96) < x ^ 3 * 6⁻¹
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ x ^ 4 ≤ x ^ 3

tactic: apply pow_le_pow_of_le_one h.le h'
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ x ^ 4 ≤ x ^ 3
state_after: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ 3 ≤ 4

tactic: norm_num
state_before: case inr
x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ 3 ≤ 4
state_after: no goals

tactic: exact (sin_le_one x).trans_lt h'
state_before: case inl
x : ℝ
h : 0 < x
h' : 1 < x
⊢ sin x < x
state_after: no goals

tactic: rwa [hx]
state_before: x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
⊢ |x| ≤ 1
state_after: no goals

tactic: norm_num
state_before: x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ 5 / 96 < 6⁻¹
state_after: no goals

tactic: norm_num
state_before: x : ℝ
h : 0 < x
h' : x ≤ 1
hx : |x| = x
this : sin x ≤ x - x ^ 3 / 6 + x ^ 4 * (5 / 96)
⊢ 0 ≤ 5 / 96
state_after: no goals
Theorem: exists_unique_eq
File: Mathlib/Logic/Basic.lean

tactic: simp only [eq_comm, ExistsUnique, and_self, forall_eq', exists_eq']
state_before: α : Sort u_1
β : Sort u_2
p q : α → Prop
a' : α
⊢ ∃! a, a = a'
state_after: no goals
Theorem: Set.image_fintype_prod_pi
File: Mathlib/Data/Set/Pointwise/BigOperators.lean

tactic: simpa only [Finset.coe_univ] using image_finset_prod_pi Finset.univ S
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
F : Type u_4
inst✝⁴ : FunLike F α β
inst✝³ : CommMonoid α
inst✝² : CommMonoid β
inst✝¹ : MonoidHomClass F α β
inst✝ : Fintype ι
S : ι → Set α
⊢ (fun f => ∏ i : ι, f i) '' univ.pi S = ∏ i : ι, S i
state_after: no goals
Theorem: Int.two_le_iff_pos_of_even
File: Mathlib/Algebra/Order/Ring/Int.lean

tactic: decide
state_before: m : ℤ
even : Even m
⊢ 0 < 2
state_after: no goals
Theorem: Finset.Colex.toColex_lt_toColex_iff_max'_mem
File: Mathlib/Combinatorics/Colex.lean

tactic: rw [lt_iff_le_and_ne, toColex_le_toColex_iff_max'_mem]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
⊢ { ofColex := s } < { ofColex := t } ↔ ∃ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
state_after: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
⊢ (∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t) ∧ { ofColex := s } ≠ { ofColex := t } ↔ ∃ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t

tactic: aesop
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
𝒜 𝒜₁ 𝒜₂ : Finset (Finset α)
s t u : Finset α
a b : α
r : ℕ
⊢ (∀ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t) ∧ { ofColex := s } ≠ { ofColex := t } ↔ ∃ (hst : s ≠ t), (s ∆ t).max' ⋯ ∈ t
state_after: no goals
Theorem: PNat.XgcdType.reduce_isReduced
File: Mathlib/Data/PNat/Xgcd.lean

tactic: rw [reduce_a h]
state_before: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : u.r = 0
⊢ x✝.reduce.IsReduced
state_after: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : u.r = 0
⊢ u.finish.IsReduced

tactic: exact u.finish_isReduced
state_before: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : u.r = 0
⊢ u.finish.IsReduced
state_after: no goals

tactic: have : SizeOf.sizeOf u.step < SizeOf.sizeOf u := u.step_wf h
state_before: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : ¬u.r = 0
⊢ x✝.reduce.IsReduced
state_after: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : ¬u.r = 0
this : sizeOf u.step < sizeOf u
⊢ x✝.reduce.IsReduced

tactic: rw [reduce_b h, flip_isReduced]
state_before: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : ¬u.r = 0
this : sizeOf u.step < sizeOf u
⊢ x✝.reduce.IsReduced
state_after: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : ¬u.r = 0
this : sizeOf u.step < sizeOf u
⊢ u.step.reduce.IsReduced

tactic: apply reduce_isReduced
state_before: u✝ x✝ : XgcdType
u : XgcdType := x✝
h : ¬u.r = 0
this : sizeOf u.step < sizeOf u
⊢ u.step.reduce.IsReduced
state_after: no goals
Theorem: DFinsupp.neLocus_sub_left
File: Mathlib/Data/DFinsupp/NeLocus.lean

tactic: simp only [sub_eq_add_neg, @neLocus_add_left α N _ _ _, neLocus_neg_neg]
state_before: α : Type u_1
N : α → Type u_2
inst✝² : DecidableEq α
inst✝¹ : (a : α) → DecidableEq (N a)
inst✝ : (a : α) → AddGroup (N a)
f f₁ f₂ g g₁ g₂ : Π₀ (a : α), N a
⊢ (f - g₁).neLocus (f - g₂) = g₁.neLocus g₂
state_after: no goals
Theorem: one_div_zpow
File: Mathlib/Algebra/Group/Basic.lean

tactic: simp only [one_div, inv_zpow]
state_before: α : Type u_1
β : Type u_2
G : Type u_3
M : Type u_4
inst✝ : DivisionMonoid α
a✝ b c d a : α
n : ℤ
⊢ (1 / a) ^ n = 1 / a ^ n
state_after: no goals
Theorem: Subgroup.val_mem_ofUnits_iff_mem
File: Mathlib/Algebra/Group/Submonoid/Units.lean

tactic: simp_rw [mem_ofUnits_iff_toUnits_mem, toUnits_val_apply]
state_before: M : Type u_1
inst✝¹ : Monoid M
G : Type u_2
inst✝ : Group G
H : Subgroup Gˣ
x : Gˣ
⊢ ↑x ∈ H.ofUnits ↔ x ∈ H
state_after: no goals
Theorem: Polynomial.sum_roots_eq_nextCoeff_of_monic_of_split
File: Mathlib/Algebra/Polynomial/Splits.lean

tactic: nth_rw 1 [eq_prod_roots_of_monic_of_splits_id hmo hP]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ P.nextCoeff = -P.roots.sum
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun a => X - C a) P.roots).prod.nextCoeff = -P.roots.sum

tactic: rw [Monic.nextCoeff_multiset_prod _ _ fun a ha => _]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun a => X - C a) P.roots).prod.nextCoeff = -P.roots.sum
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun i => (X - C i).nextCoeff) P.roots).sum = -P.roots.sum

R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ ∀ a ∈ P.roots, (X - C a).Monic

tactic: simp_rw [nextCoeff_X_sub_C, Multiset.sum_map_neg']
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun i => (X - C i).nextCoeff) P.roots).sum = -P.roots.sum
state_after: no goals

tactic: simp only [monic_X_sub_C, implies_true]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ ∀ a ∈ P.roots, (X - C a).Monic
state_after: no goals
Theorem: Nat.doubleFactorial_two_mul
File: Mathlib/Data/Nat/Factorial/DoubleFactorial.lean

tactic: rw [mul_add, mul_one, doubleFactorial_add_two, factorial, pow_succ, doubleFactorial_two_mul _,
  succ_eq_add_one]
state_before: n : ℕ
⊢ (2 * (n + 1))‼ = 2 ^ (n + 1) * (n + 1)!
state_after: n : ℕ
⊢ (2 * n + 2) * (2 ^ n * n !) = 2 ^ n * 2 * ((n + 1) * n !)

tactic: ring
state_before: n : ℕ
⊢ (2 * n + 2) * (2 ^ n * n !) = 2 ^ n * 2 * ((n + 1) * n !)
state_after: no goals
Theorem: Orientation.eq_zero_or_eq_zero_of_kahler_eq_zero
File: Mathlib/Analysis/InnerProductSpace/TwoDim.lean

tactic: have : ‖x‖ * ‖y‖ = 0 := by simpa [hx] using (o.norm_kahler x y).symm
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
⊢ x = 0 ∨ y = 0
state_after: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
⊢ x = 0 ∨ y = 0

tactic: cases' eq_zero_or_eq_zero_of_mul_eq_zero this with h h
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
⊢ x = 0 ∨ y = 0
state_after: case inl
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖x‖ = 0
⊢ x = 0 ∨ y = 0

case inr
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖y‖ = 0
⊢ x = 0 ∨ y = 0

tactic: simpa [hx] using (o.norm_kahler x y).symm
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
⊢ ‖x‖ * ‖y‖ = 0
state_after: no goals

tactic: left
state_before: case inl
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖x‖ = 0
⊢ x = 0 ∨ y = 0
state_after: case inl.h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖x‖ = 0
⊢ x = 0

tactic: simpa using h
state_before: case inl.h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖x‖ = 0
⊢ x = 0
state_after: no goals

tactic: right
state_before: case inr
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖y‖ = 0
⊢ x = 0 ∨ y = 0
state_after: case inr.h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖y‖ = 0
⊢ y = 0

tactic: simpa using h
state_before: case inr.h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
hx : (o.kahler x) y = 0
this : ‖x‖ * ‖y‖ = 0
h : ‖y‖ = 0
⊢ y = 0
state_after: no goals
Theorem: Polynomial.scaleRoots_eval₂_eq_zero
File: Mathlib/RingTheory/Polynomial/ScaleRoots.lean

tactic: rw [scaleRoots_eval₂_mul, hr, mul_zero]
state_before: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝³ : Semiring S
inst✝² : CommSemiring R
inst✝¹ : Semiring A
inst✝ : Field K
p : S[X]
f : S →+* R
r : R
s : S
hr : eval₂ f r p = 0
⊢ eval₂ f (f s * r) (p.scaleRoots s) = 0
state_after: no goals
Theorem: ZMod.isSquare_neg_one_of_eq_sq_add_sq_of_coprime
File: Mathlib/NumberTheory/SumTwoSquares.lean

tactic: zify at h
state_before: n x y : ℕ
h : n = x ^ 2 + y ^ 2
hc : x.Coprime y
⊢ IsSquare (-1)
state_after: n x y : ℕ
hc : x.Coprime y
h : ↑n = ↑x ^ 2 + ↑y ^ 2
⊢ IsSquare (-1)

tactic: exact ZMod.isSquare_neg_one_of_eq_sq_add_sq_of_isCoprime h hc.isCoprime
state_before: n x y : ℕ
hc : x.Coprime y
h : ↑n = ↑x ^ 2 + ↑y ^ 2
⊢ IsSquare (-1)
state_after: no goals
Theorem: Ideal.minimalPrimes_eq_comap
File: Mathlib/RingTheory/Ideal/MinimalPrime.lean

tactic: rw [minimalPrimes, ← Ideal.comap_minimalPrimes_eq_of_surjective Ideal.Quotient.mk_surjective,
  ← RingHom.ker_eq_comap_bot, Ideal.mk_ker]
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I J : Ideal R
⊢ I.minimalPrimes = comap (Quotient.mk I) '' minimalPrimes (R ⧸ I)
state_after: no goals
Theorem: Int.comap_cast_atBot
File: Mathlib/Order/Filter/Archimedean.lean

tactic: simpa [neg_le] using hn
state_before: α : Type u_1
R : Type u_2
inst✝¹ : StrictOrderedRing R
inst✝ : Archimedean R
r : R
n : ℕ
hn : -r ≤ ↑n
⊢ ↑(-↑n) ≤ r
state_after: no goals
Theorem: Computation.parallel_empty
File: Mathlib/Data/Seq/Parallel.lean

tactic: let ⟨c, cs, _⟩ := exists_of_mem_parallel m
state_before: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
⊢ False
state_after: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
c : Computation α
cs : c ∈ S
right✝ : a ∈ c
⊢ False

tactic: let ⟨n, nm⟩ := WSeq.exists_get?_of_mem cs
state_before: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
c : Computation α
cs : c ∈ S
right✝ : a ∈ c
⊢ False
state_after: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
c : Computation α
cs : c ∈ S
right✝ : a ∈ c
n : ℕ
nm : some c ∈ S.get? n
⊢ False

tactic: let ⟨c', h'⟩ := WSeq.head_some_of_get?_some nm
state_before: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
c : Computation α
cs : c ∈ S
right✝ : a ∈ c
n : ℕ
nm : some c ∈ S.get? n
⊢ False
state_after: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
c : Computation α
cs : c ∈ S
right✝ : a ∈ c
n : ℕ
nm : some c ∈ S.get? n
c' : Computation α
h' : some c' ∈ S.head
⊢ False

tactic: injection h h'
state_before: α : Type u
β : Type v
S : WSeq (Computation α)
h : S.head ~> none
x✝ : (parallel S).Terminates
a : α
m : a ∈ parallel S
c : Computation α
cs : c ∈ S
right✝ : a ∈ c
n : ℕ
nm : some c ∈ S.get? n
c' : Computation α
h' : some c' ∈ S.head
⊢ False
state_after: no goals
Theorem: QuaternionAlgebra.coe_neg
File: Mathlib/Algebra/Quaternion.lean

tactic: ext <;> simp
state_before: S : Type u_1
T : Type u_2
R : Type u_3
inst✝ : CommRing R
c₁ c₂ r x y z : R
a b c : ℍ[R,c₁,c₂]
⊢ ↑(-x) = -↑x
state_after: no goals
Theorem: Polynomial.rootSet_one
File: Mathlib/Algebra/Polynomial/Roots.lean

tactic: rw [← C_1, rootSet_C]
state_before: R : Type u
S✝ : Type v
T : Type w
a b : R
n : ℕ
inst✝⁵ : CommRing R
inst✝⁴ : IsDomain R
p q : R[X]
inst✝³ : CommRing T
S : Type u_1
inst✝² : CommRing S
inst✝¹ : IsDomain S
inst✝ : Algebra T S
⊢ rootSet 1 S = ∅
state_after: no goals
Theorem: CategoryTheory.IsHomLift.id_lift_eqToHom_codomain
File: Mathlib/CategoryTheory/FiberedCategory/HomLift.lean

tactic: subst hRS hb
state_before: 𝒮 : Type u₁
𝒳 : Type u₂
inst✝¹ : Category.{v₁, u₂} 𝒳
inst✝ : Category.{v₂, u₁} 𝒮
p✝ p : 𝒳 ⥤ 𝒮
R S : 𝒮
hRS : R = S
b : 𝒳
hb : p.obj b = S
⊢ p.IsHomLift (eqToHom hRS) (𝟙 b)
state_after: 𝒮 : Type u₁
𝒳 : Type u₂
inst✝¹ : Category.{v₁, u₂} 𝒳
inst✝ : Category.{v₂, u₁} 𝒮
p✝ p : 𝒳 ⥤ 𝒮
b : 𝒳
⊢ p.IsHomLift (eqToHom ⋯) (𝟙 b)

tactic: simp
state_before: 𝒮 : Type u₁
𝒳 : Type u₂
inst✝¹ : Category.{v₁, u₂} 𝒳
inst✝ : Category.{v₂, u₁} 𝒮
p✝ p : 𝒳 ⥤ 𝒮
b : 𝒳
⊢ p.IsHomLift (eqToHom ⋯) (𝟙 b)
state_after: no goals
Theorem: PartialHomeomorph.continuousAt_extend_symm
File: Mathlib/Geometry/Manifold/SmoothManifoldWithCorners.lean

tactic: rwa [f.extend_source]
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
x : M
h : x ∈ f.source
⊢ x ∈ (f.extend I).source
state_after: no goals
Theorem: FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm_apply_le
File: Mathlib/Analysis/Analytic/Basic.lean

tactic: rw [← p.nnnorm_changeOriginSeriesTerm k l s hs, ← Fin.prod_const, ← Fin.prod_const]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x✝ y✝ : E
r R : ℝ≥0
k l : ℕ
s : Finset (Fin (k + l))
hs : s.card = l
x y : E
⊢ ‖((p.changeOriginSeriesTerm k l s hs) fun x_1 => x) fun x => y‖₊ ≤ ‖p (k + l)‖₊ * ‖x‖₊ ^ l * ‖y‖₊ ^ k
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x✝ y✝ : E
r R : ℝ≥0
k l : ℕ
s : Finset (Fin (k + l))
hs : s.card = l
x y : E
⊢ ‖((p.changeOriginSeriesTerm k l s hs) fun x_1 => x) fun x => y‖₊ ≤
    (‖p.changeOriginSeriesTerm k l s hs‖₊ * ∏ _i : Fin l, ‖x‖₊) * ∏ _i : Fin k, ‖y‖₊

tactic: apply ContinuousMultilinearMap.le_of_opNNNorm_le
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x✝ y✝ : E
r R : ℝ≥0
k l : ℕ
s : Finset (Fin (k + l))
hs : s.card = l
x y : E
⊢ ‖((p.changeOriginSeriesTerm k l s hs) fun x_1 => x) fun x => y‖₊ ≤
    (‖p.changeOriginSeriesTerm k l s hs‖₊ * ∏ _i : Fin l, ‖x‖₊) * ∏ _i : Fin k, ‖y‖₊
state_after: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x✝ y✝ : E
r R : ℝ≥0
k l : ℕ
s : Finset (Fin (k + l))
hs : s.card = l
x y : E
⊢ ‖(p.changeOriginSeriesTerm k l s hs) fun x_1 => x‖₊ ≤ ‖p.changeOriginSeriesTerm k l s hs‖₊ * ∏ _i : Fin l, ‖x‖₊

tactic: apply ContinuousMultilinearMap.le_opNNNorm
state_before: case h
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
p : FormalMultilinearSeries 𝕜 E F
x✝ y✝ : E
r R : ℝ≥0
k l : ℕ
s : Finset (Fin (k + l))
hs : s.card = l
x y : E
⊢ ‖(p.changeOriginSeriesTerm k l s hs) fun x_1 => x‖₊ ≤ ‖p.changeOriginSeriesTerm k l s hs‖₊ * ∏ _i : Fin l, ‖x‖₊
state_after: no goals