ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: EuclideanDomain.gcd_eq_left
File: Mathlib/Algebra/EuclideanDomain/Basic.lean

Proof steps:
state_before: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
a b : R
h : gcd a b = a
⊢ a ∣ b
state_after: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
a b : R
h : gcd a b = a
⊢ gcd a b ∣ b
tactic: rw [← h]
state_before: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
a b : R
h : gcd a b = a
⊢ gcd a b ∣ b
state_after: no goals
tactic: apply gcd_dvd_right
state_before: R : Type u
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
a b : R
h : a ∣ b
⊢ gcd a b = a
state_after: no goals
tactic: rw [gcd_val, mod_eq_zero.2 h, gcd_zero_left]
Theorem: CommRing.ext_iff
File: Mathlib/Algebra/Ring/Ext.lean

Proof steps:
state_before: R : Type u
inst₁ inst₂ : CommRing R
⊢ inst₁ = inst₂ → HAdd.hAdd = HAdd.hAdd ∧ HMul.hMul = HMul.hMul
state_after: R : Type u
inst₁ : CommRing R
⊢ HAdd.hAdd = HAdd.hAdd ∧ HMul.hMul = HMul.hMul
tactic: rintro rfl
state_before: R : Type u
inst₁ : CommRing R
⊢ HAdd.hAdd = HAdd.hAdd ∧ HMul.hMul = HMul.hMul
state_after: no goals
tactic: constructor <;> rfl
Theorem: prodXSubSMul.eval
File: Mathlib/Algebra/Polynomial/GroupRingAction.lean

Proof steps:
state_before: M : Type u_1
inst✝⁴ : Monoid M
G : Type u_2
inst✝³ : Group G
inst✝² : Fintype G
R : Type u_3
inst✝¹ : CommRing R
inst✝ : MulSemiringAction G R
x : R
this : DecidableEq R := Classical.decEq R
⊢ ↑(aeval x).toRingHom (X - C (ofQuotientStabilizer G x ↑1)) = 0
state_after: no goals
tactic: simp
Theorem: Besicovitch.SatelliteConfig.centerAndRescale_center
File: Mathlib/MeasureTheory/Covering/BesicovitchVectorSpace.lean

Proof steps:
state_before: E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
⊢ a.centerAndRescale.c (last N) = 0
state_after: no goals
tactic: simp [SatelliteConfig.centerAndRescale]
Theorem: Representation.averageMap_id
File: Mathlib/RepresentationTheory/Invariants.lean

Proof steps:
state_before: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Group G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
inst✝¹ : Fintype G
inst✝ : Invertible ↑(Fintype.card G)
v : V
hv : v ∈ ρ.invariants
⊢ ρ.averageMap v = v
state_after: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Group G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
inst✝¹ : Fintype G
inst✝ : Invertible ↑(Fintype.card G)
v : V
hv : ∀ (g : G), (ρ g) v = v
⊢ ρ.averageMap v = v
tactic: rw [mem_invariants] at hv
state_before: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Group G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
inst✝¹ : Fintype G
inst✝ : Invertible ↑(Fintype.card G)
v : V
hv : ∀ (g : G), (ρ g) v = v
⊢ ρ.averageMap v = v
state_after: no goals
tactic: simp [average, map_sum, hv, Finset.card_univ, ← Nat.cast_smul_eq_nsmul k _ v, smul_smul]
Theorem: MvPolynomial.finSuccEquiv_rename_finSuccEquiv
File: Mathlib/Algebra/MvPolynomial/Equiv.lean

Proof steps:
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e✝ : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
e : σ ≃ Fin n
φ : MvPolynomial (Option σ) R
⊢ (finSuccEquiv R n) ((rename ⇑(e.optionCongr.trans (_root_.finSuccEquiv n).symm)) φ) =
    Polynomial.map (rename ⇑e).toRingHom ((optionEquivLeft R σ) φ)
state_after: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e✝ : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
e : σ ≃ Fin n
φ : MvPolynomial (Option σ) R
⊢ (finSuccEquiv R n).toRingEquiv.toRingHom.comp (rename ⇑(e.optionCongr.trans (_root_.finSuccEquiv n).symm)).toRingHom =
    (mapRingHom (rename ⇑e).toRingHom).comp ↑(optionEquivLeft R σ)
tactic: suffices (finSuccEquiv R n).toRingEquiv.toRingHom.comp (rename ((Equiv.optionCongr e).trans
        (_root_.finSuccEquiv n).symm)).toRingHom =
      (Polynomial.mapRingHom (rename e).toRingHom).comp (optionEquivLeft R σ) by
    exact DFunLike.congr_fun this φ
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e✝ : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
e : σ ≃ Fin n
φ : MvPolynomial (Option σ) R
⊢ (finSuccEquiv R n).toRingEquiv.toRingHom.comp (rename ⇑(e.optionCongr.trans (_root_.finSuccEquiv n).symm)).toRingHom =
    (mapRingHom (rename ⇑e).toRingHom).comp ↑(optionEquivLeft R σ)
state_after: case hC
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e✝ : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
e : σ ≃ Fin n
φ : MvPolynomial (Option σ) R
⊢ ∀ (r : R),
    ((finSuccEquiv R n).toRingEquiv.toRingHom.comp
          (rename ⇑(e.optionCongr.trans (_root_.finSuccEquiv n).symm)).toRingHom)
        (C r) =
      ((mapRingHom (rename ⇑e).toRingHom).comp ↑(optionEquivLeft R σ)) (C r)

case hX
R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e✝ : ℕ
s : σ →₀ ℕ
inst✝ : CommSemiring R
n : ℕ
e : σ ≃ Fin n
φ : MvPolynomial (Option σ) R
⊢ ∀ (i : Option σ),
    ((finSuccEquiv R n).toRingEquiv.toRingHom.comp
          (rename ⇑(e.optionCongr.trans (_root_.finSuccEquiv n).symm)).toRingHom)
        (X i) =
      ((mapRingHom (rename ⇑e).toRingHom).comp ↑(optionEquivLeft R σ)) (X i)
tactic: apply ringHom_ext
Theorem: vsub_vadd_comm
File: Mathlib/Algebra/AddTorsor.lean

Proof steps:
state_before: G : Type u_1
P : Type u_2
inst✝¹ : AddCommGroup G
inst✝ : AddTorsor G P
p₁ p₂ p₃ : P
⊢ p₁ -ᵥ p₂ +ᵥ p₃ = p₃ -ᵥ p₂ +ᵥ p₁
state_after: G : Type u_1
P : Type u_2
inst✝¹ : AddCommGroup G
inst✝ : AddTorsor G P
p₁ p₂ p₃ : P
⊢ p₁ -ᵥ p₂ + (p₃ -ᵥ p₁ - (p₃ -ᵥ p₂)) = 0
tactic: rw [← @vsub_eq_zero_iff_eq G, vadd_vsub_assoc, vsub_vadd_eq_vsub_sub]
state_before: G : Type u_1
P : Type u_2
inst✝¹ : AddCommGroup G
inst✝ : AddTorsor G P
p₁ p₂ p₃ : P
⊢ p₁ -ᵥ p₂ + (p₃ -ᵥ p₁ - (p₃ -ᵥ p₂)) = 0
state_after: no goals
tactic: simp
Theorem: Ideal.homogeneousHull_eq_iSup
File: Mathlib/RingTheory/GradedAlgebra/HomogeneousIdeal.lean

Proof steps:
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
i : ι
⊢ ∀ x ∈ ⇑(GradedRing.proj 𝒜 i) '' ↑I, Homogeneous 𝒜 x
state_after: case intro.intro
ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
i : ι
x : A
⊢ Homogeneous 𝒜 ((GradedRing.proj 𝒜 i) x)
tactic: rintro _ ⟨x, -, rfl⟩
state_before: case intro.intro
ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
i : ι
x : A
⊢ Homogeneous 𝒜 ((GradedRing.proj 𝒜 i) x)
state_after: no goals
tactic: apply SetLike.homogeneous_coe
state_before: ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ homogeneousHull 𝒜 I = ⨆ i, { toSubmodule := span (⇑(GradedRing.proj 𝒜 i) '' ↑I), is_homogeneous' := ⋯ }
state_after: case h
ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ (homogeneousHull 𝒜 I).toIdeal =
    (⨆ i, { toSubmodule := span (⇑(GradedRing.proj 𝒜 i) '' ↑I), is_homogeneous' := ⋯ }).toIdeal
tactic: ext1
state_before: case h
ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ (homogeneousHull 𝒜 I).toIdeal =
    (⨆ i, { toSubmodule := span (⇑(GradedRing.proj 𝒜 i) '' ↑I), is_homogeneous' := ⋯ }).toIdeal
state_after: case h
ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ ⨆ i, span (⇑(GradedRing.proj 𝒜 i) '' ↑I) =
    ⨆ i, { toSubmodule := span (⇑(GradedRing.proj 𝒜 i) '' ↑I), is_homogeneous' := ⋯ }.toIdeal
tactic: rw [Ideal.toIdeal_homogeneousHull_eq_iSup, toIdeal_iSup]
state_before: case h
ι : Type u_1
σ : Type u_2
R : Type u_3
A : Type u_4
inst✝⁵ : Semiring A
inst✝⁴ : DecidableEq ι
inst✝³ : AddMonoid ι
inst✝² : SetLike σ A
inst✝¹ : AddSubmonoidClass σ A
𝒜 : ι → σ
inst✝ : GradedRing 𝒜
I : Ideal A
⊢ ⨆ i, span (⇑(GradedRing.proj 𝒜 i) '' ↑I) =
    ⨆ i, { toSubmodule := span (⇑(GradedRing.proj 𝒜 i) '' ↑I), is_homogeneous' := ⋯ }.toIdeal
state_after: no goals
tactic: rfl
Theorem: constantCoeff_wittStructureRat_zero
File: Mathlib/RingTheory/WittVector/StructurePolynomial.lean

Proof steps:
state_before: p : ℕ
R : Type u_1
idx : Type u_2
inst✝ : CommRing R
hp : Fact (Nat.Prime p)
Φ : MvPolynomial idx ℚ
⊢ constantCoeff (wittStructureRat p Φ 0) = constantCoeff Φ
state_after: no goals
tactic: simp only [wittStructureRat, bind₁, map_aeval, xInTermsOfW_zero, constantCoeff_rename,
    constantCoeff_wittPolynomial, aeval_X, constantCoeff_comp_algebraMap, eval₂Hom_zero'_apply,
    RingHom.id_apply]
Theorem: CategoryTheory.Limits.Pi.map_id
File: Mathlib/CategoryTheory/Limits/Shapes/Products.lean

Proof steps:
state_before: β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
inst✝ : HasProduct f
⊢ (map fun a => 𝟙 (f a)) = 𝟙 (∏ᶜ f)
state_after: case h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
inst✝ : HasProduct f
b✝ : α
⊢ (map fun a => 𝟙 (f a)) ≫ π f b✝ = 𝟙 (∏ᶜ f) ≫ π f b✝
tactic: ext
state_before: case h
β : Type w
α : Type w₂
γ : Type w₃
C : Type u
inst✝¹ : Category.{v, u} C
f : α → C
inst✝ : HasProduct f
b✝ : α
⊢ (map fun a => 𝟙 (f a)) ≫ π f b✝ = 𝟙 (∏ᶜ f) ≫ π f b✝
state_after: no goals
tactic: simp
Theorem: Pretrivialization.mem_source
File: Mathlib/Topology/FiberBundle/Trivialization.lean

Proof steps:
state_before: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝¹ : TopologicalSpace B
inst✝ : TopologicalSpace F
proj : Z → B
e : Pretrivialization F proj
x : Z
⊢ x ∈ e.source ↔ proj x ∈ e.baseSet
state_after: no goals
tactic: rw [e.source_eq, mem_preimage]
Theorem: Filter.bot_coprod_bot
File: Mathlib/Order/Filter/Prod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort u_5
f : Filter α
g : Filter β
⊢ ⊥.coprod ⊥ = ⊥
state_after: no goals
tactic: simp
Theorem: absorbs_iff_eventually_cobounded_mapsTo
File: Mathlib/Topology/Bornology/Absorbs.lean

Proof steps:
state_before: G₀ : Type u_1
α : Type u_2
inst✝² : GroupWithZero G₀
inst✝¹ : Bornology G₀
inst✝ : MulAction G₀ α
s t u : Set α
S : Set (Set α)
c : G₀
hc : c ≠ 0
⊢ t ⊆ c • s ↔ MapsTo (fun x => c⁻¹ • x) t s
state_after: G₀ : Type u_1
α : Type u_2
inst✝² : GroupWithZero G₀
inst✝¹ : Bornology G₀
inst✝ : MulAction G₀ α
s t u : Set α
S : Set (Set α)
c : G₀
hc : c ≠ 0
⊢ t ⊆ (fun x => c⁻¹ • x) ⁻¹' s ↔ MapsTo (fun x => c⁻¹ • x) t s
tactic: rw [← preimage_smul_inv₀ hc]
state_before: G₀ : Type u_1
α : Type u_2
inst✝² : GroupWithZero G₀
inst✝¹ : Bornology G₀
inst✝ : MulAction G₀ α
s t u : Set α
S : Set (Set α)
c : G₀
hc : c ≠ 0
⊢ t ⊆ (fun x => c⁻¹ • x) ⁻¹' s ↔ MapsTo (fun x => c⁻¹ • x) t s
state_after: no goals
tactic: rfl
Theorem: CategoryTheory.Limits.spanExt_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 ⟶ Y
g : X ⟶ Z
f' : X' ⟶ Y'
g' : X' ⟶ Z'
wf : iX.hom ≫ f' = f ≫ iY.hom
wg : iX.hom ≫ g' = g ≫ iZ.hom
⊢ (spanExt iX iY iZ wf wg).app WalkingSpan.left = iY
state_after: no goals
tactic: dsimp [spanExt]
Theorem: ModularGroup.eq_smul_self_of_mem_fdo_mem_fdo
File: Mathlib/NumberTheory/Modular.lean

Proof steps:
state_before: g : SL(2, ℤ)
z : ℍ
hz : z ∈ 𝒟ᵒ
hg : g • z ∈ 𝒟ᵒ
⊢ z = g • z
state_after: case intro
g : SL(2, ℤ)
z : ℍ
hz : z ∈ 𝒟ᵒ
hg : g • z ∈ 𝒟ᵒ
n : ℤ
hn : ∀ (z : ℍ), g • z = T ^ n • z
⊢ z = g • z
tactic: obtain ⟨n, hn⟩ := exists_eq_T_zpow_of_c_eq_zero (c_eq_zero hz hg)
state_before: case intro
g : SL(2, ℤ)
z : ℍ
hz : z ∈ 𝒟ᵒ
hg : g • z ∈ 𝒟ᵒ
n : ℤ
hn : ∀ (z : ℍ), g • z = T ^ n • z
⊢ z = g • z
state_after: case intro
g : SL(2, ℤ)
z : ℍ
hz : z ∈ 𝒟ᵒ
n : ℤ
hg : T ^ n • z ∈ 𝒟ᵒ
hn : ∀ (z : ℍ), g • z = T ^ n • z
⊢ z = T ^ n • z
tactic: rw [hn] at hg ⊢
state_before: case intro
g : SL(2, ℤ)
z : ℍ
hz : z ∈ 𝒟ᵒ
n : ℤ
hg : T ^ n • z ∈ 𝒟ᵒ
hn : ∀ (z : ℍ), g • z = T ^ n • z
⊢ z = T ^ n • z
state_after: no goals
tactic: simp [eq_zero_of_mem_fdo_of_T_zpow_mem_fdo hz hg, one_smul]
Theorem: SetTheory.PGame.fuzzy_congr
File: Mathlib/SetTheory/Game/PGame.lean

Proof steps:
state_before: xl xr : Type u
x₁ y₁ x₂ y₂ : PGame
hx : x₁ ≈ x₂
hy : y₁ ≈ y₂
⊢ x₁ ⧏ y₁ ∧ y₁ ⧏ x₁ ↔ x₂ ⧏ y₂ ∧ y₂ ⧏ x₂
state_after: no goals
tactic: rw [lf_congr hx hy, lf_congr hy hx]
Theorem: CategoryTheory.Subgroupoid.IsNormal.conjugation_bij
File: Mathlib/CategoryTheory/Groupoid/Subgroupoid.lean

Proof steps:
state_before: C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
Sn : S.IsNormal
c d : C
p : c ⟶ d
⊢ BijOn (fun γ => Groupoid.inv p ≫ γ ≫ p) (S.arrows c c) (S.arrows d d)
state_after: case refine_1
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
Sn : S.IsNormal
c d : C
p : c ⟶ d
γ₁ : c ⟶ c
x✝¹ : γ₁ ∈ S.arrows c c
γ₂ : c ⟶ c
x✝ : γ₂ ∈ S.arrows c c
h : (fun γ => Groupoid.inv p ≫ γ ≫ p) γ₁ = (fun γ => Groupoid.inv p ≫ γ ≫ p) γ₂
⊢ γ₁ = γ₂

case refine_2
C : Type u
inst✝ : Groupoid C
S : Subgroupoid C
Sn : S.IsNormal
c d : C
p : c ⟶ d
δ : d ⟶ d
δS : δ ∈ S.arrows d d
⊢ (fun γ => Groupoid.inv p ≫ γ ≫ p) (p ≫ δ ≫ Groupoid.inv p) = δ
tactic: refine ⟨fun γ γS => Sn.conj p γS, fun γ₁ _ γ₂ _ h => ?_, fun δ δS =>
    ⟨p ≫ δ ≫ Groupoid.inv p, Sn.conj' p δS, ?_⟩⟩
Theorem: Int.pred_neg_pred
File: Mathlib/Data/Int/Defs.lean

Proof steps:
state_before: a✝ b c d m n a : ℤ
⊢ (-a.pred).pred = -a
state_after: no goals
tactic: rw [neg_pred, pred_succ]
Theorem: Convex.combo_closure_interior_subset_interior
File: Mathlib/Analysis/Convex/Topology.lean

Proof steps:
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : Module 𝕜 E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousConstSMul 𝕜 E
s : Set E
hs : Convex 𝕜 s
a b : 𝕜
ha : 0 ≤ a
hb : 0 < b
hab : a + b = 1
⊢ a • closure s + b • interior s ⊆ interior s
state_after: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : Module 𝕜 E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousConstSMul 𝕜 E
s : Set E
hs : Convex 𝕜 s
a b : 𝕜
ha : 0 ≤ a
hb : 0 < b
hab : a + b = 1
⊢ b • interior s + a • closure s ⊆ interior s
tactic: rw [add_comm]
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : Module 𝕜 E
inst✝² : TopologicalSpace E
inst✝¹ : TopologicalAddGroup E
inst✝ : ContinuousConstSMul 𝕜 E
s : Set E
hs : Convex 𝕜 s
a b : 𝕜
ha : 0 ≤ a
hb : 0 < b
hab : a + b = 1
⊢ b • interior s + a • closure s ⊆ interior s
state_after: no goals
tactic: exact hs.combo_interior_closure_subset_interior hb ha (add_comm a b ▸ hab)
Theorem: Finset.eq_of_card_le_one_of_sum_eq
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
s : Finset α
hc : s.card ≤ 1
f : α → β
b : β
h : ∏ x ∈ s, f x = b
⊢ ∀ x ∈ s, f x = b
state_after: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
s : Finset α
hc : s.card ≤ 1
f : α → β
b : β
h : ∏ x ∈ s, f x = b
x : α
hx : x ∈ s
⊢ f x = b
tactic: intro x hx
state_before: ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
s : Finset α
hc : s.card ≤ 1
f : α → β
b : β
h : ∏ x ∈ s, f x = b
x : α
hx : x ∈ s
⊢ f x = b
state_after: case pos
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
s : Finset α
hc : s.card ≤ 1
f : α → β
b : β
h : ∏ x ∈ s, f x = b
x : α
hx : x ∈ s
hc0 : s.card = 0
⊢ f x = b

case neg
ι : Type u_1
κ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
s : Finset α
hc : s.card ≤ 1
f : α → β
b : β
h : ∏ x ∈ s, f x = b
x : α
hx : x ∈ s
hc0 : ¬s.card = 0
⊢ f x = b
tactic: by_cases hc0 : s.card = 0
Theorem: Nat.cast_add
File: Mathlib/Data/Nat/Cast/Defs.lean

Proof steps:
state_before: R : Type u_1
inst✝ : AddMonoidWithOne R
m n : ℕ
⊢ ↑(m + n) = ↑m + ↑n
state_after: no goals
tactic: induction n with
  | zero => simp
  | succ n ih => rw [add_succ, cast_succ, ih, cast_succ, add_assoc]
Theorem: IsometryEquiv.funUnique_symm_apply
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 γ
inst✝¹ : Unique ι
inst✝ : Fintype ι
x hx : ι → α
⊢ edist ((Equiv.funUnique ι α).toFun x) ((Equiv.funUnique ι α).toFun hx) = edist x hx
state_after: no goals
tactic: simp [edist_pi_def, Finset.univ_unique, Finset.sup_singleton]
Theorem: Complex.GammaAux_recurrence2
File: Mathlib/Analysis/SpecialFunctions/Gamma/Basic.lean

Proof steps:
state_before: s : ℂ
n : ℕ
h1 : -s.re < ↑n
⊢ GammaAux n s = GammaAux (n + 1) s
state_after: case zero
s : ℂ
h1 : -s.re < ↑0
⊢ GammaAux 0 s = GammaAux (0 + 1) s

case succ
s : ℂ
n : ℕ
h1 : -s.re < ↑(n + 1)
⊢ GammaAux (n + 1) s = GammaAux (n + 1 + 1) s
tactic: cases' n with n n
Theorem: coe_finRotate_of_ne_last
File: Mathlib/Logic/Equiv/Fin.lean

Proof steps:
state_before: m n : ℕ
i : Fin n.succ
h : i ≠ Fin.last n
⊢ ↑((finRotate (n + 1)) i) = ↑i + 1
state_after: m n : ℕ
i : Fin n.succ
h : i ≠ Fin.last n
⊢ ↑(i + 1) = ↑i + 1
tactic: rw [finRotate_succ_apply]
state_before: m n : ℕ
i : Fin n.succ
h : i ≠ Fin.last n
⊢ ↑(i + 1) = ↑i + 1
state_after: m n : ℕ
i : Fin n.succ
h : i ≠ Fin.last n
this : ↑i < n
⊢ ↑(i + 1) = ↑i + 1
tactic: have : (i : ℕ) < n := Fin.val_lt_last h
state_before: m n : ℕ
i : Fin n.succ
h : i ≠ Fin.last n
this : ↑i < n
⊢ ↑(i + 1) = ↑i + 1
state_after: no goals
tactic: exact Fin.val_add_one_of_lt this
Theorem: WittVector.mapFun.add
File: Mathlib/RingTheory/WittVector/Basic.lean

Proof steps:
state_before: p : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
f : R →+* S
x y : 𝕎 R
⊢ mapFun (⇑f) (x + y) = mapFun (⇑f) x + mapFun (⇑f) y
state_after: no goals
tactic: map_fun_tac
Theorem: PowerSeries.derivativeFun_add
File: Mathlib/RingTheory/PowerSeries/Derivative.lean

Proof steps:
state_before: R : Type u_1
inst✝ : CommSemiring R
f g : R⟦X⟧
⊢ (f + g).derivativeFun = f.derivativeFun + g.derivativeFun
state_after: case h
R : Type u_1
inst✝ : CommSemiring R
f g : R⟦X⟧
n✝ : ℕ
⊢ (coeff R n✝) (f + g).derivativeFun = (coeff R n✝) (f.derivativeFun + g.derivativeFun)
tactic: ext
state_before: case h
R : Type u_1
inst✝ : CommSemiring R
f g : R⟦X⟧
n✝ : ℕ
⊢ (coeff R n✝) (f + g).derivativeFun = (coeff R n✝) (f.derivativeFun + g.derivativeFun)
state_after: no goals
tactic: rw [coeff_derivativeFun, map_add, map_add, coeff_derivativeFun,
    coeff_derivativeFun, add_mul]
Theorem: Part.mem_ωSup
File: Mathlib/Order/OmegaCompletePartialOrder.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type u_1
x : α
c : Chain (Part α)
⊢ x ∈ ωSup c ↔ some x ∈ c
state_after: α : Type u
β : Type v
γ : Type u_1
x : α
c : Chain (Part α)
⊢ (x ∈ if h : ∃ a, some a ∈ c then some (Classical.choose h) else none) ↔ some x ∈ c
tactic: simp only [ωSup, Part.ωSup]
state_before: α : Type u
β : Type v
γ : Type u_1
x : α
c : Chain (Part α)
⊢ (x ∈ if h : ∃ a, some a ∈ c then some (Classical.choose h) else none) ↔ some x ∈ c
state_after: case mp
α : Type u
β : Type v
γ : Type u_1
x : α
c : Chain (Part α)
⊢ (x ∈ if h : ∃ a, some a ∈ c then some (Classical.choose h) else none) → some x ∈ c

case mpr
α : Type u
β : Type v
γ : Type u_1
x : α
c : Chain (Part α)
⊢ some x ∈ c → x ∈ if h : ∃ a, some a ∈ c then some (Classical.choose h) else none
tactic: constructor
Theorem: CategoryTheory.ShiftedHom.comp_mk₀
File: Mathlib/CategoryTheory/Shift/ShiftedHom.lean

Proof steps:
state_before: C : Type u_1
inst✝⁶ : Category.{?u.21309, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.21316, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.21323, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
a : M
f : ShiftedHom X Y a
m₀ : M
hm₀ : m₀ = 0
g : Y ⟶ Z
⊢ m₀ + a = a
state_after: no goals
tactic: rw [hm₀, zero_add]
state_before: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.21316, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.21323, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
a : M
f : ShiftedHom X Y a
m₀ : M
hm₀ : m₀ = 0
g : Y ⟶ Z
⊢ f.comp (mk₀ m₀ hm₀ g) ⋯ = f ≫ (shiftFunctor C a).map g
state_after: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.21316, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.21323, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
a : M
f : ShiftedHom X Y a
g : Y ⟶ Z
⊢ f.comp (mk₀ 0 ⋯ g) ⋯ = f ≫ (shiftFunctor C a).map g
tactic: subst hm₀
state_before: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.21316, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.21323, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
a : M
f : ShiftedHom X Y a
g : Y ⟶ Z
⊢ f.comp (mk₀ 0 ⋯ g) ⋯ = f ≫ (shiftFunctor C a).map g
state_after: no goals
tactic: simp only [comp, shiftFunctorAdd'_zero_add_inv_app, mk₀, shiftFunctorZero',
    eqToIso_refl, Iso.refl_trans, ← Functor.map_comp, assoc, Iso.inv_hom_id_app,
    Functor.id_obj, comp_id]
Theorem: Finset.union_empty
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t t₁ t₂ u v : Finset α
a b : α
s : Finset α
x : α
⊢ x ∈ s ∨ x ∈ ∅ ↔ x ∈ s
state_after: no goals
tactic: simp
Theorem: SemiNormedGrp₁.isZero_of_subsingleton
File: Mathlib/Analysis/Normed/Group/SemiNormedGrp.lean

Proof steps:
state_before: V : SemiNormedGrp₁
inst✝ : Subsingleton ↑V
⊢ Limits.IsZero V
state_after: case refine_1
V : SemiNormedGrp₁
inst✝ : Subsingleton ↑V
X : SemiNormedGrp₁
f : V ⟶ X
⊢ f = default

case refine_2
V : SemiNormedGrp₁
inst✝ : Subsingleton ↑V
X : SemiNormedGrp₁
f : X ⟶ V
⊢ f = default
tactic: refine ⟨fun X => ⟨⟨⟨0⟩, fun f => ?_⟩⟩, fun X => ⟨⟨⟨0⟩, fun f => ?_⟩⟩⟩
Theorem: Rat.normalize_num_den'
File: .lake/packages/batteries/Batteries/Data/Rat/Lemmas.lean

Proof steps:
state_before: num : Int
den : Nat
nz : den ≠ 0
⊢ ∃ d, d ≠ 0 ∧ num = (normalize num den nz).num * ↑d ∧ den = (normalize num den nz).den * d
state_after: num : Int
den : Nat
nz : den ≠ 0
⊢ num = (normalize num den nz).num * ↑(num.natAbs.gcd den) ∧ den = (normalize num den nz).den * num.natAbs.gcd den
tactic: refine ⟨num.natAbs.gcd den, Nat.gcd_ne_zero_right nz, ?_⟩
state_before: num : Int
den : Nat
nz : den ≠ 0
⊢ num = (normalize num den nz).num * ↑(num.natAbs.gcd den) ∧ den = (normalize num den nz).den * num.natAbs.gcd den
state_after: no goals
tactic: simp [normalize_eq, Int.ediv_mul_cancel (Int.ofNat_dvd_left.2 <| Nat.gcd_dvd_left ..),
    Nat.div_mul_cancel (Nat.gcd_dvd_right ..)]
Theorem: Class.sInter_empty
File: Mathlib/SetTheory/ZFC/Basic.lean

Proof steps:
state_before: ⊢ ⋂₀ ∅ = univ
state_after: no goals
tactic: rw [sInter, classToCong_empty, Set.sInter_empty, univ]