ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: IsClosed.add_right_of_isCompact
File: Mathlib/Topology/Algebra/Group/Basic.lean

Proof steps:
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝² : TopologicalSpace G
inst✝¹ : Group G
inst✝ : TopologicalGroup G
s t : Set G
ht : IsClosed t
hs : IsCompact s
⊢ IsClosed (t * s)
state_after: G : Type w
H : Type x
α : Type u
β : Type v
inst✝² : TopologicalSpace G
inst✝¹ : Group G
inst✝ : TopologicalGroup G
s t : Set G
ht : IsClosed t
hs : IsCompact s
⊢ IsClosed (op '' s • t)
tactic: rw [← image_op_smul]
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝² : TopologicalSpace G
inst✝¹ : Group G
inst✝ : TopologicalGroup G
s t : Set G
ht : IsClosed t
hs : IsCompact s
⊢ IsClosed (op '' s • t)
state_after: no goals
tactic: exact IsClosed.smul_left_of_isCompact ht (hs.image continuous_op)
Theorem: MeasureTheory.L1.SimpleFunc.setToL1SCLM_congr_left
File: Mathlib/MeasureTheory/Integral/SetToL1.lean

Proof steps:
state_before: α : Type u_1
E : Type u_2
F : Type u_3
F' : Type u_4
G : Type u_5
𝕜 : Type u_6
p : ℝ≥0∞
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace ℝ E
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace ℝ F
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace ℝ F'
inst✝³ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝² : NormedField 𝕜
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace 𝕜 F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
hT : DominatedFinMeasAdditive μ T C
hT' : DominatedFinMeasAdditive μ T' C'
h : T = T'
f : ↥(simpleFunc E 1 μ)
x✝² : Set α
x✝¹ : MeasurableSet x✝²
x✝ : μ x✝² < ⊤
⊢ T x✝² = T' x✝²
state_after: no goals
tactic: rw [h]
Theorem: Finset.Nonempty.sup_eq_top_iff
File: Mathlib/Data/Finset/Lattice.lean

Proof steps:
state_before: F : Type u_1
α✝ : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝³ : LinearOrder α✝
inst✝² : OrderBot α✝
s✝ : Finset ι
f✝ : ι → α✝
a : α✝
α : Type u_7
inst✝¹ : LinearOrder α
inst✝ : BoundedOrder α
s : Finset ι
f : ι → α
hs : s.Nonempty
⊢ s.sup f = ⊤ ↔ ∃ b ∈ s, f b = ⊤
state_after: case inl
F : Type u_1
α✝ : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝³ : LinearOrder α✝
inst✝² : OrderBot α✝
s✝ : Finset ι
f✝ : ι → α✝
a : α✝
α : Type u_7
inst✝¹ : LinearOrder α
inst✝ : BoundedOrder α
s : Finset ι
f : ι → α
hs : s.Nonempty
h✝ : Subsingleton α
⊢ s.sup f = ⊤ ↔ ∃ b ∈ s, f b = ⊤

case inr
F : Type u_1
α✝ : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝³ : LinearOrder α✝
inst✝² : OrderBot α✝
s✝ : Finset ι
f✝ : ι → α✝
a : α✝
α : Type u_7
inst✝¹ : LinearOrder α
inst✝ : BoundedOrder α
s : Finset ι
f : ι → α
hs : s.Nonempty
h✝ : Nontrivial α
⊢ s.sup f = ⊤ ↔ ∃ b ∈ s, f b = ⊤
tactic: cases subsingleton_or_nontrivial α
Theorem: PresheafOfModules.restriction_app
File: Mathlib/Algebra/Category/ModuleCat/Presheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
X Y : Cᵒᵖ
f : X ⟶ Y
M N : PresheafOfModules R
φ : M ⟶ N
⊢ (evaluation R X).map φ ≫ restrictionApp f N =
    restrictionApp f M ≫ (evaluation R Y ⋙ ModuleCat.restrictScalars (R.map f)).map φ
state_after: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
X Y : Cᵒᵖ
f : X ⟶ Y
M N : PresheafOfModules R
φ : M ⟶ N
x : ↑((evaluation R X).obj M)
⊢ ((evaluation R X).map φ ≫ restrictionApp f N) x =
    (restrictionApp f M ≫ (evaluation R Y ⋙ ModuleCat.restrictScalars (R.map f)).map φ) x
tactic: ext x
state_before: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
X Y : Cᵒᵖ
f : X ⟶ Y
M N : PresheafOfModules R
φ : M ⟶ N
x : ↑((evaluation R X).obj M)
⊢ ((evaluation R X).map φ ≫ restrictionApp f N) x =
    (restrictionApp f M ≫ (evaluation R Y ⋙ ModuleCat.restrictScalars (R.map f)).map φ) x
state_after: no goals
tactic: exact (congr_hom (φ.hom.naturality f) x).symm
Theorem: IsAddSubgroup.neg_mem_iff
File: Mathlib/Deprecated/Subgroup.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
A : Type u_3
a a₁ a₂ b c : G
inst✝ : Group G
s : Set G
hs : IsSubgroup s
h : a⁻¹ ∈ s
⊢ a ∈ s
state_after: no goals
tactic: simpa using hs.inv_mem h
Theorem: Set.disjoint_image_image
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β
s✝ t✝ : Set α
f : β → α
g : γ → α
s : Set β
t : Set γ
h : ∀ b ∈ s, ∀ c ∈ t, f b ≠ g c
⊢ f '' s ⊓ g '' t ≤ ⊥
state_after: case intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β
s✝ t✝ : Set α
f : β → α
g : γ → α
s : Set β
t : Set γ
h : ∀ b ∈ s, ∀ c ∈ t, f b ≠ g c
b : β
hb : b ∈ s
c : γ
hc : c ∈ t
eq : f b = g c
⊢ g c ∈ ⊥
tactic: rintro a ⟨⟨b, hb, eq⟩, c, hc, rfl⟩
state_before: case intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
f✝ : α → β
s✝ t✝ : Set α
f : β → α
g : γ → α
s : Set β
t : Set γ
h : ∀ b ∈ s, ∀ c ∈ t, f b ≠ g c
b : β
hb : b ∈ s
c : γ
hc : c ∈ t
eq : f b = g c
⊢ g c ∈ ⊥
state_after: no goals
tactic: exact h b hb c hc eq
Theorem: Complex.abs_cpow_inv_two_im
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

Proof steps:
state_before: x : ℂ
⊢ |(x ^ 2⁻¹).im| = √((abs x - x.re) / 2)
state_after: no goals
tactic: rw [← ofReal_ofNat, ← ofReal_inv, cpow_ofReal_im, ← div_eq_mul_inv, ← one_div,
    ← Real.sqrt_eq_rpow, _root_.abs_mul, _root_.abs_of_nonneg (sqrt_nonneg _), abs_sin_half,
    ← sqrt_mul (abs.nonneg _), ← mul_div_assoc, mul_sub, mul_one, abs_mul_cos_arg]
Theorem: CliffordAlgebra.contractRight_mul_ι
File: Mathlib/LinearAlgebra/CliffordAlgebra/Contraction.lean

Proof steps:
state_before: R : Type u1
inst✝² : CommRing R
M : Type u2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
d d' : Module.Dual R M
a : M
b : CliffordAlgebra Q
⊢ (contractRight (b * (ι Q) a)) d = d a • b - (contractRight b) d * (ι Q) a
state_after: no goals
tactic: rw [contractRight_eq, reverse.map_mul, reverse_ι, contractLeft_ι_mul, map_sub, map_smul,
    reverse_reverse, reverse.map_mul, reverse_ι, contractRight_eq]
Theorem: Option.map_map₂
File: Mathlib/Data/Option/NAry.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
f✝ : α → β → γ
a : Option α
b : Option β
c : Option γ
f : α → β → γ
g : γ → δ
⊢ Option.map g (map₂ f a b) = map₂ (fun a b => g (f a b)) a b
state_after: no goals
tactic: cases a <;> cases b <;> rfl
Theorem: MeasureTheory.le_trim
File: Mathlib/MeasureTheory/Measure/Trim.lean

Proof steps:
state_before: α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
s : Set α
hm : m ≤ m0
⊢ μ s ≤ (μ.trim hm) s
state_after: α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
s : Set α
hm : m ≤ m0
⊢ μ s ≤ (μ.toMeasure ⋯) s
tactic: simp_rw [Measure.trim]
state_before: α : Type u_1
m m0 : MeasurableSpace α
μ : Measure α
s : Set α
hm : m ≤ m0
⊢ μ s ≤ (μ.toMeasure ⋯) s
state_after: no goals
tactic: exact @le_toMeasure_apply _ m _ _ _
Theorem: summable_iff_of_summable_sub
File: Mathlib/Topology/Algebra/InfiniteSum/Group.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝² : CommGroup α
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalGroup α
f g : β → α
a a₁ a₂ : α
hfg : Multipliable fun b => f b / g b
hf : Multipliable f
⊢ Multipliable fun b => g b / f b
state_after: no goals
tactic: simpa only [inv_div] using hfg.inv
Theorem: AddCircle.coe_eq_zero_of_pos_iff
File: Mathlib/Topology/Instances/AddCircle.lean

Proof steps:
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedAddCommGroup 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p : 𝕜
hp : 0 < p
x : 𝕜
hx : 0 < x
⊢ ↑x = 0 ↔ ∃ n, n • p = x
state_after: 𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedAddCommGroup 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p : 𝕜
hp : 0 < p
x : 𝕜
hx : 0 < x
⊢ (∃ n, n • p = x) ↔ ∃ n, n • p = x
tactic: rw [coe_eq_zero_iff]
state_before: 𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedAddCommGroup 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p : 𝕜
hp : 0 < p
x : 𝕜
hx : 0 < x
⊢ (∃ n, n • p = x) ↔ ∃ n, n • p = x
state_after: case mp.intro
𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedAddCommGroup 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p : 𝕜
hp : 0 < p
n : ℤ
hx : 0 < n • p
⊢ ∃ n_1, n_1 • p = n • p

case mpr.intro
𝕜 : Type u_1
B : Type u_2
inst✝² : LinearOrderedAddCommGroup 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
p : 𝕜
hp : 0 < p
n : ℕ
hx : 0 < n • p
⊢ ∃ n_1, n_1 • p = n • p
tactic: constructor <;> rintro ⟨n, rfl⟩
Theorem: WType.cardinal_mk_eq_sum'
File: Mathlib/Data/W/Cardinal.lean

Proof steps:
state_before: α : Type u
β : α → Type v
⊢ #((a : α) × (β a → WType β)) = sum fun a => #(WType β) ^ lift.{u, v} #(β a)
state_after: α : Type u
β : α → Type v
⊢ (sum fun i => lift.{v, max u v} #(WType β) ^ lift.{max u v, v} #(β i)) = sum fun a => #(WType β) ^ lift.{u, v} #(β a)
tactic: simp_rw [mk_sigma, mk_arrow]
state_before: α : Type u
β : α → Type v
⊢ (sum fun i => lift.{v, max u v} #(WType β) ^ lift.{max u v, v} #(β i)) = sum fun a => #(WType β) ^ lift.{u, v} #(β a)
state_after: no goals
tactic: rw [lift_id'.{v, u}, lift_umax.{v, u}]
Theorem: AlgebraicGeometry.sigmaι_eq_iff
File: Mathlib/AlgebraicGeometry/Limits.lean

Proof steps:
state_before: ι : Type u
f : ι → Scheme
i j : ι
x : ↑↑(f i).toPresheafedSpace
y : ↑↑(f j).toPresheafedSpace
⊢ (Sigma.ι f i).val.base x = (Sigma.ι f j).val.base y ↔ ⟨i, x⟩ = ⟨j, y⟩
state_after: case mp
ι : Type u
f : ι → Scheme
i j : ι
x : ↑↑(f i).toPresheafedSpace
y : ↑↑(f j).toPresheafedSpace
⊢ (Sigma.ι f i).val.base x = (Sigma.ι f j).val.base y → ⟨i, x⟩ = ⟨j, y⟩

case mpr
ι : Type u
f : ι → Scheme
i j : ι
x : ↑↑(f i).toPresheafedSpace
y : ↑↑(f j).toPresheafedSpace
⊢ ⟨i, x⟩ = ⟨j, y⟩ → (Sigma.ι f i).val.base x = (Sigma.ι f j).val.base y
tactic: constructor
Theorem: norm_sub_eq_sqrt_iff_real_inner_eq_zero
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁴ : _root_.RCLike 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : InnerProductSpace ℝ F
x y : F
⊢ ‖x - y‖ = √(‖x‖ * ‖x‖ + ‖y‖ * ‖y‖) ↔ ⟪x, y⟫_ℝ = 0
state_after: no goals
tactic: rw [← norm_sub_sq_eq_norm_sq_add_norm_sq_iff_real_inner_eq_zero, eq_comm,
    sqrt_eq_iff_mul_self_eq (add_nonneg (mul_self_nonneg _) (mul_self_nonneg _)) (norm_nonneg _)]
Theorem: List.isCycle_formPerm
File: Mathlib/GroupTheory/Perm/Cycle/Concrete.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
l l' : List α
hl : l.Nodup
hn : 2 ≤ l.length
⊢ l.formPerm.IsCycle
state_after: case nil
α : Type u_1
inst✝ : DecidableEq α
l' : List α
hl : [].Nodup
hn : 2 ≤ [].length
⊢ [].formPerm.IsCycle

case cons
α : Type u_1
inst✝ : DecidableEq α
l' : List α
x : α
l : List α
hl : (x :: l).Nodup
hn : 2 ≤ (x :: l).length
⊢ (x :: l).formPerm.IsCycle
tactic: cases' l with x l
state_before: case cons
α : Type u_1
inst✝ : DecidableEq α
l' : List α
x : α
l : List α
hl : (x :: l).Nodup
hn : 2 ≤ (x :: l).length
⊢ (x :: l).formPerm.IsCycle
state_after: case cons.nil
α : Type u_1
inst✝ : DecidableEq α
l' : List α
x : α
hl : [x].Nodup
hn : 2 ≤ [x].length
⊢ [x].formPerm.IsCycle

case cons.cons
α : Type u_1
inst✝ : DecidableEq α
l' : List α
y : α
l : List α
tail_ih✝ : ∀ (x : α), (x :: l).Nodup → 2 ≤ (x :: l).length → (x :: l).formPerm.IsCycle
x : α
hl : (x :: y :: l).Nodup
hn : 2 ≤ (x :: y :: l).length
⊢ (x :: y :: l).formPerm.IsCycle
tactic: induction' l with y l generalizing x
Theorem: Bool.ofNat_toNat
File: Mathlib/Data/Bool/Basic.lean

Proof steps:
state_before: b : Bool
⊢ ofNat b.toNat = b
state_after: no goals
tactic: cases b <;> rfl
Theorem: List.findIdxs_cons_aux
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

Proof steps:
state_before: α : Type u_1
xs : List α
s : Nat
p : α → Bool
⊢ foldrIdx (fun i a is => if p a = true then (i + 1) :: is else is) [] xs s =
    map (fun x => x + 1) (foldrIdx (fun i a is => if p a = true then i :: is else is) [] xs s)
state_after: no goals
tactic: induction xs generalizing s with
  | nil => rfl
  | cons x xs ih =>
    simp only [foldrIdx]
    split <;> simp [ih]
Theorem: HomologicalComplex.homologyFunctor_inverts_quasiIso
File: Mathlib/Algebra/Homology/Localization.lean

Proof steps:
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : HasZeroMorphisms C
inst✝¹ : CategoryWithHomology C
inst✝ : (quasiIso C c).HasLocalization
i : ι
x✝² x✝¹ : HomologicalComplex C c
x✝ : x✝² ⟶ x✝¹
hf : quasiIso C c x✝
⊢ IsIso ((homologyFunctor C c i).map x✝)
state_after: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : HasZeroMorphisms C
inst✝¹ : CategoryWithHomology C
inst✝ : (quasiIso C c).HasLocalization
i : ι
x✝² x✝¹ : HomologicalComplex C c
x✝ : x✝² ⟶ x✝¹
hf : QuasiIso x✝
⊢ IsIso ((homologyFunctor C c i).map x✝)
tactic: rw [mem_quasiIso_iff] at hf
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : HasZeroMorphisms C
inst✝¹ : CategoryWithHomology C
inst✝ : (quasiIso C c).HasLocalization
i : ι
x✝² x✝¹ : HomologicalComplex C c
x✝ : x✝² ⟶ x✝¹
hf : QuasiIso x✝
⊢ IsIso ((homologyFunctor C c i).map x✝)
state_after: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : HasZeroMorphisms C
inst✝¹ : CategoryWithHomology C
inst✝ : (quasiIso C c).HasLocalization
i : ι
x✝² x✝¹ : HomologicalComplex C c
x✝ : x✝² ⟶ x✝¹
hf : QuasiIso x✝
⊢ IsIso (homologyMap x✝ i)
tactic: dsimp
state_before: C : Type u_1
inst✝³ : Category.{u_3, u_1} C
ι : Type u_2
c : ComplexShape ι
inst✝² : HasZeroMorphisms C
inst✝¹ : CategoryWithHomology C
inst✝ : (quasiIso C c).HasLocalization
i : ι
x✝² x✝¹ : HomologicalComplex C c
x✝ : x✝² ⟶ x✝¹
hf : QuasiIso x✝
⊢ IsIso (homologyMap x✝ i)
state_after: no goals
tactic: infer_instance
Theorem: ENNReal.log_one
File: Mathlib/Analysis/SpecialFunctions/Log/ENNRealLog.lean

Proof steps:
state_before: ⊢ log 1 = 0
state_after: no goals
tactic: simp [log]
Theorem: ENNReal.truncateToReal_eq_toReal
File: Mathlib/Topology/Instances/ENNReal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t x : ℝ≥0∞
t_ne_top : t ≠ ⊤
x_le : x ≤ t
⊢ t.truncateToReal x = x.toReal
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
t x : ℝ≥0∞
t_ne_top : t ≠ ⊤
x_le : x ≤ t
x_lt_top : x < ⊤
⊢ t.truncateToReal x = x.toReal
tactic: have x_lt_top : x < ∞ := lt_of_le_of_lt x_le t_ne_top.lt_top
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t x : ℝ≥0∞
t_ne_top : t ≠ ⊤
x_le : x ≤ t
x_lt_top : x < ⊤
⊢ t.truncateToReal x = x.toReal
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
t x : ℝ≥0∞
t_ne_top : t ≠ ⊤
x_le : x ≤ t
x_lt_top : x < ⊤
obs : min t x ≠ ⊤
⊢ t.truncateToReal x = x.toReal
tactic: have obs : min t x ≠ ∞ := by
    simp_all only [ne_eq, min_eq_top, false_and, not_false_eq_true]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
t x : ℝ≥0∞
t_ne_top : t ≠ ⊤
x_le : x ≤ t
x_lt_top : x < ⊤
obs : min t x ≠ ⊤
⊢ t.truncateToReal x = x.toReal
state_after: no goals
tactic: exact (ENNReal.toReal_eq_toReal obs x_lt_top.ne).mpr (min_eq_right x_le)
Theorem: Matroid.freeOn_base_iff
File: Mathlib/Data/Matroid/Constructions.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
E B I X R J : Set α
⊢ (freeOn E).Base B ↔ B = E
state_after: no goals
tactic: simp only [freeOn, loopyOn_ground, dual_base_iff', loopyOn_base_iff, diff_eq_empty,
    ← subset_antisymm_iff, eq_comm (a := E)]
Theorem: Submodule.quotientPi_aux.left_inv
File: Mathlib/LinearAlgebra/QuotientPi.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
inst✝⁸ : CommRing R
Ms : ι → Type u_3
inst✝⁷ : (i : ι) → AddCommGroup (Ms i)
inst✝⁶ : (i : ι) → Module R (Ms i)
N : Type u_4
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
Ns : ι → Type u_5
inst✝³ : (i : ι) → AddCommGroup (Ns i)
inst✝² : (i : ι) → Module R (Ns i)
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
p : (i : ι) → Submodule R (Ms i)
x : ((i : ι) → Ms i) ⧸ pi Set.univ p
x' : (i : ι) → Ms i
⊢ invFun p (toFun p (Quotient.mk'' x')) = Quotient.mk'' x'
state_after: ι : Type u_1
R : Type u_2
inst✝⁸ : CommRing R
Ms : ι → Type u_3
inst✝⁷ : (i : ι) → AddCommGroup (Ms i)
inst✝⁶ : (i : ι) → Module R (Ms i)
N : Type u_4
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
Ns : ι → Type u_5
inst✝³ : (i : ι) → AddCommGroup (Ns i)
inst✝² : (i : ι) → Module R (Ns i)
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
p : (i : ι) → Submodule R (Ms i)
x : ((i : ι) → Ms i) ⧸ pi Set.univ p
x' : (i : ι) → Ms i
⊢ invFun p (toFun p (Quotient.mk x')) = Quotient.mk x'
tactic: rw [Quotient.mk''_eq_mk x']
state_before: ι : Type u_1
R : Type u_2
inst✝⁸ : CommRing R
Ms : ι → Type u_3
inst✝⁷ : (i : ι) → AddCommGroup (Ms i)
inst✝⁶ : (i : ι) → Module R (Ms i)
N : Type u_4
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
Ns : ι → Type u_5
inst✝³ : (i : ι) → AddCommGroup (Ns i)
inst✝² : (i : ι) → Module R (Ns i)
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
p : (i : ι) → Submodule R (Ms i)
x : ((i : ι) → Ms i) ⧸ pi Set.univ p
x' : (i : ι) → Ms i
⊢ invFun p (toFun p (Quotient.mk x')) = Quotient.mk x'
state_after: ι : Type u_1
R : Type u_2
inst✝⁸ : CommRing R
Ms : ι → Type u_3
inst✝⁷ : (i : ι) → AddCommGroup (Ms i)
inst✝⁶ : (i : ι) → Module R (Ms i)
N : Type u_4
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
Ns : ι → Type u_5
inst✝³ : (i : ι) → AddCommGroup (Ns i)
inst✝² : (i : ι) → Module R (Ns i)
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
p : (i : ι) → Submodule R (Ms i)
x : ((i : ι) → Ms i) ⧸ pi Set.univ p
x' : (i : ι) → Ms i
⊢ (piQuotientLift p (pi Set.univ p) single ⋯) ((quotientPiLift p (fun i => (p i).mkQ) ⋯) (Quotient.mk x')) =
    Quotient.mk x'
tactic: dsimp only [toFun, invFun]
state_before: ι : Type u_1
R : Type u_2
inst✝⁸ : CommRing R
Ms : ι → Type u_3
inst✝⁷ : (i : ι) → AddCommGroup (Ms i)
inst✝⁶ : (i : ι) → Module R (Ms i)
N : Type u_4
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
Ns : ι → Type u_5
inst✝³ : (i : ι) → AddCommGroup (Ns i)
inst✝² : (i : ι) → Module R (Ns i)
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
p : (i : ι) → Submodule R (Ms i)
x : ((i : ι) → Ms i) ⧸ pi Set.univ p
x' : (i : ι) → Ms i
⊢ (piQuotientLift p (pi Set.univ p) single ⋯) ((quotientPiLift p (fun i => (p i).mkQ) ⋯) (Quotient.mk x')) =
    Quotient.mk x'
state_after: no goals
tactic: rw [quotientPiLift_mk p, funext fun i => (mkQ_apply (p i) (x' i)), piQuotientLift_mk p,
      lsum_single, id_apply]
Theorem: QuotientAddGroup.equivQuotientZSMulOfEquiv_refl
File: Mathlib/GroupTheory/QuotientGroup.lean

Proof steps:
state_before: G : Type u
inst✝⁵ : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝⁴ : Group H
M : Type x
inst✝³ : Monoid M
φ : G →* H
A B C : Type u
inst✝² : CommGroup A
inst✝¹ : CommGroup B
inst✝ : CommGroup C
f : A →* B
g : B →* A
e : A ≃* B
d : B ≃* C
n : ℤ
⊢ MulEquiv.refl (A ⧸ (zpowGroupHom n).range) = equivQuotientZPowOfEquiv (MulEquiv.refl A) n
state_after: case h
G : Type u
inst✝⁵ : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝⁴ : Group H
M : Type x
inst✝³ : Monoid M
φ : G →* H
A B C : Type u
inst✝² : CommGroup A
inst✝¹ : CommGroup B
inst✝ : CommGroup C
f : A →* B
g : B →* A
e : A ≃* B
d : B ≃* C
n : ℤ
x : A ⧸ (zpowGroupHom n).range
⊢ (MulEquiv.refl (A ⧸ (zpowGroupHom n).range)) x = (equivQuotientZPowOfEquiv (MulEquiv.refl A) n) x
tactic: ext x
state_before: case h
G : Type u
inst✝⁵ : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝⁴ : Group H
M : Type x
inst✝³ : Monoid M
φ : G →* H
A B C : Type u
inst✝² : CommGroup A
inst✝¹ : CommGroup B
inst✝ : CommGroup C
f : A →* B
g : B →* A
e : A ≃* B
d : B ≃* C
n : ℤ
x : A ⧸ (zpowGroupHom n).range
⊢ (MulEquiv.refl (A ⧸ (zpowGroupHom n).range)) x = (equivQuotientZPowOfEquiv (MulEquiv.refl A) n) x
state_after: case h
G : Type u
inst✝⁵ : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝⁴ : Group H
M : Type x
inst✝³ : Monoid M
φ : G →* H
A B C : Type u
inst✝² : CommGroup A
inst✝¹ : CommGroup B
inst✝ : CommGroup C
f : A →* B
g : B →* A
e : A ≃* B
d : B ≃* C
n : ℤ
x : A ⧸ (zpowGroupHom n).range
⊢ (MulEquiv.refl (A ⧸ (zpowGroupHom n).range)) (Quotient.mk'' (Quotient.out' x)) =
    (equivQuotientZPowOfEquiv (MulEquiv.refl A) n) (Quotient.mk'' (Quotient.out' x))
tactic: rw [← Quotient.out_eq' x]
state_before: case h
G : Type u
inst✝⁵ : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝⁴ : Group H
M : Type x
inst✝³ : Monoid M
φ : G →* H
A B C : Type u
inst✝² : CommGroup A
inst✝¹ : CommGroup B
inst✝ : CommGroup C
f : A →* B
g : B →* A
e : A ≃* B
d : B ≃* C
n : ℤ
x : A ⧸ (zpowGroupHom n).range
⊢ (MulEquiv.refl (A ⧸ (zpowGroupHom n).range)) (Quotient.mk'' (Quotient.out' x)) =
    (equivQuotientZPowOfEquiv (MulEquiv.refl A) n) (Quotient.mk'' (Quotient.out' x))
state_after: no goals
tactic: rfl
Theorem: orthogonalProjection_mem_subspace_orthogonalComplement_eq_zero
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ (orthogonalProjection K) v = 0
state_after: case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ ↑((orthogonalProjection K) v) = ↑0
tactic: ext
state_before: case a
𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝⁵ : _root_.RCLike 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝ : HasOrthogonalProjection K
v : E
hv : v ∈ Kᗮ
⊢ ↑((orthogonalProjection K) v) = ↑0
state_after: no goals
tactic: convert eq_orthogonalProjection_of_mem_orthogonal (K := K) _ _ <;> simp [hv]
Theorem: Filter.HasBasis.ext
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
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : l.HasBasis p s
hl' : l'.HasBasis p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ l = l'
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : l.HasBasis p s
hl' : l'.HasBasis p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ l ≤ l'

case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
hl : l.HasBasis p s
hl' : l'.HasBasis p' s'
h : ∀ (i : ι), p i → ∃ i', p' i' ∧ s' i' ⊆ s i
h' : ∀ (i' : ι'), p' i' → ∃ i, p i ∧ s i ⊆ s' i'
⊢ l' ≤ l
tactic: apply le_antisymm
Theorem: NNRat.cast_div_of_ne_zero
File: Mathlib/Data/Rat/Cast/Defs.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.num ≠ 0
⊢ ↑(q / r) = ↑q / ↑r
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.num ≠ 0
⊢ ↑(q.num * r.den) / ↑(q.den * r.num) = ↑q.num * ↑r.den / (↑q.den * ↑r.num)

case hb
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.num ≠ 0
⊢ ↑(q.den * r.num) ≠ 0
tactic: rw [div_def, cast_divNat_of_ne_zero, cast_def, cast_def, div_eq_mul_inv (_ / _),
    inv_div, (Nat.commute_cast _ _).div_mul_div_comm (Nat.commute_cast _ _)]
Theorem: CategoryTheory.MonoidalCategory.triangle_assoc_comp_right
File: Mathlib/CategoryTheory/Monoidal/Category.lean

Proof steps:
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝² : MonoidalCategory C✝
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : MonoidalCategory C
U V W X✝ Y✝ Z X Y : C
⊢ (α_ X (𝟙_ C) Y).inv ≫ (ρ_ X).hom ▷ Y = X ◁ (λ_ Y).hom
state_after: no goals
tactic: rw [← triangle, Iso.inv_hom_id_assoc]
Theorem: nilpotencyClass_zero
File: Mathlib/RingTheory/Nilpotent/Defs.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
x y : R
inst✝¹ : MonoidWithZero R
inst✝ : Nontrivial R
⊢ 0 ^ (0 + 1) = 0 ∧ 0 ^ 0 ≠ 0
state_after: no goals
tactic: constructor <;> simp