1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: basis_toMatrix_mul
File: Mathlib/LinearAlgebra/Matrix/Basis.lean

tactic: have := basis_toMatrix_mul_linearMap_toMatrix b₃ b₁ b₂ (Matrix.toLin b₃ b₂ A)
state_before: ι : Type u_1
ι' : Type u_2
κ : Type u_3
κ' : Type u_4
R : Type u_5
M : Type u_6
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
R₂ : Type u_7
M₂ : Type u_8
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R₂ M₂
e : Basis ι R M
v : ι' → M
i : ι
j : ι'
N : Type u_9
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
b : Basis ι R M
b' : Basis ι' R M
c : Basis κ R N
c' : Basis κ' R N
f : M →ₗ[R] N
inst✝³ : Fintype ι'
inst✝² : Fintype κ
inst✝¹ : Finite ι
inst✝ : DecidableEq κ
b₁ : Basis ι R M
b₂ : Basis ι' R M
b₃ : Basis κ R N
A : Matrix ι' κ R
⊢ b₁.toMatrix ⇑b₂ * A = (toMatrix b₃ b₁) ((toLin b₃ b₂) A)
state_after: ι : Type u_1
ι' : Type u_2
κ : Type u_3
κ' : Type u_4
R : Type u_5
M : Type u_6
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
R₂ : Type u_7
M₂ : Type u_8
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R₂ M₂
e : Basis ι R M
v : ι' → M
i : ι
j : ι'
N : Type u_9
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
b : Basis ι R M
b' : Basis ι' R M
c : Basis κ R N
c' : Basis κ' R N
f : M →ₗ[R] N
inst✝³ : Fintype ι'
inst✝² : Fintype κ
inst✝¹ : Finite ι
inst✝ : DecidableEq κ
b₁ : Basis ι R M
b₂ : Basis ι' R M
b₃ : Basis κ R N
A : Matrix ι' κ R
this : b₁.toMatrix ⇑b₂ * (toMatrix b₃ b₂) ((toLin b₃ b₂) A) = (toMatrix b₃ b₁) ((toLin b₃ b₂) A)
⊢ b₁.toMatrix ⇑b₂ * A = (toMatrix b₃ b₁) ((toLin b₃ b₂) A)

tactic: rwa [LinearMap.toMatrix_toLin] at this
state_before: ι : Type u_1
ι' : Type u_2
κ : Type u_3
κ' : Type u_4
R : Type u_5
M : Type u_6
inst✝¹¹ : CommSemiring R
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
R₂ : Type u_7
M₂ : Type u_8
inst✝⁸ : CommRing R₂
inst✝⁷ : AddCommGroup M₂
inst✝⁶ : Module R₂ M₂
e : Basis ι R M
v : ι' → M
i : ι
j : ι'
N : Type u_9
inst✝⁵ : AddCommMonoid N
inst✝⁴ : Module R N
b : Basis ι R M
b' : Basis ι' R M
c : Basis κ R N
c' : Basis κ' R N
f : M →ₗ[R] N
inst✝³ : Fintype ι'
inst✝² : Fintype κ
inst✝¹ : Finite ι
inst✝ : DecidableEq κ
b₁ : Basis ι R M
b₂ : Basis ι' R M
b₃ : Basis κ R N
A : Matrix ι' κ R
this : b₁.toMatrix ⇑b₂ * (toMatrix b₃ b₂) ((toLin b₃ b₂) A) = (toMatrix b₃ b₁) ((toLin b₃ b₂) A)
⊢ b₁.toMatrix ⇑b₂ * A = (toMatrix b₃ b₁) ((toLin b₃ b₂) A)
state_after: no goals
Theorem: SimpleGraph.card_commonNeighbors_top
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

tactic: simp only [commonNeighbors_top_eq, ← Set.toFinset_card, Set.toFinset_diff]
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ Fintype.card ↑(⊤.commonNeighbors v w) = Fintype.card V - 2
state_after: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ (Set.univ.toFinset \ {v, w}.toFinset).card = Fintype.card V - 2

tactic: rw [Finset.card_sdiff]
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ (Set.univ.toFinset \ {v, w}.toFinset).card = Fintype.card V - 2
state_after: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ Set.univ.toFinset.card - {v, w}.toFinset.card = Fintype.card V - 2

V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ {v, w}.toFinset ⊆ Set.univ.toFinset

tactic: simp [Finset.card_univ, h]
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ Set.univ.toFinset.card - {v, w}.toFinset.card = Fintype.card V - 2
state_after: no goals

tactic: simp only [Set.toFinset_subset_toFinset, Set.subset_univ]
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableEq V
v w : V
h : v ≠ w
⊢ {v, w}.toFinset ⊆ Set.univ.toFinset
state_after: no goals
Theorem: Perfection.coeff_frobenius
File: Mathlib/RingTheory/Perfection.lean

tactic: apply coeff_pow_p f n
state_before: R : Type u₁
inst✝¹ : CommSemiring R
p : ℕ
hp : Fact (Nat.Prime p)
inst✝ : CharP R p
f : Ring.Perfection R p
n : ℕ
⊢ (coeff R p (n + 1)) ((frobenius (Ring.Perfection R p) p) f) = (coeff R p n) f
state_after: no goals
Theorem: Nat.dist_mul_left
File: Mathlib/Data/Nat/Dist.lean

tactic: rw [mul_comm k n, mul_comm k m, dist_mul_right, mul_comm]
state_before: k n m : ℕ
⊢ (k * n).dist (k * m) = k * n.dist m
state_after: no goals
Theorem: MeasureTheory.withDensity_add_right
File: Mathlib/MeasureTheory/Measure/WithDensity.lean

tactic: simpa only [add_comm] using withDensity_add_left hg f
state_before: α : Type u_1
m0 : MeasurableSpace α
μ : Measure α
f g : α → ℝ≥0∞
hg : Measurable g
⊢ μ.withDensity (f + g) = μ.withDensity f + μ.withDensity g
state_after: no goals
Theorem: Polynomial.derivative_eval
File: Mathlib/Algebra/Polynomial/Derivative.lean

tactic: simp_rw [derivative_apply, eval_sum, eval_mul_X_pow, eval_C]
state_before: R : Type u
S : Type v
T : Type w
ι : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Semiring R
p : R[X]
x : R
⊢ eval x (derivative p) = p.sum fun n a => a * ↑n * x ^ (n - 1)
state_after: no goals
Theorem: CategoryTheory.RelCat.Hom.rel_comp_apply₂
File: Mathlib/CategoryTheory/Category/RelCat.lean

tactic: rfl
state_before: X Y Z : RelCat
f : X ⟶ Y
g : Y ⟶ Z
x : X
z : Z
⊢ (f ≫ g) x z ↔ ∃ y, f x y ∧ g y z
state_after: no goals
Theorem: WithTop.preimage_coe_Iio_top
File: Mathlib/Order/Interval/Set/WithBotTop.lean

tactic: rw [← range_coe, preimage_range]
state_before: α : Type u_1
inst✝ : Preorder α
a b : α
⊢ some ⁻¹' Iio ⊤ = univ
state_after: no goals
Theorem: collinear_empty
File: Mathlib/LinearAlgebra/AffineSpace/FiniteDimensional.lean

tactic: rw [collinear_iff_rank_le_one, vectorSpan_empty]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
ι : Type u_4
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
⊢ Collinear k ∅
state_after: k : Type u_1
V : Type u_2
P : Type u_3
ι : Type u_4
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
⊢ Module.rank k ↥⊥ ≤ 1

tactic: simp
state_before: k : Type u_1
V : Type u_2
P : Type u_3
ι : Type u_4
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
⊢ Module.rank k ↥⊥ ≤ 1
state_after: no goals
Theorem: WCovBy.Ico_subset
File: Mathlib/Order/Cover.lean

tactic: rw [← Icc_diff_right, h.Icc_eq, diff_singleton_subset_iff, pair_comm]
state_before: α : Type u_1
β : Type u_2
inst✝ : PartialOrder α
a b c : α
h : a ⩿ b
⊢ Ico a b ⊆ {a}
state_after: no goals
Theorem: Polynomial.degree_update_le
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: rw [degree, support_update]
state_before: R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
⊢ (p.update n a).degree ≤ max p.degree ↑n
state_after: R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
⊢ (if a = 0 then p.support.erase n else insert n p.support).max ≤ max p.degree ↑n

tactic: split_ifs
state_before: R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
⊢ (if a = 0 then p.support.erase n else insert n p.support).max ≤ max p.degree ↑n
state_after: case pos
R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
h✝ : a = 0
⊢ (p.support.erase n).max ≤ max p.degree ↑n

case neg
R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
h✝ : ¬a = 0
⊢ (insert n p.support).max ≤ max p.degree ↑n

tactic: exact (Finset.max_mono (erase_subset _ _)).trans (le_max_left _ _)
state_before: case pos
R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
h✝ : a = 0
⊢ (p.support.erase n).max ≤ max p.degree ↑n
state_after: no goals

tactic: rw [max_insert, max_comm]
state_before: case neg
R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
h✝ : ¬a = 0
⊢ (insert n p.support).max ≤ max p.degree ↑n
state_after: case neg
R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
h✝ : ¬a = 0
⊢ max p.support.max ↑n ≤ max p.degree ↑n

tactic: exact le_rfl
state_before: case neg
R : Type u
S : Type v
a✝ b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
a : R
h✝ : ¬a = 0
⊢ max p.support.max ↑n ≤ max p.degree ↑n
state_after: no goals
Theorem: Batteries.RBNode.size_lt_depth
File: .lake/packages/batteries/Batteries/Data/RBMap/Depth.lean

tactic: decide
state_before: α : Type u_1
⊢ 0 < 1
state_after: no goals

tactic: rw [size, depth, Nat.add_right_comm, Nat.pow_succ, Nat.mul_two]
state_before: α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ (node c✝ a v✝ b).size < 2 ^ (node c✝ a v✝ b).depth
state_after: α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ a.size + 1 + b.size < 2 ^ max a.depth b.depth + 2 ^ max a.depth b.depth

tactic: refine Nat.add_le_add
  (Nat.lt_of_lt_of_le a.size_lt_depth ?_) (Nat.lt_of_lt_of_le b.size_lt_depth ?_)
state_before: α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ a.size + 1 + b.size < 2 ^ max a.depth b.depth + 2 ^ max a.depth b.depth
state_after: case refine_1
α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ 2 ^ a.depth ≤ 2 ^ max a.depth b.depth

case refine_2
α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ 2 ^ b.depth ≤ 2 ^ max a.depth b.depth

tactic: exact Nat.pow_le_pow_of_le_right (by decide) (Nat.le_max_left ..)
state_before: case refine_1
α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ 2 ^ a.depth ≤ 2 ^ max a.depth b.depth
state_after: no goals

tactic: decide
state_before: α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ 2 > 0
state_after: no goals

tactic: exact Nat.pow_le_pow_of_le_right (by decide) (Nat.le_max_right ..)
state_before: case refine_2
α : Type u_1
c✝ : RBColor
a : RBNode α
v✝ : α
b : RBNode α
⊢ 2 ^ b.depth ≤ 2 ^ max a.depth b.depth
state_after: no goals
Theorem: Prod.map_bijective
File: Mathlib/Data/Prod/Basic.lean

tactic: haveI := Nonempty.map f ‹_›
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : Nonempty α
inst✝ : Nonempty β
f : α → γ
g : β → δ
⊢ Bijective (map f g) ↔ Bijective f ∧ Bijective g
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : Nonempty α
inst✝ : Nonempty β
f : α → γ
g : β → δ
this : Nonempty γ
⊢ Bijective (map f g) ↔ Bijective f ∧ Bijective g

tactic: haveI := Nonempty.map g ‹_›
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : Nonempty α
inst✝ : Nonempty β
f : α → γ
g : β → δ
this : Nonempty γ
⊢ Bijective (map f g) ↔ Bijective f ∧ Bijective g
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : Nonempty α
inst✝ : Nonempty β
f : α → γ
g : β → δ
this✝ : Nonempty γ
this : Nonempty δ
⊢ Bijective (map f g) ↔ Bijective f ∧ Bijective g

tactic: exact (map_injective.and map_surjective).trans and_and_and_comm
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : Nonempty α
inst✝ : Nonempty β
f : α → γ
g : β → δ
this✝ : Nonempty γ
this : Nonempty δ
⊢ Bijective (map f g) ↔ Bijective f ∧ Bijective g
state_after: no goals
Theorem: IsMulFreimanHom.div
File: Mathlib/Combinatorics/Additive/FreimanHom.lean

tactic: rw [Pi.div_def, prod_map_div, prod_map_div, h₁.map_prod_eq_map_prod hsA htA hs ht h,
  h₂.map_prod_eq_map_prod hsA htA hs ht h]
state_before: F : Type u_1
α : Type u_2
β✝ : Type u_3
γ : Type u_4
inst✝² : CommMonoid α
inst✝¹ : DivisionCommMonoid β✝
A : Set α
B : Set β✝
f : α → β✝
m n : ℕ
β : Type u_5
inst✝ : DivisionCommMonoid β
B₁ B₂ : Set β
f₁ f₂ : α → β
h₁ : IsMulFreimanHom n A B₁ f₁
h₂ : IsMulFreimanHom n A B₂ f₂
s t : Multiset α
hsA : ∀ ⦃x : α⦄, x ∈ s → x ∈ A
htA : ∀ ⦃x : α⦄, x ∈ t → x ∈ A
hs : card s = n
ht : card t = n
h : s.prod = t.prod
⊢ (map (f₁ / f₂) s).prod = (map (f₁ / f₂) t).prod
state_after: no goals
Theorem: ContinuousMultilinearMap.ratio_le_opNorm
File: Mathlib/Analysis/NormedSpace/Multilinear/Basic.lean

tactic: positivity
state_before: 𝕜 : Type u
ι : Type v
ι' : Type v'
E : ι → Type wE
E₁ : ι → Type wE₁
E' : ι' → Type wE'
G : Type wG
G' : Type wG'
inst✝¹² : Fintype ι
inst✝¹¹ : Fintype ι'
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : (i : ι) → SeminormedAddCommGroup (E i)
inst✝⁸ : (i : ι) → NormedSpace 𝕜 (E i)
inst✝⁷ : (i : ι) → SeminormedAddCommGroup (E₁ i)
inst✝⁶ : (i : ι) → NormedSpace 𝕜 (E₁ i)
inst✝⁵ : (i : ι') → SeminormedAddCommGroup (E' i)
inst✝⁴ : (i : ι') → NormedSpace 𝕜 (E' i)
inst✝³ : SeminormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
inst✝¹ : SeminormedAddCommGroup G'
inst✝ : NormedSpace 𝕜 G'
c : 𝕜
f g : ContinuousMultilinearMap 𝕜 E G
m : (i : ι) → E i
⊢ 0 ≤ ∏ i : ι, ‖m i‖
state_after: no goals
Theorem: CategoryTheory.Limits.coprod.map_swap
File: Mathlib/CategoryTheory/Limits/Shapes/BinaryProducts.lean

tactic: simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X✝ Y✝ A B X Y : C
f : A ⟶ B
g : X ⟶ Y
inst✝ : HasColimitsOfShape (Discrete WalkingPair) C
⊢ map (𝟙 X) f ≫ map g (𝟙 B) = map g (𝟙 A) ≫ map (𝟙 Y) f
state_after: no goals
Theorem: Homeomorph.map_cocompact
File: Mathlib/Topology/Homeomorph.lean

tactic: rw [← h.comap_cocompact, map_comap_of_surjective h.surjective]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
X' : Type u_4
Y' : Type u_5
inst✝¹ : TopologicalSpace X'
inst✝ : TopologicalSpace Y'
h : X ≃ₜ Y
⊢ map (⇑h) (cocompact X) = cocompact Y
state_after: no goals
Theorem: dvd_pow
File: Mathlib/Algebra/Divisibility/Basic.lean

tactic: rw [pow_succ']
state_before: α : Type u_1
inst✝ : Monoid α
a b c : α
m n✝ : ℕ
hab : a ∣ b
n : ℕ
x✝ : n + 1 ≠ 0
⊢ a ∣ b ^ (n + 1)
state_after: α : Type u_1
inst✝ : Monoid α
a b c : α
m n✝ : ℕ
hab : a ∣ b
n : ℕ
x✝ : n + 1 ≠ 0
⊢ a ∣ b * b ^ n

tactic: exact hab.mul_right _
state_before: α : Type u_1
inst✝ : Monoid α
a b c : α
m n✝ : ℕ
hab : a ∣ b
n : ℕ
x✝ : n + 1 ≠ 0
⊢ a ∣ b * b ^ n
state_after: no goals
Theorem: Finset.Ioc_subset_Icc_self
File: Mathlib/Order/Interval/Finset/Basic.lean

tactic: rw [← coe_subset, coe_Ioc, coe_Icc]
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ Ioc a b ⊆ Icc a b
state_after: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ Set.Ioc a b ⊆ Set.Icc a b

tactic: exact Set.Ioc_subset_Icc_self
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : Preorder α
inst✝ : LocallyFiniteOrder α
a a₁ a₂ b b₁ b₂ c x : α
⊢ Set.Ioc a b ⊆ Set.Icc a b
state_after: no goals
Theorem: Cardinal.cantorFunctionAux_eq
File: Mathlib/Data/Real/Cardinality.lean

tactic: simp [cantorFunctionAux, h]
state_before: c : ℝ
f g : ℕ → Bool
n : ℕ
h : f n = g n
⊢ cantorFunctionAux c f n = cantorFunctionAux c g n
state_after: no goals
Theorem: Submonoid.LocalizationMap.mul_mk'_eq_mk'_of_mul
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [← mk'_one, ← mk'_mul, one_mul]
state_before: M : Type u_1
inst✝² : CommMonoid M
S : Submonoid M
N : Type u_2
inst✝¹ : CommMonoid N
P : Type u_3
inst✝ : CommMonoid P
f : S.LocalizationMap N
x₁ x₂ : M
y : ↥S
⊢ f.toMap x₁ * f.mk' x₂ y = f.mk' (x₁ * x₂) y
state_after: no goals
Theorem: Seminorm.ball_eq_emptyset
File: Mathlib/Analysis/Seminorm.lean

tactic: ext
state_before: R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝⁶ : SeminormedRing 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module 𝕜 E
inst✝³ : SeminormedRing 𝕜₂
inst✝² : AddCommGroup E₂
inst✝¹ : Module 𝕜₂ E₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝ : RingHomIsometric σ₁₂
p✝ p : Seminorm 𝕜 E
x : E
r : ℝ
hr : r ≤ 0
⊢ p.ball x r = ∅
state_after: case h
R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝⁶ : SeminormedRing 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module 𝕜 E
inst✝³ : SeminormedRing 𝕜₂
inst✝² : AddCommGroup E₂
inst✝¹ : Module 𝕜₂ E₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝ : RingHomIsometric σ₁₂
p✝ p : Seminorm 𝕜 E
x : E
r : ℝ
hr : r ≤ 0
x✝ : E
⊢ x✝ ∈ p.ball x r ↔ x✝ ∈ ∅

tactic: rw [Seminorm.mem_ball, Set.mem_empty_iff_false, iff_false_iff, not_lt]
state_before: case h
R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝⁶ : SeminormedRing 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module 𝕜 E
inst✝³ : SeminormedRing 𝕜₂
inst✝² : AddCommGroup E₂
inst✝¹ : Module 𝕜₂ E₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝ : RingHomIsometric σ₁₂
p✝ p : Seminorm 𝕜 E
x : E
r : ℝ
hr : r ≤ 0
x✝ : E
⊢ x✝ ∈ p.ball x r ↔ x✝ ∈ ∅
state_after: case h
R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝⁶ : SeminormedRing 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module 𝕜 E
inst✝³ : SeminormedRing 𝕜₂
inst✝² : AddCommGroup E₂
inst✝¹ : Module 𝕜₂ E₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝ : RingHomIsometric σ₁₂
p✝ p : Seminorm 𝕜 E
x : E
r : ℝ
hr : r ≤ 0
x✝ : E
⊢ r ≤ p (x✝ - x)

tactic: exact hr.trans (apply_nonneg p _)
state_before: case h
R : Type u_1
R' : Type u_2
𝕜 : Type u_3
𝕜₂ : Type u_4
𝕜₃ : Type u_5
𝕝 : Type u_6
E : Type u_7
E₂ : Type u_8
E₃ : Type u_9
F : Type u_10
G : Type u_11
ι : Type u_12
inst✝⁶ : SeminormedRing 𝕜
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module 𝕜 E
inst✝³ : SeminormedRing 𝕜₂
inst✝² : AddCommGroup E₂
inst✝¹ : Module 𝕜₂ E₂
σ₁₂ : 𝕜 →+* 𝕜₂
inst✝ : RingHomIsometric σ₁₂
p✝ p : Seminorm 𝕜 E
x : E
r : ℝ
hr : r ≤ 0
x✝ : E
⊢ r ≤ p (x✝ - x)
state_after: no goals
Theorem: CategoryTheory.Functor.preservesEpimorphisms_of_map_exact
File: Mathlib/CategoryTheory/Abelian/Exact.lean

tactic: letI := preservesZeroMorphisms_of_map_exact L h
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
⊢ Epi (L.map f)
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
this : L.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_exact L h
⊢ Epi (L.map f)

tactic: apply ((tfae_epi (L.obj 0) (L.map f)).out 2 0).mp
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
this : L.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_exact L h
⊢ Epi (L.map f)
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
this : L.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_exact L h
⊢ Exact (L.map f) 0

tactic: rw [← L.map_zero]
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
this : L.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_exact L h
⊢ Exact (L.map f) 0
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
this : L.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_exact L h
⊢ Exact (L.map f) (L.map 0)

tactic: exact h (((tfae_epi 0 f).out 0 2).mp hf)
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category.{v₁, u₁} A
inst✝² : Category.{v₂, u₂} B
inst✝¹ : Abelian A
inst✝ : Abelian B
L : A ⥤ B
h : ∀ ⦃X Y Z : A⦄ {f : X ⟶ Y} {g : Y ⟶ Z}, Exact f g → Exact (L.map f) (L.map g)
X✝ Y✝ : A
f : X✝ ⟶ Y✝
hf : Epi f
this : L.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_exact L h
⊢ Exact (L.map f) (L.map 0)
state_after: no goals
Theorem: Cardinal.ord_aleph_eq_enum_card
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

tactic: rw [← eq_enumOrd _ ord_card_unbounded']
state_before: ⊢ ord ∘ aleph = enumOrd {b | b.card.ord = b ∧ ω ≤ b}
state_after: ⊢ StrictMono (ord ∘ aleph) ∧ range (ord ∘ aleph) = {b | b.card.ord = b ∧ ω ≤ b}

tactic: use aleph_isNormal.strictMono
state_before: ⊢ StrictMono (ord ∘ aleph) ∧ range (ord ∘ aleph) = {b | b.card.ord = b ∧ ω ≤ b}
state_after: case right

⊢ range (ord ∘ aleph) = {b | b.card.ord = b ∧ ω ≤ b}

tactic: rw [range_eq_iff]
state_before: case right

⊢ range (ord ∘ aleph) = {b | b.card.ord = b ∧ ω ≤ b}
state_after: case right

⊢ (∀ (a : Ordinal.{u_1}), (ord ∘ aleph) a ∈ {b | b.card.ord = b ∧ ω ≤ b}) ∧
    ∀ b ∈ {b | b.card.ord = b ∧ ω ≤ b}, ∃ a, (ord ∘ aleph) a = b

tactic: refine ⟨fun a => ⟨?_, ?_⟩, fun b hb => eq_aleph_of_eq_card_ord hb.1 hb.2⟩
state_before: case right

⊢ (∀ (a : Ordinal.{u_1}), (ord ∘ aleph) a ∈ {b | b.card.ord = b ∧ ω ≤ b}) ∧
    ∀ b ∈ {b | b.card.ord = b ∧ ω ≤ b}, ∃ a, (ord ∘ aleph) a = b
state_after: case right.refine_1
a : Ordinal.{u_1}
⊢ ((ord ∘ aleph) a).card.ord = (ord ∘ aleph) a

case right.refine_2
a : Ordinal.{u_1}
⊢ ω ≤ (ord ∘ aleph) a

tactic: rw [Function.comp_apply, card_ord]
state_before: case right.refine_1
a : Ordinal.{u_1}
⊢ ((ord ∘ aleph) a).card.ord = (ord ∘ aleph) a
state_after: no goals

tactic: rw [← ord_aleph0, Function.comp_apply, ord_le_ord]
state_before: case right.refine_2
a : Ordinal.{u_1}
⊢ ω ≤ (ord ∘ aleph) a
state_after: case right.refine_2
a : Ordinal.{u_1}
⊢ ℵ₀ ≤ aleph a

tactic: exact aleph0_le_aleph _
state_before: case right.refine_2
a : Ordinal.{u_1}
⊢ ℵ₀ ≤ aleph a
state_after: no goals