ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: CategoryTheory.ConcreteCategory.hom_ext
File: Mathlib/CategoryTheory/ConcreteCategory/Basic.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
⊢ f = g
state_after: case a
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
⊢ (forget C).map f = (forget C).map g
tactic: apply (forget C).map_injective
state_before: case a
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
⊢ (forget C).map f = (forget C).map g
state_after: case a
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
⊢ ConcreteCategory.forget.map f = ConcreteCategory.forget.map g
tactic: dsimp [forget]
state_before: case a
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
⊢ ConcreteCategory.forget.map f = ConcreteCategory.forget.map g
state_after: case a.h
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
x : ConcreteCategory.forget.obj X
⊢ ConcreteCategory.forget.map f x = ConcreteCategory.forget.map g x
tactic: funext x
state_before: case a.h
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : ConcreteCategory C
X Y : C
f g : X ⟶ Y
w : ∀ (x : (forget C).obj X), f x = g x
x : ConcreteCategory.forget.obj X
⊢ ConcreteCategory.forget.map f x = ConcreteCategory.forget.map g x
state_after: no goals
tactic: exact w x
Theorem: Nat.exists_not_and_succ_of_not_zero_of_exists
File: Mathlib/Data/Nat/Order/Lemmas.lean

Proof steps:
state_before: a b m n k : ℕ
p : ℕ → Prop
H' : ¬p 0
H : ∃ n, p n
⊢ ∃ n, ¬p n ∧ p (n + 1)
state_after: no goals
tactic: classical
  let k := Nat.find H
  have hk : p k := Nat.find_spec H
  suffices 0 < k from
    ⟨k - 1, Nat.find_min H <| Nat.pred_lt this.ne', by rwa [Nat.sub_add_cancel this]⟩
  by_contra! contra
  rw [le_zero_eq] at contra
  exact H' (contra ▸ hk)
Theorem: Polynomial.trinomial_natDegree
File: Mathlib/Algebra/Polynomial/UnitTrinomial.lean

Proof steps:
state_before: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
⊢ (trinomial k m n u v w).natDegree = n
state_after: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
i : ℕ
h : i ∈ (trinomial k m n u v w).support
⊢ ↑i ≤ ↑n
tactic: refine
    natDegree_eq_of_degree_eq_some
      ((Finset.sup_le fun i h => ?_).antisymm <|
        le_degree_of_ne_zero <| by rwa [trinomial_leading_coeff' hkm hmn])
state_before: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
i : ℕ
h : i ∈ (trinomial k m n u v w).support
⊢ ↑i ≤ ↑n
state_after: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
i : ℕ
h : i ∈ {k, m, n}
⊢ ↑i ≤ ↑n
tactic: replace h := support_trinomial' k m n u v w h
state_before: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
i : ℕ
h : i ∈ {k, m, n}
⊢ ↑i ≤ ↑n
state_after: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
i : ℕ
h : i = k ∨ i = m ∨ i = n
⊢ ↑i ≤ ↑n
tactic: rw [mem_insert, mem_insert, mem_singleton] at h
state_before: R : Type u_1
inst✝ : Semiring R
k m n : ℕ
u v w : R
hkm : k < m
hmn : m < n
hw : w ≠ 0
i : ℕ
h : i = k ∨ i = m ∨ i = n
⊢ ↑i ≤ ↑n
state_after: case inl
R : Type u_1
inst✝ : Semiring R
m n : ℕ
u v w : R
hmn : m < n
hw : w ≠ 0
i : ℕ
hkm : i < m
⊢ ↑i ≤ ↑n

case inr.inl
R : Type u_1
inst✝ : Semiring R
k n : ℕ
u v w : R
hw : w ≠ 0
i : ℕ
hkm : k < i
hmn : i < n
⊢ ↑i ≤ ↑n

case inr.inr
R : Type u_1
inst✝ : Semiring R
k m : ℕ
u v w : R
hkm : k < m
hw : w ≠ 0
i : ℕ
hmn : m < i
⊢ ↑i ≤ ↑i
tactic: rcases h with (rfl | rfl | rfl)
Theorem: le_max_of_two_nsmul_le_add
File: Mathlib/Algebra/Order/Monoid/Unbundled/Pow.lean

Proof steps:
state_before: β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : LinearOrder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c : M
h : a ^ 2 ≤ b * c
⊢ a ≤ max b c
state_after: no goals
tactic: simpa using min_le_max_of_mul_le_mul ((pow_two _).symm.trans_le h)
Theorem: Isometry.toDilation_toFun
File: Mathlib/Topology/MetricSpace/Dilation.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
F : Type u_4
G : Type u_5
inst✝⁶ : PseudoEMetricSpace α
inst✝⁵ : PseudoEMetricSpace β
inst✝⁴ : PseudoEMetricSpace γ
inst✝³ : FunLike F α β
inst✝² : DilationClass F α β
inst✝¹ : FunLike G β γ
inst✝ : DilationClass G β γ
f✝ : F
g : G
x y z : α
s : Set α
f : α → β
hf : Isometry f
⊢ ∀ (x y : α), edist (f x) (f y) = ↑1 * edist x y
state_after: no goals
tactic: simpa using hf
Theorem: continuous_mulIndicator
File: Mathlib/Topology/ContinuousOn.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁵ : TopologicalSpace α
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : (i : ι) → TopologicalSpace (π i)
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
inst✝ : One β
f : α → β
s : Set α
hs : ∀ a ∈ frontier s, f a = 1
hf : ContinuousOn f (closure s)
⊢ Continuous (s.mulIndicator f)
state_after: no goals
tactic: classical exact continuous_piecewise hs hf continuousOn_const
Theorem: Nat.Subtype.exists_succ
File: Mathlib/Logic/Denumerable.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
s : Set ℕ
inst✝ : Infinite ↑s
x : ↑s
h : ¬∃ n, ↑x + n + 1 ∈ s
a : ℕ
ha : a ∈ s
hax : a ≥ ↑x + 1
⊢ ↑x + (a - (↑x + 1)) + 1 ∈ s
state_after: no goals
tactic: rwa [add_right_comm, Nat.add_sub_cancel' hax]
state_before: α : Type u_1
β : Type u_2
s : Set ℕ
inst✝ : Infinite ↑s
x : ↑s
h : ¬∃ n, ↑x + n + 1 ∈ s
this : ∀ a ∈ s, a < ↑x + 1
⊢ ∀ a ∈ Multiset.filter (fun x => x ∈ s) (Multiset.range (↑x).succ), a ∈ s
state_after: no goals
tactic: simp [-Multiset.range_succ]
state_before: α : Type u_1
β : Type u_2
s : Set ℕ
inst✝ : Infinite ↑s
x : ↑s
h : ¬∃ n, ↑x + n + 1 ∈ s
this : ∀ a ∈ s, a < ↑x + 1
⊢ ∀ (x_1 : { y // y ∈ s }),
    x_1 ∈ (Multiset.pmap (fun y hy => ⟨y, hy⟩) (Multiset.filter (fun x => x ∈ s) (Multiset.range (↑x).succ)) ⋯).toFinset
state_after: no goals
tactic: simpa [Subtype.ext_iff_val, Multiset.mem_filter, -Multiset.range_succ]
Theorem: logDeriv_id
File: Mathlib/Analysis/Calculus/LogDeriv.lean

Proof steps:
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
inst✝² : NontriviallyNormedField 𝕜
inst✝¹ : NontriviallyNormedField 𝕜'
inst✝ : NormedAlgebra 𝕜 𝕜'
x : 𝕜
⊢ logDeriv id x = 1 / x
state_after: no goals
tactic: simp [logDeriv_apply]
Theorem: CategoryTheory.ShortComplex.abLeftHomologyData_H
File: Mathlib/Algebra/Homology/ShortComplex/Ab.lean

Proof steps:
state_before: S : ShortComplex Ab
⊢ (AddMonoidHom.ker S.g).subtype ≫ S.g = 0
state_after: case w.mk
S : ShortComplex Ab
val✝ : ↑S.X₂
hx : val✝ ∈ AddMonoidHom.ker S.g
⊢ ((AddMonoidHom.ker S.g).subtype ≫ S.g) ⟨val✝, hx⟩ = 0 ⟨val✝, hx⟩
tactic: ext ⟨_, hx⟩
state_before: case w.mk
S : ShortComplex Ab
val✝ : ↑S.X₂
hx : val✝ ∈ AddMonoidHom.ker S.g
⊢ ((AddMonoidHom.ker S.g).subtype ≫ S.g) ⟨val✝, hx⟩ = 0 ⟨val✝, hx⟩
state_after: no goals
tactic: exact hx
state_before: S : ShortComplex Ab
⊢ (AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range = 0
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range) x = 0 x
tactic: ext (x : S.X₁)
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯) ≫ QuotientAddGroup.mk' S.abToCycles.range) x = 0 x
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x ∈ S.abToCycles.range
tactic: erw [QuotientAddGroup.eq_zero_iff]
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x ∈ S.abToCycles.range
state_after: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ∃ x_1, S.abToCycles x_1 = ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x
tactic: rw [AddMonoidHom.mem_range]
state_before: case w
S : ShortComplex Ab
x : ↑S.X₁
⊢ ∃ x_1, S.abToCycles x_1 = ((AddCommGrp.kernelIsLimit S.g).lift (Limits.KernelFork.ofι S.f ⋯)) x
state_after: no goals
tactic: apply exists_apply_eq_apply
Theorem: Set.preimage_inl_image_inr
File: Mathlib/Data/Set/Image.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s✝ t : Set α
s : Set β
⊢ Sum.inl ⁻¹' (Sum.inr '' s) = ∅
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s✝ t : Set α
s : Set β
x✝ : α
⊢ x✝ ∈ Sum.inl ⁻¹' (Sum.inr '' s) ↔ x✝ ∈ ∅
tactic: ext
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : ι → α
s✝ t : Set α
s : Set β
x✝ : α
⊢ x✝ ∈ Sum.inl ⁻¹' (Sum.inr '' s) ↔ x✝ ∈ ∅
state_after: no goals
tactic: simp
Theorem: Finset.exists_minimal
File: Mathlib/Data/Fintype/Card.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
h : s.Nonempty
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: case intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
c : α
hcs : c ∈ s
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
tactic: obtain ⟨c, hcs : c ∈ s⟩ := h
state_before: case intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
c : α
hcs : c ∈ s
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: case intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
c : α
hcs : c ∈ s
this : WellFounded LT.lt
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
tactic: have : WellFounded (@LT.lt { x // x ∈ s } _) := Finite.wellFounded_of_trans_of_irrefl _
state_before: case intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
c : α
hcs : c ∈ s
this : WellFounded LT.lt
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: case intro.intro.mk.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
c : α
hcs : c ∈ s
this : WellFounded LT.lt
m : α
hms : m ∈ s
H : ∀ x ∈ Set.univ, ¬x < ⟨m, hms⟩
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
tactic: obtain ⟨⟨m, hms : m ∈ s⟩, -, H⟩ := this.has_min Set.univ ⟨⟨c, hcs⟩, trivial⟩
state_before: case intro.intro.mk.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
inst✝ : Preorder α
s : Finset α
c : α
hcs : c ∈ s
this : WellFounded LT.lt
m : α
hms : m ∈ s
H : ∀ x ∈ Set.univ, ¬x < ⟨m, hms⟩
⊢ ∃ m ∈ s, ∀ x ∈ s, ¬x < m
state_after: no goals
tactic: exact ⟨m, hms, fun x hx hxm => H ⟨x, hx⟩ trivial hxm⟩
Theorem: Finset.mem_sumLift₂
File: Mathlib/Data/Sum/Interval.lean

Proof steps:
state_before: α₁ : Type u_1
α₂ : Type u_2
β₁ : Type u_3
β₂ : Type u_4
γ₁ : Type u_5
γ₂ : Type u_6
f f₁ g₁ : α₁ → β₁ → Finset γ₁
g f₂ g₂ : α₂ → β₂ → Finset γ₂
a : α₁ ⊕ α₂
b : β₁ ⊕ β₂
c : γ₁ ⊕ γ₂
⊢ c ∈ sumLift₂ f g a b ↔
    (∃ a₁ b₁ c₁, a = inl a₁ ∧ b = inl b₁ ∧ c = inl c₁ ∧ c₁ ∈ f a₁ b₁) ∨
      ∃ a₂ b₂ c₂, a = inr a₂ ∧ b = inr b₂ ∧ c = inr c₂ ∧ c₂ ∈ g a₂ b₂
state_after: case mp
α₁ : Type u_1
α₂ : Type u_2
β₁ : Type u_3
β₂ : Type u_4
γ₁ : Type u_5
γ₂ : Type u_6
f f₁ g₁ : α₁ → β₁ → Finset γ₁
g f₂ g₂ : α₂ → β₂ → Finset γ₂
a : α₁ ⊕ α₂
b : β₁ ⊕ β₂
c : γ₁ ⊕ γ₂
⊢ c ∈ sumLift₂ f g a b →
    (∃ a₁ b₁ c₁, a = inl a₁ ∧ b = inl b₁ ∧ c = inl c₁ ∧ c₁ ∈ f a₁ b₁) ∨
      ∃ a₂ b₂ c₂, a = inr a₂ ∧ b = inr b₂ ∧ c = inr c₂ ∧ c₂ ∈ g a₂ b₂

case mpr
α₁ : Type u_1
α₂ : Type u_2
β₁ : Type u_3
β₂ : Type u_4
γ₁ : Type u_5
γ₂ : Type u_6
f f₁ g₁ : α₁ → β₁ → Finset γ₁
g f₂ g₂ : α₂ → β₂ → Finset γ₂
a : α₁ ⊕ α₂
b : β₁ ⊕ β₂
c : γ₁ ⊕ γ₂
⊢ ((∃ a₁ b₁ c₁, a = inl a₁ ∧ b = inl b₁ ∧ c = inl c₁ ∧ c₁ ∈ f a₁ b₁) ∨
      ∃ a₂ b₂ c₂, a = inr a₂ ∧ b = inr b₂ ∧ c = inr c₂ ∧ c₂ ∈ g a₂ b₂) →
    c ∈ sumLift₂ f g a b
tactic: constructor
Theorem: Polynomial.map_restriction
File: Mathlib/RingTheory/Polynomial/Basic.lean

Proof steps:
state_before: R✝ : Type u
S : Type u_1
inst✝¹ : Ring R✝
R : Type u
inst✝ : CommRing R
p : R[X]
n : ℕ
⊢ (map (algebraMap (↥(Subring.closure ↑p.coeffs)) R) p.restriction).coeff n = p.coeff n
state_after: no goals
tactic: rw [coeff_map, Algebra.algebraMap_ofSubring_apply, coeff_restriction]
Theorem: MonoidHom.eq_iff
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

Proof steps:
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N : Type u_5
P : Type u_6
inst✝² : Group N
inst✝¹ : Group P
K : Subgroup G
M : Type u_7
inst✝ : MulOneClass M
f : G →* M
x y : G
⊢ f x = f y ↔ y⁻¹ * x ∈ f.ker
state_after: case mp
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N : Type u_5
P : Type u_6
inst✝² : Group N
inst✝¹ : Group P
K : Subgroup G
M : Type u_7
inst✝ : MulOneClass M
f : G →* M
x y : G
h : f x = f y
⊢ y⁻¹ * x ∈ f.ker

case mpr
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N : Type u_5
P : Type u_6
inst✝² : Group N
inst✝¹ : Group P
K : Subgroup G
M : Type u_7
inst✝ : MulOneClass M
f : G →* M
x y : G
h : y⁻¹ * x ∈ f.ker
⊢ f x = f y
tactic: constructor <;> intro h
Theorem: EuclideanGeometry.tan_angle_of_angle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

Proof steps:
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ∠ p₁ p₂ p₃ = π / 2
⊢ Real.tan (∠ p₂ p₃ p₁) = dist p₁ p₂ / dist p₃ p₂
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
⊢ Real.tan (∠ p₂ p₃ p₁) = dist p₁ p₂ / dist p₃ p₂
tactic: rw [angle, ← inner_eq_zero_iff_angle_eq_pi_div_two, real_inner_comm, ← neg_eq_zero, ←
    inner_neg_left, neg_vsub_eq_vsub_rev] at h
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
⊢ Real.tan (∠ p₂ p₃ p₁) = dist p₁ p₂ / dist p₃ p₂
state_after: no goals
tactic: rw [angle, dist_eq_norm_vsub V p₁ p₂, dist_eq_norm_vsub' V p₃ p₂, ← vsub_add_vsub_cancel p₁ p₂ p₃,
    add_comm, tan_angle_add_of_inner_eq_zero h]
Theorem: Nat.factorial_eq_one
File: Mathlib/Data/Nat/Factorial/Basic.lean

Proof steps:
state_before: m n : ℕ
⊢ n ! = 1 ↔ n ≤ 1
state_after: case mp
m n : ℕ
⊢ n ! = 1 → n ≤ 1

case mpr
m n : ℕ
⊢ n ≤ 1 → n ! = 1
tactic: constructor
Theorem: IsLprojection.distrib_lattice_lemma
File: Mathlib/Analysis/NormedSpace/MStructure.lean

Proof steps:
state_before: X : Type u_1
inst✝³ : NormedAddCommGroup X
M : Type u_2
inst✝² : Ring M
inst✝¹ : Module M X
inst✝ : FaithfulSMul M X
P Q R : { P // IsLprojection X P }
⊢ (↑P + ↑Pᶜ * ↑R) * (↑P + ↑Q * ↑R * ↑Pᶜ) = ↑P + ↑Q * ↑R * ↑Pᶜ
state_after: no goals
tactic: rw [add_mul, mul_add, mul_add, (mul_assoc _ (R : M) (↑Q * ↑R * ↑Pᶜ)),
    ← mul_assoc (R : M) (↑Q * ↑R) _, ← coe_inf Q, (Pᶜ.prop.commute R.prop).eq,
    ((Q ⊓ R).prop.commute Pᶜ.prop).eq, (R.prop.commute (Q ⊓ R).prop).eq, coe_inf Q,
    mul_assoc (Q : M), ← mul_assoc, mul_assoc (R : M), (Pᶜ.prop.commute P.prop).eq, mul_compl_self,
    zero_mul, mul_zero, zero_add, add_zero, ← mul_assoc, P.prop.proj.eq,
    R.prop.proj.eq, ← coe_inf Q, mul_assoc, ((Q ⊓ R).prop.commute Pᶜ.prop).eq, ← mul_assoc,
    Pᶜ.prop.proj.eq]
Theorem: CategoryTheory.IsPushout.inl_isoPushout_inv
File: Mathlib/CategoryTheory/Limits/Shapes/Pullback/CommSq.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
h : IsPushout f g inl inr
inst✝ : HasPushout f g
⊢ pushout.inl f g ≫ h.isoPushout.inv = inl
state_after: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
h : IsPushout f g inl inr
inst✝ : HasPushout f g
⊢ pushout.inl f g ≫ (colimit.isoColimitCocone { cocone := PushoutCocone.mk inl inr ⋯, isColimit := h.isColimit }).hom =
    inl
tactic: dsimp [isoPushout, cocone, CommSq.cocone]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
Z X Y P : C
f : Z ⟶ X
g : Z ⟶ Y
inl : X ⟶ P
inr : Y ⟶ P
h : IsPushout f g inl inr
inst✝ : HasPushout f g
⊢ pushout.inl f g ≫ (colimit.isoColimitCocone { cocone := PushoutCocone.mk inl inr ⋯, isColimit := h.isColimit }).hom =
    inl
state_after: no goals
tactic: simp
Theorem: SeminormFamily.basisSets_intersect
File: Mathlib/Analysis/LocallyConvex/WithSeminorms.lean

Proof steps:
state_before: 𝕜 : Type u_1
𝕜₂ : Type u_2
𝕝 : Type u_3
𝕝₂ : Type u_4
E : Type u_5
F : Type u_6
G : Type u_7
ι : Type u_8
ι' : Type u_9
inst✝² : NormedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
p : SeminormFamily 𝕜 E ι
U V : Set E
hU : U ∈ p.basisSets
hV : V ∈ p.basisSets
⊢ ∃ z ∈ p.basisSets, z ⊆ U ∩ V
state_after: no goals
tactic: classical
    rcases p.basisSets_iff.mp hU with ⟨s, r₁, hr₁, hU⟩
    rcases p.basisSets_iff.mp hV with ⟨t, r₂, hr₂, hV⟩
    use ((s ∪ t).sup p).ball 0 (min r₁ r₂)
    refine ⟨p.basisSets_mem (s ∪ t) (lt_min_iff.mpr ⟨hr₁, hr₂⟩), ?_⟩
    rw [hU, hV, ball_finset_sup_eq_iInter _ _ _ (lt_min_iff.mpr ⟨hr₁, hr₂⟩),
      ball_finset_sup_eq_iInter _ _ _ hr₁, ball_finset_sup_eq_iInter _ _ _ hr₂]
    exact
      Set.subset_inter
        (Set.iInter₂_mono' fun i hi =>
          ⟨i, Finset.subset_union_left hi, ball_mono <| min_le_left _ _⟩)
        (Set.iInter₂_mono' fun i hi =>
          ⟨i, Finset.subset_union_right hi, ball_mono <| min_le_right _ _⟩)
Theorem: AffineSubspace.vadd_mem_iff_mem_of_mem_direction
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

Proof steps:
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
v : V
hv : v ∈ s.direction
p : P
⊢ v +ᵥ p ∈ s ↔ p ∈ s
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
v : V
hv : v ∈ s.direction
p : P
h : v +ᵥ p ∈ s
⊢ p ∈ s
tactic: refine ⟨fun h => ?_, fun h => vadd_mem_of_mem_direction hv h⟩
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
v : V
hv : v ∈ s.direction
p : P
h : v +ᵥ p ∈ s
⊢ p ∈ s
state_after: case h.e'_4
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
v : V
hv : v ∈ s.direction
p : P
h : v +ᵥ p ∈ s
⊢ p = -v +ᵥ (v +ᵥ p)
tactic: convert vadd_mem_of_mem_direction (Submodule.neg_mem _ hv) h
state_before: case h.e'_4
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
v : V
hv : v ∈ s.direction
p : P
h : v +ᵥ p ∈ s
⊢ p = -v +ᵥ (v +ᵥ p)
state_after: no goals
tactic: simp
Theorem: AddCommGrp.kernelIsoKer_inv_comp_ι
File: Mathlib/Algebra/Category/Grp/Limits.lean

Proof steps:
state_before: J : Type v
inst✝ : Category.{w, v} J
G H : AddCommGrp
f : G ⟶ H
⊢ (kernelIsoKer f).inv ≫ kernel.ι f = (AddMonoidHom.ker f).subtype
state_after: case w
J : Type v
inst✝ : Category.{w, v} J
G H : AddCommGrp
f : G ⟶ H
x✝ : ↑(of ↥(AddMonoidHom.ker f))
⊢ ((kernelIsoKer f).inv ≫ kernel.ι f) x✝ = (AddMonoidHom.ker f).subtype x✝
tactic: ext
state_before: case w
J : Type v
inst✝ : Category.{w, v} J
G H : AddCommGrp
f : G ⟶ H
x✝ : ↑(of ↥(AddMonoidHom.ker f))
⊢ ((kernelIsoKer f).inv ≫ kernel.ι f) x✝ = (AddMonoidHom.ker f).subtype x✝
state_after: no goals
tactic: simp [kernelIsoKer]
Theorem: IsIntegral.mem_range_algHom_of_minpoly_splits
File: Mathlib/RingTheory/Adjoin/Field.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : CommRing M
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : Algebra R M
x : L
int : IsIntegral R x
h : Splits (algebraMap R K) (minpoly R x)
f : K →ₐ[R] L
⊢ x ∈ ⇑f '' ?m.29144
state_after: R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : CommRing M
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : Algebra R M
x : L
int : IsIntegral R x
h : Splits (algebraMap R K) (minpoly R x)
f : K →ₐ[R] L
⊢ Polynomial.map (algebraMap R L) (minpoly R x) ≠ 0 ∧ (aeval x) (minpoly R x) = 0
tactic: rw [image_rootSet h f, mem_rootSet']
state_before: R : Type u_1
K : Type u_2
L : Type u_3
M : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : CommRing M
inst✝² : Algebra R K
inst✝¹ : Algebra R L
inst✝ : Algebra R M
x : L
int : IsIntegral R x
h : Splits (algebraMap R K) (minpoly R x)
f : K →ₐ[R] L
⊢ Polynomial.map (algebraMap R L) (minpoly R x) ≠ 0 ∧ (aeval x) (minpoly R x) = 0
state_after: no goals
tactic: exact ⟨((minpoly.monic int).map _).ne_zero, minpoly.aeval R x⟩
Theorem: Finset.map_subset_iff_subset_preimage
File: Mathlib/Data/Finset/Preimage.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
f : α ↪ β
s : Finset α
t : Finset β
⊢ map f s ⊆ t ↔ s ⊆ t.preimage ⇑f ⋯
state_after: no goals
tactic: classical rw [map_eq_image, image_subset_iff_subset_preimage]
Theorem: MeasureTheory.setToFun_measure_zero
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✝ : CompleteSpace F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
f g : α → E
hT : DominatedFinMeasAdditive μ T C
h : μ = 0
⊢ setToFun μ T hT f = 0
state_after: α : 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✝ : CompleteSpace F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
f g : α → E
hT : DominatedFinMeasAdditive μ T C
h : μ = 0
this : f =ᶠ[ae μ] 0
⊢ setToFun μ T hT f = 0
tactic: have : f =ᵐ[μ] 0 := by simp [h, EventuallyEq]
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✝ : CompleteSpace F
T T' T'' : Set α → E →L[ℝ] F
C C' C'' : ℝ
f g : α → E
hT : DominatedFinMeasAdditive μ T C
h : μ = 0
this : f =ᶠ[ae μ] 0
⊢ setToFun μ T hT f = 0
state_after: no goals
tactic: rw [setToFun_congr_ae hT this, setToFun_zero]