ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Function.Semiconj.trans
File: Mathlib/Logic/Function/Conjugate.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f fab : α → β
fbc : β → γ
ga ga' : α → α
gb gb' : β → β
gc gc' : γ → γ
hab : Semiconj fab ga gb
hbc : Semiconj fbc gb gc
x : α
⊢ (fbc ∘ fab) (ga x) = gc ((fbc ∘ fab) x)
state_after: no goals
tactic: simp only [comp_apply, hab.eq, hbc.eq]
Theorem: tsum_of_nnnorm_bounded
File: Mathlib/Analysis/Normed/Group/InfiniteSum.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
E : Type u_3
F : Type u_4
inst✝¹ : SeminormedAddCommGroup E
inst✝ : SeminormedAddCommGroup F
f : ι → E
g : ι → ℝ≥0
a : ℝ≥0
hg : HasSum g a
h : ∀ (i : ι), ‖f i‖₊ ≤ g i
⊢ ‖∑' (i : ι), f i‖₊ ≤ a
state_after: ι : Type u_1
α : Type u_2
E : Type u_3
F : Type u_4
inst✝¹ : SeminormedAddCommGroup E
inst✝ : SeminormedAddCommGroup F
f : ι → E
g : ι → ℝ≥0
a : ℝ≥0
hg : HasSum (fun a => ↑(g a)) ↑a
h : ∀ (i : ι), ‖f i‖ ≤ ↑(g i)
⊢ ‖∑' (i : ι), f i‖ ≤ ↑a
tactic: simp only [← NNReal.coe_le_coe, ← NNReal.hasSum_coe, coe_nnnorm] at *
state_before: ι : Type u_1
α : Type u_2
E : Type u_3
F : Type u_4
inst✝¹ : SeminormedAddCommGroup E
inst✝ : SeminormedAddCommGroup F
f : ι → E
g : ι → ℝ≥0
a : ℝ≥0
hg : HasSum (fun a => ↑(g a)) ↑a
h : ∀ (i : ι), ‖f i‖ ≤ ↑(g i)
⊢ ‖∑' (i : ι), f i‖ ≤ ↑a
state_after: no goals
tactic: exact tsum_of_norm_bounded hg h
Theorem: IsNilpotent.pow_of_pos
File: Mathlib/RingTheory/Nilpotent/Defs.lean

Proof steps:
state_before: R : Type u_1
S✝ : Type u_2
x✝ y : R
n : ℕ
S : Type u_3
inst✝ : MonoidWithZero S
x : S
hx : IsNilpotent x
hn : n ≠ 0
⊢ IsNilpotent (x ^ n)
state_after: no goals
tactic: cases n with
  | zero => contradiction
  | succ => exact  IsNilpotent.pow_succ _ hx
Theorem: Real.exp_half
File: Mathlib/Analysis/SpecialFunctions/Exp.lean

Proof steps:
state_before: α : Type u_1
x✝ y z : ℝ
l : Filter α
x : ℝ
⊢ rexp (x / 2) = √(rexp x)
state_after: no goals
tactic: rw [eq_comm, sqrt_eq_iff_sq_eq, sq, ← exp_add, add_halves] <;> exact (exp_pos _).le
Theorem: CategoryTheory.OplaxNatTrans.rightUnitor_inv_app
File: Mathlib/CategoryTheory/Bicategory/FunctorBicategory.lean

Proof steps:
state_before: B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H I : OplaxFunctor B C
η : F ⟶ G
⊢ ∀ {a b : B} (f : a ⟶ b),
    F.map f ◁ ((fun a => ρ_ (η.app a)) b).hom ≫ η.naturality f =
      (η ≫ 𝟙 G).naturality f ≫ ((fun a => ρ_ (η.app a)) a).hom ▷ G.map f
state_after: no goals
tactic: aesop_cat
Theorem: dirSupInacc_iff_forall_sSup
File: Mathlib/Topology/Order/ScottTopology.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : CompleteLattice α
s t : Set α
⊢ DirSupInacc s ↔ ∀ ⦃d : Set α⦄, d.Nonempty → DirectedOn (fun x x_1 => x ≤ x_1) d → sSup d ∈ s → (d ∩ s).Nonempty
state_after: no goals
tactic: simp [DirSupInacc, isLUB_iff_sSup_eq]
Theorem: Subgroup.pi_mem_of_mulSingle_mem
File: Mathlib/Algebra/Group/Subgroup/Finite.lean

Proof steps:
state_before: G : Type u_1
inst✝⁴ : Group G
A : Type u_2
inst✝³ : AddGroup A
η : Type u_3
f : η → Type u_4
inst✝² : (i : η) → Group (f i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
H : Subgroup ((i : η) → f i)
x : (i : η) → f i
h : ∀ (i : η), Pi.mulSingle i (x i) ∈ H
⊢ x ∈ H
state_after: case intro
G : Type u_1
inst✝⁴ : Group G
A : Type u_2
inst✝³ : AddGroup A
η : Type u_3
f : η → Type u_4
inst✝² : (i : η) → Group (f i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
H : Subgroup ((i : η) → f i)
x : (i : η) → f i
h : ∀ (i : η), Pi.mulSingle i (x i) ∈ H
val✝ : Fintype η
⊢ x ∈ H
tactic: cases nonempty_fintype η
state_before: case intro
G : Type u_1
inst✝⁴ : Group G
A : Type u_2
inst✝³ : AddGroup A
η : Type u_3
f : η → Type u_4
inst✝² : (i : η) → Group (f i)
inst✝¹ : Finite η
inst✝ : DecidableEq η
H : Subgroup ((i : η) → f i)
x : (i : η) → f i
h : ∀ (i : η), Pi.mulSingle i (x i) ∈ H
val✝ : Fintype η
⊢ x ∈ H
state_after: no goals
tactic: exact pi_mem_of_mulSingle_mem_aux Finset.univ x (by simp) fun i _ => h i
Theorem: Equiv.Perm.sign_sumCongr
File: Mathlib/GroupTheory/Perm/Sign.lean

Proof steps:
state_before: α : Type u
inst✝³ : DecidableEq α
β : Type v
inst✝² : Fintype α
inst✝¹ : DecidableEq β
inst✝ : Fintype β
σa : Perm α
σb : Perm β
⊢ sign (σa.sumCongr σb) = sign σa * sign σb
state_after: α : Type u
inst✝³ : DecidableEq α
β : Type v
inst✝² : Fintype α
inst✝¹ : DecidableEq β
inst✝ : Fintype β
σa : Perm α
σb : Perm β
⊢ sign (σa.sumCongr 1) = sign σa ∧ sign (sumCongr 1 σb) = sign σb
tactic: suffices sign (sumCongr σa (1 : Perm β)) = sign σa ∧ sign (sumCongr (1 : Perm α) σb) = sign σb
    by rw [← this.1, ← this.2, ← sign_mul, sumCongr_mul, one_mul, mul_one]
state_before: α : Type u
inst✝³ : DecidableEq α
β : Type v
inst✝² : Fintype α
inst✝¹ : DecidableEq β
inst✝ : Fintype β
σa : Perm α
σb : Perm β
⊢ sign (σa.sumCongr 1) = sign σa ∧ sign (sumCongr 1 σb) = sign σb
state_after: case left
α : Type u
inst✝³ : DecidableEq α
β : Type v
inst✝² : Fintype α
inst✝¹ : DecidableEq β
inst✝ : Fintype β
σa : Perm α
σb : Perm β
⊢ sign (σa.sumCongr 1) = sign σa

case right
α : Type u
inst✝³ : DecidableEq α
β : Type v
inst✝² : Fintype α
inst✝¹ : DecidableEq β
inst✝ : Fintype β
σa : Perm α
σb : Perm β
⊢ sign (sumCongr 1 σb) = sign σb
tactic: constructor
Theorem: IsPrimitiveRoot.norm_toInteger_sub_one_of_prime_ne_two
File: Mathlib/NumberTheory/Cyclotomic/Rat.lean

Proof steps:
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝² : Field K
inst✝¹ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
inst✝ : IsCyclotomicExtension {p ^ (k + 1)} ℚ K
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hodd : p ≠ 2
⊢ (Algebra.norm ℤ) (hζ.toInteger - 1) = ↑↑p
state_after: no goals
tactic: simpa only [pow_zero, pow_one] using
    hζ.norm_toInteger_pow_sub_one_of_prime_ne_two (Nat.zero_le _) hodd
Theorem: exists_norm_eq
File: Mathlib/Analysis/NormedSpace/Real.lean

Proof steps:
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
⊢ ∃ x, ‖x‖ = c
state_after: case intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
x : E
hx : x ≠ 0
⊢ ∃ x, ‖x‖ = c
tactic: rcases exists_ne (0 : E) with ⟨x, hx⟩
state_before: case intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
x : E
hx : x ≠ 0
⊢ ∃ x, ‖x‖ = c
state_after: case intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
x : E
hx : ‖x‖ ≠ 0
⊢ ∃ x, ‖x‖ = c
tactic: rw [← norm_ne_zero_iff] at hx
state_before: case intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
x : E
hx : ‖x‖ ≠ 0
⊢ ∃ x, ‖x‖ = c
state_after: case h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
x : E
hx : ‖x‖ ≠ 0
⊢ ‖c • ‖x‖⁻¹ • x‖ = c
tactic: use c • ‖x‖⁻¹ • x
state_before: case h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : Nontrivial E
c : ℝ
hc : 0 ≤ c
x : E
hx : ‖x‖ ≠ 0
⊢ ‖c • ‖x‖⁻¹ • x‖ = c
state_after: no goals
tactic: simp [norm_smul, Real.norm_of_nonneg hc, abs_of_nonneg hc, inv_mul_cancel hx]
Theorem: CategoryTheory.Bicategory.pentagon_inv_hom_hom_hom_hom
File: Mathlib/CategoryTheory/Bicategory/Basic.lean

Proof steps:
state_before: B : Type u
inst✝ : Bicategory B
a b c d e : B
f : a ⟶ b
g : b ⟶ c
h : c ⟶ d
i : d ⟶ e
⊢ (α_ f g h).inv ▷ i ≫ (α_ (f ≫ g) h i).hom ≫ (α_ f g (h ≫ i)).hom = (α_ f (g ≫ h) i).hom ≫ f ◁ (α_ g h i).hom
state_after: no goals
tactic: simp [← cancel_epi ((α_ f g h).hom ▷ i)]
Theorem: tendsto_pi_nhds
File: Mathlib/Topology/Constructions.lean

Proof steps:
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
ι : Type u_5
π : ι → Type u_6
κ : Type u_7
inst✝ : TopologicalSpace X
T : (i : ι) → TopologicalSpace (π i)
f✝ : X → (i : ι) → π i
f : Y → (i : ι) → π i
g : (i : ι) → π i
u : Filter Y
⊢ Tendsto f u (𝓝 g) ↔ ∀ (x : ι), Tendsto (fun i => f i x) u (𝓝 (g x))
state_after: no goals
tactic: rw [nhds_pi, Filter.tendsto_pi]
Theorem: Finset.mulETransformRight.fst_mul_snd_subset
File: Mathlib/Combinatorics/Additive/ETransform.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ (mulETransformRight e x).1 * (mulETransformRight e x).2 ⊆ x.1 * x.2
state_after: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ op e • x.1 * e⁻¹ • x.2 ⊆ x.1 * x.2
tactic: refine union_mul_inter_subset_union.trans (union_subset Subset.rfl ?_)
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Group α
e : α
x : Finset α × Finset α
⊢ op e • x.1 * e⁻¹ • x.2 ⊆ x.1 * x.2
state_after: no goals
tactic: rw [op_smul_finset_mul_eq_mul_smul_finset, smul_inv_smul]
Theorem: List.getElem?_enumFrom
File: Mathlib/Data/List/Enum.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n : ℕ
a : α
l : List α
⊢ (enumFrom n (a :: l))[0]? = Option.map (fun a => (n + 0, a)) (a :: l)[0]?
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type u_2
n : ℕ
a : α
l : List α
m : ℕ
⊢ (enumFrom n (a :: l))[m + 1]? = Option.map (fun a => (n + (m + 1), a)) (a :: l)[m + 1]?
state_after: α : Type u_1
β : Type u_2
n : ℕ
a : α
l : List α
m : ℕ
⊢ (enumFrom (n + 1) l)[m]? = Option.map (fun a => (n + (m + 1), a)) l[m]?
tactic: simp only [enumFrom_cons, getElem?_cons_succ]
state_before: α : Type u_1
β : Type u_2
n : ℕ
a : α
l : List α
m : ℕ
⊢ (enumFrom (n + 1) l)[m]? = Option.map (fun a => (n + (m + 1), a)) l[m]?
state_after: no goals
tactic: exact (getElem?_enumFrom (n + 1) l m).trans <| by rw [Nat.add_right_comm]; rfl
Theorem: mem_emetric_ball_zero_iff
File: Mathlib/Analysis/Normed/Group/Basic.lean

Proof steps:
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝³ : SeminormedGroup E
inst✝² : SeminormedGroup F
inst✝¹ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r✝ r₁ r₂ : ℝ
inst✝ : FunLike 𝓕 E F
r : ℝ≥0∞
⊢ a ∈ EMetric.ball 1 r ↔ ↑‖a‖₊ < r
state_after: no goals
tactic: rw [EMetric.mem_ball, edist_eq_coe_nnnorm']
Theorem: dist_add_self_left
File: Mathlib/Analysis/Normed/Group/Uniform.lean

Proof steps:
state_before: 𝓕 : Type u_1
α : Type u_2
E : Type u_3
F : Type u_4
inst✝¹ : SeminormedGroup E
inst✝ : SeminormedGroup F
s : Set E
a✝ a₁ a₂ b✝ b₁ b₂ : E
r r₁ r₂ : ℝ
a b : E
⊢ dist (a * b) b = ‖a‖
state_after: no goals
tactic: rw [dist_comm, dist_mul_self_right]
Theorem: WithBot.image_coe_Ioc
File: Mathlib/Order/Interval/Set/WithBotTop.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Preorder α
a b : α
⊢ some '' Ioc a b = Ioc ↑a ↑b
state_after: no goals
tactic: rw [← preimage_coe_Ioc, image_preimage_eq_inter_range, range_coe,
    inter_eq_self_of_subset_left (Subset.trans Ioc_subset_Ioi_self <| Ioi_subset_Ioi bot_le)]
Theorem: limsup_eq_tendsto_sum_indicator_nat_atTop
File: Mathlib/Topology/Algebra/Order/LiminfLimsup.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
⊢ limsup s atTop = {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop}
state_after: case h
ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
ω : α
⊢ ω ∈ limsup s atTop ↔ ω ∈ {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop}
tactic: ext ω
state_before: case h
ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
ω : α
⊢ ω ∈ limsup s atTop ↔ ω ∈ {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop}
state_after: case h
ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
ω : α
⊢ (∀ (i : ℕ), ∃ i_1 ≥ i, ω ∈ s i_1) ↔
    ω ∈ {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop}
tactic: simp only [limsup_eq_iInf_iSup_of_nat, Set.iSup_eq_iUnion, Set.iInf_eq_iInter,
    Set.mem_iInter, Set.mem_iUnion, exists_prop]
state_before: case h
ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
ω : α
⊢ (∀ (i : ℕ), ∃ i_1 ≥ i, ω ∈ s i_1) ↔
    ω ∈ {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop}
state_after: case h.mp
ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
ω : α
⊢ (∀ (i : ℕ), ∃ i_1 ≥ i, ω ∈ s i_1) →
    ω ∈ {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop}

case h.mpr
ι : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
S : Type u_5
π : ι → Type u_6
s : ℕ → Set α
ω : α
⊢ ω ∈ {ω | Tendsto (fun n => ∑ k ∈ Finset.range n, (s (k + 1)).indicator 1 ω) atTop atTop} →
    ∀ (i : ℕ), ∃ i_1 ≥ i, ω ∈ s i_1
tactic: constructor
Theorem: AlgebraicTopology.DoldKan.natTransPInfty_app
File: Mathlib/AlgebraicTopology/DoldKan/PInfty.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.77057, u_1} C
inst✝ : Preadditive C
X✝ X Y : SimplicialObject C
f : X ⟶ Y
⊢ (alternatingFaceMapComplex C).map f ≫ (fun x => PInfty) Y = (fun x => PInfty) X ≫ (alternatingFaceMapComplex C).map f
state_after: case h
C : Type u_1
inst✝¹ : Category.{?u.77057, u_1} C
inst✝ : Preadditive C
X✝ X Y : SimplicialObject C
f : X ⟶ Y
n : ℕ
⊢ ((alternatingFaceMapComplex C).map f ≫ (fun x => PInfty) Y).f n =
    ((fun x => PInfty) X ≫ (alternatingFaceMapComplex C).map f).f n
tactic: ext n
state_before: case h
C : Type u_1
inst✝¹ : Category.{?u.77057, u_1} C
inst✝ : Preadditive C
X✝ X Y : SimplicialObject C
f : X ⟶ Y
n : ℕ
⊢ ((alternatingFaceMapComplex C).map f ≫ (fun x => PInfty) Y).f n =
    ((fun x => PInfty) X ≫ (alternatingFaceMapComplex C).map f).f n
state_after: no goals
tactic: exact PInfty_f_naturality n f
Theorem: CategoryTheory.Limits.HasImage.uniq
File: Mathlib/CategoryTheory/Limits/Shapes/Images.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y : C
f : X ⟶ Y
inst✝ : HasImage f
F' : MonoFactorisation f
l : image f ⟶ F'.I
w : l ≫ F'.m = image.ι f
⊢ l ≫ F'.m = image.lift F' ≫ F'.m
state_after: no goals
tactic: simp [w]
Theorem: gcd_eq_of_dvd_sub_left
File: Mathlib/Algebra/GCDMonoid/Basic.lean

Proof steps:
state_before: α : Type u_1
inst✝² : CommRing α
inst✝¹ : IsDomain α
inst✝ : NormalizedGCDMonoid α
a b c : α
h : a ∣ b - c
⊢ gcd b a = gcd c a
state_after: no goals
tactic: rw [gcd_comm _ a, gcd_comm _ a, gcd_eq_of_dvd_sub_right h]
Theorem: Fintype.sum_fiberwise
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : ι → α
⊢ ∏ j : κ, ∏ i : { i // g i = j }, f ↑i = ∏ i : ι, f i
state_after: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : ι → α
⊢ ∏ j : κ, ∏ i : { i // g i = j }, f ↑i = ∏ j : κ, ∏ i ∈ filter (fun i => g i = j) univ, f i
tactic: rw [← Finset.prod_fiberwise _ g f]
state_before: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : ι → α
⊢ ∏ j : κ, ∏ i : { i // g i = j }, f ↑i = ∏ j : κ, ∏ i ∈ filter (fun i => g i = j) univ, f i
state_after: case e_f.h
ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : ι → α
j : κ
⊢ ∏ i : { i // g i = j }, f ↑i = ∏ i ∈ filter (fun i => g i = j) univ, f i
tactic: congr with j
state_before: case e_f.h
ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s s₁ s₂ : Finset α✝
a : α✝
f✝ g✝ : α✝ → β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝³ : Fintype ι
inst✝² : Fintype κ
inst✝¹ : CommMonoid α
inst✝ : DecidableEq κ
g : ι → κ
f : ι → α
j : κ
⊢ ∏ i : { i // g i = j }, f ↑i = ∏ i ∈ filter (fun i => g i = j) univ, f i
state_after: no goals
tactic: exact (prod_subtype _ (by simp) _).symm
Theorem: Finset.image₂_singleton
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 : γ
⊢ image₂ f {a} {b} = {f a b}
state_after: no goals
tactic: simp
Theorem: Set.exists_isOpen_lt_of_lt
File: Mathlib/MeasureTheory/Measure/Regular.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : TopologicalSpace α
μ : Measure α
inst✝ : μ.OuterRegular
A : Set α
r : ℝ≥0∞
hr : μ A < r
⊢ ∃ U ⊇ A, IsOpen U ∧ μ U < r
state_after: case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : TopologicalSpace α
μ : Measure α
inst✝ : μ.OuterRegular
A : Set α
r : ℝ≥0∞
hr : μ A < r
U : Set α
hAU : U ⊇ toMeasurable μ A
hUo : IsOpen U
hU : μ U < r
⊢ ∃ U ⊇ A, IsOpen U ∧ μ U < r
tactic: rcases OuterRegular.outerRegular (measurableSet_toMeasurable μ A) r
      (by rwa [measure_toMeasurable]) with
    ⟨U, hAU, hUo, hU⟩
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : MeasurableSpace α
inst✝¹ : TopologicalSpace α
μ : Measure α
inst✝ : μ.OuterRegular
A : Set α
r : ℝ≥0∞
hr : μ A < r
U : Set α
hAU : U ⊇ toMeasurable μ A
hUo : IsOpen U
hU : μ U < r
⊢ ∃ U ⊇ A, IsOpen U ∧ μ U < r
state_after: no goals
tactic: exact ⟨U, (subset_toMeasurable _ _).trans hAU, hUo, hU⟩
Theorem: SimpleGraph.neighborSet_fst_subgraphOfAdj
File: Mathlib/Combinatorics/SimpleGraph/Subgraph.lean

Proof steps:
state_before: ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G' : SimpleGraph W
v w : V
hvw : G.Adj v w
⊢ (G.subgraphOfAdj hvw).neighborSet v = {w}
state_after: case h
ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G' : SimpleGraph W
v w : V
hvw : G.Adj v w
u : V
⊢ u ∈ (G.subgraphOfAdj hvw).neighborSet v ↔ u ∈ {w}
tactic: ext u
state_before: case h
ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G' : SimpleGraph W
v w : V
hvw : G.Adj v w
u : V
⊢ u ∈ (G.subgraphOfAdj hvw).neighborSet v ↔ u ∈ {w}
state_after: case h
ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G' : SimpleGraph W
v w : V
hvw : G.Adj v w
u : V
⊢ w = u ↔ u = w
tactic: suffices w = u ↔ u = w by simpa [hvw.ne.symm] using this
state_before: case h
ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G' : SimpleGraph W
v w : V
hvw : G.Adj v w
u : V
⊢ w = u ↔ u = w
state_after: no goals
tactic: rw [eq_comm]
Theorem: NumberField.hermiteTheorem.natDegree_le_rankOfDiscrBdd
File: Mathlib/NumberTheory/NumberField/Discriminant.lean

Proof steps:
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
A : Type u_2
inst✝¹ : Field A
inst✝ : CharZero A
N : ℕ
hK : |discr K| ≤ ↑N
a : 𝓞 K
h : ℚ⟮↑a⟯ = ⊤
⊢ (minpoly ℤ ↑a).natDegree ≤ rankOfDiscrBdd N
state_after: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
A : Type u_2
inst✝¹ : Field A
inst✝ : CharZero A
N : ℕ
hK : |discr K| ≤ ↑N
a : 𝓞 K
h : (minpoly ℤ ((algebraMap (𝓞 K) K) a)).natDegree = finrank ℚ K
⊢ (minpoly ℤ ↑a).natDegree ≤ rankOfDiscrBdd N
tactic: rw [Field.primitive_element_iff_minpoly_natDegree_eq,
    minpoly.isIntegrallyClosed_eq_field_fractions' ℚ a.isIntegral_coe,
    (minpoly.monic a.isIntegral_coe).natDegree_map] at h
state_before: K : Type u_1
inst✝³ : Field K
inst✝² : NumberField K
A : Type u_2
inst✝¹ : Field A
inst✝ : CharZero A
N : ℕ
hK : |discr K| ≤ ↑N
a : 𝓞 K
h : (minpoly ℤ ((algebraMap (𝓞 K) K) a)).natDegree = finrank ℚ K
⊢ (minpoly ℤ ↑a).natDegree ≤ rankOfDiscrBdd N
state_after: no goals
tactic: exact h.symm ▸ rank_le_rankOfDiscrBdd hK
Theorem: Mathlib.Vector.ofFn_get
File: Mathlib/Data/Vector/Basic.lean

Proof steps:
state_before: n : ℕ
α : Type u_1
v : Vector α n
⊢ ofFn v.get = v
state_after: case mk
α : Type u_1
l : List α
⊢ ofFn (get ⟨l, ⋯⟩) = ⟨l, ⋯⟩
tactic: rcases v with ⟨l, rfl⟩
state_before: case mk
α : Type u_1
l : List α
⊢ ofFn (get ⟨l, ⋯⟩) = ⟨l, ⋯⟩
state_after: case mk.a
α : Type u_1
l : List α
⊢ (ofFn (get ⟨l, ⋯⟩)).toList = toList ⟨l, ⋯⟩
tactic: apply toList_injective
state_before: case mk.a
α : Type u_1
l : List α
⊢ (ofFn (get ⟨l, ⋯⟩)).toList = toList ⟨l, ⋯⟩
state_after: case mk.a
α : Type u_1
l : List α
⊢ (ofFn (get ⟨l, ⋯⟩)).toList = l
tactic: dsimp
state_before: case mk.a
α : Type u_1
l : List α
⊢ (ofFn (get ⟨l, ⋯⟩)).toList = l
state_after: no goals
tactic: simpa only [toList_ofFn] using List.ofFn_get _
Theorem: Diffeomorph.uniqueDiffOn_image
File: Mathlib/Geometry/Manifold/Diffeomorph.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝²⁰ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹⁹ : NormedAddCommGroup E
inst✝¹⁸ : NormedSpace 𝕜 E
E' : Type u_3
inst✝¹⁷ : NormedAddCommGroup E'
inst✝¹⁶ : NormedSpace 𝕜 E'
F : Type u_4
inst✝¹⁵ : NormedAddCommGroup F
inst✝¹⁴ : NormedSpace 𝕜 F
H : Type u_5
inst✝¹³ : TopologicalSpace H
H' : Type u_6
inst✝¹² : TopologicalSpace H'
G : Type u_7
inst✝¹¹ : TopologicalSpace G
G' : Type u_8
inst✝¹⁰ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
J : ModelWithCorners 𝕜 F G
J' : ModelWithCorners 𝕜 F G'
M : Type u_9
inst✝⁹ : TopologicalSpace M
inst✝⁸ : ChartedSpace H M
M' : Type u_10
inst✝⁷ : TopologicalSpace M'
inst✝⁶ : ChartedSpace H' M'
N : Type u_11
inst✝⁵ : TopologicalSpace N
inst✝⁴ : ChartedSpace G N
N' : Type u_12
inst✝³ : TopologicalSpace N'
inst✝² : ChartedSpace G' N'
n : ℕ∞
inst✝¹ : SmoothManifoldWithCorners I M
inst✝ : SmoothManifoldWithCorners J N
h : E ≃ₘ^n⟮𝓘(𝕜, E), 𝓘(𝕜, F)⟯ F
hn : 1 ≤ n
s : Set E
⊢ UniqueDiffOn 𝕜 (⇑h '' s) ↔ UniqueDiffOn 𝕜 s
state_after: no goals
tactic: simp only [← uniqueMDiffOn_iff_uniqueDiffOn, uniqueMDiffOn_image, hn]
Theorem: SimpleGraph.dist_eq_zero_of_not_reachable
File: Mathlib/Combinatorics/SimpleGraph/Metric.lean

Proof steps:
state_before: V : Type u_1
G : SimpleGraph V
u v w : V
h : ¬G.Reachable u v
⊢ G.dist u v = 0
state_after: no goals
tactic: simp [h]
Theorem: MeasureTheory.ae_imp_of_ae_restrict
File: Mathlib/MeasureTheory/Measure/Restrict.lean

Proof steps:
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t s : Set α
p : α → Prop
h : ∀ᵐ (x : α) ∂μ.restrict s, p x
⊢ ∀ᵐ (x : α) ∂μ, x ∈ s → p x
state_after: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t s : Set α
p : α → Prop
h : (μ.restrict s) {a | ¬p a} = 0
⊢ μ {a | ¬(a ∈ s → p a)} = 0
tactic: simp only [ae_iff] at h ⊢
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t s : Set α
p : α → Prop
h : (μ.restrict s) {a | ¬p a} = 0
⊢ μ {a | ¬(a ∈ s → p a)} = 0
state_after: no goals
tactic: simpa [setOf_and, inter_comm] using measure_inter_eq_zero_of_restrict h