1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: isClosed_setOf_map_inv
File: Mathlib/Topology/Algebra/Group/Basic.lean

tactic: simp only [setOf_forall]
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝⁸ : TopologicalSpace G
inst✝⁷ : Inv G
inst✝⁶ : ContinuousInv G
inst✝⁵ : TopologicalSpace α
f : α → G
s : Set α
x : α
ι : Type u_1
G₁ : Type u_2
G₂ : Type u_3
inst✝⁴ : TopologicalSpace G₂
inst✝³ : T2Space G₂
inst✝² : Inv G₁
inst✝¹ : Inv G₂
inst✝ : ContinuousInv G₂
⊢ IsClosed {f | ∀ (x : G₁), f x⁻¹ = (f x)⁻¹}
state_after: G : Type w
H : Type x
α : Type u
β : Type v
inst✝⁸ : TopologicalSpace G
inst✝⁷ : Inv G
inst✝⁶ : ContinuousInv G
inst✝⁵ : TopologicalSpace α
f : α → G
s : Set α
x : α
ι : Type u_1
G₁ : Type u_2
G₂ : Type u_3
inst✝⁴ : TopologicalSpace G₂
inst✝³ : T2Space G₂
inst✝² : Inv G₁
inst✝¹ : Inv G₂
inst✝ : ContinuousInv G₂
⊢ IsClosed (⋂ i, {x | x i⁻¹ = (x i)⁻¹})

tactic: exact isClosed_iInter fun i => isClosed_eq (continuous_apply _) (continuous_apply _).inv
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝⁸ : TopologicalSpace G
inst✝⁷ : Inv G
inst✝⁶ : ContinuousInv G
inst✝⁵ : TopologicalSpace α
f : α → G
s : Set α
x : α
ι : Type u_1
G₁ : Type u_2
G₂ : Type u_3
inst✝⁴ : TopologicalSpace G₂
inst✝³ : T2Space G₂
inst✝² : Inv G₁
inst✝¹ : Inv G₂
inst✝ : ContinuousInv G₂
⊢ IsClosed (⋂ i, {x | x i⁻¹ = (x i)⁻¹})
state_after: no goals
Theorem: ENNReal.continuous_sub_right
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: by_cases a_infty : a = ∞
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
⊢ Continuous fun x => x - a
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : a = ⊤
⊢ Continuous fun x => x - a

case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ Continuous fun x => x - a

tactic: simp [a_infty, continuous_const]
state_before: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : a = ⊤
⊢ Continuous fun x => x - a
state_after: no goals

tactic: rw [show (fun x => x - a) = (fun p : ℝ≥0∞ × ℝ≥0∞ => p.fst - p.snd) ∘ fun x => ⟨x, a⟩ by rfl]
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ Continuous fun x => x - a
state_after: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ Continuous ((fun p => p.1 - p.2) ∘ fun x => (x, a))

tactic: apply ContinuousOn.comp_continuous continuousOn_sub (continuous_id'.prod_mk continuous_const)
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ Continuous ((fun p => p.1 - p.2) ∘ fun x => (x, a))
state_after: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ ∀ (x : ℝ≥0∞), (x, a) ∈ {p | p ≠ (⊤, ⊤)}

tactic: intro x
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ ∀ (x : ℝ≥0∞), (x, a) ∈ {p | p ≠ (⊤, ⊤)}
state_after: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
x : ℝ≥0∞
⊢ (x, a) ∈ {p | p ≠ (⊤, ⊤)}

tactic: simp only [a_infty, Ne, mem_setOf_eq, Prod.mk.inj_iff, and_false_iff, not_false_iff]
state_before: case neg
α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
x : ℝ≥0∞
⊢ (x, a) ∈ {p | p ≠ (⊤, ⊤)}
state_after: no goals

tactic: rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
a✝ b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
a : ℝ≥0∞
a_infty : ¬a = ⊤
⊢ (fun x => x - a) = (fun p => p.1 - p.2) ∘ fun x => (x, a)
state_after: no goals
Theorem: Set.mem_compl_image
File: Mathlib/Data/Set/Image.lean

tactic: simp [← preimage_compl_eq_image_compl]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s t✝ : Set α
inst✝ : BooleanAlgebra α
t : α
S : Set α
⊢ t ∈ compl '' S ↔ tᶜ ∈ S
state_after: no goals
Theorem: Nat.log_monotone
File: Mathlib/Data/Nat/Log.lean

tactic: refine monotone_nat_of_le_succ fun n => ?_
state_before: b : ℕ
⊢ Monotone (log b)
state_after: b n : ℕ
⊢ log b n ≤ log b (n + 1)

tactic: rcases le_or_lt b 1 with hb | hb
state_before: b n : ℕ
⊢ log b n ≤ log b (n + 1)
state_after: case inl
b n : ℕ
hb : b ≤ 1
⊢ log b n ≤ log b (n + 1)

case inr
b n : ℕ
hb : 1 < b
⊢ log b n ≤ log b (n + 1)

tactic: rw [log_of_left_le_one hb]
state_before: case inl
b n : ℕ
hb : b ≤ 1
⊢ log b n ≤ log b (n + 1)
state_after: case inl
b n : ℕ
hb : b ≤ 1
⊢ 0 ≤ log b (n + 1)

tactic: exact zero_le _
state_before: case inl
b n : ℕ
hb : b ≤ 1
⊢ 0 ≤ log b (n + 1)
state_after: no goals

tactic: exact le_log_of_pow_le hb (pow_log_le_add_one _ _)
state_before: case inr
b n : ℕ
hb : 1 < b
⊢ log b n ≤ log b (n + 1)
state_after: no goals
Theorem: TensorAlgebra.toExterior_ι
File: Mathlib/LinearAlgebra/ExteriorAlgebra/Basic.lean

tactic: simp [toExterior]
state_before: R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
m : M
⊢ toExterior ((ι R) m) = (ExteriorAlgebra.ι R) m
state_after: no goals
Theorem: CategoryTheory.ShortComplex.SnakeInput.exact_C₂_down
File: Mathlib/Algebra/Homology/ShortComplex/SnakeLemma.lean

tactic: rw [← comp_τ₂, S.w₁₃, zero_τ₂]
state_before: C : Type u_1
inst✝¹ : Category.{?u.40186, u_1} C
inst✝ : Abelian C
S : SnakeInput C
⊢ S.v₁₂.τ₂ ≫ S.v₂₃.τ₂ = 0
state_after: no goals
Theorem: ContinuousLinearMap.apply_norm_eq_sqrt_inner_adjoint_left
File: Mathlib/Analysis/InnerProductSpace/Adjoint.lean

tactic: rw [← apply_norm_sq_eq_inner_adjoint_left, Real.sqrt_sq (norm_nonneg _)]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁹ : RCLike 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : InnerProductSpace 𝕜 E
inst✝⁴ : InnerProductSpace 𝕜 F
inst✝³ : InnerProductSpace 𝕜 G
inst✝² : CompleteSpace E
inst✝¹ : CompleteSpace G
inst✝ : CompleteSpace F
A : E →L[𝕜] F
x : E
⊢ ‖A x‖ = √(re ⟪((adjoint A).comp A) x, x⟫_𝕜)
state_after: no goals
Theorem: AntitoneOn.mapsTo_Iic
File: Mathlib/Order/Interval/Set/Image.lean

tactic: aesop
state_before: α : Type u_1
β : Type u_2
f : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
a b : α
h : AntitoneOn f (Iic b)
x✝¹ : α
x✝ : x✝¹ ∈ Iic b
⊢ f x✝¹ ∈ Ici (f b)
state_after: no goals
Theorem: codisjoint_hnot_hnot_left_iff
File: Mathlib/Order/Heyting/Basic.lean

tactic: simp_rw [← hnot_le_iff_codisjoint_right, hnot_hnot_hnot]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : CoheytingAlgebra α
a b c : α
⊢ Codisjoint (￢￢a) b ↔ Codisjoint a b
state_after: no goals
Theorem: MvQPF.suppPreservation_iff_isUniform
File: Mathlib/Data/QPF/Multivariate/Basic.lean

tactic: constructor
state_before: n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
⊢ SuppPreservation ↔ IsUniform
state_after: case mp
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
⊢ SuppPreservation → IsUniform

case mpr
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
⊢ IsUniform → SuppPreservation

tactic: intro h α a a' f f' h' i
state_before: case mp
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
⊢ SuppPreservation → IsUniform
state_after: case mp
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
h : SuppPreservation
α : TypeVec.{u} n
a a' : (P F).A
f : (P F).B a ⟹ α
f' : (P F).B a' ⟹ α
h' : abs ⟨a, f⟩ = abs ⟨a', f'⟩
i : Fin2 n
⊢ f i '' univ = f' i '' univ

tactic: rw [← MvPFunctor.supp_eq, ← MvPFunctor.supp_eq, ← h, h', h]
state_before: case mp
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
h : SuppPreservation
α : TypeVec.{u} n
a a' : (P F).A
f : (P F).B a ⟹ α
f' : (P F).B a' ⟹ α
h' : abs ⟨a, f⟩ = abs ⟨a', f'⟩
i : Fin2 n
⊢ f i '' univ = f' i '' univ
state_after: no goals

tactic: rintro h α ⟨a, f⟩
state_before: case mpr
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
⊢ IsUniform → SuppPreservation
state_after: case mpr.mk
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
h : IsUniform
α : TypeVec.{u} n
a : (P F).A
f : (P F).B a ⟹ α
⊢ supp (abs ⟨a, f⟩) = supp ⟨a, f⟩

tactic: ext
state_before: case mpr.mk
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
h : IsUniform
α : TypeVec.{u} n
a : (P F).A
f : (P F).B a ⟹ α
⊢ supp (abs ⟨a, f⟩) = supp ⟨a, f⟩
state_after: case mpr.mk.h.h
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
h : IsUniform
α : TypeVec.{u} n
a : (P F).A
f : (P F).B a ⟹ α
x✝¹ : Fin2 n
x✝ : α x✝¹
⊢ x✝ ∈ supp (abs ⟨a, f⟩) x✝¹ ↔ x✝ ∈ supp ⟨a, f⟩ x✝¹

tactic: rwa [supp_eq_of_isUniform, MvPFunctor.supp_eq]
state_before: case mpr.mk.h.h
n : ℕ
F : TypeVec.{u} n → Type u_1
q : MvQPF F
h : IsUniform
α : TypeVec.{u} n
a : (P F).A
f : (P F).B a ⟹ α
x✝¹ : Fin2 n
x✝ : α x✝¹
⊢ x✝ ∈ supp (abs ⟨a, f⟩) x✝¹ ↔ x✝ ∈ supp ⟨a, f⟩ x✝¹
state_after: no goals
Theorem: Set.ordConnected_inter_Icc_iff
File: Mathlib/Order/Interval/Set/OrdConnected.lean

tactic: refine ⟨fun h ↦ Ioo_subset_Icc_self.trans fun z hz ↦ ?_, ordConnected_inter_Icc_of_subset⟩
state_before: α : Type u_1
inst✝ : PartialOrder α
s : Set α
x y : α
hx : x ∈ s
hy : y ∈ s
⊢ (s ∩ Icc x y).OrdConnected ↔ Ioo x y ⊆ s
state_after: α : Type u_1
inst✝ : PartialOrder α
s : Set α
x y : α
hx : x ∈ s
hy : y ∈ s
h : (s ∩ Icc x y).OrdConnected
z : α
hz : z ∈ Icc x y
⊢ z ∈ s

tactic: have hxy : x ≤ y := hz.1.trans hz.2
state_before: α : Type u_1
inst✝ : PartialOrder α
s : Set α
x y : α
hx : x ∈ s
hy : y ∈ s
h : (s ∩ Icc x y).OrdConnected
z : α
hz : z ∈ Icc x y
⊢ z ∈ s
state_after: α : Type u_1
inst✝ : PartialOrder α
s : Set α
x y : α
hx : x ∈ s
hy : y ∈ s
h : (s ∩ Icc x y).OrdConnected
z : α
hz : z ∈ Icc x y
hxy : x ≤ y
⊢ z ∈ s

tactic: exact h.out ⟨hx, left_mem_Icc.2 hxy⟩ ⟨hy, right_mem_Icc.2 hxy⟩ hz |>.1
state_before: α : Type u_1
inst✝ : PartialOrder α
s : Set α
x y : α
hx : x ∈ s
hy : y ∈ s
h : (s ∩ Icc x y).OrdConnected
z : α
hz : z ∈ Icc x y
hxy : x ≤ y
⊢ z ∈ s
state_after: no goals
Theorem: WellFounded.lt_succ
File: Mathlib/Order/WellFounded.lean

tactic: rw [WellFounded.succ, dif_pos h]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wf : WellFounded r
x : α
h : ∃ y, r x y
⊢ r x (wf.succ x)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wf : WellFounded r
x : α
h : ∃ y, r x y
⊢ r x (wf.min {y | r x y} h)

tactic: apply min_mem
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ r' r : α → α → Prop
wf : WellFounded r
x : α
h : ∃ y, r x y
⊢ r x (wf.min {y | r x y} h)
state_after: no goals
Theorem: Function.Periodic.div_const
File: Mathlib/Algebra/Periodic.lean

tactic: simpa only [div_eq_mul_inv] using h.mul_const_inv a
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝ : DivisionSemiring α
h : Periodic f c
a : α
⊢ Periodic (fun x => f (x / a)) (c * a)
state_after: no goals
Theorem: WithTop.coe_sInf
File: Mathlib/Order/ConditionallyCompleteLattice/Basic.lean

tactic: rw [coe_sInf' hs h's, sInf_image]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
s : Set α
hs : s.Nonempty
h's : BddBelow s
⊢ ↑(sInf s) = ⨅ a ∈ s, ↑a
state_after: no goals
Theorem: IntermediateField.isPurelyInseparable_adjoin_simple_iff_pow_mem
File: Mathlib/FieldTheory/PurelyInseparable.lean

tactic: rw [← le_perfectClosure_iff, adjoin_simple_le_iff, mem_perfectClosure_iff_pow_mem q]
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
q : ℕ
hF : ExpChar F q
x : E
⊢ IsPurelyInseparable F ↥F⟮x⟯ ↔ ∃ n, x ^ q ^ n ∈ (algebraMap F E).range
state_after: no goals
Theorem: mdifferentiableOn_iff_differentiableOn
File: Mathlib/Geometry/Manifold/MFDeriv/FDeriv.lean

tactic: simp only [MDifferentiableOn, DifferentiableOn,
  mdifferentiableWithinAt_iff_differentiableWithinAt]
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
E' : Type u_3
inst✝¹ : NormedAddCommGroup E'
inst✝ : NormedSpace 𝕜 E'
f : E → E'
s : Set E
x : E
⊢ MDifferentiableOn 𝓘(𝕜, E) 𝓘(𝕜, E') f s ↔ DifferentiableOn 𝕜 f s
state_after: no goals
Theorem: RelHomClass.acc
File: Mathlib/Order/RelIso/Basic.lean

tactic: generalize h : f a = b
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
a : α
⊢ Acc s (f a) → Acc r a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
a : α
b : β
h : f a = b
⊢ Acc s b → Acc r a

tactic: intro ac
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
a : α
b : β
h : f a = b
⊢ Acc s b → Acc r a
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
a : α
b : β
h : f a = b
ac : Acc s b
⊢ Acc r a

tactic: induction' ac with _ H IH generalizing a
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
a : α
b : β
h : f a = b
ac : Acc s b
⊢ Acc r a
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
b x✝ : β
H : ∀ (y : β), s y x✝ → Acc s y
IH : ∀ (y : β), s y x✝ → ∀ (a : α), f a = y → Acc r a
a : α
h : f a = x✝
⊢ Acc r a

tactic: subst h
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
b x✝ : β
H : ∀ (y : β), s y x✝ → Acc s y
IH : ∀ (y : β), s y x✝ → ∀ (a : α), f a = y → Acc r a
a : α
h : f a = x✝
⊢ Acc r a
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
b : β
a : α
H : ∀ (y : β), s y (f a) → Acc s y
IH : ∀ (y : β), s y (f a) → ∀ (a : α), f a = y → Acc r a
⊢ Acc r a

tactic: exact ⟨_, fun a' h => IH (f a') (map_rel f h) _ rfl⟩
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
u : δ → δ → Prop
F : Type u_5
inst✝¹ : FunLike F α β
inst✝ : RelHomClass F r s
f : F
b : β
a : α
H : ∀ (y : β), s y (f a) → Acc s y
IH : ∀ (y : β), s y (f a) → ∀ (a : α), f a = y → Acc r a
⊢ Acc r a
state_after: no goals
Theorem: SimplicialObject.Splitting.PInfty_comp_πSummand_id
File: Mathlib/AlgebraicTopology/DoldKan/SplitSimplicialObject.lean

tactic: conv_rhs => rw [← id_comp (s.πSummand _)]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ PInfty.f n ≫ s.πSummand (IndexSet.id { unop := [n] }) = s.πSummand (IndexSet.id { unop := [n] })
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ PInfty.f n ≫ s.πSummand (IndexSet.id { unop := [n] }) = 𝟙 (X _[n]) ≫ s.πSummand (IndexSet.id { unop := [n] })

tactic: symm
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ PInfty.f n ≫ s.πSummand (IndexSet.id { unop := [n] }) = 𝟙 (X _[n]) ≫ s.πSummand (IndexSet.id { unop := [n] })
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ 𝟙 (X _[n]) ≫ s.πSummand (IndexSet.id { unop := [n] }) = PInfty.f n ≫ s.πSummand (IndexSet.id { unop := [n] })

tactic: rw [← sub_eq_zero, ← sub_comp, ← comp_PInfty_eq_zero_iff, sub_comp, id_comp, PInfty_f_idem,
  sub_self]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ 𝟙 (X _[n]) ≫ s.πSummand (IndexSet.id { unop := [n] }) = PInfty.f n ≫ s.πSummand (IndexSet.id { unop := [n] })
state_after: no goals
Theorem: Polynomial.natSepDegree_le_natDegree
File: Mathlib/FieldTheory/SeparableDegree.lean

tactic: have := f.map (algebraMap F f.SplittingField) |>.card_roots'
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
⊢ f.natSepDegree ≤ f.natDegree
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
this : Multiset.card (map (algebraMap F f.SplittingField) f).roots ≤ (map (algebraMap F f.SplittingField) f).natDegree
⊢ f.natSepDegree ≤ f.natDegree

tactic: rw [← aroots_def, natDegree_map] at this
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
this : Multiset.card (map (algebraMap F f.SplittingField) f).roots ≤ (map (algebraMap F f.SplittingField) f).natDegree
⊢ f.natSepDegree ≤ f.natDegree
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
this : Multiset.card (f.aroots f.SplittingField) ≤ f.natDegree
⊢ f.natSepDegree ≤ f.natDegree

tactic: exact (f.aroots f.SplittingField).toFinset_card_le.trans this
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
this : Multiset.card (f.aroots f.SplittingField) ≤ f.natDegree
⊢ f.natSepDegree ≤ f.natDegree
state_after: no goals
Theorem: FirstOrder.Language.Formula.realize_relabel_sum_inr
File: Mathlib/ModelTheory/Semantics.lean

tactic: rw [BoundedFormula.realize_relabel, Formula.Realize, Sum.elim_comp_inr, Fin.castAdd_zero,
  cast_refl, Function.comp_id,
  Subsingleton.elim (x ∘ (natAdd n : Fin 0 → Fin n)) default]
state_before: L : Language
L' : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
α : Type u'
β : Type v'
γ : Type u_3
n : ℕ
φ✝ ψ : L.Formula α
v✝ : α → M
φ : L.Formula (Fin n)
v : Empty → M
x : Fin n → M
⊢ (BoundedFormula.relabel Sum.inr φ).Realize v x ↔ φ.Realize x
state_after: no goals
Theorem: Polynomial.aeval_eq_smeval
File: Mathlib/Algebra/Polynomial/Smeval.lean

tactic: rw [aeval_def, eval₂_def, Algebra.algebraMap_eq_smul_one', smeval_def]
state_before: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (aeval x) p = p.smeval x
state_after: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => (fun r => r • 1) a * x ^ e) = p.sum (smul_pow x)

tactic: simp only [Algebra.smul_mul_assoc, one_mul]
state_before: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => (fun r => r • 1) a * x ^ e) = p.sum (smul_pow x)
state_after: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => a • x ^ e) = p.sum (smul_pow x)

tactic: exact rfl
state_before: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => a • x ^ e) = p.sum (smul_pow x)
state_after: no goals
Theorem: AddCircle.liftIco_continuous
File: Mathlib/Topology/Instances/AddCircle.lean

tactic: rw [liftIco_eq_lift_Icc hf]
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝⁴ : LinearOrderedAddCommGroup 𝕜
inst✝³ : TopologicalSpace 𝕜
inst✝² : OrderTopology 𝕜
p a : 𝕜
hp : Fact (0 < p)
inst✝¹ : Archimedean 𝕜
inst✝ : TopologicalSpace B
f : 𝕜 → B
hf : f a = f (a + p)
hc : ContinuousOn f (Icc a (a + p))
⊢ Continuous (liftIco p a f)
state_after: 𝕜 : Type u_1
B : Type u_2
inst✝⁴ : LinearOrderedAddCommGroup 𝕜
inst✝³ : TopologicalSpace 𝕜
inst✝² : OrderTopology 𝕜
p a : 𝕜
hp : Fact (0 < p)
inst✝¹ : Archimedean 𝕜
inst✝ : TopologicalSpace B
f : 𝕜 → B
hf : f a = f (a + p)
hc : ContinuousOn f (Icc a (a + p))
⊢ Continuous (Quot.lift ((Icc a (a + p)).restrict f) ⋯ ∘ ⇑(equivIccQuot p a))

tactic: refine Continuous.comp ?_ (homeoIccQuot p a).continuous_toFun
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝⁴ : LinearOrderedAddCommGroup 𝕜
inst✝³ : TopologicalSpace 𝕜
inst✝² : OrderTopology 𝕜
p a : 𝕜
hp : Fact (0 < p)
inst✝¹ : Archimedean 𝕜
inst✝ : TopologicalSpace B
f : 𝕜 → B
hf : f a = f (a + p)
hc : ContinuousOn f (Icc a (a + p))
⊢ Continuous (Quot.lift ((Icc a (a + p)).restrict f) ⋯ ∘ ⇑(equivIccQuot p a))
state_after: 𝕜 : Type u_1
B : Type u_2
inst✝⁴ : LinearOrderedAddCommGroup 𝕜
inst✝³ : TopologicalSpace 𝕜
inst✝² : OrderTopology 𝕜
p a : 𝕜
hp : Fact (0 < p)
inst✝¹ : Archimedean 𝕜
inst✝ : TopologicalSpace B
f : 𝕜 → B
hf : f a = f (a + p)
hc : ContinuousOn f (Icc a (a + p))
⊢ Continuous (Quot.lift ((Icc a (a + p)).restrict f) ⋯)

tactic: exact continuous_coinduced_dom.mpr (continuousOn_iff_continuous_restrict.mp hc)
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝⁴ : LinearOrderedAddCommGroup 𝕜
inst✝³ : TopologicalSpace 𝕜
inst✝² : OrderTopology 𝕜
p a : 𝕜
hp : Fact (0 < p)
inst✝¹ : Archimedean 𝕜
inst✝ : TopologicalSpace B
f : 𝕜 → B
hf : f a = f (a + p)
hc : ContinuousOn f (Icc a (a + p))
⊢ Continuous (Quot.lift ((Icc a (a + p)).restrict f) ⋯)
state_after: no goals
Theorem: PartENat.add_one_le_iff_lt
File: Mathlib/Data/Nat/PartENat.lean

tactic: refine ⟨fun h => ?_, add_one_le_of_lt⟩
state_before: x y : PartENat
hx : x ≠ ⊤
⊢ x + 1 ≤ y ↔ x < y
state_after: x y : PartENat
hx : x ≠ ⊤
h : x + 1 ≤ y
⊢ x < y

tactic: rcases ne_top_iff.mp hx with ⟨m, rfl⟩
state_before: x y : PartENat
hx : x ≠ ⊤
h : x + 1 ≤ y
⊢ x < y
state_after: case intro
y : PartENat
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m + 1 ≤ y
⊢ ↑m < y

tactic: induction' y using PartENat.casesOn with n
state_before: case intro
y : PartENat
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m + 1 ≤ y
⊢ ↑m < y
state_after: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m + 1 ≤ ⊤
⊢ ↑m < ⊤

case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m + 1 ≤ ↑n
⊢ ↑m < ↑n

tactic: norm_cast
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m + 1 ≤ ↑n
⊢ ↑m < ↑n
state_after: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m + 1 ≤ ↑n
⊢ m < n

tactic: apply Nat.lt_of_succ_le
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m + 1 ≤ ↑n
⊢ m < n
state_after: case intro.a.h
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m + 1 ≤ ↑n
⊢ m.succ ≤ n

tactic: norm_cast at h
state_before: case intro.a.h
m : ℕ
hx : ↑m ≠ ⊤
n : ℕ
h : ↑m + 1 ≤ ↑n
⊢ m.succ ≤ n
state_after: no goals

tactic: apply natCast_lt_top
state_before: case intro.a
m : ℕ
hx : ↑m ≠ ⊤
h : ↑m + 1 ≤ ⊤
⊢ ↑m < ⊤
state_after: no goals