ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Quaternion.mul_re
File: Mathlib/Algebra/Quaternion.lean

Proof steps:
state_before: S : Type u_1
T : Type u_2
R : Type u_3
inst✝ : CommRing R
r x y z : R
a b c : ℍ[R]
⊢ a.re * b.re + -1 * a.imI * b.imI + -1 * a.imJ * b.imJ - -1 * -1 * a.imK * b.imK =
    a.re * b.re - a.imI * b.imI - a.imJ * b.imJ - a.imK * b.imK
state_after: no goals
tactic: simp only [one_mul, neg_mul, sub_eq_add_neg, neg_neg]
Theorem: span_fourier_closure_eq_top
File: Mathlib/Analysis/Fourier/AddCircle.lean

Proof steps:
state_before: T : ℝ
hT : Fact (0 < T)
⊢ (span ℂ (range fourier)).topologicalClosure = ⊤
state_after: T : ℝ
hT : Fact (0 < T)
⊢ (Subalgebra.toSubmodule fourierSubalgebra.toSubalgebra).topologicalClosure = ⊤
tactic: rw [← fourierSubalgebra_coe]
Theorem: thickening_ball
File: Mathlib/Analysis/NormedSpace/Pointwise.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x✝ y z : E
δ ε : ℝ
hε : 0 < ε
hδ : 0 < δ
x : E
⊢ thickening ε (Metric.ball x δ) = Metric.ball x (ε + δ)
state_after: no goals
tactic: rw [← thickening_singleton, thickening_thickening hε hδ, thickening_singleton]
Theorem: PadicInt.inv_mul
File: Mathlib/NumberTheory/Padics/PadicIntegers.lean

Proof steps:
state_before: p : ℕ
hp : Fact (Nat.Prime p)
z : ℤ_[p]
hz : ‖z‖ = 1
⊢ z.inv * z = 1
state_after: no goals
tactic: rw [mul_comm, mul_inv hz]
Theorem: WithLp.prod_infty_equiv_isometry
File: Mathlib/Analysis/Normed/Lp/ProdLp.lean

Proof steps:
state_before: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp : Fact (1 ≤ p)
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : WithLp ⊤ (α × β)
⊢ edist ((WithLp.equiv ⊤ (α × β)) x) ((WithLp.equiv ⊤ (α × β)) y) ≤ edist x y
state_after: no goals
tactic: simpa only [ENNReal.coe_one, one_mul] using prod_lipschitzWith_equiv ∞ α β x y
state_before: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp : Fact (1 ≤ p)
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : WithLp ⊤ (α × β)
⊢ edist x y ≤ edist ((WithLp.equiv ⊤ (α × β)) x) ((WithLp.equiv ⊤ (α × β)) y)
state_after: no goals
tactic: simpa only [ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero, ENNReal.coe_one,
        one_mul] using prod_antilipschitzWith_equiv ∞ α β x y
Theorem: CategoryTheory.IsIso.of_isIso_fac_left
File: Mathlib/CategoryTheory/Iso.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ : C
f✝ g✝ : X✝ ⟶ Y✝
h✝ : Y✝ ⟶ Z✝
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h : X ⟶ Z
inst✝ : IsIso f
hh : IsIso h
w : f ≫ g = h
⊢ IsIso g
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ : C
f✝ g✝ : X✝ ⟶ Y✝
h✝ : Y✝ ⟶ Z✝
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h : X ⟶ Z
inst✝ : IsIso f
hh : IsIso (f ≫ g)
w : f ≫ g = h
⊢ IsIso g
tactic: rw [← w] at hh
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ : C
f✝ g✝ : X✝ ⟶ Y✝
h✝ : Y✝ ⟶ Z✝
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h : X ⟶ Z
inst✝ : IsIso f
hh : IsIso (f ≫ g)
w : f ≫ g = h
⊢ IsIso g
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ : C
f✝ g✝ : X✝ ⟶ Y✝
h✝ : Y✝ ⟶ Z✝
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h : X ⟶ Z
inst✝ : IsIso f
hh : IsIso (f ≫ g)
w : f ≫ g = h
this : IsIso (f ≫ g)
⊢ IsIso g
tactic: haveI := hh
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ Z✝ : C
f✝ g✝ : X✝ ⟶ Y✝
h✝ : Y✝ ⟶ Z✝
X Y Z : C
f : X ⟶ Y
g : Y ⟶ Z
h : X ⟶ Z
inst✝ : IsIso f
hh : IsIso (f ≫ g)
w : f ≫ g = h
this : IsIso (f ≫ g)
⊢ IsIso g
state_after: no goals
tactic: exact of_isIso_comp_left f g
Theorem: reflection_mem_subspace_orthogonalComplement_eq_neg
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ (reflection K) v = -v
state_after: no goals
tactic: simp [reflection_apply, orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero hv]
Theorem: CategoryTheory.PreGaloisCategory.isIso_of_mono_of_eq_card_fiber
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 Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ IsIso f
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
this : IsIso (F.map f)
⊢ IsIso f
tactic: have : IsIso (F.map f) := by
    apply (ConcreteCategory.isIso_iff_bijective (F.map f)).mpr
    apply (Fintype.bijective_iff_injective_and_card (F.map f)).mpr
    refine ⟨injective_of_mono_of_preservesPullback (F.map f), ?_⟩
    simp only [← Nat.card_eq_fintype_card, h]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
this : IsIso (F.map f)
⊢ IsIso f
state_after: no goals
tactic: exact isIso_of_reflects_iso f F
Theorem: Mathlib.Tactic.Rify.ratCast_eq
File: Mathlib/Tactic/Rify.lean

Proof steps:
state_before: a b : ℚ
⊢ a = b ↔ ↑a = ↑b
state_after: no goals
tactic: simp
Theorem: Pell.Solution₁.eq_zero_of_d_neg
File: Mathlib/NumberTheory/Pell.lean

Proof steps:
state_before: d : ℤ
h₀ : d < 0
a : Solution₁ d
⊢ a.x = 0 ∨ a.y = 0
state_after: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ^ 2 - d * a.y ^ 2 = 1
⊢ a.x = 0 ∨ a.y = 0
tactic: have h := a.prop
state_before: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ^ 2 - d * a.y ^ 2 = 1
⊢ a.x = 0 ∨ a.y = 0
state_after: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ≠ 0 ∧ a.y ≠ 0
⊢ a.x ^ 2 - d * a.y ^ 2 ≠ 1
tactic: contrapose! h
state_before: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ≠ 0 ∧ a.y ≠ 0
⊢ a.x ^ 2 - d * a.y ^ 2 ≠ 1
state_after: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ≠ 0 ∧ a.y ≠ 0
h1 : 0 < a.x ^ 2
⊢ a.x ^ 2 - d * a.y ^ 2 ≠ 1
tactic: have h1 := sq_pos_of_ne_zero h.1
state_before: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ≠ 0 ∧ a.y ≠ 0
h1 : 0 < a.x ^ 2
⊢ a.x ^ 2 - d * a.y ^ 2 ≠ 1
state_after: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ≠ 0 ∧ a.y ≠ 0
h1 : 0 < a.x ^ 2
h2 : 0 < a.y ^ 2
⊢ a.x ^ 2 - d * a.y ^ 2 ≠ 1
tactic: have h2 := sq_pos_of_ne_zero h.2
state_before: d : ℤ
h₀ : d < 0
a : Solution₁ d
h : a.x ≠ 0 ∧ a.y ≠ 0
h1 : 0 < a.x ^ 2
h2 : 0 < a.y ^ 2
⊢ a.x ^ 2 - d * a.y ^ 2 ≠ 1
state_after: no goals
tactic: nlinarith
Theorem: IsSquare.pow
File: Mathlib/Algebra/Group/Even.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : Monoid α
n✝ : ℕ
a : α
n : ℕ
⊢ IsSquare a → IsSquare (a ^ n)
state_after: case intro
F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : Monoid α
n✝ n : ℕ
a : α
⊢ IsSquare ((a * a) ^ n)
tactic: rintro ⟨a, rfl⟩
state_before: case intro
F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
inst✝ : Monoid α
n✝ n : ℕ
a : α
⊢ IsSquare ((a * a) ^ n)
state_after: no goals
tactic: exact ⟨a ^ n, (Commute.refl _).mul_pow _⟩
Theorem: CategoryTheory.MonoidalCategory.pentagon_hom_inv_inv_inv_inv
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V W X Y Z : C
⊢ W ◁ (α_ X Y Z).hom ≫ (α_ W X (Y ⊗ Z)).inv ≫ (α_ (W ⊗ X) Y Z).inv = (α_ W (X ⊗ Y) Z).inv ≫ (α_ W X Y).inv ▷ Z
state_after: no goals
tactic: simp [← cancel_epi (W ◁ (α_ X Y Z).inv)]
Theorem: MeasureTheory.norm_setIntegral_le_of_norm_le_const_ae''
File: Mathlib/MeasureTheory/Integral/SetIntegral.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
E : Type u_3
F : Type u_4
inst✝² : MeasurableSpace X
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
f g : X → E
s t : Set X
μ ν : Measure X
l l' : Filter X
C : ℝ
hs : μ s < ⊤
hsm : MeasurableSet s
hC : ∀ᵐ (x : X) ∂μ, x ∈ s → ‖f x‖ ≤ C
⊢ ∀ᵐ (x : X) ∂μ.restrict s, ‖f x‖ ≤ C
state_after: no goals
tactic: rwa [ae_restrict_eq hsm, eventually_inf_principal]
Theorem: sbtw_iff_not_btw
File: Mathlib/Order/Circular.lean

Proof steps:
state_before: α : Type u_1
inst✝ : CircularOrder α
a b c : α
⊢ sbtw a b c ↔ ¬btw c b a
state_after: α : Type u_1
inst✝ : CircularOrder α
a b c : α
⊢ btw a b c ∧ ¬btw c b a ↔ ¬btw c b a
tactic: rw [sbtw_iff_btw_not_btw]
state_before: α : Type u_1
inst✝ : CircularOrder α
a b c : α
⊢ btw a b c ∧ ¬btw c b a ↔ ¬btw c b a
state_after: no goals
tactic: exact and_iff_right_of_imp (btw_total _ _ _).resolve_left
Theorem: IsKleinFour.eq_mul_of_ne_all
File: Mathlib/GroupTheory/SpecificGroups/KleinFour.lean

Proof steps:
state_before: G : Type u_1
inst✝¹ : Group G
inst✝ : IsKleinFour G
x y z : G
hx : x ≠ 1
hy : y ≠ 1
hxy : x ≠ y
hz : z ≠ 1
hzx : z ≠ x
hzy : z ≠ y
⊢ z = x * y
state_after: no goals
tactic: classical
  let _ := Fintype.ofFinite G
  apply eq_of_not_mem_of_mem_insert <| (eq_finset_univ hx hy hxy).symm ▸ mem_univ _
  simpa only [mem_singleton, mem_insert, not_or] using ⟨hzx, hzy, hz⟩
Theorem: _private.Mathlib.Topology.Instances.EReal.0.EReal.continuousAt_mul_swap
File: Mathlib/Topology/Instances/EReal.lean

Proof steps:
state_before: α : Type u_1
inst✝ : TopologicalSpace α
a b : EReal
h : ContinuousAt (fun p => p.1 * p.2) (a, b)
⊢ ContinuousAt (fun p => p.1 * p.2) (b, a)
state_after: case h.e'_5.h
α : Type u_1
inst✝ : TopologicalSpace α
a b : EReal
h : ContinuousAt (fun p => p.1 * p.2) (a, b)
x✝ : EReal × EReal
⊢ x✝.1 * x✝.2 = ((fun p => p.1 * p.2) ∘ Prod.swap) x✝
tactic: convert h.comp continuous_swap.continuousAt (x := (b, a))
state_before: case h.e'_5.h
α : Type u_1
inst✝ : TopologicalSpace α
a b : EReal
h : ContinuousAt (fun p => p.1 * p.2) (a, b)
x✝ : EReal × EReal
⊢ x✝.1 * x✝.2 = ((fun p => p.1 * p.2) ∘ Prod.swap) x✝
state_after: no goals
tactic: simp [mul_comm]
Theorem: Ordinal.nadd_comm
File: Mathlib/SetTheory/Ordinal/NaturalOps.lean

Proof steps:
state_before: a✝ b✝ c : Ordinal.{u}
a b : Ordinal.{u_1}
⊢ a ♯ b = b ♯ a
state_after: a✝ b✝ c : Ordinal.{u}
a b : Ordinal.{u_1}
⊢ max (b.blsub fun b' x => a ♯ b') (a.blsub fun a' x => a' ♯ b) =
    max (b.blsub fun a' x => a' ♯ a) (a.blsub fun b' x => b ♯ b')
tactic: rw [nadd_def, nadd_def, max_comm]
state_before: a✝ b✝ c : Ordinal.{u}
a b : Ordinal.{u_1}
⊢ max (b.blsub fun b' x => a ♯ b') (a.blsub fun a' x => a' ♯ b) =
    max (b.blsub fun a' x => a' ♯ a) (a.blsub fun b' x => b ♯ b')
state_after: no goals
tactic: congr <;> ext <;> apply nadd_comm
Theorem: Set.Icc_prod_eq
File: Mathlib/Order/Interval/Set/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b : α × β
⊢ Icc a b = Icc a.1 b.1 ×ˢ Icc a.2 b.2
state_after: no goals
tactic: simp
Theorem: Cardinal.toNat_ne_zero
File: Mathlib/SetTheory/Cardinal/ToNat.lean

Proof steps:
state_before: α : Type u
c d : Cardinal.{u}
⊢ toNat c ≠ 0 ↔ c ≠ 0 ∧ c < ℵ₀
state_after: no goals
tactic: simp [not_or]
Theorem: RingQuot.mkAlgHom_def
File: Mathlib/Algebra/RingQuot.lean

Proof steps:
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Semiring T
s : A → A → Prop
x✝ : S
⊢ (↑↑__src✝).toFun ((algebraMap S A) x✝) = (algebraMap S (RingQuot s)) x✝
state_after: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Semiring T
s : A → A → Prop
x✝ : S
⊢ { toQuot := Quot.mk (Rel s) ((algebraMap S A) x✝) } = (algebraMap S (RingQuot s)) x✝
tactic: simp [mkRingHom_def]
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r : R → R → Prop
inst✝ : Semiring T
s : A → A → Prop
x✝ : S
⊢ { toQuot := Quot.mk (Rel s) ((algebraMap S A) x✝) } = (algebraMap S (RingQuot s)) x✝
state_after: no goals
tactic: rfl
Theorem: MeasureTheory.Integrable.smul_of_top_right
File: Mathlib/MeasureTheory/Function/L1Space.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝⁵ : MeasurableSpace δ
inst✝⁴ : NormedAddCommGroup β
inst✝³ : NormedAddCommGroup γ
𝕜 : Type u_5
inst✝² : NormedRing 𝕜
inst✝¹ : Module 𝕜 β
inst✝ : BoundedSMul 𝕜 β
f : α → β
φ : α → 𝕜
hf : Integrable f μ
hφ : Memℒp φ ⊤ μ
⊢ Integrable (φ • f) μ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝⁵ : MeasurableSpace δ
inst✝⁴ : NormedAddCommGroup β
inst✝³ : NormedAddCommGroup γ
𝕜 : Type u_5
inst✝² : NormedRing 𝕜
inst✝¹ : Module 𝕜 β
inst✝ : BoundedSMul 𝕜 β
f : α → β
φ : α → 𝕜
hf : Memℒp f 1 μ
hφ : Memℒp φ ⊤ μ
⊢ Memℒp (φ • f) 1 μ
tactic: rw [← memℒp_one_iff_integrable] at hf ⊢
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝⁵ : MeasurableSpace δ
inst✝⁴ : NormedAddCommGroup β
inst✝³ : NormedAddCommGroup γ
𝕜 : Type u_5
inst✝² : NormedRing 𝕜
inst✝¹ : Module 𝕜 β
inst✝ : BoundedSMul 𝕜 β
f : α → β
φ : α → 𝕜
hf : Memℒp f 1 μ
hφ : Memℒp φ ⊤ μ
⊢ Memℒp (φ • f) 1 μ
state_after: no goals
tactic: exact Memℒp.smul_of_top_right hf hφ
Theorem: Isometry.ediam_range
File: Mathlib/Topology/MetricSpace/Isometry.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
f : α → β
x y z : α
s : Set α
hf : Isometry f
⊢ EMetric.diam (range f) = EMetric.diam univ
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
f : α → β
x y z : α
s : Set α
hf : Isometry f
⊢ EMetric.diam (f '' univ) = EMetric.diam univ
tactic: rw [← image_univ]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
inst✝² : PseudoEMetricSpace α
inst✝¹ : PseudoEMetricSpace β
inst✝ : PseudoEMetricSpace γ
f : α → β
x y z : α
s : Set α
hf : Isometry f
⊢ EMetric.diam (f '' univ) = EMetric.diam univ
state_after: no goals
tactic: exact hf.ediam_image univ
Theorem: ComplexShape.Embedding.r_eq_none
File: Mathlib/Algebra/Homology/Embedding/Basic.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
i' : ι'
hi : ∀ (i : ι), e.f i ≠ i'
⊢ ¬∃ i, e.f i = i'
state_after: case intro
ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
i' : ι'
hi : ∀ (i : ι), e.f i ≠ i'
i : ι
hi' : e.f i = i'
⊢ False
tactic: rintro ⟨i, hi'⟩
state_before: case intro
ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
e : c.Embedding c'
i' : ι'
hi : ∀ (i : ι), e.f i ≠ i'
i : ι
hi' : e.f i = i'
⊢ False
state_after: no goals
tactic: exact hi i hi'
Theorem: CategoryTheory.shiftComm_symm
File: Mathlib/CategoryTheory/Shift/Basic.lean

Proof steps:
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddCommMonoid A
inst✝ : HasShift C A
X Y : C
f : X ⟶ Y
i j : A
⊢ (shiftComm X i j).symm = shiftComm X j i
state_after: case w
C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddCommMonoid A
inst✝ : HasShift C A
X Y : C
f : X ⟶ Y
i j : A
⊢ (shiftComm X i j).symm.hom = (shiftComm X j i).hom
tactic: ext
state_before: case w
C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddCommMonoid A
inst✝ : HasShift C A
X Y : C
f : X ⟶ Y
i j : A
⊢ (shiftComm X i j).symm.hom = (shiftComm X j i).hom
state_after: no goals
tactic: exact NatTrans.congr_app (congr_arg Iso.hom (shiftFunctorComm_symm C i j)) X
Theorem: multiplicity.Nat.pow_add_pow
File: Mathlib/NumberTheory/Multiplicity.lean

Proof steps:
state_before: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hxy : p ∣ x + y
hx : ¬p ∣ x
n : ℕ
hn : Odd n
⊢ multiplicity p (x ^ n + y ^ n) = multiplicity p (x + y) + multiplicity p n
state_after: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hxy : p ∣ x + y
hx : ¬p ∣ x
n : ℕ
hn : Odd n
⊢ multiplicity ↑p ↑(x ^ n + y ^ n) = multiplicity ↑p ↑(x + y) + multiplicity p n
tactic: iterate 2 rw [← Int.natCast_multiplicity]
state_before: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hxy : p ∣ x + y
hx : ¬p ∣ x
n : ℕ
hn : Odd n
⊢ multiplicity ↑p ↑(x ^ n + y ^ n) = multiplicity ↑p ↑(x + y) + multiplicity p n
state_after: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hxy : ↑p ∣ ↑(x + y)
hx : ¬↑p ∣ ↑x
n : ℕ
hn : Odd n
⊢ multiplicity ↑p ↑(x ^ n + y ^ n) = multiplicity ↑p ↑(x + y) + multiplicity p n
tactic: rw [← Int.natCast_dvd_natCast] at hxy hx
state_before: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hxy : ↑p ∣ ↑(x + y)
hx : ¬↑p ∣ ↑x
n : ℕ
hn : Odd n
⊢ multiplicity ↑p ↑(x ^ n + y ^ n) = multiplicity ↑p ↑(x + y) + multiplicity p n
state_after: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hx : ¬↑p ∣ ↑x
n : ℕ
hn : Odd n
hxy : ↑p ∣ ↑x + ↑y
⊢ multiplicity (↑p) (↑x ^ n + ↑y ^ n) = multiplicity (↑p) (↑x + ↑y) + multiplicity p n
tactic: push_cast at *
state_before: R : Type u_1
n✝ : ℕ
inst✝ : CommRing R
a b x✝ y✝ : R
p : ℕ
hp : Nat.Prime p
hp1 : Odd p
x y : ℕ
hx : ¬↑p ∣ ↑x
n : ℕ
hn : Odd n
hxy : ↑p ∣ ↑x + ↑y
⊢ multiplicity (↑p) (↑x ^ n + ↑y ^ n) = multiplicity (↑p) (↑x + ↑y) + multiplicity p n
state_after: no goals
tactic: exact Int.pow_add_pow hp hp1 hxy hx hn
Theorem: Set.range_piecewise
File: Mathlib/Data/Set/Function.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ : α → Sort u_6
s : Set α
f✝ g✝ : (i : α) → δ i
inst✝ : (j : α) → Decidable (j ∈ s)
f g : α → β
⊢ range (s.piecewise f g) = f '' s ∪ g '' sᶜ
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ : α → Sort u_6
s : Set α
f✝ g✝ : (i : α) → δ i
inst✝ : (j : α) → Decidable (j ∈ s)
f g : α → β
y : β
⊢ y ∈ range (s.piecewise f g) ↔ y ∈ f '' s ∪ g '' sᶜ
tactic: ext y
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ : α → Sort u_6
s : Set α
f✝ g✝ : (i : α) → δ i
inst✝ : (j : α) → Decidable (j ∈ s)
f g : α → β
y : β
⊢ y ∈ range (s.piecewise f g) ↔ y ∈ f '' s ∪ g '' sᶜ
state_after: case h.mp
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ : α → Sort u_6
s : Set α
f✝ g✝ : (i : α) → δ i
inst✝ : (j : α) → Decidable (j ∈ s)
f g : α → β
y : β
⊢ y ∈ range (s.piecewise f g) → y ∈ f '' s ∪ g '' sᶜ

case h.mpr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ : α → Sort u_6
s : Set α
f✝ g✝ : (i : α) → δ i
inst✝ : (j : α) → Decidable (j ∈ s)
f g : α → β
y : β
⊢ y ∈ f '' s ∪ g '' sᶜ → y ∈ range (s.piecewise f g)
tactic: constructor
Theorem: SetTheory.PGame.birthday_zero
File: Mathlib/SetTheory/Game/Birthday.lean

Proof steps:
state_before: ⊢ birthday 0 = 0
state_after: no goals
tactic: simp [inferInstanceAs (IsEmpty PEmpty)]
Theorem: Units.mul_right_dvd
File: Mathlib/Algebra/Divisibility/Units.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Monoid α
a b : α
u : αˣ
h : a ∣ b
⊢ a * ↑u * ↑u⁻¹ = a
state_after: no goals
tactic: rw [mul_assoc, u.mul_inv, mul_one]
Theorem: HasFiniteFPowerSeriesOnBall.eq_zero_of_bound_zero
File: Mathlib/Analysis/Analytic/CPolynomial.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
p pf pg : FormalMultilinearSeries 𝕜 E F
x : E
r r' : ℝ≥0∞
n m : ℕ
hf : HasFiniteFPowerSeriesOnBall f pf x 0 r
⊢ ∀ y ∈ EMetric.ball x r, f y = 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
p pf pg : FormalMultilinearSeries 𝕜 E F
x : E
r r' : ℝ≥0∞
n m : ℕ
hf : HasFiniteFPowerSeriesOnBall f pf x 0 r
y : E
hy : y ∈ EMetric.ball x r
⊢ f y = 0
tactic: intro y hy
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
p pf pg : FormalMultilinearSeries 𝕜 E F
x : E
r r' : ℝ≥0∞
n m : ℕ
hf : HasFiniteFPowerSeriesOnBall f pf x 0 r
y : E
hy : y ∈ EMetric.ball x r
⊢ f y = 0
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
p pf pg : FormalMultilinearSeries 𝕜 E F
x : E
r r' : ℝ≥0∞
n m : ℕ
hf : HasFiniteFPowerSeriesOnBall f pf x 0 r
y : E
hy : y ∈ EMetric.ball x r
⊢ (∑ k ∈ Finset.range 0, (pf k) fun x_1 => y - x) = 0
tactic: rw [hf.eq_partialSum' y hy 0 le_rfl, FormalMultilinearSeries.partialSum]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace 𝕜 G
f g : E → F
p pf pg : FormalMultilinearSeries 𝕜 E F
x : E
r r' : ℝ≥0∞
n m : ℕ
hf : HasFiniteFPowerSeriesOnBall f pf x 0 r
y : E
hy : y ∈ EMetric.ball x r
⊢ (∑ k ∈ Finset.range 0, (pf k) fun x_1 => y - x) = 0
state_after: no goals
tactic: simp only [Finset.range_zero, Finset.sum_empty]
Theorem: dist_midpoint_left
File: Mathlib/Analysis/NormedSpace/AddTorsor.lean

Proof steps:
state_before: α : Type u_1
V : Type u_2
P : Type u_3
W : Type u_4
Q : Type u_5
inst✝⁹ : SeminormedAddCommGroup V
inst✝⁸ : PseudoMetricSpace P
inst✝⁷ : NormedAddTorsor V P
inst✝⁶ : NormedAddCommGroup W
inst✝⁵ : MetricSpace Q
inst✝⁴ : NormedAddTorsor W Q
𝕜 : Type u_6
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : Invertible 2
p₁ p₂ : P
⊢ dist (midpoint 𝕜 p₁ p₂) p₁ = ‖2‖⁻¹ * dist p₁ p₂
state_after: no goals
tactic: rw [dist_comm, dist_left_midpoint]
Theorem: Set.encard_image_le
File: Mathlib/Data/Set/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
⊢ (f '' s).encard ≤ s.encard
state_after: case inl
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : IsEmpty α
⊢ (f '' s).encard ≤ s.encard

case inr
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : Nonempty α
⊢ (f '' s).encard ≤ s.encard
tactic: obtain (h | h) := isEmpty_or_nonempty α
state_before: case inr
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : Nonempty α
⊢ (f '' s).encard ≤ s.encard
state_after: case inr
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : Nonempty α
⊢ (Function.invFunOn f s '' (f '' s)).encard ≤ s.encard
tactic: rw [← (f.invFunOn_injOn_image s).encard_image]
state_before: case inr
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : Nonempty α
⊢ (Function.invFunOn f s '' (f '' s)).encard ≤ s.encard
state_after: case inr.h
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : Nonempty α
⊢ Function.invFunOn f s '' (f '' s) ⊆ s
tactic: apply encard_le_card
state_before: case inr.h
α : Type u_1
β : Type u_2
s✝¹ t✝ s✝ : Set α
t : Set β
f✝ f : α → β
s : Set α
h : Nonempty α
⊢ Function.invFunOn f s '' (f '' s) ⊆ s
state_after: no goals
tactic: exact f.invFunOn_image_image_subset s
Theorem: Nat.floorRoot_zero_left
File: Mathlib/Data/Nat/Factorization/Root.lean

Proof steps:
state_before: a✝ b n a : ℕ
⊢ floorRoot 0 a = 0
state_after: no goals
tactic: simp [floorRoot]