ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Matrix.det_updateColumn_sum
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

Proof steps:
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
c : n → R
⊢ (A.updateColumn j fun k => ∑ i : n, c i • A k i).det = c j • A.det
state_after: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
c : n → R
⊢ (Aᵀ.updateRow j fun k => ∑ i : n, c i • A k i).det = c j • Aᵀ.det
tactic: rw [← det_transpose, ← updateRow_transpose, ← det_transpose A]
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
c : n → R
⊢ (Aᵀ.updateRow j fun k => ∑ i : n, c i • A k i).det = c j • Aᵀ.det
state_after: case h.e'_2.h.e'_6.h.e'_7.h
m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
c : n → R
x✝ : n
⊢ ∑ i : n, c i • A x✝ i = (∑ k : n, c k • Aᵀ k) x✝
tactic: convert det_updateRow_sum A.transpose j c
state_before: case h.e'_2.h.e'_6.h.e'_7.h
m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix n n R
j : n
c : n → R
x✝ : n
⊢ ∑ i : n, c i • A x✝ i = (∑ k : n, c k • Aᵀ k) x✝
state_after: no goals
tactic: simp only [smul_eq_mul, Finset.sum_apply, Pi.smul_apply, transpose_apply]
Theorem: FreeAddGroup.Red.Step.negRev
File: Mathlib/GroupTheory/FreeGroup/Basic.lean

Proof steps:
state_before: α : Type u
L L₁✝ L₂✝ L₃ L₄ L₁ L₂ : List (α × Bool)
h : Step L₁ L₂
⊢ Step (FreeGroup.invRev L₁) (FreeGroup.invRev L₂)
state_after: case not
α : Type u
L L₁ L₂ L₃ L₄ a b : List (α × Bool)
x : α
y : Bool
⊢ Step (FreeGroup.invRev (a ++ (x, y) :: (x, !y) :: b)) (FreeGroup.invRev (a ++ b))
tactic: cases' h with a b x y
state_before: case not
α : Type u
L L₁ L₂ L₃ L₄ a b : List (α × Bool)
x : α
y : Bool
⊢ Step (FreeGroup.invRev (a ++ (x, y) :: (x, !y) :: b)) (FreeGroup.invRev (a ++ b))
state_after: no goals
tactic: simp [FreeGroup.invRev]
Theorem: SetTheory.PGame.moveLeft_neg_symm'
File: Mathlib/SetTheory/Game/PGame.lean

Proof steps:
state_before: xl xr : Type u
x : PGame
i : x.LeftMoves
⊢ x.moveLeft i = -(-x).moveRight (toRightMovesNeg i)
state_after: no goals
tactic: simp
Theorem: ENNReal.eq_inv_of_mul_eq_one_left
File: Mathlib/Data/ENNReal/Inv.lean

Proof steps:
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
h : a * b = 1
⊢ a = b⁻¹
state_after: a b c d : ℝ≥0∞
r p q : ℝ≥0
h : a * b = 1
⊢ b ≠ ⊤
tactic: rw [← mul_one a, ← ENNReal.mul_inv_cancel (right_ne_zero_of_mul_eq_one h), ← mul_assoc, h,
    one_mul]
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
h : a * b = 1
⊢ b ≠ ⊤
state_after: a c d : ℝ≥0∞
r p q : ℝ≥0
h : a * ⊤ = 1
⊢ False
tactic: rintro rfl
state_before: a c d : ℝ≥0∞
r p q : ℝ≥0
h : a * ⊤ = 1
⊢ False
state_after: no goals
tactic: simp [left_ne_zero_of_mul_eq_one h] at h
Theorem: Surreal.Multiplication.ih1
File: Mathlib/SetTheory/Surreal/Multiplication.lean

Proof steps:
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
⊢ IH1 x y
state_after: case inl
x x₁✝ x₂✝ x₃ x' y₁ y₂ y₃ y'✝ x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y') → P124 a
⊢ ArgsRel (Args.P24 x₁ x₂ y') (Args.P1 x y')

case inr
x x₁✝ x₂✝ x₃ x' y y₁ y₂ y₃ y'✝ : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
hy : y'.IsOption y
⊢ ArgsRel (Args.P24 x₁ x₂ y') (Args.P1 x y)
tactic: rintro x₁ x₂ y' h₁ h₂ (rfl|hy) <;> apply ih (Args.P24 _ _ _)
state_before: case inl
x x₁✝ x₂✝ x₃ x' y₁ y₂ y₃ y'✝ x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y') → P124 a
⊢ ArgsRel (Args.P24 x₁ x₂ y') (Args.P1 x y')

case inr
x x₁✝ x₂✝ x₃ x' y y₁ y₂ y₃ y'✝ : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
hy : y'.IsOption y
⊢ ArgsRel (Args.P24 x₁ x₂ y') (Args.P1 x y)
state_after: case inl
x x₁✝ x₂✝ x₃ x' y₁ y₂ y₃ y'✝ x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y') → P124 a
⊢ ArgsRel (Args.P24 x₁ x₂ y') (Args.P1 x y')

case inr
x x₁✝ x₂✝ x₃ x' y y₁ y₂ y₃ y'✝ : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
hy : y'.IsOption y
⊢ TransGen (CutExpand IsOption) (Args.P24 x₁ x₂ y').toMultiset {x, y'}
tactic: on_goal 2 => refine TransGen.tail ?_ (cutExpand_pair_right hy)
state_before: case inl
x x₁✝ x₂✝ x₃ x' y₁ y₂ y₃ y'✝ x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y') → P124 a
⊢ ArgsRel (Args.P24 x₁ x₂ y') (Args.P1 x y')

case inr
x x₁✝ x₂✝ x₃ x' y y₁ y₂ y₃ y'✝ : PGame
ih : ∀ (a : Args), ArgsRel a (Args.P1 x y) → P124 a
x₁ x₂ y' : PGame
h₁ : x₁.IsOption x
h₂ : x₂.IsOption x
hy : y'.IsOption y
⊢ TransGen (CutExpand IsOption) (Args.P24 x₁ x₂ y').toMultiset {x, y'}
state_after: no goals
tactic: all_goals exact TransGen.single (cutExpand_double_left h₁ h₂)
Theorem: ContinuousMap.exists_extension_forall_mem
File: Mathlib/Topology/TietzeExtension.lean

Proof steps:
state_before: X₁ : Type u₁
inst✝⁵ : TopologicalSpace X₁
X : Type u
inst✝⁴ : TopologicalSpace X
inst✝³ : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y✝ : Type v
inst✝² : TopologicalSpace Y✝
inst✝¹ : TietzeExtension Y✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: case intro
X₁ : Type u₁
inst✝⁵ : TopologicalSpace X₁
X : Type u
inst✝⁴ : TopologicalSpace X
inst✝³ : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y✝ : Type v
inst✝² : TopologicalSpace Y✝
inst✝¹ : TietzeExtension Y✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ g.comp { toFun := e, continuous_toFun := ⋯ } = f
tactic: obtain ⟨g, hg⟩ := mk _ (map_continuous f |>.codRestrict hf) |>.exists_extension he
state_before: case intro
X₁ : Type u₁
inst✝⁵ : TopologicalSpace X₁
X : Type u
inst✝⁴ : TopologicalSpace X
inst✝³ : NormalSpace X
s : Set X
hs : IsClosed s
e : X₁ → X
he : ClosedEmbedding e
Y✝ : Type v
inst✝² : TopologicalSpace Y✝
inst✝¹ : TietzeExtension Y✝
Y : Type v
inst✝ : TopologicalSpace Y
f : C(X₁, Y)
t : Set Y
hf : ∀ (x : X₁), f x ∈ t
ht : TietzeExtension ↑t
g : C(X, ↑t)
hg : g.comp { toFun := e, continuous_toFun := ⋯ } = { toFun := Set.codRestrict (⇑f) t hf, continuous_toFun := ⋯ }
⊢ ∃ g, (∀ (x : X), g x ∈ t) ∧ g.comp { toFun := e, continuous_toFun := ⋯ } = f
state_after: no goals
tactic: exact ⟨comp ⟨Subtype.val, by continuity⟩ g, by simp, by ext x; congrm(($(hg) x : Y))⟩
Theorem: Multiset.cons_union_distrib
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s✝ t✝ u : Multiset α
a✝ b a : α
s t : Multiset α
⊢ a ::ₘ (s ∪ t) = a ::ₘ s ∪ a ::ₘ t
state_after: no goals
tactic: simpa using add_union_distrib (a ::ₘ 0) s t
Theorem: isClosed_imp
File: Mathlib/Topology/Basic.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p✝ p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
p q : X → Prop
hp : IsOpen {x | p x}
hq : IsClosed {x | q x}
⊢ IsClosed {x | p x → q x}
state_after: no goals
tactic: simpa only [imp_iff_not_or] using hp.isClosed_compl.union hq
Theorem: LSeries.abscissaOfAbsConv_le_of_isBigO_rpow
File: Mathlib/NumberTheory/LSeries/Convergence.lean

Proof steps:
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ x
⊢ abscissaOfAbsConv f ≤ ↑x + 1
state_after: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
⊢ abscissaOfAbsConv f ≤ ↑x + 1
tactic: rw [show x = x + 1 - 1 by ring] at h
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
⊢ abscissaOfAbsConv f ≤ ↑x + 1
state_after: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
⊢ False
tactic: by_contra! H
state_before: f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
⊢ False
state_after: case intro.intro
f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
y : ℝ
hy₁ : ↑x + 1 < ↑y
hy₂ : ↑y < abscissaOfAbsConv f
⊢ False
tactic: obtain ⟨y, hy₁, hy₂⟩ := EReal.exists_between_coe_real H
state_before: case intro.intro
f : ℕ → ℂ
x : ℝ
h : f =O[atTop] fun n => ↑n ^ (x + 1 - 1)
H : ↑x + 1 < abscissaOfAbsConv f
y : ℝ
hy₁ : ↑x + 1 < ↑y
hy₂ : ↑y < abscissaOfAbsConv f
⊢ False
state_after: no goals
tactic: exact (LSeriesSummable_of_isBigO_rpow (s := y) (EReal.coe_lt_coe_iff.mp hy₁) h
    |>.abscissaOfAbsConv_le.trans_lt hy₂).false
Theorem: UpperSet.mem_iSup₂_iff
File: Mathlib/Order/UpperLower/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : LE α
S : Set (UpperSet α)
s t : UpperSet α
a : α
f : (i : ι) → κ i → UpperSet α
⊢ a ∈ ⨆ i, ⨆ j, f i j ↔ ∀ (i : ι) (j : κ i), a ∈ f i j
state_after: no goals
tactic: simp_rw [mem_iSup_iff]
Theorem: List.pairwise_bind
File: .lake/packages/batteries/Batteries/Data/List/Pairwise.lean

Proof steps:
state_before: β : Type u_1
α : Type u_2
R : β → β → Prop
l : List α
f : α → List β
⊢ Pairwise R (l.bind f) ↔
    (∀ (a : α), a ∈ l → Pairwise R (f a)) ∧ Pairwise (fun a₁ a₂ => ∀ (x : β), x ∈ f a₁ → ∀ (y : β), y ∈ f a₂ → R x y) l
state_after: no goals
tactic: simp [List.bind, pairwise_join, pairwise_map]
Theorem: CategoryTheory.MorphismProperty.StableUnderBaseChange.respectsIso
File: Mathlib/CategoryTheory/MorphismProperty/Limits.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
P : MorphismProperty C
hP : P.StableUnderBaseChange
⊢ P.RespectsIso
state_after: case hP
C : Type u
inst✝ : Category.{v, u} C
P : MorphismProperty C
hP : P.StableUnderBaseChange
⊢ ∀ (f g : Arrow C), (f ≅ g) → P f.hom → P g.hom
tactic: apply RespectsIso.of_respects_arrow_iso
state_before: case hP
C : Type u
inst✝ : Category.{v, u} C
P : MorphismProperty C
hP : P.StableUnderBaseChange
⊢ ∀ (f g : Arrow C), (f ≅ g) → P f.hom → P g.hom
state_after: case hP
C : Type u
inst✝ : Category.{v, u} C
P : MorphismProperty C
hP : P.StableUnderBaseChange
f g : Arrow C
e : f ≅ g
⊢ P f.hom → P g.hom
tactic: intro f g e
state_before: case hP
C : Type u
inst✝ : Category.{v, u} C
P : MorphismProperty C
hP : P.StableUnderBaseChange
f g : Arrow C
e : f ≅ g
⊢ P f.hom → P g.hom
state_after: no goals
tactic: exact hP (IsPullback.of_horiz_isIso (CommSq.mk e.inv.w))
Theorem: SimpleGraph.Walk.getVert_tail
File: Mathlib/Combinatorics/SimpleGraph/Walk.lean

Proof steps:
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝¹ v✝¹ w x y u v : V
n : ℕ
p : G.Walk u v
hnp : ¬p.Nil
u✝ v✝ w✝ : V
x✝¹ : G.Adj u✝ v✝
x✝ : G.Walk v✝ w✝
⊢ ((cons x✝¹ x✝).tail ⋯).getVert n = (cons x✝¹ x✝).getVert (n + 1)
state_after: no goals
tactic: simp only [tail_cons, cons_getVert_succ]
Theorem: CategoryTheory.biproduct_ι_comp_rightDistributor_inv
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

Proof steps:
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
f : J → C
X : C
j : J
⊢ biproduct.ι (fun j => f j ⊗ X) j ≫ (rightDistributor f X).inv = biproduct.ι f j ▷ X
state_after: no goals
tactic: simp [rightDistributor_inv, Preadditive.comp_sum, ← id_tensor_comp, biproduct.ι_π_assoc,
    dite_comp]
Theorem: ContinuousMap.ker_evalStarAlgHom_eq_closure_adjoin_id
File: Mathlib/Topology/ContinuousFunction/StoneWeierstrass.lean

Proof steps:
state_before: X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ ↑(RingHom.ker (evalStarAlgHom 𝕜 𝕜 ⟨0, h0⟩)) = closure ↑(adjoin 𝕜 {restrict s (ContinuousMap.id 𝕜)})
state_after: X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ ↑(RingHom.ker (evalStarAlgHom 𝕜 𝕜 ⟨0, h0⟩)) =
    closure ↑(StarAlgebra.adjoin 𝕜 {restrict s (ContinuousMap.id 𝕜)}) ∩ ↑(RingHom.ker (evalStarAlgHom 𝕜 𝕜 ⟨0, h0⟩))
tactic: rw [← ker_evalStarAlgHom_inter_adjoin_id s h0,
    AlgHom.closure_ker_inter (φ := evalStarAlgHom 𝕜 𝕜 (X := s) ⟨0, h0⟩) (continuous_eval_const _) _]
state_before: X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ ↑(RingHom.ker (evalStarAlgHom 𝕜 𝕜 ⟨0, h0⟩)) =
    closure ↑(StarAlgebra.adjoin 𝕜 {restrict s (ContinuousMap.id 𝕜)}) ∩ ↑(RingHom.ker (evalStarAlgHom 𝕜 𝕜 ⟨0, h0⟩))
state_after: case h.e'_3.h.e'_3
X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ closure ↑(StarAlgebra.adjoin 𝕜 {restrict s (ContinuousMap.id 𝕜)}) = Set.univ
tactic: convert (Set.univ_inter _).symm
state_before: case h.e'_3.h.e'_3
X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ closure ↑(StarAlgebra.adjoin 𝕜 {restrict s (ContinuousMap.id 𝕜)}) = Set.univ
state_after: case h.e'_3.h.e'_3
X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ closure ↑(polynomialFunctions s).starClosure = Set.univ
tactic: rw [← Polynomial.toContinuousMapOn_X_eq_restrict_id, ← Polynomial.toContinuousMapOnAlgHom_apply,
    ← polynomialFunctions.starClosure_eq_adjoin_X s]
state_before: case h.e'_3.h.e'_3
X : Type u_1
inst✝² : TopologicalSpace X
𝕜 : Type u_2
inst✝¹ : RCLike 𝕜
s : Set 𝕜
h0 : 0 ∈ s
inst✝ : CompactSpace ↑s
⊢ closure ↑(polynomialFunctions s).starClosure = Set.univ
state_after: no goals
tactic: congrm(($(polynomialFunctions.starClosure_topologicalClosure s) : Set C(s, 𝕜)))
Theorem: CategoryTheory.Limits.HasColimit.isoOfEquivalence_hom_π
File: Mathlib/CategoryTheory/Limits/HasLimits.lean

Proof steps:
state_before: J : Type u₁
inst✝⁴ : Category.{v₁, u₁} J
K : Type u₂
inst✝³ : Category.{v₂, u₂} K
C : Type u
inst✝² : Category.{v, u} C
F✝ F : J ⥤ C
inst✝¹ : HasColimit F
G : K ⥤ C
inst✝ : HasColimit G
e : J ≌ K
w : e.functor ⋙ G ≅ F
j : J
⊢ colimit.ι F j ≫ (isoOfEquivalence e w).hom =
    F.map (e.unit.app j) ≫
      w.inv.app ((e.functor ⋙ e.inverse).obj j) ≫ colimit.ι G (e.functor.obj ((e.functor ⋙ e.inverse).obj j))
state_after: no goals
tactic: simp [HasColimit.isoOfEquivalence, IsColimit.coconePointsIsoOfEquivalence_inv]
Theorem: SetTheory.PGame.moveLeft_neg_symm
File: Mathlib/SetTheory/Game/PGame.lean

Proof steps:
state_before: xl xr : Type u
x : PGame
i : (-x).RightMoves
⊢ x.moveLeft (toRightMovesNeg.symm i) = -(-x).moveRight i
state_after: no goals
tactic: simp
Theorem: Set.Finite.union
File: Mathlib/Data/Set/Finite.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
hs : s.Finite
ht : t.Finite
⊢ (s ∪ t).Finite
state_after: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
hs : Finite ↑s
ht : Finite ↑t
⊢ (s ∪ t).Finite
tactic: rw [Set.Finite] at hs ht
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s t : Set α
hs : Finite ↑s
ht : Finite ↑t
⊢ (s ∪ t).Finite
state_after: no goals
tactic: apply toFinite
Theorem: mul_sub_one
File: Mathlib/Algebra/Ring/Defs.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝ : NonAssocRing α
a b : α
⊢ a * (b - 1) = a * b - a
state_after: no goals
tactic: rw [mul_sub, mul_one]
Theorem: HasDerivAtFilter.scomp_of_eq
File: Mathlib/Analysis/Calculus/Deriv/Comp.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hg : HasDerivAtFilter g₁ g₁' y L'
hh : HasDerivAtFilter h h' x L
hy : y = h x
hL : Tendsto h L L'
⊢ HasDerivAtFilter (g₁ ∘ h) (h' • g₁') x L
state_after: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hg : HasDerivAtFilter g₁ g₁' (h x) L'
hh : HasDerivAtFilter h h' x L
hy : y = h x
hL : Tendsto h L L'
⊢ HasDerivAtFilter (g₁ ∘ h) (h' • g₁') x L
tactic: rw [hy] at hg
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f f₀ f₁ g : 𝕜 → F
f' f₀' f₁' g' : F
x : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
hg : HasDerivAtFilter g₁ g₁' (h x) L'
hh : HasDerivAtFilter h h' x L
hy : y = h x
hL : Tendsto h L L'
⊢ HasDerivAtFilter (g₁ ∘ h) (h' • g₁') x L
state_after: no goals
tactic: exact hg.scomp x hh hL
Theorem: OreLocalization.mul_div_one
File: Mathlib/RingTheory/OreLocalization/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝² : Monoid R
S : Submonoid R
inst✝¹ : OreSet S
X : Type ?u.114300
inst✝ : MulAction R X
p r : R
s : ↥S
⊢ p /ₒ s * (r /ₒ 1) = p * r /ₒ s
state_after: no goals
tactic: simp [oreDiv_mul_char p r s 1 p 1 (by simp)]
Theorem: CategoryTheory.ShortComplex.quasiIso_iff_isIso_liftCycles
File: Mathlib/Algebra/Homology/ShortComplex/QuasiIso.lean

Proof steps:
state_before: C : Type ?u.28028
inst✝⁵ : Category.{?u.28032, ?u.28028} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
hf₁ : S₁.f = 0
hg₁ : S₁.g = 0
hf₂ : S₂.f = 0
⊢ φ.τ₂ ≫ S₂.g = 0
state_after: no goals
tactic: rw [φ.comm₂₃, hg₁, zero_comp]
state_before: C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
hf₁ : S₁.f = 0
hg₁ : S₁.g = 0
hf₂ : S₂.f = 0
⊢ QuasiIso φ ↔ IsIso (S₂.liftCycles φ.τ₂ ⋯)
state_after: C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
hf₁ : S₁.f = 0
hg₁ : S₁.g = 0
hf₂ : S₂.f = 0
H : LeftHomologyMapData φ (LeftHomologyData.ofZeros S₁ hf₁ hg₁)
  (LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ (KernelFork.ofι S₂.iCycles ⋯) S₂.cyclesIsKernel) :=
  { φK := S₂.liftCycles φ.τ₂ ⋯, φH := S₂.liftCycles φ.τ₂ ⋯, commi := ⋯, commf' := ⋯, commπ := ⋯ }
⊢ QuasiIso φ ↔ IsIso (S₂.liftCycles φ.τ₂ ⋯)
tactic: let H : LeftHomologyMapData φ (LeftHomologyData.ofZeros S₁ hf₁ hg₁)
      (LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ _ S₂.cyclesIsKernel) :=
    { φK := S₂.liftCycles φ.τ₂ (by rw [φ.comm₂₃, hg₁, zero_comp])
      φH := S₂.liftCycles φ.τ₂ (by rw [φ.comm₂₃, hg₁, zero_comp]) }
state_before: C : Type u_2
inst✝⁵ : Category.{u_1, u_2} C
inst✝⁴ : HasZeroMorphisms C
S₁ S₂ S₃ S₄ : ShortComplex C
inst✝³ : S₁.HasHomology
inst✝² : S₂.HasHomology
inst✝¹ : S₃.HasHomology
inst✝ : S₄.HasHomology
φ : S₁ ⟶ S₂
hf₁ : S₁.f = 0
hg₁ : S₁.g = 0
hf₂ : S₂.f = 0
H : LeftHomologyMapData φ (LeftHomologyData.ofZeros S₁ hf₁ hg₁)
  (LeftHomologyData.ofIsLimitKernelFork S₂ hf₂ (KernelFork.ofι S₂.iCycles ⋯) S₂.cyclesIsKernel) :=
  { φK := S₂.liftCycles φ.τ₂ ⋯, φH := S₂.liftCycles φ.τ₂ ⋯, commi := ⋯, commf' := ⋯, commπ := ⋯ }
⊢ QuasiIso φ ↔ IsIso (S₂.liftCycles φ.τ₂ ⋯)
state_after: no goals
tactic: exact H.quasiIso_iff
Theorem: Pell.IsFundamental.subsingleton
File: Mathlib/NumberTheory/Pell.lean

Proof steps:
state_before: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
⊢ a = b
state_after: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
hx : a.x = b.x
⊢ a = b
tactic: have hx := le_antisymm (ha.2.2 hb.1) (hb.2.2 ha.1)
state_before: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
hx : a.x = b.x
⊢ a = b
state_after: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
hx : a.x = b.x
⊢ a.y = b.y
tactic: refine Solution₁.ext hx ?_
state_before: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
hx : a.x = b.x
⊢ a.y = b.y
state_after: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
hx : a.x = b.x
this : d * a.y ^ 2 = d * b.y ^ 2
⊢ a.y = b.y
tactic: have : d * a.y ^ 2 = d * b.y ^ 2 := by rw [a.prop_y, b.prop_y, hx]
state_before: d : ℤ
a b : Solution₁ d
ha : IsFundamental a
hb : IsFundamental b
hx : a.x = b.x
this : d * a.y ^ 2 = d * b.y ^ 2
⊢ a.y = b.y
state_after: no goals
tactic: exact (sq_eq_sq ha.2.1.le hb.2.1.le).mp (Int.eq_of_mul_eq_mul_left ha.d_pos.ne' this)
Theorem: Real.sqrt_inv
File: Mathlib/Data/Real/Sqrt.lean

Proof steps:
state_before: x✝ y x : ℝ
⊢ √x⁻¹ = (√x)⁻¹
state_after: no goals
tactic: rw [Real.sqrt, Real.toNNReal_inv, NNReal.sqrt_inv, NNReal.coe_inv, Real.sqrt]
Theorem: Nat.modEq_eleven_digits_sum
File: Mathlib/Data/Nat/Digits.lean

Proof steps:
state_before: n✝ n : ℕ
⊢ ↑n ≡ (List.map (fun n => ↑n) (digits 10 n)).alternatingSum [ZMOD 11]
state_after: n✝ n : ℕ
t : ↑n ≡ ofDigits (-1) (digits 10 n) [ZMOD ↑11]
⊢ ↑n ≡ (List.map (fun n => ↑n) (digits 10 n)).alternatingSum [ZMOD 11]
tactic: have t := zmodeq_ofDigits_digits 11 10 (-1 : ℤ) (by unfold Int.ModEq; rfl) n
state_before: n✝ n : ℕ
t : ↑n ≡ ofDigits (-1) (digits 10 n) [ZMOD ↑11]
⊢ ↑n ≡ (List.map (fun n => ↑n) (digits 10 n)).alternatingSum [ZMOD 11]
state_after: no goals
tactic: rwa [ofDigits_neg_one] at t