ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: rank_lt_rank_dual
File: Mathlib/LinearAlgebra/Dimension/DivisionRing.lean

Proof steps:
state_before: K✝ R : Type u
V✝ V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝³ : DivisionRing K✝
K V : Type u
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
h : ℵ₀ ≤ Module.rank K V
⊢ Module.rank K V < Module.rank K (V →ₗ[K] K)
state_after: case h.e'_3
K✝ R : Type u
V✝ V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝³ : DivisionRing K✝
K V : Type u
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
h : ℵ₀ ≤ Module.rank K V
⊢ Module.rank K V = lift.{u, u} (Module.rank K V)
tactic: convert lift_rank_lt_rank_dual h
state_before: case h.e'_3
K✝ R : Type u
V✝ V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type u_1
inst✝³ : DivisionRing K✝
K V : Type u
inst✝² : Field K
inst✝¹ : AddCommGroup V
inst✝ : Module K V
h : ℵ₀ ≤ Module.rank K V
⊢ Module.rank K V = lift.{u, u} (Module.rank K V)
state_after: no goals
tactic: rw [lift_id]
Theorem: Set.image_insert_eq
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : α → β
s✝ t : Set α
f : α → β
a : α
s : Set α
⊢ f '' insert a s = insert (f a) (f '' s)
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : α → β
s✝ t : Set α
f : α → β
a : α
s : Set α
x✝ : β
⊢ x✝ ∈ f '' insert a s ↔ x✝ ∈ insert (f a) (f '' s)
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : α → β
s✝ t : Set α
f : α → β
a : α
s : Set α
x✝ : β
⊢ x✝ ∈ f '' insert a s ↔ x✝ ∈ insert (f a) (f '' s)
state_after: no goals
tactic: simp [and_or_left, exists_or, eq_comm, or_comm, and_comm]
Theorem: AddUnits.add_right_inj
File: Mathlib/Algebra/Group/Units.lean

Proof steps:
state_before: α : Type u
inst✝ : Monoid α
a✝ b✝ c✝ u a : αˣ
b c : α
h : ↑a * b = ↑a * c
⊢ b = c
state_after: no goals
tactic: simpa only [inv_mul_cancel_left] using congr_arg (fun x : α => ↑(a⁻¹ : αˣ) * x) h
Theorem: Finsupp.mapRange_neg
File: Mathlib/Data/Finsupp/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
M : Type u_5
M' : Type u_6
N : Type u_7
P : Type u_8
G : Type u_9
H : Type u_10
R : Type u_11
S : Type u_12
inst✝¹ : NegZeroClass G
inst✝ : NegZeroClass H
f : G → H
hf : f 0 = 0
hf' : ∀ (x : G), f (-x) = -f x
v : α →₀ G
x✝ : α
⊢ (mapRange f hf (-v)) x✝ = (-mapRange f hf v) x✝
state_after: no goals
tactic: simp only [hf', neg_apply, mapRange_apply]
Theorem: Homotopy.dNext_succ_chainComplex
File: Mathlib/Algebra/Homology/Homotopy.lean

Proof steps:
state_before: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : ChainComplex V ℕ
f : (i j : ℕ) → P.X i ⟶ Q.X j
i : ℕ
⊢ (dNext (i + 1)) f = P.d (i + 1) i ≫ f i (i + 1)
state_after: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : ChainComplex V ℕ
f : (i j : ℕ) → P.X i ⟶ Q.X j
i : ℕ
⊢ P.d (i + 1) ((ComplexShape.down ℕ).next (i + 1)) ≫ f ((ComplexShape.down ℕ).next (i + 1)) (i + 1) =
    P.d (i + 1) i ≫ f i (i + 1)
tactic: dsimp [dNext]
state_before: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : ChainComplex V ℕ
f : (i j : ℕ) → P.X i ⟶ Q.X j
i : ℕ
⊢ P.d (i + 1) ((ComplexShape.down ℕ).next (i + 1)) ≫ f ((ComplexShape.down ℕ).next (i + 1)) (i + 1) =
    P.d (i + 1) i ≫ f i (i + 1)
state_after: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : ChainComplex V ℕ
f : (i j : ℕ) → P.X i ⟶ Q.X j
i : ℕ
this : (ComplexShape.down ℕ).next (i + 1) = i
⊢ P.d (i + 1) ((ComplexShape.down ℕ).next (i + 1)) ≫ f ((ComplexShape.down ℕ).next (i + 1)) (i + 1) =
    P.d (i + 1) i ≫ f i (i + 1)
tactic: have : (ComplexShape.down ℕ).next (i + 1) = i := ChainComplex.next_nat_succ _
state_before: ι : Type u_1
V : Type u
inst✝¹ : Category.{v, u} V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f✝ g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : ChainComplex V ℕ
f : (i j : ℕ) → P.X i ⟶ Q.X j
i : ℕ
this : (ComplexShape.down ℕ).next (i + 1) = i
⊢ P.d (i + 1) ((ComplexShape.down ℕ).next (i + 1)) ≫ f ((ComplexShape.down ℕ).next (i + 1)) (i + 1) =
    P.d (i + 1) i ≫ f i (i + 1)
state_after: no goals
tactic: congr 2
Theorem: Cardinal.mk_quaternionAlgebra
File: Mathlib/Algebra/Quaternion.lean

Proof steps:
state_before: R : Type u_1
c₁ c₂ : R
⊢ #ℍ[R,c₁,c₂] = #R ^ 4
state_after: R : Type u_1
c₁ c₂ : R
⊢ #(R × R × R × R) = #R ^ 4
tactic: rw [mk_congr (QuaternionAlgebra.equivProd c₁ c₂)]
state_before: R : Type u_1
c₁ c₂ : R
⊢ #(R × R × R × R) = #R ^ 4
state_after: R : Type u_1
c₁ c₂ : R
⊢ #R * (#R * (#R * #R)) = #R ^ 4
tactic: simp only [mk_prod, lift_id]
state_before: R : Type u_1
c₁ c₂ : R
⊢ #R * (#R * (#R * #R)) = #R ^ 4
state_after: no goals
tactic: ring
Theorem: intervalIntegrable_iff
File: Mathlib/MeasureTheory/Integral/IntervalIntegral.lean

Proof steps:
state_before: ι : Type u_1
𝕜 : Type u_2
E : Type u_3
F : Type u_4
A : Type u_5
inst✝ : NormedAddCommGroup E
f : ℝ → E
a b : ℝ
μ : Measure ℝ
⊢ IntervalIntegrable f μ a b ↔ IntegrableOn f (Ι a b) μ
state_after: no goals
tactic: rw [uIoc_eq_union, integrableOn_union, IntervalIntegrable]
Theorem: Set.image_const_sub_Iio
File: Mathlib/Data/Set/Pointwise/Interval.lean

Proof steps:
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ (fun x => a - x) '' Iio b = Ioi (a - b)
state_after: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
this : ∀ (a_1 : Set α), ((fun x => a + x) ∘ fun x => -x) '' a_1 = (fun x => a + x) '' ((fun x => -x) '' a_1)
⊢ (fun x => a - x) '' Iio b = Ioi (a - b)
tactic: have := image_comp (fun x => a + x) fun x => -x
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
this : ∀ (a_1 : Set α), ((fun x => a + x) ∘ fun x => -x) '' a_1 = (fun x => a + x) '' ((fun x => -x) '' a_1)
⊢ (fun x => a - x) '' Iio b = Ioi (a - b)
state_after: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
this : ∀ (a_1 : Set α), (fun x => a + -x) '' a_1 = (fun x => a + x) '' ((fun x => -x) '' a_1)
⊢ (fun x => a - x) '' Iio b = Ioi (a - b)
tactic: dsimp [Function.comp_def] at this
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
this : ∀ (a_1 : Set α), (fun x => a + -x) '' a_1 = (fun x => a + x) '' ((fun x => -x) '' a_1)
⊢ (fun x => a - x) '' Iio b = Ioi (a - b)
state_after: no goals
tactic: simp [sub_eq_add_neg, this, add_comm]
Theorem: Real.cos_pi_div_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

Proof steps:
state_before: ⊢ cos (π / 2) = 0
state_after: ⊢ cos (Classical.choose exists_cos_eq_zero) = 0
tactic: rw [Real.pi, mul_div_cancel_left₀ _ (two_ne_zero' ℝ)]
state_before: ⊢ cos (Classical.choose exists_cos_eq_zero) = 0
state_after: no goals
tactic: exact (Classical.choose_spec exists_cos_eq_zero).2
Theorem: Set.indicator_const_preimage
File: Mathlib/Algebra/Group/Indicator.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
M : Type u_4
N : Type u_5
inst✝¹ : One M
inst✝ : One N
s✝ t : Set α
f g : α → M
a✝ : α
U : Set α
s : Set M
a : M
⊢ (U.mulIndicator fun x => a) ⁻¹' s ∈ {univ, U, Uᶜ, ∅}
state_after: no goals
tactic: classical
    rw [mulIndicator_const_preimage_eq_union]
    split_ifs <;> simp
Theorem: CategoryTheory.Functor.LeftExtension.coconeAtFunctor_obj
File: Mathlib/CategoryTheory/Functor/KanExtension/Pointwise.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{?u.6279, u_1} C
inst✝¹ : Category.{?u.6283, u_2} D
inst✝ : Category.{?u.6287, u_3} H
L : C ⥤ D
F : C ⥤ H
E✝ : L.LeftExtension F
Y : D
E E' : L.LeftExtension F
φ : E ⟶ E'
G : CostructuredArrow L Y
⊢ ((fun E => E.coconeAt Y) E).ι.app G ≫ φ.right.app Y = ((fun E => E.coconeAt Y) E').ι.app G
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{?u.6279, u_1} C
inst✝¹ : Category.{?u.6283, u_2} D
inst✝ : Category.{?u.6287, u_3} H
L : C ⥤ D
F : C ⥤ H
E✝ : L.LeftExtension F
Y : D
E E' : L.LeftExtension F
φ : E ⟶ E'
G : CostructuredArrow L Y
⊢ (E.hom.app G.left ≫ E.right.map G.hom) ≫ φ.right.app Y = E'.hom.app G.left ≫ E'.right.map G.hom
tactic: dsimp
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{?u.6279, u_1} C
inst✝¹ : Category.{?u.6283, u_2} D
inst✝ : Category.{?u.6287, u_3} H
L : C ⥤ D
F : C ⥤ H
E✝ : L.LeftExtension F
Y : D
E E' : L.LeftExtension F
φ : E ⟶ E'
G : CostructuredArrow L Y
⊢ (E.hom.app G.left ≫ E.right.map G.hom) ≫ φ.right.app Y = E'.hom.app G.left ≫ E'.right.map G.hom
state_after: C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{?u.6279, u_1} C
inst✝¹ : Category.{?u.6283, u_2} D
inst✝ : Category.{?u.6287, u_3} H
L : C ⥤ D
F : C ⥤ H
E✝ : L.LeftExtension F
Y : D
E E' : L.LeftExtension F
φ : E ⟶ E'
G : CostructuredArrow L Y
⊢ (E.hom.app G.left ≫ E.right.map G.hom) ≫ φ.right.app Y =
    (E.hom ≫ ((whiskeringLeft C D H).obj L).map φ.right).app G.left ≫ E'.right.map G.hom
tactic: rw [← StructuredArrow.w φ]
state_before: C : Type u_1
D : Type u_2
H : Type u_3
inst✝² : Category.{?u.6279, u_1} C
inst✝¹ : Category.{?u.6283, u_2} D
inst✝ : Category.{?u.6287, u_3} H
L : C ⥤ D
F : C ⥤ H
E✝ : L.LeftExtension F
Y : D
E E' : L.LeftExtension F
φ : E ⟶ E'
G : CostructuredArrow L Y
⊢ (E.hom.app G.left ≫ E.right.map G.hom) ≫ φ.right.app Y =
    (E.hom ≫ ((whiskeringLeft C D H).obj L).map φ.right).app G.left ≫ E'.right.map G.hom
state_after: no goals
tactic: simp
Theorem: Finset.image₂_left
File: Mathlib/Data/Finset/NAry.lean

Proof steps:
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁸ : DecidableEq α'
inst✝⁷ : DecidableEq β'
inst✝⁶ : DecidableEq γ
inst✝⁵ : DecidableEq γ'
inst✝⁴ : DecidableEq δ
inst✝³ : DecidableEq δ'
inst✝² : DecidableEq ε
inst✝¹ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝ : DecidableEq α
h : t.Nonempty
⊢ ↑(image₂ (fun x x_1 => x) s t) = ↑s
state_after: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁸ : DecidableEq α'
inst✝⁷ : DecidableEq β'
inst✝⁶ : DecidableEq γ
inst✝⁵ : DecidableEq γ'
inst✝⁴ : DecidableEq δ
inst✝³ : DecidableEq δ'
inst✝² : DecidableEq ε
inst✝¹ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝ : DecidableEq α
h : t.Nonempty
⊢ image2 (fun x x_1 => x) ↑s ↑t = ↑s
tactic: push_cast
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁸ : DecidableEq α'
inst✝⁷ : DecidableEq β'
inst✝⁶ : DecidableEq γ
inst✝⁵ : DecidableEq γ'
inst✝⁴ : DecidableEq δ
inst✝³ : DecidableEq δ'
inst✝² : DecidableEq ε
inst✝¹ : DecidableEq ε'
f f' : α → β → γ
g g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
inst✝ : DecidableEq α
h : t.Nonempty
⊢ image2 (fun x x_1 => x) ↑s ↑t = ↑s
state_after: no goals
tactic: exact image2_left h
Theorem: Polynomial.aroots_monomial
File: Mathlib/Algebra/Polynomial/Roots.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
p q : R[X]
inst✝⁴ : CommRing T
inst✝³ : CommRing S
inst✝² : IsDomain S
inst✝¹ : Algebra T S
inst✝ : NoZeroSMulDivisors T S
a : T
ha : a ≠ 0
n : ℕ
⊢ ((monomial n) a).aroots S = n • {0}
state_after: no goals
tactic: rw [← C_mul_X_pow_eq_monomial, aroots_C_mul_X_pow ha]
Theorem: Fin.prod_Ioi_succ
File: Mathlib/Algebra/BigOperators/Fin.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
M : Type u_3
inst✝ : CommMonoid M
n : ℕ
i : Fin n
v : Fin n.succ → M
⊢ ∏ j ∈ Ioi i.succ, v j = ∏ j ∈ Ioi i, v j.succ
state_after: no goals
tactic: rw [Ioi_succ, Finset.prod_map, val_succEmb]
Theorem: SimpleGraph.Subgraph.coe_degree
File: Mathlib/Combinatorics/SimpleGraph/Subgraph.lean

Proof steps:
state_before: ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G₁ G₂ : G.Subgraph
a b : V
G' : G.Subgraph
v : ↑G'.verts
inst✝¹ : Fintype ↑(G'.coe.neighborSet v)
inst✝ : Fintype ↑(G'.neighborSet ↑v)
⊢ G'.coe.degree v = G'.degree ↑v
state_after: ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G₁ G₂ : G.Subgraph
a b : V
G' : G.Subgraph
v : ↑G'.verts
inst✝¹ : Fintype ↑(G'.coe.neighborSet v)
inst✝ : Fintype ↑(G'.neighborSet ↑v)
⊢ Fintype.card ↑(G'.coe.neighborSet v) = G'.degree ↑v
tactic: rw [← card_neighborSet_eq_degree]
state_before: ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G₁ G₂ : G.Subgraph
a b : V
G' : G.Subgraph
v : ↑G'.verts
inst✝¹ : Fintype ↑(G'.coe.neighborSet v)
inst✝ : Fintype ↑(G'.neighborSet ↑v)
⊢ Fintype.card ↑(G'.coe.neighborSet v) = G'.degree ↑v
state_after: no goals
tactic: exact Fintype.card_congr (coeNeighborSetEquiv v)
Theorem: LinearMap.BilinForm.IsAdjointPair.sub
File: Mathlib/LinearAlgebra/BilinearForm/Properties.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝¹⁶ : CommSemiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹³ : CommRing R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M'✝ : Type u_7
M'' : Type u_8
inst✝⁷ : AddCommMonoid M'✝
inst✝⁶ : AddCommMonoid M''
inst✝⁵ : Module R M'✝
inst✝⁴ : Module R M''
B : BilinForm R M
B₁ : BilinForm R₁ M₁
F : BilinForm R M
M' : Type u_9
inst✝³ : AddCommMonoid M'
inst✝² : Module R M'
B' : BilinForm R M'
f f' : M →ₗ[R] M'
g g' : M' →ₗ[R] M
M₁' : Type u_10
inst✝¹ : AddCommGroup M₁'
inst✝ : Module R₁ M₁'
B₁' : BilinForm R₁ M₁'
f₁ f₁' : M₁ →ₗ[R₁] M₁'
g₁ g₁' : M₁' →ₗ[R₁] M₁
h : B₁.IsAdjointPair B₁' f₁ g₁
h' : B₁.IsAdjointPair B₁' f₁' g₁'
x : M₁
y : M₁'
⊢ (B₁' ((f₁ - f₁') x)) y = (B₁ x) ((g₁ - g₁') y)
state_after: no goals
tactic: rw [LinearMap.sub_apply, LinearMap.sub_apply, sub_left, sub_right, h, h']
Theorem: CategoryTheory.CommSq.unop
File: Mathlib/CategoryTheory/CommSq.lean

Proof steps:
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
W✝ X✝ Y✝ Z✝ : C
f✝ : W✝ ⟶ X✝
g✝ : W✝ ⟶ Y✝
h✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
W X Y Z : Cᵒᵖ
f : W ⟶ X
g : W ⟶ Y
h : X ⟶ Z
i : Y ⟶ Z
p : CommSq f g h i
⊢ i.unop ≫ g.unop = h.unop ≫ f.unop
state_after: no goals
tactic: simp only [← unop_comp, p.w]
Theorem: IsUnit.mul_div_mul_right
File: Mathlib/Algebra/Group/Units.lean

Proof steps:
state_before: α : Type u
M : Type u_1
N : Type u_2
inst✝ : DivisionMonoid α
a✝ b✝ c : α
h : IsUnit c
a b : α
⊢ a * c / (b * c) = a / b
state_after: no goals
tactic: simp only [div_eq_mul_inv, mul_inv_rev, mul_assoc, h.mul_inv_cancel_left]
Theorem: Set.range_ite_subset
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
⊢ (range fun x => if p x then f x else g x) ⊆ range f ∪ range g
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
⊢ ∀ (y : α), (if p y then f y else g y) ∈ range f ∪ range g
tactic: rw [range_subset_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
⊢ ∀ (y : α), (if p y then f y else g y) ∈ range f ∪ range g
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
x : α
⊢ (if p x then f x else g x) ∈ range f ∪ range g
tactic: intro x
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
x : α
⊢ (if p x then f x else g x) ∈ range f ∪ range g
state_after: case pos
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
x : α
h : p x
⊢ (if p x then f x else g x) ∈ range f ∪ range g

case neg
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f✝ : ι → α
s t : Set α
p : α → Prop
inst✝ : DecidablePred p
f g : α → β
x : α
h : ¬p x
⊢ (if p x then f x else g x) ∈ range f ∪ range g
tactic: by_cases h : p x
Theorem: SimpleGraph.dart_edge_fiber_card
File: Mathlib/Combinatorics/SimpleGraph/DegreeSum.lean

Proof steps:
state_before: V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
e : Sym2 V
h : e ∈ G.edgeSet
⊢ (filter (fun d => d.edge = e) univ).card = 2
state_after: case h
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
⊢ (filter (fun d => d.edge = s(v, w)) univ).card = 2
tactic: induction' e with v w
state_before: case h
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
⊢ (filter (fun d => d.edge = s(v, w)) univ).card = 2
state_after: case h
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ (filter (fun d => d.edge = s(v, w)) univ).card = 2
tactic: let d : G.Dart := ⟨(v, w), h⟩
state_before: case h
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ (filter (fun d => d.edge = s(v, w)) univ).card = 2
state_after: case h.e'_3
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ 2 = {d, d.symm}.card
tactic: convert congr_arg card d.edge_fiber
state_before: case h.e'_3
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ 2 = {d, d.symm}.card
state_after: case h.e'_3
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ d ∉ {d.symm}
tactic: rw [card_insert_of_not_mem, card_singleton]
state_before: case h.e'_3
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ d ∉ {d.symm}
state_after: case h.e'_3
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ ¬d = d.symm
tactic: rw [mem_singleton]
state_before: case h.e'_3
V : Type u
G : SimpleGraph V
inst✝³ : Fintype V
inst✝² : DecidableRel G.Adj
inst✝¹ : Fintype (Sym2 V)
inst✝ : DecidableEq V
v w : V
h : s(v, w) ∈ G.edgeSet
d : G.Dart := { toProd := (v, w), adj := h }
⊢ ¬d = d.symm
state_after: no goals
tactic: exact d.symm_ne.symm
Theorem: List.perm_append_comm
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

Proof steps:
state_before: α : Type u_1
l₂ : List α
⊢ [] ++ l₂ ~ l₂ ++ []
state_after: no goals
tactic: simp
Theorem: ContinuousLinearMap.sSup_closed_unit_ball_eq_norm
File: Mathlib/Analysis/NormedSpace/OperatorNorm/NNNorm.lean

Proof steps:
state_before: 𝕜✝ : Type u_1
𝕜₂✝ : Type u_2
𝕜₃ : Type u_3
E✝ : Type u_4
Eₗ : Type u_5
F✝ : Type u_6
Fₗ : Type u_7
G : Type u_8
Gₗ : Type u_9
𝓕 : Type u_10
inst✝²⁴ : SeminormedAddCommGroup E✝
inst✝²³ : SeminormedAddCommGroup Eₗ
inst✝²² : SeminormedAddCommGroup F✝
inst✝²¹ : SeminormedAddCommGroup Fₗ
inst✝²⁰ : SeminormedAddCommGroup G
inst✝¹⁹ : SeminormedAddCommGroup Gₗ
inst✝¹⁸ : NontriviallyNormedField 𝕜✝
inst✝¹⁷ : NontriviallyNormedField 𝕜₂✝
inst✝¹⁶ : NontriviallyNormedField 𝕜₃
inst✝¹⁵ : NormedSpace 𝕜✝ E✝
inst✝¹⁴ : NormedSpace 𝕜✝ Eₗ
inst✝¹³ : NormedSpace 𝕜₂✝ F✝
inst✝¹² : NormedSpace 𝕜✝ Fₗ
inst✝¹¹ : NormedSpace 𝕜₃ G
inst✝¹⁰ : NormedSpace 𝕜✝ Gₗ
σ₁₂✝ : 𝕜✝ →+* 𝕜₂✝
σ₂₃ : 𝕜₂✝ →+* 𝕜₃
σ₁₃ : 𝕜✝ →+* 𝕜₃
inst✝⁹ : RingHomCompTriple σ₁₂✝ σ₂₃ σ₁₃
inst✝⁸ : FunLike 𝓕 E✝ F✝
inst✝⁷ : RingHomIsometric σ₁₂✝
𝕜 : Type u_11
𝕜₂ : Type u_12
E : Type u_13
F : Type u_14
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : SeminormedAddCommGroup F
inst✝⁴ : DenselyNormedField 𝕜
inst✝³ : NontriviallyNormedField 𝕜₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace 𝕜₂ F
inst✝ : RingHomIsometric σ₁₂
f : E →SL[σ₁₂] F
⊢ sSup ((fun x => ‖f x‖) '' closedBall 0 1) = ‖f‖
state_after: no goals
tactic: simpa only [NNReal.coe_sSup, Set.image_image] using
    NNReal.coe_inj.2 f.sSup_closed_unit_ball_eq_nnnorm
Theorem: Polynomial.leadingCoeff_prod'
File: Mathlib/Algebra/Polynomial/BigOperators.lean

Proof steps:
state_before: R : Type u
ι : Type w
s : Finset ι
inst✝ : CommSemiring R
f : ι → R[X]
t : Multiset R[X]
h : ∏ i ∈ s, (f i).leadingCoeff ≠ 0
⊢ (∏ i ∈ s, f i).leadingCoeff = ∏ i ∈ s, (f i).leadingCoeff
state_after: no goals
tactic: simpa using leadingCoeff_multiset_prod' (s.1.map f) (by simpa using h)
Theorem: WeierstrassCurve.Affine.map_slope
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

Proof steps:
state_before: R : Type u
inst✝³ : CommRing R
W✝ : Affine R
S : Type v
inst✝² : CommRing S
f✝ : R →+* S
F : Type u
inst✝¹ : Field F
W : Affine F
K : Type v
inst✝ : Field K
f : F →+* K
x₁ x₂ y₁ y₂ : F
⊢ (map W f).toAffine.slope (f x₁) (f x₂) (f y₁) (f y₂) = f (W.slope x₁ x₂ y₁ y₂)
state_after: case pos
R : Type u
inst✝³ : CommRing R
W✝ : Affine R
S : Type v
inst✝² : CommRing S
f✝ : R →+* S
F : Type u
inst✝¹ : Field F
W : Affine F
K : Type v
inst✝ : Field K
f : F →+* K
x₁ x₂ y₁ y₂ : F
hx : x₁ = x₂
⊢ (map W f).toAffine.slope (f x₁) (f x₂) (f y₁) (f y₂) = f (W.slope x₁ x₂ y₁ y₂)

case neg
R : Type u
inst✝³ : CommRing R
W✝ : Affine R
S : Type v
inst✝² : CommRing S
f✝ : R →+* S
F : Type u
inst✝¹ : Field F
W : Affine F
K : Type v
inst✝ : Field K
f : F →+* K
x₁ x₂ y₁ y₂ : F
hx : ¬x₁ = x₂
⊢ (map W f).toAffine.slope (f x₁) (f x₂) (f y₁) (f y₂) = f (W.slope x₁ x₂ y₁ y₂)
tactic: by_cases hx : x₁ = x₂
Theorem: DFinsupp.erase_single_same
File: Mathlib/Data/DFinsupp/Basic.lean

Proof steps:
state_before: ι : Type u
γ : Type w
β : ι → Type v
β₁ : ι → Type v₁
β₂ : ι → Type v₂
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → Zero (β i)
s : Finset ι
x✝ : (i : ↑↑s) → β ↑i
i✝ i : ι
x : β i
⊢ erase i (single i x) = 0
state_after: no goals
tactic: rw [erase_single, if_pos rfl]
Theorem: CategoryTheory.epi_iff_surjective_up_to_refinements
File: Mathlib/CategoryTheory/Abelian/Refinements.lean

Proof steps:
state_before: C : Type u_2
inst✝¹ : Category.{u_1, u_2} C
inst✝ : Abelian C
X Y : C
S S₁ S₂ : ShortComplex C
f : X ⟶ Y
⊢ Epi f ↔ ∀ ⦃A : C⦄ (y : A ⟶ Y), ∃ A' π, ∃ (_ : Epi π), ∃ x, π ≫ y = x ≫ f
state_after: case mp
C : Type u_2
inst✝¹ : Category.{u_1, u_2} C
inst✝ : Abelian C
X Y : C
S S₁ S₂ : ShortComplex C
f : X ⟶ Y
⊢ Epi f → ∀ ⦃A : C⦄ (y : A ⟶ Y), ∃ A' π, ∃ (_ : Epi π), ∃ x, π ≫ y = x ≫ f

case mpr
C : Type u_2
inst✝¹ : Category.{u_1, u_2} C
inst✝ : Abelian C
X Y : C
S S₁ S₂ : ShortComplex C
f : X ⟶ Y
⊢ (∀ ⦃A : C⦄ (y : A ⟶ Y), ∃ A' π, ∃ (_ : Epi π), ∃ x, π ≫ y = x ≫ f) → Epi f
tactic: constructor
Theorem: Matroid.disjointSigma_base_iff
File: Mathlib/Data/Matroid/Sum.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
M : ι → Matroid α
h : Pairwise (Disjoint on fun i => (M i).E)
B : Set α
⊢ (Matroid.disjointSigma M h).Base B ↔ (∀ (i : ι), (M i).Base (B ∩ (M i).E)) ∧ B ⊆ ⋃ i, (M i).E
state_after: no goals
tactic: simp [Matroid.disjointSigma, (Function.Embedding.sigmaSet_preimage h)]