ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Matrix.map_updateColumn
File: Mathlib/Data/Matrix/RowCol.lean

Proof steps:
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
⊢ (M.updateColumn j c).map f = (M.map f).updateColumn j (f ∘ c)
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ (M.updateColumn j c).map f i✝ j✝ = (M.map f).updateColumn j (f ∘ c) i✝ j✝
tactic: ext
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ (M.updateColumn j c).map f i✝ j✝ = (M.map f).updateColumn j (f ∘ c) i✝ j✝
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ f (if j✝ = j then c i✝ else M i✝ j✝) = if j✝ = j then (f ∘ c) i✝ else f (M i✝ j✝)
tactic: rw [updateColumn_apply, map_apply, map_apply, updateColumn_apply]
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i : m
j : n
b : n → α
c : m → α
inst✝ : DecidableEq n
f : α → β
i✝ : m
j✝ : n
⊢ f (if j✝ = j then c i✝ else M i✝ j✝) = if j✝ = j then (f ∘ c) i✝ else f (M i✝ j✝)
state_after: no goals
tactic: exact apply_ite f _ _ _
Theorem: _private.Mathlib.Order.Interval.Set.Image.0.Set.image_subtype_val_Ixx_Ixi
File: Mathlib/Order/Interval/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
f : α → β
p q r : α → α → Prop
a b : α
c : { x // p a x ∧ q x b }
h : ∀ {x : α}, r (↑c) x → p a x
⊢ {x | p a x ∧ q x b} ∩ {y | r (↑c) y} = {y | r (↑c) y ∧ q y b}
state_after: case h
α : Type u_1
β : Type u_2
f : α → β
p q r : α → α → Prop
a b : α
c : { x // p a x ∧ q x b }
h : ∀ {x : α}, r (↑c) x → p a x
x✝ : α
⊢ x✝ ∈ {x | p a x ∧ q x b} ∩ {y | r (↑c) y} ↔ x✝ ∈ {y | r (↑c) y ∧ q y b}
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
f : α → β
p q r : α → α → Prop
a b : α
c : { x // p a x ∧ q x b }
h : ∀ {x : α}, r (↑c) x → p a x
x✝ : α
⊢ x✝ ∈ {x | p a x ∧ q x b} ∩ {y | r (↑c) y} ↔ x✝ ∈ {y | r (↑c) y ∧ q y b}
state_after: no goals
tactic: simp (config := { contextual := true }) [@and_comm (r _ _), h]
Theorem: Polynomial.degree_pow_le
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

Proof steps:
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
⊢ (p ^ 0).degree ≤ 0 • p.degree
state_after: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
⊢ degree 1 ≤ 0
tactic: rw [pow_zero, zero_nsmul]
state_before: R : Type u
S : Type v
a b c d : R
n m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
⊢ degree 1 ≤ 0
state_after: no goals
tactic: exact degree_one_le
state_before: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (p ^ (n + 1)).degree ≤ (p ^ n).degree + p.degree
state_after: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (p ^ n * p).degree ≤ (p ^ n).degree + p.degree
tactic: rw [pow_succ]
state_before: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (p ^ n * p).degree ≤ (p ^ n).degree + p.degree
state_after: no goals
tactic: exact degree_mul_le _ _
state_before: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (p ^ n).degree + p.degree ≤ (n + 1) • p.degree
state_after: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (p ^ n).degree + p.degree ≤ n • p.degree + p.degree
tactic: rw [succ_nsmul]
state_before: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (p ^ n).degree + p.degree ≤ n • p.degree + p.degree
state_after: no goals
tactic: exact add_le_add_right (degree_pow_le _ _) _
Theorem: ENNReal.iInter_Ici_coe_nat
File: Mathlib/Data/ENNReal/Basic.lean

Proof steps:
state_before: α : Type u_1
a b c d : ℝ≥0∞
r p q : ℝ≥0
⊢ ⋂ n, Ici ↑n = {⊤}
state_after: no goals
tactic: simp only [← compl_Iio, ← compl_iUnion, iUnion_Iio_coe_nat, compl_compl]
Theorem: WellFounded.rank_eq
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
state_before: α : Type u
r : α → α → Prop
a b : α
hwf : WellFounded r
⊢ hwf.rank a = sup fun b => succ (hwf.rank ↑b)
state_after: α : Type u
r : α → α → Prop
a b : α
hwf : WellFounded r
⊢ (sup fun b => succ ⋯.rank) = sup fun b => succ (hwf.rank ↑b)
tactic: rw [rank, Acc.rank_eq]
state_before: α : Type u
r : α → α → Prop
a b : α
hwf : WellFounded r
⊢ (sup fun b => succ ⋯.rank) = sup fun b => succ (hwf.rank ↑b)
state_after: no goals
tactic: rfl
Theorem: Nat.isCoprime_iff_coprime
File: Mathlib/RingTheory/Coprime/Lemmas.lean

Proof steps:
state_before: R : Type u
I : Type v
inst✝ : CommSemiring R
x y z : R
s : I → R
t : Finset I
m n : ℕ
⊢ IsCoprime ↑m ↑n ↔ m.Coprime n
state_after: no goals
tactic: rw [Int.isCoprime_iff_gcd_eq_one, Int.gcd_natCast_natCast]
Theorem: OrderEmbedding.preimage_Ioc
File: Mathlib/Order/Interval/Set/OrderEmbedding.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ↪o β
x y : α
⊢ ⇑e ⁻¹' Ioc (e x) (e y) = Ioc x y
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ↪o β
x y x✝ : α
⊢ x✝ ∈ ⇑e ⁻¹' Ioc (e x) (e y) ↔ x✝ ∈ Ioc x y
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ↪o β
x y x✝ : α
⊢ x✝ ∈ ⇑e ⁻¹' Ioc (e x) (e y) ↔ x✝ ∈ Ioc x y
state_after: no goals
tactic: simp
Theorem: Monotone.map_max
File: Mathlib/Order/MinMax.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a b c d : α
hf : Monotone f
⊢ f (max a b) = max (f a) (f b)
state_after: no goals
tactic: rcases le_total a b with h | h <;> simp [h, hf h]
Theorem: CategoryTheory.Localization.homEquiv_map
File: Mathlib/CategoryTheory/Localization/HomEquiv.lean

Proof steps:
state_before: C : Type u_1
C₁ : Type u_2
C₂ : Type u_3
C₃ : Type u_4
D₁ : Type u_5
D₂ : Type u_6
D₃ : Type u_7
inst✝⁹ : Category.{u_8, u_1} C
inst✝⁸ : Category.{?u.46756, u_2} C₁
inst✝⁷ : Category.{?u.46760, u_3} C₂
inst✝⁶ : Category.{?u.46764, u_4} C₃
inst✝⁵ : Category.{u_10, u_5} D₁
inst✝⁴ : Category.{u_9, u_6} D₂
inst✝³ : Category.{?u.46776, u_7} D₃
W : MorphismProperty C
L₁ : C ⥤ D₁
inst✝² : L₁.IsLocalization W
L₂ : C ⥤ D₂
inst✝¹ : L₂.IsLocalization W
L₃ : C ⥤ D₃
inst✝ : L₃.IsLocalization W
X Y Z : C
f : X ⟶ Y
⊢ (homEquiv W L₁ L₂) (L₁.map f) = L₂.map f
state_after: no goals
tactic: simp [homEquiv_apply]
Theorem: List.cons_merge_cons_neg
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: α : Type u_1
a b : α
s : α → α → Bool
l r : List α
h : ¬s a b = true
⊢ merge s (a :: l) (b :: r) = b :: merge s (a :: l) r
state_after: no goals
tactic: rw [cons_merge_cons, if_neg h]
Theorem: LinearMap.BilinForm.exists_bilinForm_self_ne_zero
File: Mathlib/LinearAlgebra/QuadraticForm/Basic.lean

Proof steps:
state_before: S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
htwo : Invertible 2
B : BilinForm R M
hB₁ : B ≠ 0
hB₂ : IsSymm B
⊢ ∃ x, ¬IsOrtho B x x
state_after: case intro
S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
htwo : Invertible 2
B : BilinForm R M
Q : QuadraticMap R M R
hB₁✝ hB₁ : (QuadraticMap.associatedHom ℕ) Q ≠ 0
⊢ ∃ x, ¬IsOrtho ((QuadraticMap.associatedHom ℕ) Q) x x
tactic: lift B to QuadraticForm R M using hB₂ with Q
state_before: case intro
S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
htwo : Invertible 2
B : BilinForm R M
Q : QuadraticMap R M R
hB₁✝ hB₁ : (QuadraticMap.associatedHom ℕ) Q ≠ 0
⊢ ∃ x, ¬IsOrtho ((QuadraticMap.associatedHom ℕ) Q) x x
state_after: case intro.intro
S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
htwo : Invertible 2
B : BilinForm R M
Q : QuadraticMap R M R
hB₁✝ hB₁ : (QuadraticMap.associatedHom ℕ) Q ≠ 0
x : M
hx : Q x ≠ 0
⊢ ∃ x, ¬IsOrtho ((QuadraticMap.associatedHom ℕ) Q) x x
tactic: obtain ⟨x, hx⟩ := QuadraticMap.exists_quadraticForm_ne_zero hB₁
state_before: case intro.intro
S : Type u_1
T : Type u_2
R : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
A : Type u_7
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
htwo : Invertible 2
B : BilinForm R M
Q : QuadraticMap R M R
hB₁✝ hB₁ : (QuadraticMap.associatedHom ℕ) Q ≠ 0
x : M
hx : Q x ≠ 0
⊢ ∃ x, ¬IsOrtho ((QuadraticMap.associatedHom ℕ) Q) x x
state_after: no goals
tactic: exact ⟨x, fun h => hx (Q.associated_eq_self_apply ℕ x ▸ h)⟩
Theorem: CategoryTheory.IsIso.inv_id
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
⊢ inv (𝟙 X) = 𝟙 X
state_after: case hom_inv_id
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
f g : X ⟶ Y
h : Y ⟶ Z
⊢ 𝟙 X ≫ 𝟙 X = 𝟙 X
tactic: apply inv_eq_of_hom_inv_id
state_before: case hom_inv_id
C : Type u
inst✝ : Category.{v, u} C
X Y Z : C
f g : X ⟶ Y
h : Y ⟶ Z
⊢ 𝟙 X ≫ 𝟙 X = 𝟙 X
state_after: no goals
tactic: simp
Theorem: Complex.norm_exp_ofReal_mul_I
File: Mathlib/Analysis/Complex/Basic.lean

Proof steps:
state_before: z : ℂ
t : ℝ
⊢ ‖cexp (↑t * I)‖ = 1
state_after: no goals
tactic: simp only [norm_eq_abs, abs_exp_ofReal_mul_I]
Theorem: CategoryTheory.ShortComplex.LeftHomologyData.exact_iff
File: Mathlib/Algebra/Homology/ShortComplex/Exact.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{?u.2051, u_2} D
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝ : S.HasHomology
h : S.LeftHomologyData
⊢ S.Exact ↔ IsZero h.H
state_after: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{?u.2051, u_2} D
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝ : S.HasHomology
h : S.LeftHomologyData
⊢ IsZero S.homology ↔ IsZero h.H
tactic: rw [S.exact_iff_isZero_homology]
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{?u.2051, u_2} D
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroMorphisms D
S S₁ S₂ : ShortComplex C
inst✝ : S.HasHomology
h : S.LeftHomologyData
⊢ IsZero S.homology ↔ IsZero h.H
state_after: no goals
tactic: exact Iso.isZero_iff h.homologyIso
Theorem: WCovBy.image
File: Mathlib/Order/Cover.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
⊢ f a ⩿ f b
state_after: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c✝ : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
c : β
ha : f a < c
hb : c < f b
⊢ False
tactic: refine ⟨f.monotone hab.le, fun c ha hb => ?_⟩
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c✝ : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
c : β
ha : f a < c
hb : c < f b
⊢ False
state_after: case intro
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c✝ : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
c : α
ha : f a < f c
hb : f c < f b
⊢ False
tactic: obtain ⟨c, rfl⟩ := h.out (mem_range_self _) (mem_range_self _) ⟨ha.le, hb.le⟩
state_before: case intro
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c✝ : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
c : α
ha : f a < f c
hb : f c < f b
⊢ False
state_after: case intro
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c✝ : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
c : α
ha : a < c
hb : c < b
⊢ False
tactic: rw [f.lt_iff_lt] at ha hb
state_before: case intro
α : Type u_1
β : Type u_2
inst✝¹ : Preorder α
inst✝ : Preorder β
a b c✝ : α
f : α ↪o β
hab : a ⩿ b
h : (range ⇑f).OrdConnected
c : α
ha : a < c
hb : c < b
⊢ False
state_after: no goals
tactic: exact hab.2 ha hb
Theorem: Ordinal.sup_eq_sup
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r✝ : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι ι' : Type u
r : ι → ι → Prop
r' : ι' → ι' → Prop
inst✝¹ : IsWellOrder ι r
inst✝ : IsWellOrder ι' r'
o : Ordinal.{u}
ho : type r = o
ho' : type r' = o
f : (a : Ordinal.{u}) → a < o → Ordinal.{max u v}
⊢ range (familyOfBFamily' r ho f) = range (familyOfBFamily' r' ho' f)
state_after: no goals
tactic: simp
Theorem: CategoryTheory.braiding_inv_tensorUnit_right
File: Mathlib/CategoryTheory/Monoidal/Braided/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X : C
⊢ (β_ X (𝟙_ C)).inv = (λ_ X).hom ≫ (ρ_ X).inv
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X : C
⊢ (β_ X (𝟙_ C)).hom ≫ (λ_ X).hom ≫ (ρ_ X).inv = 𝟙 (X ⊗ 𝟙_ C)
tactic: rw [Iso.inv_ext]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X : C
⊢ (β_ X (𝟙_ C)).hom ≫ (λ_ X).hom ≫ (ρ_ X).inv = 𝟙 (X ⊗ 𝟙_ C)
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X : C
⊢ ((ρ_ X).hom ≫ (λ_ X).inv) ≫ (λ_ X).hom ≫ (ρ_ X).inv = 𝟙 (X ⊗ 𝟙_ C)
tactic: rw [braiding_tensorUnit_right]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
inst✝¹ : MonoidalCategory C
inst✝ : BraidedCategory C
X : C
⊢ ((ρ_ X).hom ≫ (λ_ X).inv) ≫ (λ_ X).hom ≫ (ρ_ X).inv = 𝟙 (X ⊗ 𝟙_ C)
state_after: no goals
tactic: coherence
Theorem: Fin.succAbove_pred_of_lt
File: Mathlib/Data/Fin/Basic.lean

Proof steps:
state_before: n m : ℕ
p✝ : Fin (n + 1)
i✝ j : Fin n
p i : Fin (n + 1)
h : p < i
hi : optParam (i ≠ 0) ⋯
⊢ p.succAbove (i.pred hi) = i
state_after: no goals
tactic: rw [succAbove_of_lt_succ _ _ (succ_pred _ _ ▸ h), succ_pred]
Theorem: Cardinal.card_le_iff
File: Mathlib/SetTheory/Ordinal/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
o : Ordinal.{u_3}
c : Cardinal.{u_3}
⊢ o.card ≤ c ↔ o < (succ c).ord
state_after: no goals
tactic: rw [lt_ord, lt_succ_iff]
Theorem: Multiset.filterMap_eq_filter
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
⊢ List.filterMap (Option.guard p) l = List.filter (fun b => decide (p b)) l
state_after: α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
⊢ List.filterMap (Option.guard p) l = List.filterMap (Option.guard fun x => decide (p x) = true) l
tactic: rw [← List.filterMap_eq_filter]
state_before: α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
⊢ List.filterMap (Option.guard p) l = List.filterMap (Option.guard fun x => decide (p x) = true) l
state_after: case e_f
α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
⊢ Option.guard p = Option.guard fun x => decide (p x) = true
tactic: congr
state_before: case e_f
α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
⊢ Option.guard p = Option.guard fun x => decide (p x) = true
state_after: case e_f.h
α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
a : α
⊢ Option.guard p a = Option.guard (fun x => decide (p x) = true) a
tactic: funext a
state_before: case e_f.h
α : Type u_1
β : Type v
γ : Type u_2
p : α → Prop
inst✝ : DecidablePred p
s : Multiset α
l : List α
a : α
⊢ Option.guard p a = Option.guard (fun x => decide (p x) = true) a
state_after: no goals
tactic: simp
Theorem: Int.floor_nonneg
File: Mathlib/Algebra/Order/Floor.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
z : ℤ
a : α
⊢ 0 ≤ ⌊a⌋ ↔ 0 ≤ a
state_after: no goals
tactic: rw [le_floor, Int.cast_zero]
Theorem: Finset.noncommProd_eq_prod
File: Mathlib/Data/Finset/NoncommProd.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β✝ : Type u_4
γ : Type u_5
f✝ : α → β✝ → β✝
op : α → α → α
inst✝³ : Monoid β✝
inst✝² : Monoid γ
inst✝¹ : FunLike F β✝ γ
β : Type u_6
inst✝ : CommMonoid β
s : Finset α
f : α → β
⊢ s.noncommProd f ⋯ = s.prod f
state_after: case h₁
F : Type u_1
ι : Type u_2
α : Type u_3
β✝ : Type u_4
γ : Type u_5
f✝ : α → β✝ → β✝
op : α → α → α
inst✝³ : Monoid β✝
inst✝² : Monoid γ
inst✝¹ : FunLike F β✝ γ
β : Type u_6
inst✝ : CommMonoid β
f : α → β
⊢ ∅.noncommProd f ⋯ = ∅.prod f

case h₂
F : Type u_1
ι : Type u_2
α : Type u_3
β✝ : Type u_4
γ : Type u_5
f✝ : α → β✝ → β✝
op : α → α → α
inst✝³ : Monoid β✝
inst✝² : Monoid γ
inst✝¹ : FunLike F β✝ γ
β : Type u_6
inst✝ : CommMonoid β
f : α → β
a : α
s : Finset α
ha : a ∉ s
IH : s.noncommProd f ⋯ = s.prod f
⊢ (cons a s ha).noncommProd f ⋯ = (cons a s ha).prod f
tactic: induction' s using Finset.cons_induction_on with a s ha IH
Theorem: hasStrictFDerivAt_exp_zero_of_radius_pos
File: Mathlib/Analysis/SpecialFunctions/Exponential.lean

Proof steps:
state_before: 𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
⊢ HasStrictFDerivAt (exp 𝕂) 1 0
state_after: case h.e'_10
𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
⊢ 1 = (continuousMultilinearCurryFin1 𝕂 𝔸 𝔸) (expSeries 𝕂 𝔸 1)
tactic: convert (hasFPowerSeriesAt_exp_zero_of_radius_pos h).hasStrictFDerivAt
state_before: case h.e'_10
𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
⊢ 1 = (continuousMultilinearCurryFin1 𝕂 𝔸 𝔸) (expSeries 𝕂 𝔸 1)
state_after: case h.e'_10.h
𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
x : 𝔸
⊢ 1 x = ((continuousMultilinearCurryFin1 𝕂 𝔸 𝔸) (expSeries 𝕂 𝔸 1)) x
tactic: ext x
state_before: case h.e'_10.h
𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
x : 𝔸
⊢ 1 x = ((continuousMultilinearCurryFin1 𝕂 𝔸 𝔸) (expSeries 𝕂 𝔸 1)) x
state_after: case h.e'_10.h
𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
x : 𝔸
⊢ x = (expSeries 𝕂 𝔸 1) fun x_1 => x
tactic: change x = expSeries 𝕂 𝔸 1 fun _ => x
state_before: case h.e'_10.h
𝕂 : Type u_1
𝔸 : Type u_2
inst✝³ : NontriviallyNormedField 𝕂
inst✝² : NormedRing 𝔸
inst✝¹ : NormedAlgebra 𝕂 𝔸
inst✝ : CompleteSpace 𝔸
h : 0 < (expSeries 𝕂 𝔸).radius
x : 𝔸
⊢ x = (expSeries 𝕂 𝔸 1) fun x_1 => x
state_after: no goals
tactic: simp [expSeries_apply_eq, Nat.factorial]
Theorem: ComplexShape.ε₁_ε₂
File: Mathlib/Algebra/Homology/ComplexShapeSigns.lean

Proof steps:
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝ : TotalComplexShape c₁ c₂ c₁₂
i₁ i₁' : I₁
i₂ i₂' : I₂
h₁ : c₁.Rel i₁ i₁'
h₂ : c₂.Rel i₂ i₂'
⊢ c₁.ε₁ c₂ c₁₂ (i₁, i₂) * c₁.ε₂ c₂ c₁₂ (i₁, i₂) * 1 = -c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')
state_after: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝ : TotalComplexShape c₁ c₂ c₁₂
i₁ i₁' : I₁
i₂ i₂' : I₂
h₁ : c₁.Rel i₁ i₁'
h₂ : c₂.Rel i₂ i₂'
⊢ c₁.ε₁ c₂ c₁₂ (i₁, i₂) * (c₁.ε₂ c₂ c₁₂ (i₁, i₂) * (c₁.ε₁ c₂ c₁₂ (i₁, i₂') * c₁.ε₁ c₂ c₁₂ (i₁, i₂'))) =
    -c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')
tactic: rw [← Int.units_mul_self (ComplexShape.ε₁ c₁ c₂ c₁₂ (i₁, i₂')), mul_assoc]
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝ : TotalComplexShape c₁ c₂ c₁₂
i₁ i₁' : I₁
i₂ i₂' : I₂
h₁ : c₁.Rel i₁ i₁'
h₂ : c₂.Rel i₂ i₂'
⊢ c₁.ε₁ c₂ c₁₂ (i₁, i₂) * (c₁.ε₂ c₂ c₁₂ (i₁, i₂) * (c₁.ε₁ c₂ c₁₂ (i₁, i₂') * c₁.ε₁ c₂ c₁₂ (i₁, i₂'))) =
    -c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')
state_after: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝ : TotalComplexShape c₁ c₂ c₁₂
i₁ i₁' : I₁
i₂ i₂' : I₂
h₁ : c₁.Rel i₁ i₁'
h₂ : c₂.Rel i₂ i₂'
⊢ c₁.ε₁ c₂ c₁₂ (i₁, i₂) * (-c₁.ε₁ c₂ c₁₂ (i₁, i₂) * c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')) =
    -c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')
tactic: conv_lhs =>
      arg 2
      rw [← mul_assoc, ε₂_ε₁ c₁₂ h₁ h₂]
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝ : TotalComplexShape c₁ c₂ c₁₂
i₁ i₁' : I₁
i₂ i₂' : I₂
h₁ : c₁.Rel i₁ i₁'
h₂ : c₂.Rel i₂ i₂'
⊢ c₁.ε₁ c₂ c₁₂ (i₁, i₂) * (-c₁.ε₁ c₂ c₁₂ (i₁, i₂) * c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')) =
    -c₁.ε₂ c₂ c₁₂ (i₁', i₂) * c₁.ε₁ c₂ c₁₂ (i₁, i₂')
state_after: no goals
tactic: rw [neg_mul, neg_mul, neg_mul, mul_neg, neg_inj, ← mul_assoc, ← mul_assoc,
      Int.units_mul_self, one_mul]
Theorem: MeasureTheory.addFundamentalFrontier_vadd
File: Mathlib/MeasureTheory/Group/FundamentalDomain.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝⁴ : Group G
inst✝³ : MulAction G α
s : Set α
x : α
inst✝² : Group H
inst✝¹ : MulAction H α
inst✝ : SMulCommClass H G α
g : H
⊢ fundamentalFrontier G (g • s) = g • fundamentalFrontier G s
state_after: no goals
tactic: simp_rw [fundamentalFrontier, smul_set_inter, smul_set_iUnion, smul_comm g (_ : G) (_ : Set α)]
Theorem: Primrec.option_getD
File: Mathlib/Computability/Primrec.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
σ : Type u_5
inst✝⁴ : Primcodable α
inst✝³ : Primcodable β
inst✝² : Primcodable γ
inst✝¹ : Primcodable δ
inst✝ : Primcodable σ
x✝ : Option α × α
o : Option α
a : α
⊢ (Option.casesOn ((fun a x => a) (o, a).1 (o, a).2) ((fun x b => b) (o, a).1 (o, a).2) fun b => b) =
    (o, a).1.getD (o, a).2
state_after: no goals
tactic: cases o <;> rfl
Theorem: Equiv.toHomeomorph_symm
File: Mathlib/Topology/Homeomorph.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
Z✝ : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
e : X ≃ Y
he : ∀ (s : Set Y), IsOpen (⇑e ⁻¹' s) ↔ IsOpen s
s : Set X
⊢ IsOpen (⇑e.symm ⁻¹' s) ↔ IsOpen s
state_after: case h.e'_2.h.e'_3
X : Type u_1
Y : Type u_2
Z✝ : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
e : X ≃ Y
he : ∀ (s : Set Y), IsOpen (⇑e ⁻¹' s) ↔ IsOpen s
s : Set X
⊢ s = ⇑e ⁻¹' (⇑e.symm ⁻¹' s)
tactic: convert (he _).symm
state_before: case h.e'_2.h.e'_3
X : Type u_1
Y : Type u_2
Z✝ : Type u_3
Z : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
e : X ≃ Y
he : ∀ (s : Set Y), IsOpen (⇑e ⁻¹' s) ↔ IsOpen s
s : Set X
⊢ s = ⇑e ⁻¹' (⇑e.symm ⁻¹' s)
state_after: no goals
tactic: simp