1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CoxeterSystem.prod_rightInvSeq
File: Mathlib/GroupTheory/Coxeter/Inversion.lean

tactic: induction' ω with i ω ih
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
⊢ (cs.rightInvSeq ω).prod = (cs.wordProd ω)⁻¹
state_after: case nil
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
⊢ (cs.rightInvSeq []).prod = (cs.wordProd [])⁻¹

case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω : List B
ih : (cs.rightInvSeq ω).prod = (cs.wordProd ω)⁻¹
⊢ (cs.rightInvSeq (i :: ω)).prod = (cs.wordProd (i :: ω))⁻¹

tactic: simp
state_before: case nil
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
⊢ (cs.rightInvSeq []).prod = (cs.wordProd [])⁻¹
state_after: no goals

tactic: simp [rightInvSeq, ih, wordProd_cons]
state_before: case cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
ω : List B
ih : (cs.rightInvSeq ω).prod = (cs.wordProd ω)⁻¹
⊢ (cs.rightInvSeq (i :: ω)).prod = (cs.wordProd (i :: ω))⁻¹
state_after: no goals
Theorem: EReal.mul_comm
File: Mathlib/Data/Real/EReal.lean

tactic: induction x <;> induction y  <;>
  try { rfl }
state_before: x y : EReal
⊢ x * y = y * x
state_after: case h_real.h_real
a✝¹ a✝ : ℝ
⊢ ↑a✝¹ * ↑a✝ = ↑a✝ * ↑a✝¹

tactic: rw [← coe_mul, ← coe_mul, mul_comm]
state_before: case h_real.h_real
a✝¹ a✝ : ℝ
⊢ ↑a✝¹ * ↑a✝ = ↑a✝ * ↑a✝¹
state_after: no goals

tactic: rfl
state_before: case h_top.h_top

⊢ ⊤ * ⊤ = ⊤ * ⊤
state_after: no goals
Theorem: Filter.pi_inj
File: Mathlib/Order/Filter/Pi.lean

tactic: refine ⟨fun h => ?_, congr_arg pi⟩
state_before: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
⊢ pi f₁ = pi f₂ ↔ f₁ = f₂
state_after: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
h : pi f₁ = pi f₂
⊢ f₁ = f₂

tactic: have hle : f₁ ≤ f₂ := pi_le_pi.1 h.le
state_before: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
h : pi f₁ = pi f₂
⊢ f₁ = f₂
state_after: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
h : pi f₁ = pi f₂
hle : f₁ ≤ f₂
⊢ f₁ = f₂

tactic: haveI : ∀ i, NeBot (f₂ i) := fun i => neBot_of_le (hle i)
state_before: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
h : pi f₁ = pi f₂
hle : f₁ ≤ f₂
⊢ f₁ = f₂
state_after: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
h : pi f₁ = pi f₂
hle : f₁ ≤ f₂
this : ∀ (i : ι), (f₂ i).NeBot
⊢ f₁ = f₂

tactic: exact hle.antisymm (pi_le_pi.1 h.ge)
state_before: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
inst✝ : ∀ (i : ι), (f₁ i).NeBot
h : pi f₁ = pi f₂
hle : f₁ ≤ f₂
this : ∀ (i : ι), (f₂ i).NeBot
⊢ f₁ = f₂
state_after: no goals
Theorem: HasFDerivAt.lim_real
File: Mathlib/Analysis/Calculus/FDeriv/Equiv.lean

tactic: apply hf.lim v
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : E → F
f' : E →L[ℝ] F
x : E
hf : HasFDerivAt f f' x
v : E
⊢ Tendsto (fun c => c • (f (x + c⁻¹ • v) - f x)) atTop (𝓝 (f' v))
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : E → F
f' : E →L[ℝ] F
x : E
hf : HasFDerivAt f f' x
v : E
⊢ Tendsto (fun n => ‖n‖) atTop atTop

tactic: rw [tendsto_atTop_atTop]
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : E → F
f' : E →L[ℝ] F
x : E
hf : HasFDerivAt f f' x
v : E
⊢ Tendsto (fun n => ‖n‖) atTop atTop
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : E → F
f' : E →L[ℝ] F
x : E
hf : HasFDerivAt f f' x
v : E
⊢ ∀ (b : ℝ), ∃ i, ∀ (a : ℝ), i ≤ a → b ≤ ‖a‖

tactic: exact fun b => ⟨b, fun a ha => le_trans ha (le_abs_self _)⟩
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f : E → F
f' : E →L[ℝ] F
x : E
hf : HasFDerivAt f f' x
v : E
⊢ ∀ (b : ℝ), ∃ i, ∀ (a : ℝ), i ≤ a → b ≤ ‖a‖
state_after: no goals
Theorem: Summable.countable_support_nnreal
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: rw [← NNReal.summable_coe] at h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : Summable f
⊢ (support f).Countable
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : Summable fun a => ↑(f a)
⊢ (support f).Countable

tactic: simpa [support] using h.countable_support
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f : α → ℝ≥0
h : Summable fun a => ↑(f a)
⊢ (support f).Countable
state_after: no goals
Theorem: lTensorHomEquivHomLTensor_apply
File: Mathlib/LinearAlgebra/Contraction.lean

tactic: rw [← LinearEquiv.coe_toLinearMap, lTensorHomEquivHomLTensor_toLinearMap]
state_before: ι : Type w
R : Type u
M : Type v₁
N : Type v₂
P : Type v₃
Q : Type v₄
inst✝¹³ : CommRing R
inst✝¹² : AddCommGroup M
inst✝¹¹ : AddCommGroup N
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : AddCommGroup Q
inst✝⁸ : Module R M
inst✝⁷ : Module R N
inst✝⁶ : Module R P
inst✝⁵ : Module R Q
inst✝⁴ : Free R M
inst✝³ : Module.Finite R M
inst✝² : Free R N
inst✝¹ : Module.Finite R N
inst✝ : Nontrivial R
x : P ⊗[R] (M →ₗ[R] Q)
⊢ (lTensorHomEquivHomLTensor R M P Q) x = (lTensorHomToHomLTensor R M P Q) x
state_after: no goals
Theorem: Monotone.le_map_sSup
File: Mathlib/Order/CompleteLattice.lean

tactic: rw [sSup_eq_iSup]
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝¹ : CompleteLattice α
f✝ g s✝ t : ι → α
a b : α
inst✝ : CompleteLattice β
s : Set α
f : α → β
hf : Monotone f
⊢ ⨆ a ∈ s, f a ≤ f (sSup s)
state_after: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝¹ : CompleteLattice α
f✝ g s✝ t : ι → α
a b : α
inst✝ : CompleteLattice β
s : Set α
f : α → β
hf : Monotone f
⊢ ⨆ a ∈ s, f a ≤ f (⨆ a ∈ s, a)

tactic: exact hf.le_map_iSup₂ _
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝¹ : CompleteLattice α
f✝ g s✝ t : ι → α
a b : α
inst✝ : CompleteLattice β
s : Set α
f : α → β
hf : Monotone f
⊢ ⨆ a ∈ s, f a ≤ f (⨆ a ∈ s, a)
state_after: no goals
Theorem: uniformEquicontinuousOn_finite
File: Mathlib/Topology/UniformSpace/Equicontinuity.lean

tactic: simp only [UniformEquicontinuousOn, eventually_all, @forall_swap _ ι]
state_before: ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
inst✝ : Finite ι
F : ι → β → α
S : Set β
⊢ UniformEquicontinuousOn F S ↔ ∀ (i : ι), UniformContinuousOn (F i) S
state_after: ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
inst✝ : Finite ι
F : ι → β → α
S : Set β
⊢ (∀ (y : ι), ∀ x ∈ 𝓤 α, ∀ᶠ (x_2 : β × β) in 𝓤 β ⊓ 𝓟 (S ×ˢ S), (F y x_2.1, F y x_2.2) ∈ x) ↔
    ∀ (i : ι), UniformContinuousOn (F i) S

tactic: rfl
state_before: ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
inst✝ : Finite ι
F : ι → β → α
S : Set β
⊢ (∀ (y : ι), ∀ x ∈ 𝓤 α, ∀ᶠ (x_2 : β × β) in 𝓤 β ⊓ 𝓟 (S ×ˢ S), (F y x_2.1, F y x_2.2) ∈ x) ↔
    ∀ (i : ι), UniformContinuousOn (F i) S
state_after: no goals
Theorem: HomologicalComplex.image_to_eq_image
File: Mathlib/Algebra/Homology/HomologicalComplex.lean

tactic: rw [C.dTo_eq r]
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✝ : HasEqualizers V
i j : ι
r : c.Rel i j
⊢ imageSubobject (C.dTo j) = imageSubobject (C.d i 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✝ : HasEqualizers V
i j : ι
r : c.Rel i j
⊢ imageSubobject ((C.xPrevIso r).hom ≫ C.d i j) = imageSubobject (C.d i j)

tactic: apply imageSubobject_iso_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✝ : HasEqualizers V
i j : ι
r : c.Rel i j
⊢ imageSubobject ((C.xPrevIso r).hom ≫ C.d i j) = imageSubobject (C.d i j)
state_after: no goals
Theorem: Finsupp.supported_empty
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: ext
state_before: α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
l : α →₀ M
h : l ∈ supported M R ∅
⊢ l = 0
state_after: case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
l : α →₀ M
h : l ∈ supported M R ∅
a✝ : α
⊢ l a✝ = 0 a✝

tactic: simp_all [mem_supported']
state_before: case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
l : α →₀ M
h : l ∈ supported M R ∅
a✝ : α
⊢ l a✝ = 0 a✝
state_after: no goals
Theorem: Real.logb_rpow
File: Mathlib/Analysis/SpecialFunctions/Log/Base.lean

tactic: rw [logb, div_eq_iff, log_rpow b_pos]
state_before: b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
⊢ logb b (b ^ x) = x
state_after: b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
⊢ log b ≠ 0

tactic: exact log_b_ne_zero b_pos b_ne_one
state_before: b x y : ℝ
b_pos : 0 < b
b_ne_one : b ≠ 1
⊢ log b ≠ 0
state_after: no goals
Theorem: SetTheory.PGame.Domineering.card_of_mem_right
File: Mathlib/SetTheory/Game/Domineering.lean

tactic: have w₁ : m ∈ b := (Finset.mem_inter.1 h).1
state_before: b : Board
m : ℤ × ℤ
h : m ∈ right b
⊢ 2 ≤ Finset.card b
state_after: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
⊢ 2 ≤ Finset.card b

tactic: have w₂ := fst_pred_mem_erase_of_mem_right h
state_before: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
⊢ 2 ≤ Finset.card b
state_after: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
w₂ : (m.1 - 1, m.2) ∈ Finset.erase b m
⊢ 2 ≤ Finset.card b

tactic: have i₁ := Finset.card_erase_lt_of_mem w₁
state_before: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
w₂ : (m.1 - 1, m.2) ∈ Finset.erase b m
⊢ 2 ≤ Finset.card b
state_after: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
w₂ : (m.1 - 1, m.2) ∈ Finset.erase b m
i₁ : (Finset.erase b m).card < Finset.card b
⊢ 2 ≤ Finset.card b

tactic: have i₂ := Nat.lt_of_le_of_lt (Nat.zero_le _) (Finset.card_erase_lt_of_mem w₂)
state_before: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
w₂ : (m.1 - 1, m.2) ∈ Finset.erase b m
i₁ : (Finset.erase b m).card < Finset.card b
⊢ 2 ≤ Finset.card b
state_after: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
w₂ : (m.1 - 1, m.2) ∈ Finset.erase b m
i₁ : (Finset.erase b m).card < Finset.card b
i₂ : 0 < (Finset.erase b m).card
⊢ 2 ≤ Finset.card b

tactic: exact Nat.lt_of_le_of_lt i₂ i₁
state_before: b : Board
m : ℤ × ℤ
h : m ∈ right b
w₁ : m ∈ b
w₂ : (m.1 - 1, m.2) ∈ Finset.erase b m
i₁ : (Finset.erase b m).card < Finset.card b
i₂ : 0 < (Finset.erase b m).card
⊢ 2 ≤ Finset.card b
state_after: no goals
Theorem: Function.Injective.isDomain
File: Mathlib/Algebra/Ring/Hom/Basic.lean

tactic: haveI := pullback_nonzero f f.map_zero f.map_one
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
⊢ IsDomain β
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
this : Nontrivial β
⊢ IsDomain β

tactic: haveI := IsRightCancelMulZero.to_noZeroDivisors α
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
this : Nontrivial β
⊢ IsDomain β
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
this✝ : Nontrivial β
this : NoZeroDivisors α
⊢ IsDomain β

tactic: haveI := hf.noZeroDivisors f f.map_zero f.map_mul
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
this✝ : Nontrivial β
this : NoZeroDivisors α
⊢ IsDomain β
state_after: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
this✝¹ : Nontrivial β
this✝ : NoZeroDivisors α
this : NoZeroDivisors β
⊢ IsDomain β

tactic: exact NoZeroDivisors.to_isDomain β
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : Ring α
inst✝¹ : IsDomain α
inst✝ : Ring β
f : β →+* α
hf : Injective ⇑f
this✝¹ : Nontrivial β
this✝ : NoZeroDivisors α
this : NoZeroDivisors β
⊢ IsDomain β
state_after: no goals
Theorem: Polynomial.eq_of_degree_sub_lt_of_eval_index_eq
File: Mathlib/LinearAlgebra/Lagrange.lean

tactic: rw [← sub_eq_zero]
state_before: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ f = g
state_after: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ f - g = 0

tactic: refine eq_zero_of_degree_lt_of_eval_index_eq_zero _ hvs degree_fg_lt ?_
state_before: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ f - g = 0
state_after: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ ∀ i ∈ s, eval (v i) (f - g) = 0

tactic: simp_rw [eval_sub, sub_eq_zero]
state_before: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ ∀ i ∈ s, eval (v i) (f - g) = 0
state_after: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ ∀ i ∈ s, eval (v i) f = eval (v i) g

tactic: exact eval_fg
state_before: R : Type u_1
inst✝¹ : CommRing R
inst✝ : IsDomain R
f g : R[X]
ι : Type u_2
v : ι → R
s : Finset ι
hvs : Set.InjOn v ↑s
degree_fg_lt : (f - g).degree < ↑s.card
eval_fg : ∀ i ∈ s, eval (v i) f = eval (v i) g
⊢ ∀ i ∈ s, eval (v i) f = eval (v i) g
state_after: no goals
Theorem: expChar_one_of_char_zero
File: Mathlib/Algebra/CharP/ExpChar.lean

tactic: cases' hq with q hq_one hq_prime hq_hchar
state_before: R : Type u
inst✝ : Semiring R
q : ℕ
hp : CharP R 0
hq : ExpChar R q
⊢ q = 1
state_after: case zero
R : Type u
inst✝ : Semiring R
hp : CharP R 0
q : CharZero R
⊢ 1 = 1

case prime
R : Type u
inst✝ : Semiring R
q : ℕ
hp : CharP R 0
hq_prime : Nat.Prime q
hq_hchar : CharP R q
⊢ q = 1

tactic: rfl
state_before: case zero
R : Type u
inst✝ : Semiring R
hp : CharP R 0
q : CharZero R
⊢ 1 = 1
state_after: no goals

tactic: exact False.elim <| hq_prime.ne_zero <| hq_hchar.eq R hp
state_before: case prime
R : Type u
inst✝ : Semiring R
q : ℕ
hp : CharP R 0
hq_prime : Nat.Prime q
hq_hchar : CharP R q
⊢ q = 1
state_after: no goals
Theorem: EuclideanGeometry.angle_neg
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Affine.lean

tactic: simpa only [zero_sub] using angle_const_sub 0 v₁ v₂ v₃
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₂ : P
v₁ v₂ v₃ : V
⊢ ∠ (-v₁) (-v₂) (-v₃) = ∠ v₁ v₂ v₃
state_after: no goals
Theorem: Real.le_sin
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Bounds.lean

tactic: simpa using sin_le <| neg_nonneg.2 hx
state_before: x : ℝ
hx : x ≤ 0
⊢ x ≤ sin x
state_after: no goals
Theorem: SatisfiesM_Except_eq
File: .lake/packages/batteries/Batteries/Classes/SatisfiesM.lean

tactic: revert x
state_before: ε : Type u_1
α✝ : Type u_2
p : α✝ → Prop
x : Except ε α✝
⊢ SatisfiesM p x → ∀ (a : α✝), x = Except.ok a → p a
state_after: ε : Type u_1
α✝ : Type u_2
p : α✝ → Prop
⊢ ∀ {x : Except ε α✝}, SatisfiesM p x → ∀ (a : α✝), x = Except.ok a → p a

tactic: intro | .ok _, ⟨.ok ⟨_, h⟩, rfl⟩, _, rfl => exact h
state_before: ε : Type u_1
α✝ : Type u_2
p : α✝ → Prop
⊢ ∀ {x : Except ε α✝}, SatisfiesM p x → ∀ (a : α✝), x = Except.ok a → p a
state_after: no goals

tactic: exact h
state_before: ε : Type u_1
α✝ : Type u_2
p : α✝ → Prop
x✝³ : Except ε α✝
x✝² : SatisfiesM p x✝³
x✝¹ : α✝
x✝ : x✝³ = Except.ok x✝¹
val✝ : α✝
h : p val✝
⊢ p ⟨val✝, h⟩.val
state_after: no goals
Theorem: MeasureTheory.snorm_eq_snorm'
File: Mathlib/MeasureTheory/Function/LpSeminorm/Basic.lean

tactic: simp [snorm, hp_ne_zero, hp_ne_top]
state_before: α : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
m m0 : MeasurableSpace α
p : ℝ≥0∞
q : ℝ
μ ν : Measure α
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedAddCommGroup G
hp_ne_zero : p ≠ 0
hp_ne_top : p ≠ ⊤
f : α → F
⊢ snorm f p μ = snorm' f p.toReal μ
state_after: no goals
Theorem: Fin.comp_snoc
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: ext j
state_before: m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
⊢ g ∘ snoc q y = snoc (g ∘ q) (g y)
state_after: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
⊢ (g ∘ snoc q y) j = snoc (g ∘ q) (g y) j

tactic: by_cases h : j.val < n
state_before: case h
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
⊢ (g ∘ snoc q y) j = snoc (g ∘ q) (g y) j
state_after: case pos
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
h : ↑j < n
⊢ (g ∘ snoc q y) j = snoc (g ∘ q) (g y) j

case neg
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
h : ¬↑j < n
⊢ (g ∘ snoc q y) j = snoc (g ∘ q) (g y) j

tactic: simp [h, snoc, castSucc_castLT]
state_before: case pos
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
h : ↑j < n
⊢ (g ∘ snoc q y) j = snoc (g ∘ q) (g y) j
state_after: no goals

tactic: rw [eq_last_of_not_lt h]
state_before: case neg
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
h : ¬↑j < n
⊢ (g ∘ snoc q y) j = snoc (g ∘ q) (g y) j
state_after: case neg
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
h : ¬↑j < n
⊢ (g ∘ snoc q y) (last n) = snoc (g ∘ q) (g y) (last n)

tactic: simp
state_before: case neg
m n : ℕ
α✝ : Fin (n + 1) → Type u
x : α✝ (last n)
q✝ : (i : Fin (n + 1)) → α✝ i
p : (i : Fin n) → α✝ i.castSucc
i : Fin n
y✝ : α✝ i.castSucc
z : α✝ (last n)
α : Type u_1
β : Type u_2
g : α → β
q : Fin n → α
y : α
j : Fin (n + 1)
h : ¬↑j < n
⊢ (g ∘ snoc q y) (last n) = snoc (g ∘ q) (g y) (last n)
state_after: no goals
Theorem: AbsoluteValue.abs_isEuclidean
File: Mathlib/Algebra/Order/EuclideanAbsoluteValue.lean

tactic: rw [abs_eq_natAbs, abs_eq_natAbs, ofNat_lt]
state_before: x y : ℤ
⊢ |x| < |y| ↔ x.natAbs < y.natAbs
state_after: no goals
Theorem: Computable.nat_rec
File: Mathlib/Computability/Partrec.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
σ : Type u_4
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α → ℕ
g : α → σ
h : α → ℕ × σ → σ
hf : Computable f
hg : Computable g
hh : Computable₂ h
a : α
⊢ Nat.rec (↑g a) (fun y IH => IH.bind fun i => ↑(h a) (y, i)) (f a) =
    (↑fun a => Nat.rec (g a) (fun y IH => h a (y, IH)) (f a)) a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
σ : Type u_4
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α → ℕ
g : α → σ
h : α → ℕ × σ → σ
hf : Computable f
hg : Computable g
hh : Computable₂ h
a : α
⊢ Nat.rec (Part.some (g a)) (fun y IH => IH.bind fun i => Part.some (h a (y, i))) (f a) =
    Part.some (Nat.rec (g a) (fun y IH => h a (y, IH)) (f a))

tactic: induction f a <;> simp [*]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
σ : Type u_4
inst✝³ : Primcodable α
inst✝² : Primcodable β
inst✝¹ : Primcodable γ
inst✝ : Primcodable σ
f : α → ℕ
g : α → σ
h : α → ℕ × σ → σ
hf : Computable f
hg : Computable g
hh : Computable₂ h
a : α
⊢ Nat.rec (Part.some (g a)) (fun y IH => IH.bind fun i => Part.some (h a (y, i))) (f a) =
    Part.some (Nat.rec (g a) (fun y IH => h a (y, IH)) (f a))
state_after: no goals
Theorem: PartialEquiv.restr_eq_of_source_subset
File: Mathlib/Logic/Equiv/PartialEquiv.lean

tactic: simp [inter_eq_self_of_subset_left h]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
e✝ : PartialEquiv α β
e' : PartialEquiv β γ
e : PartialEquiv α β
s : Set α
h : e.source ⊆ s
⊢ (e.restr s).source = e.source
state_after: no goals