ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: one_memℓp_infty
File: Mathlib/Analysis/Normed/Lp/lpSpace.lean

Proof steps:
state_before: α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
⊢ 1 ∈ upperBounds (Set.range fun i => ‖1 i‖)
state_after: case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
i : I
⊢ (fun i => ‖1 i‖) i ≤ 1
tactic: rintro i ⟨i, rfl⟩
state_before: case intro
α : Type u_1
E : α → Type u_2
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_3
B : I → Type u_4
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
i : I
⊢ (fun i => ‖1 i‖) i ≤ 1
state_after: no goals
tactic: exact norm_one.le
Theorem: Function.Commute.iterate_le_of_map_le
File: Mathlib/Order/Iterate.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Preorder α
f g : α → α
h : Commute f g
hf : Monotone f
hg : Monotone g
x : α
hx : f x ≤ g x
n : ℕ
⊢ f^[n] x ≤ g^[n] x
state_after: case h₀
α : Type u_1
inst✝ : Preorder α
f g : α → α
h : Commute f g
hf : Monotone f
hg : Monotone g
x : α
hx : f x ≤ g x
n : ℕ
⊢ f^[0] x ≤ g^[0] x

case hx
α : Type u_1
inst✝ : Preorder α
f g : α → α
h : Commute f g
hf : Monotone f
hg : Monotone g
x : α
hx : f x ≤ g x
n : ℕ
⊢ ∀ (k : ℕ), k < n → f^[k + 1] x ≤ f (f^[k] x)

case hy
α : Type u_1
inst✝ : Preorder α
f g : α → α
h : Commute f g
hf : Monotone f
hg : Monotone g
x : α
hx : f x ≤ g x
n : ℕ
⊢ ∀ (k : ℕ), k < n → f (g^[k] x) ≤ g^[k + 1] x
tactic: apply hf.seq_le_seq n
Theorem: isLeftRegular_of_non_zero_divisor
File: Mathlib/Algebra/Ring/Regular.lean

Proof steps:
state_before: α : Type u_1
inst✝ : NonUnitalNonAssocRing α
k : α
h : ∀ (x : α), k * x = 0 → x = 0
⊢ IsLeftRegular k
state_after: α : Type u_1
inst✝ : NonUnitalNonAssocRing α
k : α
h : ∀ (x : α), k * x = 0 → x = 0
x y : α
h' : k * x = k * y
⊢ k * (x - y) = 0
tactic: refine fun x y (h' : k * x = k * y) => sub_eq_zero.mp (h _ ?_)
state_before: α : Type u_1
inst✝ : NonUnitalNonAssocRing α
k : α
h : ∀ (x : α), k * x = 0 → x = 0
x y : α
h' : k * x = k * y
⊢ k * (x - y) = 0
state_after: no goals
tactic: rw [mul_sub, sub_eq_zero, h']
Theorem: Int.natCast_modEq_iff
File: Mathlib/Data/Int/ModEq.lean

Proof steps:
state_before: m n✝ a✝ b✝ c d : ℤ
a b n : ℕ
⊢ ↑a ≡ ↑b [ZMOD ↑n] ↔ a ≡ b [MOD n]
state_after: m n✝ a✝ b✝ c d : ℤ
a b n : ℕ
⊢ ↑a % ↑n = ↑b % ↑n ↔ a % n = b % n
tactic: unfold ModEq Nat.ModEq
state_before: m n✝ a✝ b✝ c d : ℤ
a b n : ℕ
⊢ ↑a % ↑n = ↑b % ↑n ↔ a % n = b % n
state_after: m n✝ a✝ b✝ c d : ℤ
a b n : ℕ
⊢ ↑a % ↑n = ↑b % ↑n ↔ ↑(a % n) = ↑(b % n)
tactic: rw [← Int.ofNat_inj]
state_before: m n✝ a✝ b✝ c d : ℤ
a b n : ℕ
⊢ ↑a % ↑n = ↑b % ↑n ↔ ↑(a % n) = ↑(b % n)
state_after: no goals
tactic: simp [natCast_mod]
Theorem: nhds_translation_div
File: Mathlib/Topology/Algebra/Group/Basic.lean

Proof steps:
state_before: G : Type w
H : Type x
α : Type u
β : Type v
inst✝² : Group G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
x : G
⊢ comap (fun x_1 => x_1 / x) (𝓝 1) = 𝓝 x
state_after: no goals
tactic: simpa only [div_eq_mul_inv] using nhds_translation_mul_inv x
Theorem: RingCat.Colimits.quot_neg
File: Mathlib/Algebra/Category/Ring/Colimits.lean

Proof steps:
state_before: J : Type v
inst✝ : SmallCategory J
F : J ⥤ RingCat
x : Prequotient F
⊢ ColimitType F
state_after: no goals
tactic: exact Quot.mk Setoid.r (neg x)
state_before: J : Type v
inst✝ : SmallCategory J
F : J ⥤ RingCat
x : Prequotient F
⊢ ColimitType F
state_after: no goals
tactic: exact Quot.mk Setoid.r x
Theorem: ENNReal.nhds_zero
File: Mathlib/Topology/Instances/ENNReal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
a b c d : ℝ≥0∞
r p q : ℝ≥0
x y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
⊢ ⨅ l, ⨅ (_ : ⊥ < l), 𝓟 (Iio l) = ⨅ a, ⨅ (_ : a ≠ 0), 𝓟 (Iio a)
state_after: no goals
tactic: simp [pos_iff_ne_zero, Iio]
Theorem: AddHom.noncommCoprod_apply
File: Mathlib/GroupTheory/NoncommCoprod.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Semigroup P
f : M →ₙ* P
g : N →ₙ* P
comm : ∀ (m : M) (n : N), Commute (f m) (g n)
mn mn' : M × N
⊢ (fun mn => f mn.1 * g mn.2) (mn * mn') = (fun mn => f mn.1 * g mn.2) mn * (fun mn => f mn.1 * g mn.2) mn'
state_after: no goals
tactic: simpa using (comm _ _).mul_mul_mul_comm _ _
Theorem: Matroid.loopyOn_restrict
File: Mathlib/Data/Matroid/Constructions.lean

Proof steps:
state_before: α : Type u_1
M : Matroid α
E✝ B I X R✝ J E R : Set α
⊢ loopyOn E ↾ R = loopyOn R
state_after: α : Type u_1
M : Matroid α
E✝ B I X R✝ J E R : Set α
⊢ ∀ I ⊆ (loopyOn E ↾ R).E, (loopyOn E ↾ R).Indep I ↔ (loopyOn R).Indep I
tactic: refine eq_of_indep_iff_indep_forall rfl ?_
state_before: α : Type u_1
M : Matroid α
E✝ B I X R✝ J E R : Set α
⊢ ∀ I ⊆ (loopyOn E ↾ R).E, (loopyOn E ↾ R).Indep I ↔ (loopyOn R).Indep I
state_after: α : Type u_1
M : Matroid α
E✝ B I X R✝ J E R : Set α
⊢ ∀ I ⊆ R, I = ∅ → I ⊆ R
tactic: simp only [restrict_ground_eq, restrict_indep_iff, loopyOn_indep_iff, and_iff_left_iff_imp]
state_before: α : Type u_1
M : Matroid α
E✝ B I X R✝ J E R : Set α
⊢ ∀ I ⊆ R, I = ∅ → I ⊆ R
state_after: no goals
tactic: exact fun _ h _ ↦ h
Theorem: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux4'
File: Mathlib/Analysis/InnerProductSpace/OfNorm.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
y z : E
⊢ (‖2 • z + y‖ * ‖2 • z + y‖ - ‖y - 2 • z‖ * ‖y - 2 • z‖) / 2 = ‖y + z‖ * ‖y + z‖ - ‖y - z‖ * ‖y - z‖
state_after: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
y z : E
⊢ (2 * (‖y + z‖ * ‖y + z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖ - (2 * (‖y - z‖ * ‖y - z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖)) / 2 =
    ‖y + z‖ * ‖y + z‖ - ‖y - z‖ * ‖y - z‖
tactic: rw [add_left_aux3, add_left_aux4]
state_before: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
y z : E
⊢ (2 * (‖y + z‖ * ‖y + z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖ - (2 * (‖y - z‖ * ‖y - z‖ + ‖z‖ * ‖z‖) - ‖y‖ * ‖y‖)) / 2 =
    ‖y + z‖ * ‖y + z‖ - ‖y - z‖ * ‖y - z‖
state_after: no goals
tactic: ring
Theorem: ContextFreeRule.Rewrites.append_left
File: Mathlib/Computability/ContextFreeGrammar.lean

Proof steps:
state_before: T : Type uT
N : Type uN
r : ContextFreeRule T N
v w : List (Symbol T N)
hvw : r.Rewrites v w
p : List (Symbol T N)
⊢ r.Rewrites (p ++ v) (p ++ w)
state_after: T : Type uT
N : Type uN
r : ContextFreeRule T N
v w : List (Symbol T N)
hvw : ∃ p q, v = p ++ [Symbol.nonterminal r.input] ++ q ∧ w = p ++ r.output ++ q
p : List (Symbol T N)
⊢ ∃ p_1 q, p ++ v = p_1 ++ [Symbol.nonterminal r.input] ++ q ∧ p ++ w = p_1 ++ r.output ++ q
tactic: rw [rewrites_iff] at *
state_before: T : Type uT
N : Type uN
r : ContextFreeRule T N
v w : List (Symbol T N)
hvw : ∃ p q, v = p ++ [Symbol.nonterminal r.input] ++ q ∧ w = p ++ r.output ++ q
p : List (Symbol T N)
⊢ ∃ p_1 q, p ++ v = p_1 ++ [Symbol.nonterminal r.input] ++ q ∧ p ++ w = p_1 ++ r.output ++ q
state_after: case intro.intro
T : Type uT
N : Type uN
r : ContextFreeRule T N
v w p x y : List (Symbol T N)
hxy : v = x ++ [Symbol.nonterminal r.input] ++ y ∧ w = x ++ r.output ++ y
⊢ ∃ p_1 q, p ++ v = p_1 ++ [Symbol.nonterminal r.input] ++ q ∧ p ++ w = p_1 ++ r.output ++ q
tactic: rcases hvw with ⟨x, y, hxy⟩
state_before: case intro.intro
T : Type uT
N : Type uN
r : ContextFreeRule T N
v w p x y : List (Symbol T N)
hxy : v = x ++ [Symbol.nonterminal r.input] ++ y ∧ w = x ++ r.output ++ y
⊢ ∃ p_1 q, p ++ v = p_1 ++ [Symbol.nonterminal r.input] ++ q ∧ p ++ w = p_1 ++ r.output ++ q
state_after: case h
T : Type uT
N : Type uN
r : ContextFreeRule T N
v w p x y : List (Symbol T N)
hxy : v = x ++ [Symbol.nonterminal r.input] ++ y ∧ w = x ++ r.output ++ y
⊢ p ++ v = p ++ x ++ [Symbol.nonterminal r.input] ++ y ∧ p ++ w = p ++ x ++ r.output ++ y
tactic: use p ++ x, y
state_before: case h
T : Type uT
N : Type uN
r : ContextFreeRule T N
v w p x y : List (Symbol T N)
hxy : v = x ++ [Symbol.nonterminal r.input] ++ y ∧ w = x ++ r.output ++ y
⊢ p ++ v = p ++ x ++ [Symbol.nonterminal r.input] ++ y ∧ p ++ w = p ++ x ++ r.output ++ y
state_after: no goals
tactic: simp_all
Theorem: Module.End.IsSemisimple_smul
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
h : f.IsSemisimple
⊢ (t • f).IsSemisimple
state_after: case inr
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
h : f.IsSemisimple
this :
  ∀ {R : Type u_1} {M : Type u_2} [inst : CommRing R] [inst_1 : AddCommGroup M] [inst : Module R M] {K : Type u_3}
    [inst : Field K] [inst_2 : Module K M] {f : End K M} {g : End K M} (t : K),
    f.IsSemisimple → t ≠ 0 → (t • f).IsSemisimple
ht : ¬t ≠ 0
⊢ (t • f).IsSemisimple

M✝ : Type u_2
inst✝⁷ : AddCommGroup M✝
K✝ : Type u_3
inst✝⁶ : Field K✝
inst✝⁵ : Module K✝ M✝
f✝ : End K✝ M✝
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
h : f.IsSemisimple
ht : t ≠ 0
⊢ (t • f).IsSemisimple
tactic: wlog ht : t ≠ 0
state_before: M✝ : Type u_2
inst✝⁷ : AddCommGroup M✝
K✝ : Type u_3
inst✝⁶ : Field K✝
inst✝⁵ : Module K✝ M✝
f✝ : End K✝ M✝
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
h : f.IsSemisimple
ht : t ≠ 0
⊢ (t • f).IsSemisimple
state_after: no goals
tactic: rwa [IsSemisimple_smul_iff ht]
Theorem: NumberField.mixedEmbedding.convexBodySumFun_add_le
File: Mathlib/NumberTheory/NumberField/CanonicalEmbedding/ConvexBody.lean

Proof steps:
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
x y : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ convexBodySumFun (x + y) ≤ convexBodySumFun x + convexBodySumFun y
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
x y : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ ∑ w : InfinitePlace K, ↑w.mult * (normAtPlace w) (x + y) ≤
    ∑ x_1 : InfinitePlace K, ↑x_1.mult * ((normAtPlace x_1) x + (normAtPlace x_1) y)
tactic: simp_rw [convexBodySumFun, ← Finset.sum_add_distrib, ← mul_add]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B : ℝ
x y : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ ∑ w : InfinitePlace K, ↑w.mult * (normAtPlace w) (x + y) ≤
    ∑ x_1 : InfinitePlace K, ↑x_1.mult * ((normAtPlace x_1) x + (normAtPlace x_1) y)
state_after: no goals
tactic: exact Finset.sum_le_sum
    fun _ _ ↦ mul_le_mul_of_nonneg_left (normAtPlace_add_le _ x y) (Nat.cast_pos.mpr mult_pos).le
Theorem: PartialHomeomorph.extend_coord_change_source
File: Mathlib/Geometry/Manifold/SmoothManifoldWithCorners.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : PartialHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
s t : Set M
⊢ ((f.extend I).symm ≫ f'.extend I).source = ↑I '' (f.symm ≫ₕ f').source
state_after: 𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : PartialHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
s t : Set M
⊢ ↑I.symm ⁻¹' f.target ∩ ↑(f.extend I).symm ⁻¹' f'.source ∩ range ↑I = ↑I.symm ⁻¹' (f.symm ≫ₕ f').source ∩ range ↑I
tactic: simp_rw [PartialEquiv.trans_source, I.image_eq, extend_source, PartialEquiv.symm_source,
    extend_target, inter_right_comm _ (range I)]
state_before: 𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : PartialHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
s t : Set M
⊢ ↑I.symm ⁻¹' f.target ∩ ↑(f.extend I).symm ⁻¹' f'.source ∩ range ↑I = ↑I.symm ⁻¹' (f.symm ≫ₕ f').source ∩ range ↑I
state_after: no goals
tactic: rfl
Theorem: SimpleGraph.top_preconnected
File: Mathlib/Combinatorics/SimpleGraph/Path.lean

Proof steps:
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
x y : V
⊢ ⊤.Reachable x y
state_after: no goals
tactic: if h : x = y then rw [h] else exact Adj.reachable h
Theorem: Equiv.forall_congr
File: Mathlib/Logic/Equiv/Defs.lean

Proof steps:
state_before: α : Sort u
β : Sort v
γ : Sort w
p : α → Prop
q : β → Prop
e : α ≃ β
h : ∀ (a : α), p a ↔ q (e a)
⊢ (∀ (b : β), p (e.symm b)) ↔ ∀ (b : β), q b
state_after: no goals
tactic: simp [h]
Theorem: CategoryTheory.Sieve.pullback_eq_top_iff_mem
File: Mathlib/CategoryTheory/Sites/Sieves.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
X Y Z : C
f✝ : Y ⟶ X
S R : Sieve X
f : Y ⟶ X
⊢ S.arrows f ↔ pullback f S = ⊤
state_after: no goals
tactic: rw [← id_mem_iff_eq_top, pullback_apply, id_comp]
Theorem: Finset.truncatedSup_union_right
File: Mathlib/Combinatorics/SetFamily/AhlswedeZhang.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝⁶ : SemilatticeSup α
inst✝⁵ : OrderTop α
inst✝⁴ : DecidableRel fun x x_1 => x ≤ x_1
inst✝³ : SemilatticeSup β
inst✝² : BoundedOrder β
inst✝¹ : DecidableRel fun x x_1 => x ≤ x_1
s t : Finset α
a b : α
inst✝ : DecidableEq α
hs : a ∉ lowerClosure ↑s
ht : a ∈ lowerClosure ↑t
⊢ (s ∪ t).truncatedSup a = t.truncatedSup a
state_after: no goals
tactic: rw [union_comm, truncatedSup_union_left ht hs]
Theorem: subset_sSup_of_not_bddAbove
File: Mathlib/Order/CompleteLatticeIntervals.lean

Proof steps:
state_before: ι : Sort u_1
α : Type u_2
s : Set α
inst✝² : Preorder α
inst✝¹ : SupSet α
inst✝ : Inhabited ↑s
t : Set ↑s
ht : ¬BddAbove t
⊢ sSup t = default
state_after: no goals
tactic: simp [sSup, ht]
Theorem: CochainComplex.mappingCone.lift_f_fst_v
File: Mathlib/Algebra/Homology/HomotopyCategory/MappingCone.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝⁴ : Category.{u_3, u_1} C
inst✝³ : Category.{?u.210864, u_2} D
inst✝² : Preadditive C
inst✝¹ : Preadditive D
F G : CochainComplex C ℤ
φ : F ⟶ G
inst✝ : HasHomotopyCofiber φ
K : CochainComplex C ℤ
α : Cocycle K F 1
β : Cochain K G 0
eq : δ 0 1 β + (↑α).comp (Cochain.ofHom φ) ⋯ = 0
p q : ℤ
hpq : p + 1 = q
⊢ (lift φ α β eq).f p ≫ (↑(fst φ)).v p q hpq = (↑α).v p q hpq
state_after: no goals
tactic: simp [lift]
Theorem: QuotientAddGroup.preimage_image_coe
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
s : Set G
⊢ mk ⁻¹' (mk '' s) = ↑N * s
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
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) ↔ a ∈ ↑N * s
tactic: ext a
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
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) ↔ a ∈ ↑N * s
state_after: case h.mp
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ mk ⁻¹' (mk '' s) → a ∈ ↑N * s

case h.mpr
G : Type u
inst✝² : Group G
N : Subgroup G
nN : N.Normal
H : Type v
inst✝¹ : Group H
M : Type x
inst✝ : Monoid M
s : Set G
a : G
⊢ a ∈ ↑N * s → a ∈ mk ⁻¹' (mk '' s)
tactic: constructor
Theorem: Complex.arg_real_mul
File: Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean

Proof steps:
state_before: a x✝ z x : ℂ
r : ℝ
hr : 0 < r
⊢ (↑r * x).arg = x.arg
state_after: case inl
a x z : ℂ
r : ℝ
hr : 0 < r
⊢ (↑r * 0).arg = arg 0

case inr
a x✝ z x : ℂ
r : ℝ
hr : 0 < r
hx : x ≠ 0
⊢ (↑r * x).arg = x.arg
tactic: rcases eq_or_ne x 0 with (rfl | hx)
state_before: case inr
a x✝ z x : ℂ
r : ℝ
hr : 0 < r
hx : x ≠ 0
⊢ (↑r * x).arg = x.arg
state_after: no goals
tactic: conv_lhs =>
    rw [← abs_mul_cos_add_sin_mul_I x, ← mul_assoc, ← ofReal_mul,
      arg_mul_cos_add_sin_mul_I (mul_pos hr (abs.pos hx)) x.arg_mem_Ioc]
Theorem: finSuccAboveOrderIso_symm_apply_last
File: Mathlib/Order/Fin/Tuple.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Preorder α
n✝ : ℕ
f : Fin (n✝ + 1) → α
a : α
n : ℕ
x : { x // x ≠ last n }
⊢ (finSuccAboveOrderIso (last n)).symm x = (↑x).castLT ⋯
state_after: α : Type u_1
inst✝ : Preorder α
n✝ : ℕ
f : Fin (n✝ + 1) → α
a : α
n : ℕ
x : { x // x ≠ last n }
⊢ some ((finSuccAboveOrderIso (last n)).symm x) = some ((↑x).castLT ⋯)
tactic: rw [← Option.some_inj]
state_before: α : Type u_1
inst✝ : Preorder α
n✝ : ℕ
f : Fin (n✝ + 1) → α
a : α
n : ℕ
x : { x // x ≠ last n }
⊢ some ((finSuccAboveOrderIso (last n)).symm x) = some ((↑x).castLT ⋯)
state_after: no goals
tactic: simpa [finSuccAboveOrderIso, finSuccAboveEquiv, OrderIso.symm]
    using finSuccEquiv'_last_apply x.property
Theorem: finsum_eq_zero_of_forall_eq_zero
File: Mathlib/Algebra/BigOperators/Finprod.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
G : Type u_4
M : Type u_5
N : Type u_6
inst✝¹ : CommMonoid M
inst✝ : CommMonoid N
f✝ g : α → M
a b : α
s t : Set α
f : α → M
h : ∀ (x : α), f x = 1
⊢ ∏ᶠ (i : α), f i = 1
state_after: no goals
tactic: simp (config := { contextual := true }) [h]
Theorem: Finsupp.disjoint_supported_supported
File: Mathlib/LinearAlgebra/Finsupp.lean

Proof steps:
state_before: α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
R : Type u_5
S : Type u_6
inst✝⁷ : Semiring R
inst✝⁶ : Semiring S
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid N
inst✝² : Module R N
inst✝¹ : AddCommMonoid P
inst✝ : Module R P
s t : Set α
h : Disjoint s t
⊢ supported M R s ⊓ supported M R t = ⊥
state_after: no goals
tactic: rw [← supported_inter, disjoint_iff_inter_eq_empty.1 h, supported_empty]
Theorem: Submodule.finrank_add_finrank_orthogonal'
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✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
n : ℕ
h_dim : finrank 𝕜 ↥K + n = finrank 𝕜 E
⊢ finrank 𝕜 ↥Kᗮ = n
state_after: 𝕜 : 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✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
n : ℕ
h_dim : finrank 𝕜 ↥K + n = finrank 𝕜 E
⊢ finrank 𝕜 ↥K + finrank 𝕜 ↥Kᗮ = finrank 𝕜 ↥K + n
tactic: rw [← add_right_inj (finrank 𝕜 K)]
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✝ : FiniteDimensional 𝕜 E
K : Submodule 𝕜 E
n : ℕ
h_dim : finrank 𝕜 ↥K + n = finrank 𝕜 E
⊢ finrank 𝕜 ↥K + finrank 𝕜 ↥Kᗮ = finrank 𝕜 ↥K + n
state_after: no goals
tactic: simp [Submodule.finrank_add_finrank_orthogonal, h_dim]
Theorem: MeasurableEquiv.map_measurableEquiv_injective
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
μ : Measure α
ν : Measure β
e : α ≃ᵐ β
⊢ Injective (Measure.map ⇑e)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
μ : Measure α
ν : Measure β
e : α ≃ᵐ β
μ₁ μ₂ : Measure α
hμ : Measure.map (⇑e) μ₁ = Measure.map (⇑e) μ₂
⊢ μ₁ = μ₂
tactic: intro μ₁ μ₂ hμ
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
μ : Measure α
ν : Measure β
e : α ≃ᵐ β
μ₁ μ₂ : Measure α
hμ : Measure.map (⇑e) μ₁ = Measure.map (⇑e) μ₂
⊢ μ₁ = μ₂
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
μ : Measure α
ν : Measure β
e : α ≃ᵐ β
μ₁ μ₂ : Measure α
hμ : Measure.map (⇑e.symm) (Measure.map (⇑e) μ₁) = Measure.map (⇑e.symm) (Measure.map (⇑e) μ₂)
⊢ μ₁ = μ₂
tactic: apply_fun Measure.map e.symm at hμ
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
μ : Measure α
ν : Measure β
e : α ≃ᵐ β
μ₁ μ₂ : Measure α
hμ : Measure.map (⇑e.symm) (Measure.map (⇑e) μ₁) = Measure.map (⇑e.symm) (Measure.map (⇑e) μ₂)
⊢ μ₁ = μ₂
state_after: no goals
tactic: simpa [map_symm_map e] using hμ
Theorem: val_unitOfInvertible
File: Mathlib/Algebra/Group/Invertible/Basic.lean

Proof steps:
state_before: α : Type u
inst✝¹ : Monoid α
a : α
inst✝ : Invertible a
⊢ a * ⅟a = 1
state_after: no goals
tactic: simp
state_before: α : Type u
inst✝¹ : Monoid α
a : α
inst✝ : Invertible a
⊢ ⅟a * a = 1
state_after: no goals
tactic: simp
Theorem: ContinuousLinearMap.norm_snd_le
File: Mathlib/Analysis/NormedSpace/OperatorNorm/Prod.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝⁶ : NontriviallyNormedField 𝕜
inst✝⁵ : SeminormedAddCommGroup E
inst✝⁴ : SeminormedAddCommGroup F
inst✝³ : SeminormedAddCommGroup G
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace 𝕜 F
inst✝ : NormedSpace 𝕜 G
x✝ : E × F
e : E
f : F
⊢ ‖(snd 𝕜 E F) (e, f)‖ ≤ 1 * ‖(e, f)‖
state_after: no goals
tactic: simpa only [one_mul] using le_max_right ‖e‖ ‖f‖
Theorem: AddMonoidHom.eq_intCastAddHom
File: Mathlib/Data/Int/Cast/Lemmas.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
A : Type u_5
inst✝ : AddGroupWithOne A
f : ℤ →+ A
h1 : f 1 = 1
⊢ f 1 = (castAddHom A) 1
state_after: no goals
tactic: simp [h1]
Theorem: Function.Surjective.pathConnectedSpace
File: Mathlib/Topology/Connected/PathConnected.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ PathConnectedSpace Y
state_after: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ IsPathConnected (range f)
tactic: rw [pathConnectedSpace_iff_univ, ← hf.range_eq]
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : PathConnectedSpace X
f : X → Y
hf : Surjective f
hf' : Continuous f
⊢ IsPathConnected (range f)
state_after: no goals
tactic: exact isPathConnected_range hf'
Theorem: Equiv.removeNone_optionCongr
File: Mathlib/Logic/Equiv/Option.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e✝ : Option α ≃ Option β
e : α ≃ β
x : α
⊢ e.optionCongr (some x) = some (e x)
state_after: no goals
tactic: simp [EquivFunctor.map]