ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Ideal.sup_mul_eq_of_coprime_right
File: Mathlib/RingTheory/Ideal/Operations.lean

Proof steps:
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ K = ⊤
⊢ I ⊔ J * K = I ⊔ J
state_after: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ K = ⊤
⊢ I ⊔ K * J = I ⊔ J
tactic: rw [mul_comm]
state_before: R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ K = ⊤
⊢ I ⊔ K * J = I ⊔ J
state_after: no goals
tactic: exact sup_mul_eq_of_coprime_left h
Theorem: abs_zsmul
File: Mathlib/Algebra/Order/Ring/Abs.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedCommGroup α
a✝ b : α
n : ℤ
a : α
⊢ mabs (a ^ n) = mabs a ^ |n|
state_after: case inl
α : Type u_1
inst✝ : LinearOrderedCommGroup α
a✝ b : α
n : ℤ
a : α
n0 : 0 ≤ n
⊢ mabs (a ^ n) = mabs a ^ |n|

case inr
α : Type u_1
inst✝ : LinearOrderedCommGroup α
a✝ b : α
n : ℤ
a : α
n0 : n ≤ 0
⊢ mabs (a ^ n) = mabs a ^ |n|
tactic: obtain n0 | n0 := le_total 0 n
Theorem: List.takeWhile_cons_of_neg
File: Mathlib/Data/List/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
l : List α
x : α
h : ¬p x = true
⊢ takeWhile p (x :: l) = []
state_after: no goals
tactic: simp [takeWhile_cons, h]
Theorem: CategoryTheory.PreGaloisCategory.surjective_of_nonempty_fiber_of_isConnected
File: Mathlib/CategoryTheory/Galois/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝² : FiberFunctor F
X A : C
inst✝¹ : Nonempty ↑(F.obj X)
inst✝ : IsConnected A
f : X ⟶ A
⊢ Function.Surjective (F.map f)
state_after: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝² : FiberFunctor F
X A : C
inst✝¹ : Nonempty ↑(F.obj X)
inst✝ : IsConnected A
f : X ⟶ A
this : Epi f
⊢ Function.Surjective (F.map f)
tactic: have : Epi f := epi_of_nonempty_of_isConnected F f
state_before: C : Type u₁
inst✝⁴ : Category.{u₂, u₁} C
inst✝³ : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝² : FiberFunctor F
X A : C
inst✝¹ : Nonempty ↑(F.obj X)
inst✝ : IsConnected A
f : X ⟶ A
this : Epi f
⊢ Function.Surjective (F.map f)
state_after: no goals
tactic: exact surjective_on_fiber_of_epi F f
Theorem: Inducing.dense_iff
File: Mathlib/Topology/Maps/Basic.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
hf : Inducing f
s : Set X
⊢ Dense s ↔ ∀ (x : X), f x ∈ closure (f '' s)
state_after: no goals
tactic: simp only [Dense, hf.closure_eq_preimage_closure_image, mem_preimage]
Theorem: CategoryTheory.Limits.cospanExt_hom_app_left
File: Mathlib/CategoryTheory/Limits/Shapes/Pullback/Cospan.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
X Y Z X' Y' Z' : C
iX : X ≅ X'
iY : Y ≅ Y'
iZ : Z ≅ Z'
f : X ⟶ Z
g : Y ⟶ Z
f' : X' ⟶ Z'
g' : Y' ⟶ Z'
wf : iX.hom ≫ f' = f ≫ iZ.hom
wg : iY.hom ≫ g' = g ≫ iZ.hom
⊢ (cospanExt iX iY iZ wf wg).hom.app WalkingCospan.left = iX.hom
state_after: no goals
tactic: dsimp [cospanExt]
Theorem: AffineSubspace.wSameSide_and_wOppSide_iff
File: Mathlib/Analysis/Convex/Side.lean

Proof steps:
state_before: R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y : P
⊢ s.WSameSide x y ∧ s.WOppSide x y ↔ x ∈ s ∨ y ∈ s
state_after: case mp
R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y : P
⊢ s.WSameSide x y ∧ s.WOppSide x y → x ∈ s ∨ y ∈ s

case mpr
R : Type u_1
V : Type u_2
V' : Type u_3
P : Type u_4
P' : Type u_5
inst✝⁶ : LinearOrderedField R
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module R V
inst✝³ : AddTorsor V P
inst✝² : AddCommGroup V'
inst✝¹ : Module R V'
inst✝ : AddTorsor V' P'
s : AffineSubspace R P
x y : P
⊢ x ∈ s ∨ y ∈ s → s.WSameSide x y ∧ s.WOppSide x y
tactic: constructor
Theorem: AddCon.sSup_def
File: Mathlib/GroupTheory/Congruence/Basic.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
S : Set (Con M)
⊢ sSup S = conGen (sSup (DFunLike.coe '' S))
state_after: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
S : Set (Con M)
⊢ (conGen fun x y => ∃ c ∈ S, c x y) = conGen (⨆ a ∈ S, ⇑a)
tactic: rw [sSup_eq_conGen, sSup_image]
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
S : Set (Con M)
⊢ (conGen fun x y => ∃ c ∈ S, c x y) = conGen (⨆ a ∈ S, ⇑a)
state_after: case e_r.h.h.a
M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
S : Set (Con M)
x y : M
⊢ (∃ c ∈ S, c x y) ↔ (⨆ a ∈ S, ⇑a) x y
tactic: congr with (x y)
state_before: case e_r.h.h.a
M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c : Con M
S : Set (Con M)
x y : M
⊢ (∃ c ∈ S, c x y) ↔ (⨆ a ∈ S, ⇑a) x y
state_after: no goals
tactic: simp only [sSup_image, iSup_apply, iSup_Prop_eq, exists_prop, rel_eq_coe]
Theorem: CategoryTheory.Functor.isEquivalence_of_comp_right
File: Mathlib/CategoryTheory/Equivalence.lean

Proof steps:
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{u_2, u_1} E
F : C ⥤ D
G : D ⥤ E
inst✝¹ : G.IsEquivalence
inst✝ : (F ⋙ G).IsEquivalence
⊢ F.IsEquivalence
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{u_2, u_1} E
F : C ⥤ D
G : D ⥤ E
inst✝¹ : G.IsEquivalence
inst✝ : (F ⋙ G).IsEquivalence
⊢ (F ⋙ G.asEquivalence.functor ⋙ G.asEquivalence.inverse).IsEquivalence
tactic: rw [isEquivalence_iff_of_iso (F.rightUnitor.symm ≪≫ isoWhiskerLeft F (G.asEquivalence.unitIso))]
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
E : Type u_1
inst✝² : Category.{u_2, u_1} E
F : C ⥤ D
G : D ⥤ E
inst✝¹ : G.IsEquivalence
inst✝ : (F ⋙ G).IsEquivalence
⊢ (F ⋙ G.asEquivalence.functor ⋙ G.asEquivalence.inverse).IsEquivalence
state_after: no goals
tactic: exact ((F ⋙ G).asEquivalence.trans G.asEquivalence.symm).isEquivalence_functor
Theorem: AList.toFinmap_eq
File: Mathlib/Data/Finmap.lean

Proof steps:
state_before: α : Type u
β : α → Type v
s₁ s₂ : AList β
⊢ ⟦s₁⟧ = ⟦s₂⟧ ↔ s₁.entries ~ s₂.entries
state_after: case mk
α : Type u
β : α → Type v
s₂ : AList β
entries✝ : List (Sigma β)
nodupKeys✝ : entries✝.NodupKeys
⊢ ⟦{ entries := entries✝, nodupKeys := nodupKeys✝ }⟧ = ⟦s₂⟧ ↔
    { entries := entries✝, nodupKeys := nodupKeys✝ }.entries ~ s₂.entries
tactic: cases s₁
state_before: case mk
α : Type u
β : α → Type v
s₂ : AList β
entries✝ : List (Sigma β)
nodupKeys✝ : entries✝.NodupKeys
⊢ ⟦{ entries := entries✝, nodupKeys := nodupKeys✝ }⟧ = ⟦s₂⟧ ↔
    { entries := entries✝, nodupKeys := nodupKeys✝ }.entries ~ s₂.entries
state_after: case mk.mk
α : Type u
β : α → Type v
entries✝¹ : List (Sigma β)
nodupKeys✝¹ : entries✝¹.NodupKeys
entries✝ : List (Sigma β)
nodupKeys✝ : entries✝.NodupKeys
⊢ ⟦{ entries := entries✝¹, nodupKeys := nodupKeys✝¹ }⟧ = ⟦{ entries := entries✝, nodupKeys := nodupKeys✝ }⟧ ↔
    { entries := entries✝¹, nodupKeys := nodupKeys✝¹ }.entries ~
      { entries := entries✝, nodupKeys := nodupKeys✝ }.entries
tactic: cases s₂
state_before: case mk.mk
α : Type u
β : α → Type v
entries✝¹ : List (Sigma β)
nodupKeys✝¹ : entries✝¹.NodupKeys
entries✝ : List (Sigma β)
nodupKeys✝ : entries✝.NodupKeys
⊢ ⟦{ entries := entries✝¹, nodupKeys := nodupKeys✝¹ }⟧ = ⟦{ entries := entries✝, nodupKeys := nodupKeys✝ }⟧ ↔
    { entries := entries✝¹, nodupKeys := nodupKeys✝¹ }.entries ~
      { entries := entries✝, nodupKeys := nodupKeys✝ }.entries
state_after: no goals
tactic: simp [AList.toFinmap]
Theorem: Set.finite_of_finite_preimage
File: Mathlib/Data/Set/Finite.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
f : α → β
s : Set β
h : (f ⁻¹' s).Finite
hs : s ⊆ range f
⊢ s.Finite
state_after: α : Type u
β : Type v
ι : Sort w
γ : Type x
f : α → β
s : Set β
h : (f ⁻¹' s).Finite
hs : s ⊆ range f
⊢ (f '' (f ⁻¹' s)).Finite
tactic: rw [← image_preimage_eq_of_subset hs]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
f : α → β
s : Set β
h : (f ⁻¹' s).Finite
hs : s ⊆ range f
⊢ (f '' (f ⁻¹' s)).Finite
state_after: no goals
tactic: exact Finite.image f h
Theorem: Pointed.Hom.comp_toFun
File: Mathlib/CategoryTheory/Category/Pointed.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
X Y Z : Pointed
f : X.Hom Y
g : Y.Hom Z
⊢ (g.toFun ∘ f.toFun) X.point = Z.point
state_after: no goals
tactic: rw [Function.comp_apply, f.map_point, g.map_point]
Theorem: Matroid.eq_dual_comm
File: Mathlib/Data/Matroid/Dual.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
I B X : Set α
M₁ M₂ : Matroid α
⊢ M₁ = M₂✶ ↔ M₂ = M₁✶
state_after: no goals
tactic: rw [← dual_inj, dual_dual, eq_comm]
Theorem: TensorProduct.congr_zpow
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f : M ≃ₗ[R] M
g : N ≃ₗ[R] N
n : ℤ
⊢ congr f g ^ n = congr (f ^ n) (g ^ n)
state_after: no goals
tactic: induction n with
  | ofNat n => exact congr_pow _ _ _
  | negSucc n => simp_rw [zpow_negSucc, congr_pow]; exact congr_symm _ _
Theorem: MonoidAlgebra.mapDomain_one
File: Mathlib/Algebra/MonoidAlgebra/Basic.lean

Proof steps:
state_before: k : Type u₁
G : Type u₂
H : Type u_1
R : Type u_2
inst✝⁵ : Semiring k
α : Type u_3
β : Type u_4
α₂ : Type u_5
inst✝⁴ : Semiring β
inst✝³ : One α
inst✝² : One α₂
F : Type u_6
inst✝¹ : FunLike F α α₂
inst✝ : OneHomClass F α α₂
f : F
⊢ mapDomain (⇑f) 1 = 1
state_after: no goals
tactic: simp_rw [one_def, mapDomain_single, map_one]
Theorem: MeasureTheory.lintegral_dirac'
File: Mathlib/MeasureTheory/Integral/Lebesgue.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝ : MeasurableSpace α
a : α
f : α → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), f a ∂dirac a = f a
state_after: no goals
tactic: simp [lintegral_congr_ae (ae_eq_dirac' hf)]
Theorem: CircleDeg1Lift.tendsto_atTop
File: Mathlib/Dynamics/Circle/RotationNumber/TranslationNumber.lean

Proof steps:
state_before: f g : CircleDeg1Lift
⊢ Tendsto (fun x => x - 1) atTop atTop
state_after: no goals
tactic: simpa [sub_eq_add_neg] using tendsto_atTop_add_const_right _ _ tendsto_id
Theorem: Polynomial.Separable.eval₂_derivative_ne_zero
File: Mathlib/FieldTheory/Separable.lean

Proof steps:
state_before: R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
h : p.Separable
x : S
hx : eval₂ f x p = 0
⊢ eval₂ f x (derivative p) ≠ 0
state_after: R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
h : p.Separable
x : S
hx : eval₂ f x p = 0
hx' : eval₂ f x (derivative p) = 0
⊢ False
tactic: intro hx'
state_before: R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
h : p.Separable
x : S
hx : eval₂ f x p = 0
hx' : eval₂ f x (derivative p) = 0
⊢ False
state_after: case intro.intro
R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
x : S
hx : eval₂ f x p = 0
hx' : eval₂ f x (derivative p) = 0
a b : R[X]
e : a * p + b * derivative p = 1
⊢ False
tactic: obtain ⟨a, b, e⟩ := h
state_before: case intro.intro
R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
x : S
hx : eval₂ f x p = 0
hx' : eval₂ f x (derivative p) = 0
a b : R[X]
e : a * p + b * derivative p = 1
⊢ False
state_after: case intro.intro
R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
x : S
hx : eval₂ f x p = 0
hx' : eval₂ f x (derivative p) = 0
a b : R[X]
e : eval₂ f x (a * p + b * derivative p) = eval₂ f x 1
⊢ False
tactic: apply_fun Polynomial.eval₂ f x at e
state_before: case intro.intro
R : Type u
inst✝² : CommSemiring R
S : Type v
inst✝¹ : CommSemiring S
inst✝ : Nontrivial S
f : R →+* S
p : R[X]
x : S
hx : eval₂ f x p = 0
hx' : eval₂ f x (derivative p) = 0
a b : R[X]
e : eval₂ f x (a * p + b * derivative p) = eval₂ f x 1
⊢ False
state_after: no goals
tactic: simp only [eval₂_add, eval₂_mul, hx, mul_zero, hx', add_zero, eval₂_one, zero_ne_one] at e
Theorem: AddAction.orbitRel.Quotient.mem_addSubgroup_orbit_iff
File: Mathlib/GroupTheory/GroupAction/Basic.lean

Proof steps:
state_before: G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
H : Subgroup G
x : Quotient G α
a b : ↑x.orbit
⊢ ↑a ∈ MulAction.orbit ↥H ↑b ↔ a ∈ MulAction.orbit (↥H) b
state_after: case refine_1
G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
H : Subgroup G
x : Quotient G α
a b : ↑x.orbit
h : ↑a ∈ MulAction.orbit ↥H ↑b
⊢ a ∈ MulAction.orbit (↥H) b

case refine_2
G : Type u_1
α : Type u_2
β : Type u_3
inst✝² : Group G
inst✝¹ : MulAction G α
inst✝ : MulAction G β
H : Subgroup G
x : Quotient G α
a b : ↑x.orbit
h : a ∈ MulAction.orbit (↥H) b
⊢ ↑a ∈ MulAction.orbit ↥H ↑b
tactic: refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
Theorem: CategoryTheory.extensiveTopology.isSheaf_yoneda_obj
File: Mathlib/CategoryTheory/Sites/Coherent/ExtensiveSheaves.lean

Proof steps:
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W : C
⊢ IsSheaf (extensiveTopology C) (yoneda.obj W)
state_after: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W : C
⊢ ∀ {X : C}, ∀ R ∈ (extensiveCoverage C).covering X, IsSheafFor (yoneda.obj W) R
tactic: erw [isSheaf_coverage]
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W : C
⊢ ∀ {X : C}, ∀ R ∈ (extensiveCoverage C).covering X, IsSheafFor (yoneda.obj W) R
state_after: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W X : C
R : Presieve X
Y : Type
α : Finite Y
Z : Y → C
π : (a : Y) → Z a ⟶ X
hR : R = ofArrows Z π
hi : IsIso (Sigma.desc π)
⊢ IsSheafFor (yoneda.obj W) R
tactic: intro X R ⟨Y, α, Z, π, hR, hi⟩
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W X : C
R : Presieve X
Y : Type
α : Finite Y
Z : Y → C
π : (a : Y) → Z a ⟶ X
hR : R = ofArrows Z π
hi : IsIso (Sigma.desc π)
⊢ IsSheafFor (yoneda.obj W) R
state_after: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W X : C
R : Presieve X
Y : Type
α : Finite Y
Z : Y → C
π : (a : Y) → Z a ⟶ X
hR : R = ofArrows Z π
hi : IsIso (Sigma.desc π)
this : IsIso (Sigma.desc (Cofan.mk X π).inj)
⊢ IsSheafFor (yoneda.obj W) R
tactic: have : IsIso (Sigma.desc (Cofan.inj (Cofan.mk X π))) := hi
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W X : C
R : Presieve X
Y : Type
α : Finite Y
Z : Y → C
π : (a : Y) → Z a ⟶ X
hR : R = ofArrows Z π
hi : IsIso (Sigma.desc π)
this : IsIso (Sigma.desc (Cofan.mk X π).inj)
⊢ IsSheafFor (yoneda.obj W) R
state_after: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W X : C
R : Presieve X
Y : Type
α : Finite Y
Z : Y → C
π : (a : Y) → Z a ⟶ X
hR : R = ofArrows Z π
hi : IsIso (Sigma.desc π)
this✝ : IsIso (Sigma.desc (Cofan.mk X π).inj)
this : R.Extensive
⊢ IsSheafFor (yoneda.obj W) R
tactic: have : R.Extensive := ⟨Y, α, Z, π, hR, ⟨Cofan.isColimitOfIsIsoSigmaDesc (Cofan.mk X π)⟩⟩
state_before: C : Type u_1
inst✝² : Category.{u_3, u_1} C
D : Type u_2
inst✝¹ : Category.{?u.4626, u_2} D
inst✝ : FinitaryPreExtensive C
W X : C
R : Presieve X
Y : Type
α : Finite Y
Z : Y → C
π : (a : Y) → Z a ⟶ X
hR : R = ofArrows Z π
hi : IsIso (Sigma.desc π)
this✝ : IsIso (Sigma.desc (Cofan.mk X π).inj)
this : R.Extensive
⊢ IsSheafFor (yoneda.obj W) R
state_after: no goals
tactic: exact isSheafFor_extensive_of_preservesFiniteProducts _ _
Theorem: Set.iUnion_setOf
File: Mathlib/Data/Set/Lattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
P : ι → α → Prop
⊢ ⋃ i, {x | P i x} = {x | ∃ i, P i x}
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
P : ι → α → Prop
x✝ : α
⊢ x✝ ∈ ⋃ i, {x | P i x} ↔ x✝ ∈ {x | ∃ i, P i x}
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
ι₂ : Sort u_6
κ : ι → Sort u_7
κ₁ : ι → Sort u_8
κ₂ : ι → Sort u_9
κ' : ι' → Sort u_10
P : ι → α → Prop
x✝ : α
⊢ x✝ ∈ ⋃ i, {x | P i x} ↔ x✝ ∈ {x | ∃ i, P i x}
state_after: no goals
tactic: exact mem_iUnion
Theorem: PerfectRing.liftAux_id_apply
File: Mathlib/FieldTheory/IsPerfectClosure.lean

Proof steps:
state_before: K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommSemiring K
inst✝⁶ : CommSemiring L
inst✝⁵ : CommSemiring M
i : K →+* L
j : K →+* M
f : L →+* M
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : PerfectRing M p
inst✝ : IsPRadical i p
x : K
⊢ liftAux (RingHom.id K) j p x = j x
state_after: K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommSemiring K
inst✝⁶ : CommSemiring L
inst✝⁵ : CommSemiring M
i : K →+* L
j : K →+* M
f : L →+* M
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : PerfectRing M p
inst✝ : IsPRadical i p
x : K
this : (Classical.choose ⋯).2 = x ^ p ^ (Classical.choose ⋯).1
⊢ liftAux (RingHom.id K) j p x = j x
tactic: have := RingHom.id_apply _ ▸ Classical.choose_spec (lift_aux (RingHom.id K) p x)
state_before: K : Type u_1
L : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommSemiring K
inst✝⁶ : CommSemiring L
inst✝⁵ : CommSemiring M
i : K →+* L
j : K →+* M
f : L →+* M
p : ℕ
inst✝⁴ : ExpChar K p
inst✝³ : ExpChar L p
inst✝² : ExpChar M p
inst✝¹ : PerfectRing M p
inst✝ : IsPRadical i p
x : K
this : (Classical.choose ⋯).2 = x ^ p ^ (Classical.choose ⋯).1
⊢ liftAux (RingHom.id K) j p x = j x
state_after: no goals
tactic: rw [liftAux, this, map_pow, ← iterateFrobenius_def, ← iterateFrobeniusEquiv_apply,
    RingEquiv.symm_apply_apply]
Theorem: BoundedContinuousFunction.lintegral_lt_top_of_nnreal
File: Mathlib/MeasureTheory/Integral/BoundedContinuousFunction.lean

Proof steps:
state_before: X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
⊢ ∫⁻ (x : X), ↑(f x) ∂μ < ⊤
state_after: case f_bdd
X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
⊢ ∃ c, ∀ (x : X), ↑(f x) ≤ ↑c
tactic: apply IsFiniteMeasure.lintegral_lt_top_of_bounded_to_ennreal
state_before: case f_bdd
X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
⊢ ∃ c, ∀ (x : X), ↑(f x) ≤ ↑c
state_after: case f_bdd
X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
x : X
⊢ ↑(f x) ≤ ↑(nndist f 0)
tactic: refine ⟨nndist f 0, fun x ↦ ?_⟩
state_before: case f_bdd
X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
x : X
⊢ ↑(f x) ≤ ↑(nndist f 0)
state_after: case f_bdd
X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
x : X
key : f x ≤ nndist f 0
⊢ ↑(f x) ≤ ↑(nndist f 0)
tactic: have key := BoundedContinuousFunction.NNReal.upper_bound f x
state_before: case f_bdd
X : Type u_1
inst✝³ : MeasurableSpace X
inst✝² : TopologicalSpace X
inst✝¹ : OpensMeasurableSpace X
μ : Measure X
inst✝ : IsFiniteMeasure μ
f : X →ᵇ ℝ≥0
x : X
key : f x ≤ nndist f 0
⊢ ↑(f x) ≤ ↑(nndist f 0)
state_after: no goals
tactic: rwa [ENNReal.coe_le_coe]
Theorem: CochainComplex.HomComplex.Cochain.shift_zero
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplexShift.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a : ℤ
⊢ shift 0 a = 0
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a : ℤ
⊢ (shiftAddHom K L n a) 0 = 0
tactic: change shiftAddHom K L n a 0 = 0
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
K L M : CochainComplex C ℤ
n : ℤ
γ γ₁ γ₂ : Cochain K L n
a : ℤ
⊢ (shiftAddHom K L n a) 0 = 0
state_after: no goals
tactic: apply _root_.map_zero