ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Algebra.trace_algebraMap_of_basis
File: Mathlib/RingTheory/Trace/Defs.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
⊢ (trace R S) ((algebraMap R S) x) = Fintype.card ι • x
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ (trace R S) ((algebraMap R S) x) = Fintype.card ι • x
tactic: haveI := Classical.decEq ι
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ (trace R S) ((algebraMap R S) x) = Fintype.card ι • x
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ ∑ i : ι, ((toMatrix b b) ((lmul R S) ((algebraMap R S) x))).diag i = Fintype.card ι • x
tactic: rw [trace_apply, LinearMap.trace_eq_matrix_trace R b, Matrix.trace]
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ ∑ i : ι, ((toMatrix b b) ((lmul R S) ((algebraMap R S) x))).diag i = Fintype.card ι • x
state_after: case h.e'_2.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
x✝ : ι
a✝ : x✝ ∈ Finset.univ
⊢ ((toMatrix b b) ((lmul R S) ((algebraMap R S) x))).diag x✝ = x
tactic: convert Finset.sum_const x
state_before: case h.e'_2.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing S
inst✝³ : CommRing T
inst✝² : Algebra R S
inst✝¹ : Algebra R T
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
x✝ : ι
a✝ : x✝ ∈ Finset.univ
⊢ ((toMatrix b b) ((lmul R S) ((algebraMap R S) x))).diag x✝ = x
state_after: no goals
tactic: simp [-coe_lmul_eq_mul]
Theorem: CategoryTheory.CategoryOfElements.map_map_coe
File: Mathlib/CategoryTheory/Elements.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
F F₁ F₂ : C ⥤ Type w
α : F₁ ⟶ F₂
t₁ t₂ : F₁.Elements
k : t₁ ⟶ t₂
⊢ F₂.map (↑k) ((fun t => ⟨t.fst, α.app t.fst t.snd⟩) t₁).snd = ((fun t => ⟨t.fst, α.app t.fst t.snd⟩) t₂).snd
state_after: no goals
tactic: simpa [map_snd] using (FunctorToTypes.naturality _ _ α k.1 t₁.2).symm
Theorem: Function.Injective.isLeftCancelMulZero
File: Mathlib/Algebra/GroupWithZero/InjSurj.lean

Proof steps:
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsLeftCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : a✝ ≠ 0
He : a✝ * b✝ = a✝ * c✝
⊢ b✝ = c✝
state_after: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsLeftCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : a✝ ≠ 0
He : a✝ * b✝ = a✝ * c✝
this : f (a✝ * b✝) = f (a✝ * c✝)
⊢ b✝ = c✝
tactic: have := congr_arg f He
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsLeftCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : a✝ ≠ 0
He : a✝ * b✝ = a✝ * c✝
this : f (a✝ * b✝) = f (a✝ * c✝)
⊢ b✝ = c✝
state_after: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsLeftCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : a✝ ≠ 0
He : a✝ * b✝ = a✝ * c✝
this : f a✝ * f b✝ = f a✝ * f c✝
⊢ b✝ = c✝
tactic: rw [mul, mul] at this
state_before: M₀ : Type u_1
G₀ : Type u_2
M₀' : Type u_3
G₀' : Type u_4
inst✝⁴ : Mul M₀
inst✝³ : Zero M₀
inst✝² : Mul M₀'
inst✝¹ : Zero M₀'
f : M₀ → M₀'
hf : Injective f
zero : f 0 = 0
mul : ∀ (x y : M₀), f (x * y) = f x * f y
inst✝ : IsLeftCancelMulZero M₀'
a✝ b✝ c✝ : M₀
Hne : a✝ ≠ 0
He : a✝ * b✝ = a✝ * c✝
this : f a✝ * f b✝ = f a✝ * f c✝
⊢ b✝ = c✝
state_after: no goals
tactic: exact hf (mul_left_cancel₀ (fun Hfa => Hne <| hf <| by rw [Hfa, zero]) this)
Theorem: Fin.cycleRange_of_eq
File: Mathlib/GroupTheory/Perm/Fin.lean

Proof steps:
state_before: n : ℕ
i j : Fin n.succ
h : j = i
⊢ i.cycleRange j = 0
state_after: no goals
tactic: rw [cycleRange_of_le h.le, if_pos h]
Theorem: Filter.HasBasis.tendsto_right_iff
File: Mathlib/Order/Filter/Bases.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
la : Filter α
pa : ι → Prop
sa : ι → Set α
lb : Filter β
pb : ι' → Prop
sb : ι' → Set β
f : α → β
hlb : lb.HasBasis pb sb
⊢ Tendsto f la lb ↔ ∀ (i : ι'), pb i → ∀ᶠ (x : α) in la, f x ∈ sb i
state_after: no goals
tactic: simp only [Tendsto, hlb.ge_iff, mem_map', Filter.Eventually]
Theorem: convexJoin_segment_singleton
File: Mathlib/Analysis/Convex/Join.lean

Proof steps:
state_before: ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s t u : Set E
x y a b c : E
⊢ convexJoin 𝕜 (segment 𝕜 a b) {c} = (convexHull 𝕜) {a, b, c}
state_after: no goals
tactic: rw [← pair_eq_singleton, ← convexJoin_segments, segment_same, pair_eq_singleton]
Theorem: Rel.leftDual_rightDual_le_of_le
File: Mathlib/Order/Rel/GaloisConnection.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ R.leftDual (R.rightDual I) ≤ I'
state_after: α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ R.leftDual (R.rightDual I) ≤ R.leftDual (R.rightDual I')
tactic: rw [← h]
state_before: α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ R.leftDual (R.rightDual I) ≤ R.leftDual (R.rightDual I')
state_after: case a
α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ R.rightDual I' ≤ R.rightDual I
tactic: apply R.gc_leftDual_rightDual.monotone_l
state_before: case a
α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ R.rightDual I' ≤ R.rightDual I
state_after: case a.a
α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ I' ≤ I
tactic: apply R.gc_leftDual_rightDual.monotone_u
state_before: case a.a
α : Type u_1
β : Type u_2
R : Rel α β
I I' : Set β
h : I' ∈ R.rightFixedPoints
h₁ : I ≤ I'
⊢ I' ≤ I
state_after: no goals
tactic: exact h₁
Theorem: Submodule.mem_sSup_of_directed
File: Mathlib/LinearAlgebra/Span.lean

Proof steps:
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s✝ t : Set M
s : Set (Submodule R M)
z : M
hs : s.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) s
⊢ z ∈ sSup s ↔ ∃ y ∈ s, z ∈ y
state_after: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s✝ t : Set M
s : Set (Submodule R M)
z : M
hs : s.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) s
this : Nonempty ↑s
⊢ z ∈ sSup s ↔ ∃ y ∈ s, z ∈ y
tactic: have : Nonempty s := hs.to_subtype
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s✝ t : Set M
s : Set (Submodule R M)
z : M
hs : s.Nonempty
hdir : DirectedOn (fun x x_1 => x ≤ x_1) s
this : Nonempty ↑s
⊢ z ∈ sSup s ↔ ∃ y ∈ s, z ∈ y
state_after: no goals
tactic: simp only [sSup_eq_iSup', mem_iSup_of_directed _ hdir.directed_val, SetCoe.exists, Subtype.coe_mk,
    exists_prop]
Theorem: IsCoprime.prod_left_iff
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
⊢ IsCoprime (∏ i ∈ t, s i) x ↔ ∀ i ∈ t, IsCoprime (s i) x
state_after: no goals
tactic: classical
  refine Finset.induction_on t (iff_of_true isCoprime_one_left fun _ ↦ by simp) fun b t hbt ih ↦ ?_
  rw [Finset.prod_insert hbt, IsCoprime.mul_left_iff, ih, Finset.forall_mem_insert]
Theorem: Module.End.IsSemisimple_smul_iff
File: Mathlib/LinearAlgebra/Semisimple.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
t : K
ht : t ≠ 0
⊢ (t • f).IsSemisimple ↔ f.IsSemisimple
state_after: no goals
tactic: simp [isSemisimple_iff, Submodule.comap_smul f (h := ht)]
Theorem: NonUnitalStarAlgHom.prod_apply
File: Mathlib/Algebra/Star/StarAlgHom.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
B : Type u_3
C : Type u_4
inst✝⁹ : Monoid R
inst✝⁸ : NonUnitalNonAssocSemiring A
inst✝⁷ : DistribMulAction R A
inst✝⁶ : Star A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : DistribMulAction R B
inst✝³ : Star B
inst✝² : NonUnitalNonAssocSemiring C
inst✝¹ : DistribMulAction R C
inst✝ : Star C
f : A →⋆ₙₐ[R] B
g : A →⋆ₙₐ[R] C
x : A
⊢ __src✝.toFun (star x) = star (__src✝.toFun x)
state_after: no goals
tactic: simp [map_star, Prod.star_def]
Theorem: biSup_congr'
File: Mathlib/Order/CompleteLattice.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
⊢ ⨆ i, ⨆ (hi : p i), f i hi = ⨆ i, ⨆ (hi : p i), g i hi
state_after: case e_s
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
⊢ (fun i => ⨆ (hi : p i), f i hi) = fun i => ⨆ (hi : p i), g i hi
tactic: congr
state_before: case e_s
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
⊢ (fun i => ⨆ (hi : p i), f i hi) = fun i => ⨆ (hi : p i), g i hi
state_after: case e_s.h
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
i : ι
⊢ ⨆ (hi : p i), f i hi = ⨆ (hi : p i), g i hi
tactic: ext i
state_before: case e_s.h
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
i : ι
⊢ ⨆ (hi : p i), f i hi = ⨆ (hi : p i), g i hi
state_after: case e_s.h.e_s
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
i : ι
⊢ (fun hi => f i hi) = fun hi => g i hi
tactic: congr
state_before: case e_s.h.e_s
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
i : ι
⊢ (fun hi => f i hi) = fun hi => g i hi
state_after: case e_s.h.e_s.h
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
i : ι
hi : p i
⊢ f i hi = g i hi
tactic: ext hi
state_before: case e_s.h.e_s.h
α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : SupSet α
f✝ g✝ : ι → α
p : ι → Prop
f g : (i : ι) → p i → α
h : ∀ (i : ι) (hi : p i), f i hi = g i hi
i : ι
hi : p i
⊢ f i hi = g i hi
state_after: no goals
tactic: exact h i hi
Theorem: List.sum_range_succ'
File: Mathlib/Algebra/BigOperators/Group/List.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l l₁ l₂ : List M
a : M
f : ℕ → M
n : ℕ
⊢ 1 * f 0 = f 0 * 1
state_after: no goals
tactic: rw [one_mul, mul_one]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝² : Monoid M
inst✝¹ : Monoid N
inst✝ : Monoid P
l l₁ l₂ : List M
a : M
f : ℕ → M
n x✝ : ℕ
hd : (map f (range x✝.succ)).prod = f 0 * (map (fun i => f i.succ) (range x✝)).prod
⊢ (map f (range x✝.succ.succ)).prod = f 0 * (map (fun i => f i.succ) (range x✝.succ)).prod
state_after: no goals
tactic: rw [List.prod_range_succ, hd, mul_assoc, ← List.prod_range_succ]
Theorem: CategoryTheory.ShortComplex.leftHomologyMapIso'_inv
File: Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.112708, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
e : S₁ ≅ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ leftHomologyMap' e.hom h₁ h₂ ≫ leftHomologyMap' e.inv h₂ h₁ = 𝟙 h₁.H
state_after: no goals
tactic: rw [← leftHomologyMap'_comp, e.hom_inv_id, leftHomologyMap'_id]
state_before: C : Type u_1
inst✝¹ : Category.{?u.112708, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
e : S₁ ≅ S₂
h₁ : S₁.LeftHomologyData
h₂ : S₂.LeftHomologyData
⊢ leftHomologyMap' e.inv h₂ h₁ ≫ leftHomologyMap' e.hom h₁ h₂ = 𝟙 h₂.H
state_after: no goals
tactic: rw [← leftHomologyMap'_comp, e.inv_hom_id, leftHomologyMap'_id]
Theorem: SimpleGraph.Walk.IsEulerian.card_filter_odd_degree
File: Mathlib/Combinatorics/SimpleGraph/Trails.lean

Proof steps:
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
s : Finset V
h : s = Finset.filter (fun v => Odd (G.degree v)) Finset.univ
⊢ s.card = 0 ∨ s.card = 2
state_after: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ (Finset.filter (fun v => Odd (G.degree v)) Finset.univ).card = 0 ∨
    (Finset.filter (fun v => Odd (G.degree v)) Finset.univ).card = 2
tactic: subst s
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ (Finset.filter (fun v => Odd (G.degree v)) Finset.univ).card = 0 ∨
    (Finset.filter (fun v => Odd (G.degree v)) Finset.univ).card = 2
state_after: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ Finset.filter (fun v => ¬Even (G.degree v)) Finset.univ = ∅ ∨
    (Finset.filter (fun v => ¬Even (G.degree v)) Finset.univ).card = 2
tactic: simp only [Nat.odd_iff_not_even, Finset.card_eq_zero]
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ Finset.filter (fun v => ¬Even (G.degree v)) Finset.univ = ∅ ∨
    (Finset.filter (fun v => ¬Even (G.degree v)) Finset.univ).card = 2
state_after: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ Finset.filter (fun v_1 => ¬u = v ∧ (¬v_1 = u → v_1 = v)) Finset.univ = ∅ ∨
    (Finset.filter (fun v_1 => ¬u = v ∧ (¬v_1 = u → v_1 = v)) Finset.univ).card = 2
tactic: simp only [ht.even_degree_iff, Ne, not_forall, not_and, Classical.not_not, exists_prop]
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ Finset.filter (fun v_1 => ¬u = v ∧ (¬v_1 = u → v_1 = v)) Finset.univ = ∅ ∨
    (Finset.filter (fun v_1 => ¬u = v ∧ (¬v_1 = u → v_1 = v)) Finset.univ).card = 2
state_after: case inl
V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u : V
p : G.Walk u u
ht : p.IsEulerian
⊢ Finset.filter (fun v => ¬u = u ∧ (¬v = u → v = u)) Finset.univ = ∅ ∨
    (Finset.filter (fun v => ¬u = u ∧ (¬v = u → v = u)) Finset.univ).card = 2

case inr
V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
hn : u ≠ v
⊢ Finset.filter (fun v_1 => ¬u = v ∧ (¬v_1 = u → v_1 = v)) Finset.univ = ∅ ∨
    (Finset.filter (fun v_1 => ¬u = v ∧ (¬v_1 = u → v_1 = v)) Finset.univ).card = 2
tactic: obtain rfl | hn := eq_or_ne u v
Theorem: symmDiff_symmDiff_cancel_left
File: Mathlib/Order/SymmDiff.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : GeneralizedBooleanAlgebra α
a b c d : α
⊢ a ∆ (a ∆ b) = b
state_after: no goals
tactic: simp [← symmDiff_assoc]
Theorem: List.nthLe_tail
File: Mathlib/Data/List/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
i : ℕ
h : i < l.tail.length
⊢ i + 1 < l.length
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
i : ℕ
h : i < l.length - 1
⊢ i + 1 < l.length
tactic: simp only [length_tail] at h
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
i : ℕ
h : i < l.length - 1
⊢ i + 1 < l.length
state_after: no goals
tactic: omega
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ l : List α
i : ℕ
h : i < l.tail.length
h' : optParam (i + 1 < l.length) ⋯
⊢ l.tail.nthLe i h = l.nthLe (i + 1) h'
state_after: no goals
tactic: cases l <;> [cases h; rfl]
Theorem: UpperHalfPlane.dist_coe_center_sq
File: Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean

Proof steps:
state_before: z✝ w✝ : ℍ
r✝ R : ℝ
z w : ℍ
r : ℝ
⊢ dist ↑z ↑(w.center r) ^ 2 = 2 * z.im * w.im * (Real.cosh (dist z w) - Real.cosh r) + (w.im * Real.sinh r) ^ 2
state_after: z✝ w✝ : ℍ
r✝ R : ℝ
z w : ℍ
r : ℝ
H : 2 * z.im * w.im ≠ 0
⊢ dist ↑z ↑(w.center r) ^ 2 = 2 * z.im * w.im * (Real.cosh (dist z w) - Real.cosh r) + (w.im * Real.sinh r) ^ 2
tactic: have H : 2 * z.im * w.im ≠ 0 := by positivity
state_before: z✝ w✝ : ℍ
r✝ R : ℝ
z w : ℍ
r : ℝ
H : 2 * z.im * w.im ≠ 0
⊢ dist ↑z ↑(w.center r) ^ 2 = 2 * z.im * w.im * (Real.cosh (dist z w) - Real.cosh r) + (w.im * Real.sinh r) ^ 2
state_after: z✝ w✝ : ℍ
r✝ R : ℝ
z w : ℍ
r : ℝ
H : 2 * z.im * w.im ≠ 0
⊢ (z.re - w.re) ^ 2 + (z.im ^ 2 - 2 * z.im * (w.im * Real.cosh r) + w.im ^ 2 * (Real.sinh r ^ 2 + 1)) =
    (z.re - w.re) ^ 2 + z.im ^ 2 + w.im ^ 2 - 2 * z.im * w.im * Real.cosh r + w.im ^ 2 * Real.sinh r ^ 2
tactic: simp only [Complex.dist_eq, Complex.sq_abs, normSq_apply, coe_re, coe_im, center_re, center_im,
    cosh_dist', mul_div_cancel₀ _ H, sub_sq z.im, mul_pow, Real.cosh_sq, sub_re, sub_im, mul_sub, ←
    sq]
state_before: z✝ w✝ : ℍ
r✝ R : ℝ
z w : ℍ
r : ℝ
H : 2 * z.im * w.im ≠ 0
⊢ (z.re - w.re) ^ 2 + (z.im ^ 2 - 2 * z.im * (w.im * Real.cosh r) + w.im ^ 2 * (Real.sinh r ^ 2 + 1)) =
    (z.re - w.re) ^ 2 + z.im ^ 2 + w.im ^ 2 - 2 * z.im * w.im * Real.cosh r + w.im ^ 2 * Real.sinh r ^ 2
state_after: no goals
tactic: ring
Theorem: toArithmeticFunction_congr
File: Mathlib/NumberTheory/LSeries/Convolution.lean

Proof steps:
state_before: R : Type u_1
inst✝ : Zero R
f f' : ℕ → R
h : ∀ {n : ℕ}, n ≠ 0 → f n = f' n
⊢ toArithmeticFunction f = toArithmeticFunction f'
state_after: case h.zero
R : Type u_1
inst✝ : Zero R
f f' : ℕ → R
h : ∀ {n : ℕ}, n ≠ 0 → f n = f' n
⊢ (toArithmeticFunction f) 0 = (toArithmeticFunction f') 0

case h.succ
R : Type u_1
inst✝ : Zero R
f f' : ℕ → R
h : ∀ {n : ℕ}, n ≠ 0 → f n = f' n
n✝ : ℕ
⊢ (toArithmeticFunction f) (n✝ + 1) = (toArithmeticFunction f') (n✝ + 1)
tactic: ext ⟨- | _⟩
Theorem: MonoidHom.map_mulIndicator
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
M : Type u_6
N : Type u_7
inst✝¹ : MulOneClass M
inst✝ : MulOneClass N
f : M →* N
s : Set α
g : α → M
x : α
⊢ f (s.mulIndicator g x) = s.mulIndicator (⇑f ∘ g) x
state_after: no goals
tactic: simp [Set.mulIndicator_comp_of_one]
Theorem: Finset.support_prod
File: Mathlib/Algebra/BigOperators/GroupWithZero/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
G₀ : Type u_3
M₀ : Type u_4
inst✝³ : CommMonoidWithZero M₀
p : ι → Prop
inst✝² : DecidablePred p
f✝ : ι → M₀
s✝ : Finset ι
i : ι
inst✝¹ : Nontrivial M₀
inst✝ : NoZeroDivisors M₀
s : Finset ι
f : ι → κ → M₀
x : κ
⊢ (x ∈ support fun j => ∏ i ∈ s, f i j) ↔ x ∈ ⋂ i ∈ s, support (f i)
state_after: no goals
tactic: simp [support, prod_eq_zero_iff]
Theorem: MeasureTheory.IsStoppingTime.measurableSet_eq'
File: Mathlib/Probability/Process/Stopping.lean

Proof steps:
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
⊢ MeasurableSet {ω | τ ω = i}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
⊢ MeasurableSet (Set.univ ∩ {ω | τ ω = i})
tactic: ← Set.univ_inter {ω | τ ω = i},
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
⊢ MeasurableSet (Set.univ ∩ {ω | τ ω = i})
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
⊢ MeasurableSet {ω | τ ω = i}
tactic: Set.univ_inter
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
⊢ MeasurableSet {ω | τ ω = i}
state_after: no goals
tactic: exact hτ.measurableSet_eq i
Theorem: List.Ico.filter_le_of_bot
File: Mathlib/Data/List/Intervals.lean

Proof steps:
state_before: n m : ℕ
hnm : n < m
⊢ filter (fun x => decide (x ≤ n)) (Ico n m) = [n]
state_after: n m : ℕ
hnm : n < m
⊢ filter (fun x => decide (x ≤ n)) (Ico n m) = filter (fun x => decide (x < n + 1)) (Ico n m)
tactic: rw [← filter_lt_of_succ_bot hnm]
state_before: n m : ℕ
hnm : n < m
⊢ filter (fun x => decide (x ≤ n)) (Ico n m) = filter (fun x => decide (x < n + 1)) (Ico n m)
state_after: no goals
tactic: exact filter_congr fun _ _ => by
    simpa using Nat.lt_succ_iff.symm