ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: CategoryTheory.Limits.isoBiprodZero_hom
File: Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

Proof steps:
state_before: J : Type w
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
D : Type uD
inst✝² : Category.{uD', uD} D
inst✝¹ : HasZeroMorphisms D
P Q X Y : C
inst✝ : HasBinaryBiproduct X Y
hY : IsZero Y
⊢ biprod.fst ≫ biprod.inl = 𝟙 (X ⊞ Y)
state_after: case h₁
J : Type w
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
D : Type uD
inst✝² : Category.{uD', uD} D
inst✝¹ : HasZeroMorphisms D
P Q X Y : C
inst✝ : HasBinaryBiproduct X Y
hY : IsZero Y
⊢ 0 = biprod.snd
tactic: apply CategoryTheory.Limits.biprod.hom_ext <;>
      simp only [Category.assoc, biprod.inl_fst, Category.comp_id, Category.id_comp, biprod.inl_snd,
        comp_zero]
state_before: case h₁
J : Type w
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
D : Type uD
inst✝² : Category.{uD', uD} D
inst✝¹ : HasZeroMorphisms D
P Q X Y : C
inst✝ : HasBinaryBiproduct X Y
hY : IsZero Y
⊢ 0 = biprod.snd
state_after: no goals
tactic: apply hY.eq_of_tgt
Theorem: Module.Flat.of_isLocalizedModule
File: Mathlib/RingTheory/Flat/Stability.lean

Proof steps:
state_before: R : Type u
M : Type u_1
Mp : Type u_2
Rp : Type v
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : CommRing Rp
inst✝⁶ : Algebra R Rp
inst✝⁵ : AddCommGroup Mp
inst✝⁴ : Module R Mp
inst✝³ : Module Rp Mp
inst✝² : IsScalarTower R Rp Mp
f✝ : M →ₗ[R] Mp
inst✝¹ : Flat R M
S : Submonoid R
inst✝ : IsLocalization S Rp
f : M →ₗ[R] Mp
h : IsLocalizedModule S f
⊢ Flat Rp Mp
state_after: R : Type u
M : Type u_1
Mp : Type u_2
Rp : Type v
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : CommRing Rp
inst✝⁶ : Algebra R Rp
inst✝⁵ : AddCommGroup Mp
inst✝⁴ : Module R Mp
inst✝³ : Module Rp Mp
inst✝² : IsScalarTower R Rp Mp
f✝ : M →ₗ[R] Mp
inst✝¹ : Flat R M
S : Submonoid R
inst✝ : IsLocalization S Rp
f : M →ₗ[R] Mp
h : IsLocalizedModule S f
⊢ IsBaseChange Rp ?m.190213

R : Type u
M : Type u_1
Mp : Type u_2
Rp : Type v
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : CommRing Rp
inst✝⁶ : Algebra R Rp
inst✝⁵ : AddCommGroup Mp
inst✝⁴ : Module R Mp
inst✝³ : Module Rp Mp
inst✝² : IsScalarTower R Rp Mp
f✝ : M →ₗ[R] Mp
inst✝¹ : Flat R M
S : Submonoid R
inst✝ : IsLocalization S Rp
f : M →ₗ[R] Mp
h : IsLocalizedModule S f
⊢ M →ₗ[R] Mp
tactic: fapply Module.Flat.isBaseChange (R := R) (M := M) (S := Rp) (N := Mp)
state_before: R : Type u
M : Type u_1
Mp : Type u_2
Rp : Type v
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : CommRing Rp
inst✝⁶ : Algebra R Rp
inst✝⁵ : AddCommGroup Mp
inst✝⁴ : Module R Mp
inst✝³ : Module Rp Mp
inst✝² : IsScalarTower R Rp Mp
f✝ : M →ₗ[R] Mp
inst✝¹ : Flat R M
S : Submonoid R
inst✝ : IsLocalization S Rp
f : M →ₗ[R] Mp
h : IsLocalizedModule S f
⊢ IsBaseChange Rp ?m.190213

R : Type u
M : Type u_1
Mp : Type u_2
Rp : Type v
inst✝¹⁰ : CommRing R
inst✝⁹ : AddCommGroup M
inst✝⁸ : Module R M
inst✝⁷ : CommRing Rp
inst✝⁶ : Algebra R Rp
inst✝⁵ : AddCommGroup Mp
inst✝⁴ : Module R Mp
inst✝³ : Module Rp Mp
inst✝² : IsScalarTower R Rp Mp
f✝ : M →ₗ[R] Mp
inst✝¹ : Flat R M
S : Submonoid R
inst✝ : IsLocalization S Rp
f : M →ₗ[R] Mp
h : IsLocalizedModule S f
⊢ M →ₗ[R] Mp
state_after: no goals
tactic: exact (isLocalizedModule_iff_isBaseChange S Rp f).mp h
Theorem: jacobiTheta_T_sq_smul
File: Mathlib/NumberTheory/ModularForms/JacobiTheta/OneVariable.lean

Proof steps:
state_before: τ : ℍ
⊢ jacobiTheta ↑(ModularGroup.T ^ 2 • τ) = jacobiTheta ↑τ
state_after: τ : ℍ
⊢ ↑(ModularGroup.T ^ 2 • τ) = 2 + ↑τ
tactic: suffices (ModularGroup.T ^ 2 • τ :) = (2 : ℂ) + ↑τ by simp_rw [this, jacobiTheta_two_add]
state_before: τ : ℍ
⊢ ↑(ModularGroup.T ^ 2 • τ) = 2 + ↑τ
state_after: τ : ℍ
this : ModularGroup.T ^ 2 = ModularGroup.T ^ 2
⊢ ↑(ModularGroup.T ^ 2 • τ) = 2 + ↑τ
tactic: have : ModularGroup.T ^ (2 : ℕ) = ModularGroup.T ^ (2 : ℤ) := rfl
state_before: τ : ℍ
this : ModularGroup.T ^ 2 = ModularGroup.T ^ 2
⊢ ↑(ModularGroup.T ^ 2 • τ) = 2 + ↑τ
state_after: τ : ℍ
this : ModularGroup.T ^ 2 = ModularGroup.T ^ 2
⊢ ↑↑2 + ↑τ = 2 + ↑τ
tactic: simp_rw [this, UpperHalfPlane.modular_T_zpow_smul, UpperHalfPlane.coe_vadd]
state_before: τ : ℍ
this : ModularGroup.T ^ 2 = ModularGroup.T ^ 2
⊢ ↑↑2 + ↑τ = 2 + ↑τ
state_after: no goals
tactic: norm_cast
Theorem: Complex.log_re
File: Mathlib/Analysis/SpecialFunctions/Complex/Log.lean

Proof steps:
state_before: x : ℂ
⊢ (log x).re = Real.log (abs x)
state_after: no goals
tactic: simp [log]
Theorem: List.ofFn_succ
File: Mathlib/Data/List/OfFn.lean

Proof steps:
state_before: α : Type u
n : ℕ
f : Fin n.succ → α
⊢ (ofFn f).length = (f 0 :: ofFn fun i => f i.succ).length
state_after: no goals
tactic: simp
state_before: α : Type u
n : ℕ
f : Fin n.succ → α
i : ℕ
hi₁ : i < (ofFn f).length
hi₂ : i < (f 0 :: ofFn fun i => f i.succ).length
⊢ (ofFn f).get ⟨i, hi₁⟩ = (f 0 :: ofFn fun i => f i.succ).get ⟨i, hi₂⟩
state_after: case zero
α : Type u
n : ℕ
f : Fin n.succ → α
hi₁ : 0 < (ofFn f).length
hi₂ : 0 < (f 0 :: ofFn fun i => f i.succ).length
⊢ (ofFn f).get ⟨0, hi₁⟩ = (f 0 :: ofFn fun i => f i.succ).get ⟨0, hi₂⟩

case succ
α : Type u
n : ℕ
f : Fin n.succ → α
n✝ : ℕ
hi₁ : n✝ + 1 < (ofFn f).length
hi₂ : n✝ + 1 < (f 0 :: ofFn fun i => f i.succ).length
⊢ (ofFn f).get ⟨n✝ + 1, hi₁⟩ = (f 0 :: ofFn fun i => f i.succ).get ⟨n✝ + 1, hi₂⟩
tactic: cases i
Theorem: Nat.log_div_mul_self
File: Mathlib/Data/Nat/Log.lean

Proof steps:
state_before: b n : ℕ
⊢ log b (n / b * b) = log b n
state_after: case inl
b n : ℕ
hb : b ≤ 1
⊢ log b (n / b * b) = log b n

case inr
b n : ℕ
hb : 1 < b
⊢ log b (n / b * b) = log b n
tactic: rcases le_or_lt b 1 with hb | hb
state_before: case inr
b n : ℕ
hb : 1 < b
⊢ log b (n / b * b) = log b n
state_after: case inr.inl
b n : ℕ
hb : 1 < b
h : n < b
⊢ log b (n / b * b) = log b n

case inr.inr
b n : ℕ
hb : 1 < b
h : b ≤ n
⊢ log b (n / b * b) = log b n
tactic: cases' lt_or_le n b with h h
state_before: case inr.inr
b n : ℕ
hb : 1 < b
h : b ≤ n
⊢ log b (n / b * b) = log b n
state_after: no goals
tactic: rw [log_mul_base hb (Nat.div_pos h (by omega)).ne', log_div_base,
    Nat.sub_add_cancel (succ_le_iff.2 <| log_pos hb h)]
Theorem: ProbabilityTheory.Kernel.eLpNorm_density_le
File: Mathlib/Probability/Kernel/Disintegration/Density.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝ : CountablyGenerated γ
κ : Kernel α (γ × β)
ν : Kernel α γ
hκν : κ.fst ≤ ν
a : α
s : Set β
⊢ eLpNorm (fun x => κ.density ν a x s) 1 (ν a) ≤ (ν a) univ
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝ : CountablyGenerated γ
κ : Kernel α (γ × β)
ν : Kernel α γ
hκν : κ.fst ≤ ν
a : α
s : Set β
t : γ
⊢ ‖κ.density ν a t s‖ ≤ 1

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝ : CountablyGenerated γ
κ : Kernel α (γ × β)
ν : Kernel α γ
hκν : κ.fst ≤ ν
a : α
s : Set β
⊢ (ν a) univ ^ (ENNReal.toReal 1)⁻¹ * ENNReal.ofReal 1 ≤ (ν a) univ
tactic: refine (eLpNorm_le_of_ae_bound (C := 1) (ae_of_all _ (fun t ↦ ?_))).trans ?_
Theorem: isNoetherian_iff_fg_wellFounded
File: Mathlib/RingTheory/Noetherian.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
⊢ IsNoetherian R M ↔ WellFounded fun x x_1 => x > x_1
state_after: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_2 := { N // N.FG }
⊢ IsNoetherian R M ↔ WellFounded fun x x_1 => x > x_1
tactic: let α := { N : Submodule R M // N.FG }
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_2 := { N // N.FG }
⊢ IsNoetherian R M ↔ WellFounded fun x x_1 => x > x_1
state_after: case mp
R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_2 := { N // N.FG }
⊢ IsNoetherian R M → WellFounded fun x x_1 => x > x_1

case mpr
R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
α : Type u_2 := { N // N.FG }
⊢ (WellFounded fun x x_1 => x > x_1) → IsNoetherian R M
tactic: constructor
Theorem: Nat.zero_of_testBit_eq_false
File: Mathlib/Data/Nat/Bitwise.lean

Proof steps:
state_before: n : ℕ
h : ∀ (i : ℕ), n.testBit i = false
⊢ n = 0
state_after: case z
h : ∀ (i : ℕ), testBit 0 i = false
⊢ 0 = 0

case f
b : Bool
n : ℕ
hn : (∀ (i : ℕ), n.testBit i = false) → n = 0
h : ∀ (i : ℕ), (bit b n).testBit i = false
⊢ bit b n = 0
tactic: induction' n using Nat.binaryRec with b n hn
Theorem: inv_le_one_iff
File: Mathlib/Algebra/Order/Field/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a⁻¹ ≤ 1 ↔ a ≤ 0 ∨ 1 ≤ a
state_after: case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
b c d e : α
m n : ℤ
⊢ 1⁻¹ ≤ 1 ↔ 1 ≤ 0 ∨ 1 ≤ 1

case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : ¬a = 1
⊢ a⁻¹ ≤ 1 ↔ a ≤ 0 ∨ 1 ≤ a
tactic: rcases em (a = 1) with (rfl | ha)
Theorem: Infinite.nonempty_field
File: Mathlib/FieldTheory/Cardinality.lean

Proof steps:
state_before: α : Type u
inst✝ : Infinite α
⊢ Nonempty (Field α)
state_after: α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ Nonempty (Field α)
tactic: letI K := FractionRing (MvPolynomial α <| ULift.{u} ℚ)
state_before: α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ Nonempty (Field α)
state_after: α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ #α = #K
tactic: suffices #α = #K by
    obtain ⟨e⟩ := Cardinal.eq.1 this
    exact ⟨e.field⟩
state_before: α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ #α = #K
state_after: α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ #α = #(MvPolynomial α (ULift.{u, 0} ℚ))
tactic: rw [← IsLocalization.card (MvPolynomial α <| ULift.{u} ℚ)⁰ K le_rfl]
state_before: α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ #α = #(MvPolynomial α (ULift.{u, 0} ℚ))
state_after: case a
α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ #α ≤ #(MvPolynomial α (ULift.{u, 0} ℚ))

case a
α : Type u
inst✝ : Infinite α
K : Type u := FractionRing (MvPolynomial α (ULift.{u, 0} ℚ))
⊢ #(MvPolynomial α (ULift.{u, 0} ℚ)) ≤ #α
tactic: apply le_antisymm
Theorem: MeasureTheory.Measure.ext_iff_of_biUnion_eq_univ
File: Mathlib/MeasureTheory/Measure/Restrict.lean

Proof steps:
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t : Set α
S : Set ι
s : ι → Set α
hc : S.Countable
hs : ⋃ i ∈ S, s i = univ
⊢ μ = ν ↔ ∀ i ∈ S, μ.restrict (s i) = ν.restrict (s i)
state_after: no goals
tactic: rw [← restrict_biUnion_congr hc, hs, restrict_univ, restrict_univ]
Theorem: CategoryTheory.Limits.cospanExt_inv_app_one
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).inv.app WalkingCospan.one = iZ.inv
state_after: no goals
tactic: dsimp [cospanExt]
Theorem: HasFDerivAt.lim_real
File: Mathlib/Analysis/Calculus/FDeriv/Equiv.lean

Proof steps:
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: 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 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: 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
⊢ ∀ (b : ℝ), ∃ i, ∀ (a : ℝ), i ≤ a → b ≤ ‖a‖
state_after: no goals
tactic: exact fun b => ⟨b, fun a ha => le_trans ha (le_abs_self _)⟩
Theorem: IsClosed.ae_eq_univ_iff_eq
File: Mathlib/MeasureTheory/Measure/OpenPos.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
m : MeasurableSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
μ ν : Measure X
inst✝ : μ.IsOpenPosMeasure
s U F : Set X
x : X
hF : IsClosed F
⊢ F =ᶠ[ae μ] univ ↔ F = univ
state_after: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
m : MeasurableSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
μ ν : Measure X
inst✝ : μ.IsOpenPosMeasure
s U F : Set X
x : X
hF : IsClosed F
h : F =ᶠ[ae μ] univ
⊢ F = univ
tactic: refine ⟨fun h ↦ ?_, fun h ↦ by rw [h]⟩
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
m : MeasurableSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : T2Space Y
μ ν : Measure X
inst✝ : μ.IsOpenPosMeasure
s U F : Set X
x : X
hF : IsClosed F
h : F =ᶠ[ae μ] univ
⊢ F = univ
state_after: no goals
tactic: rwa [ae_eq_univ, hF.isOpen_compl.measure_eq_zero_iff μ, compl_empty_iff] at h
Theorem: MonoidAlgebra.ofMagma_apply
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
inst✝ : Mul G
a b : G
⊢ (fun a => single a 1) (a * b) = (fun a => single a 1) a * (fun a => single a 1) b
state_after: no goals
tactic: simp only [mul_def, mul_one, sum_single_index, single_eq_zero, mul_zero]
Theorem: CategoryTheory.ShortComplex.RightHomologyData.ofEpiOfIsIsoOfMono'_g'_τ₃
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝⁴ : Category.{u_2, u_1} C
inst✝³ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
φ : S₁ ⟶ S₂
h : S₂.RightHomologyData
inst✝² : Epi φ.τ₁
inst✝¹ : IsIso φ.τ₂
inst✝ : Mono φ.τ₃
⊢ (ofEpiOfIsIsoOfMono' φ h).g' ≫ φ.τ₃ = h.g'
state_after: no goals
tactic: rw [← cancel_epi (ofEpiOfIsIsoOfMono' φ h).p, p_g'_assoc, ofEpiOfIsIsoOfMono'_p,
    assoc, p_g', φ.comm₂₃]
Theorem: PresheafOfModules.map_id
File: Mathlib/Algebra/Category/ModuleCat/Presheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
P : PresheafOfModules R
X : Cᵒᵖ
⊢ P.map (𝟙 X) = id'
state_after: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
P : PresheafOfModules R
X : Cᵒᵖ
x✝ : ↑(P.obj X)
⊢ (P.map (𝟙 X)) x✝ = id' x✝
tactic: ext
state_before: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
P : PresheafOfModules R
X : Cᵒᵖ
x✝ : ↑(P.obj X)
⊢ (P.map (𝟙 X)) x✝ = id' x✝
state_after: no goals
tactic: simp [map_apply]
Theorem: WeierstrassCurve.leadingCoeff_preΨ
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
n : ℤ
h : ↑n ≠ 0
⊢ (W.preΨ n).leadingCoeff = ↑(if Even n then n / 2 else n)
state_after: no goals
tactic: rw [leadingCoeff, W.natDegree_preΨ h, coeff_preΨ]
Theorem: LieHom.range_eq_map
File: Mathlib/Algebra/Lie/Subalgebra.lean

Proof steps:
state_before: R : Type u
L : Type v
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
L₂ : Type w
inst✝¹ : LieRing L₂
inst✝ : LieAlgebra R L₂
f : L →ₗ⁅R⁆ L₂
K K' : LieSubalgebra R L
K₂ : LieSubalgebra R L₂
⊢ f.range = map f ⊤
state_after: case h
R : Type u
L : Type v
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
L₂ : Type w
inst✝¹ : LieRing L₂
inst✝ : LieAlgebra R L₂
f : L →ₗ⁅R⁆ L₂
K K' : LieSubalgebra R L
K₂ : LieSubalgebra R L₂
x✝ : L₂
⊢ x✝ ∈ f.range ↔ x✝ ∈ map f ⊤
tactic: ext
state_before: case h
R : Type u
L : Type v
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
L₂ : Type w
inst✝¹ : LieRing L₂
inst✝ : LieAlgebra R L₂
f : L →ₗ⁅R⁆ L₂
K K' : LieSubalgebra R L
K₂ : LieSubalgebra R L₂
x✝ : L₂
⊢ x✝ ∈ f.range ↔ x✝ ∈ map f ⊤
state_after: no goals
tactic: simp
Theorem: Polynomial.X_pow_sub_one_separable_iff
File: Mathlib/FieldTheory/Separable.lean

Proof steps:
state_before: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
⊢ (X ^ n - 1).Separable ↔ ↑n ≠ 0
state_after: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
⊢ (X ^ n - 1).Separable → ↑n ≠ 0
tactic: refine ⟨?_, fun h => separable_X_pow_sub_C_unit 1 (IsUnit.mk0 (↑n) h)⟩
state_before: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
⊢ (X ^ n - 1).Separable → ↑n ≠ 0
state_after: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
⊢ (∃ a b, a * (X ^ n - 1) + b * (C ↑n * X ^ (n - 1)) = 1) → ↑n ≠ 0
tactic: rw [separable_def', derivative_sub, derivative_X_pow, derivative_one, sub_zero]
state_before: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
⊢ (∃ a b, a * (X ^ n - 1) + b * (C ↑n * X ^ (n - 1)) = 1) → ↑n ≠ 0
state_after: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
h : IsCoprime (X ^ n - 1) (C ↑n * X ^ (n - 1))
hn' : ↑n = 0
⊢ False
tactic: rintro (h : IsCoprime _ _) hn'
state_before: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
h : IsCoprime (X ^ n - 1) (C ↑n * X ^ (n - 1))
hn' : ↑n = 0
⊢ False
state_after: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
h : IsUnit (X ^ n - 1)
hn' : ↑n = 0
⊢ False
tactic: rw [hn', C_0, zero_mul, isCoprime_zero_right] at h
state_before: F : Type u
inst✝¹ : Field F
K : Type v
inst✝ : Field K
n : ℕ
h : IsUnit (X ^ n - 1)
hn' : ↑n = 0
⊢ False
state_after: no goals
tactic: exact not_isUnit_X_pow_sub_one F n h
Theorem: AddSubgroup.mem_rightTransversals_iff_existsUnique_quotient_mk''_eq
File: Mathlib/GroupTheory/Complement.lean

Proof steps:
state_before: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
⊢ S ∈ rightTransversals ↑H ↔ ∀ (q : Quotient (QuotientGroup.rightRel H)), ∃! s, Quotient.mk'' ↑s = q
state_after: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
⊢ (∀ (g : G), ∃! s, Quotient.mk'' ↑s = Quotient.mk'' g) ↔
    ∀ (q : Quotient (QuotientGroup.rightRel H)), ∃! s, Quotient.mk'' ↑s = q
tactic: simp_rw [mem_rightTransversals_iff_existsUnique_mul_inv_mem, SetLike.mem_coe, ←
    QuotientGroup.rightRel_apply, ← Quotient.eq'']
state_before: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
⊢ (∀ (g : G), ∃! s, Quotient.mk'' ↑s = Quotient.mk'' g) ↔
    ∀ (q : Quotient (QuotientGroup.rightRel H)), ∃! s, Quotient.mk'' ↑s = q
state_after: no goals
tactic: exact ⟨fun h q => Quotient.inductionOn' q h, fun h g => h (Quotient.mk'' g)⟩
Theorem: EReal.coe_coe_sign
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: x : SignType
⊢ ↑↑x = ↑x
state_after: no goals
tactic: cases x <;> rfl
Theorem: AlgebraicGeometry.Scheme.zeroLocus_eq_top_iff_subset_nilradical_of_isCompact
File: Mathlib/AlgebraicGeometry/Morphisms/QuasiCompact.lean

Proof steps:
state_before: X✝ Y : Scheme
f : X✝ ⟶ Y
Z X : Scheme
U : X.Opens
hU : IsCompact ↑U
s : Set ↑Γ(X, U)
⊢ X.zeroLocus s = ⊤ ↔ s ⊆ ↑(nilradical ↑Γ(X, U))
state_after: no goals
tactic: simp [Scheme.zeroLocus_def, ← Scheme.isNilpotent_iff_basicOpen_eq_bot_of_isCompact hU,
    ← mem_nilradical, Set.subset_def]
Theorem: Finset.le_card_diffs_mul_card_diffs
File: Mathlib/Combinatorics/SetFamily/FourFunctions.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq α
inst✝ : GeneralizedBooleanAlgebra α
s t : Finset α
⊢ s.card * t.card ≤ (s \\ t).card * (t \\ s).card
state_after: α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq α
inst✝ : GeneralizedBooleanAlgebra α
s t : Finset α
this :
  ∀ (s t : Finset α),
    map { toFun := ⇑liftLatticeHom, inj' := ⋯ } (s \\ t) =
      map { toFun := ⇑liftLatticeHom, inj' := ⋯ } s \\ map { toFun := ⇑liftLatticeHom, inj' := ⋯ } t
⊢ s.card * t.card ≤ (s \\ t).card * (t \\ s).card
tactic: have : ∀ s t : Finset α, (s \\ t).map ⟨_, liftLatticeHom_injective⟩ =
      s.map ⟨_, liftLatticeHom_injective⟩ \\ t.map ⟨_, liftLatticeHom_injective⟩ := by
    rintro s t
    simp_rw [map_eq_image]
    exact image_image₂_distrib fun a b ↦ rfl
state_before: α : Type u_1
β : Type u_2
inst✝¹ : DecidableEq α
inst✝ : GeneralizedBooleanAlgebra α
s t : Finset α
this :
  ∀ (s t : Finset α),
    map { toFun := ⇑liftLatticeHom, inj' := ⋯ } (s \\ t) =
      map { toFun := ⇑liftLatticeHom, inj' := ⋯ } s \\ map { toFun := ⇑liftLatticeHom, inj' := ⋯ } t
⊢ s.card * t.card ≤ (s \\ t).card * (t \\ s).card
state_after: no goals
tactic: simpa [← card_compls (_ ⊻ _), ← map_sup, ← map_inf, ← this] using
    (s.map ⟨_, liftLatticeHom_injective⟩).le_card_infs_mul_card_sups
      (t.map ⟨_, liftLatticeHom_injective⟩)ᶜˢ
Theorem: SemidirectProduct.mk_eq_inl_mul_inr
File: Mathlib/GroupTheory/SemidirectProduct.lean

Proof steps:
state_before: N : Type u_1
G : Type u_2
H : Type u_3
inst✝² : Group N
inst✝¹ : Group G
inst✝ : Group H
φ : G →* MulAut N
g : G
n : N
⊢ { left := n, right := g } = inl n * inr g
state_after: no goals
tactic: ext <;> simp
Theorem: Set.Infinite.exists_superset_ncard_eq
File: Mathlib/Data/Set/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s✝ t✝ : Set α
f : α → β
s t : Set α
ht : t.Infinite
hst : s ⊆ t
hs : s.Finite
k : ℕ
hsk : s.ncard ≤ k
⊢ ∃ s', s ⊆ s' ∧ s' ⊆ t ∧ s'.ncard = k
state_after: case intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Set α
f : α → β
s t : Set α
ht : t.Infinite
hst : s ⊆ t
hs : s.Finite
k : ℕ
hsk : s.ncard ≤ k
s₁ : Set α
hs₁ : s₁ ⊆ t \ s
hs₁fin : s₁.Finite
hs₁card : s₁.ncard = k - s.ncard
⊢ ∃ s', s ⊆ s' ∧ s' ⊆ t ∧ s'.ncard = k
tactic: obtain ⟨s₁, hs₁, hs₁fin, hs₁card⟩ := (ht.diff hs).exists_subset_ncard_eq (k - s.ncard)
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Set α
f : α → β
s t : Set α
ht : t.Infinite
hst : s ⊆ t
hs : s.Finite
k : ℕ
hsk : s.ncard ≤ k
s₁ : Set α
hs₁ : s₁ ⊆ t \ s
hs₁fin : s₁.Finite
hs₁card : s₁.ncard = k - s.ncard
⊢ ∃ s', s ⊆ s' ∧ s' ⊆ t ∧ s'.ncard = k
state_after: case intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Set α
f : α → β
s t : Set α
ht : t.Infinite
hst : s ⊆ t
hs : s.Finite
k : ℕ
hsk : s.ncard ≤ k
s₁ : Set α
hs₁ : s₁ ⊆ t \ s
hs₁fin : s₁.Finite
hs₁card : s₁.ncard = k - s.ncard
⊢ (s ∪ s₁).ncard = k
tactic: refine ⟨s ∪ s₁, subset_union_left, union_subset hst (hs₁.trans diff_subset), ?_⟩
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
s✝ t✝ : Set α
f : α → β
s t : Set α
ht : t.Infinite
hst : s ⊆ t
hs : s.Finite
k : ℕ
hsk : s.ncard ≤ k
s₁ : Set α
hs₁ : s₁ ⊆ t \ s
hs₁fin : s₁.Finite
hs₁card : s₁.ncard = k - s.ncard
⊢ (s ∪ s₁).ncard = k
state_after: no goals
tactic: rwa [ncard_union_eq (disjoint_of_subset_right hs₁ disjoint_sdiff_right) hs hs₁fin, hs₁card,
    add_tsub_cancel_of_le]