tasksource/leandojo huggingface dataset:
Theorem: CategoryTheory.Functor.preservesMonomorphisms_of_map_exact
File: Mathlib/CategoryTheory/Abelian/Exact.lean

tactic: letI := preservesZeroMorphisms_of_map_exact L h
state_before: C : Type u₁
inst✝⁵ : Category C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category A
inst✝² : Category 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 : Mono f
⊢ Mono (L.map f)

tactic: apply ((tfae_mono (L.obj 0) (L.map f)).out 2 0).mp
state_before: C : Type u₁
inst✝⁵ : Category C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category A
inst✝² : Category 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 : Mono f
this : PreservesZeroMorphisms L := preservesZeroMorphisms_of_map_exact L h
⊢ Mono (L.map f)

tactic: rw [← L.map_zero]
state_before: C : Type u₁
inst✝⁵ : Category C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category A
inst✝² : Category 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 : Mono f
this : PreservesZeroMorphisms L := preservesZeroMorphisms_of_map_exact L h
⊢ Exact 0 (L.map f)

tactic: exact h (((tfae_mono 0 f).out 0 2).mp hf)
state_before: C : Type u₁
inst✝⁵ : Category C
inst✝⁴ : Abelian C
A : Type u₁
B : Type u₂
inst✝³ : Category A
inst✝² : Category 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 : Mono f
this : PreservesZeroMorphisms L := preservesZeroMorphisms_of_map_exact L h
⊢ Exact (L.map 0) (L.map f)
Theorem: GaloisConnection.l_sSup
File: Mathlib/Order/GaloisConnection.lean

tactic: simp only [sSup_eq_iSup, gc.l_iSup]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort ?u.20627
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set α
⊢ l (sSup s) = ⨆ (a : α) (_ : a ∈ s), l a
Theorem: iSup_option_elim
File: Mathlib/Order/CompleteLattice.lean

tactic: simp [iSup_option]
state_before: α : Type u_1
β : Type u_2
β₂ : Type ?u.170514
γ : Type ?u.170517
ι : Sort ?u.170520
ι' : Sort ?u.170523
κ : ι → Sort ?u.170528
κ' : ι' → Sort ?u.170533
inst✝ : CompleteLattice α
f✝ g s t : ι → α
a✝ b a : α
f : β → α
⊢ (⨆ (o : Option β), Option.elim o a f) = a ⊔ ⨆ (b : β), f b
Theorem: Real.Angle.tan_eq_inv_of_two_zsmul_add_two_zsmul_eq_pi
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: simp_rw [two_zsmul, ← two_nsmul] at h
state_before: θ ψ : Angle
h : 2 • θ + 2 • ψ = ↑π
⊢ tan ψ = (tan θ)⁻¹

tactic: exact tan_eq_inv_of_two_nsmul_add_two_nsmul_eq_pi h
state_before: θ ψ : Angle
h : 2 • θ + 2 • ψ = ↑π
⊢ tan ψ = (tan θ)⁻¹
Theorem: AbsoluteValue.abs_abv_sub_le_abv_sub
File: Mathlib/Algebra/Order/AbsoluteValue.lean

tactic: rw [abv.map_sub]
state_before: R : Type u_2
S : Type u_1
inst✝¹ : Ring R
inst✝ : LinearOrderedCommRing S
abv : AbsoluteValue R S
a b : R
⊢ ↑abv b - ↑abv a ≤ ↑abv (a - b)

tactic: apply abv.le_sub
state_before: R : Type u_2
S : Type u_1
inst✝¹ : Ring R
inst✝ : LinearOrderedCommRing S
abv : AbsoluteValue R S
a b : R
⊢ ↑abv b - ↑abv a ≤ ↑abv (b - a)
Theorem: Irrational.of_sub_int
File: Mathlib/Data/Real/Irrational.lean

tactic: rwa [Rat.cast_coe_int]
state_before: q : ℚ
x y : ℝ
m : ℤ
h : Irrational (x - ↑m)
⊢ Irrational (x - ↑↑m)
Theorem: List.length_replaceF
File: Std/Data/List/Lemmas.lean

tactic: induction l <;> simp [replaceF]
state_before: α✝ : Type u_1
f : α✝ → Option α✝
l : List α✝
⊢ length (replaceF f l) = length l

tactic: split <;> simp [*]
state_before: case cons
α✝ : Type u_1
f : α✝ → Option α✝
head✝ : α✝
tail✝ : List α✝
tail_ih✝ : length (replaceF f tail✝) = length tail✝
⊢ length
      (match f head✝ with
      | none => head✝ :: replaceF f tail✝
      | some a => a :: tail✝) =
    succ (length tail✝)
Theorem: one_memℓp_infty
File: Mathlib/Analysis/NormedSpace/lpSpace.lean

tactic: rintro i ⟨i, rfl⟩
state_before: α : Type ?u.628429
E : α → Type ?u.628434
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_1
B : I → Type u_2
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
⊢ 1 ∈ upperBounds (Set.range fun i => ‖OfNat.ofNat 1 i‖)

tactic: exact norm_one.le
state_before: case intro
α : Type ?u.628429
E : α → Type ?u.628434
p q : ℝ≥0∞
inst✝² : (i : α) → NormedAddCommGroup (E i)
I : Type u_1
B : I → Type u_2
inst✝¹ : (i : I) → NormedRing (B i)
inst✝ : ∀ (i : I), NormOneClass (B i)
i : I
⊢ (fun i => ‖OfNat.ofNat 1 i‖) i ≤ 1
Theorem: FreeSemigroup.hom_ext
File: Mathlib/Algebra/Free.lean

tactic: simp only [map_mul, *]
state_before: α : Type u
β : Type v
inst✝ : Mul β
f g : FreeSemigroup α →ₙ* β
h : ↑f ∘ of = ↑g ∘ of
x✝ : FreeSemigroup α
x : α
y : FreeSemigroup α
hx : ↑f (of x) = ↑g (of x)
hy : ↑f y = ↑g y
⊢ ↑f (of x * y) = ↑g (of x * y)
Theorem: PolyEquivTensor.toFunBilinear_apply_eq_sum
File: Mathlib/RingTheory/PolynomialAlgebra.lean

tactic: simp only [toFunBilinear_apply_apply, aeval_def, eval₂_eq_sum, Polynomial.sum, Finset.smul_sum]
state_before: R : Type u_1
A : Type u_2
inst✝² : CommSemiring R
inst✝¹ : Semiring A
inst✝ : Algebra R A
a : A
p : R[X]
⊢ ↑(↑(toFunBilinear R A) a) p = sum p fun n r => ↑(monomial n) (a * ↑(algebraMap R A) r)

tactic: congr with i : 1
state_before: R : Type u_1
A : Type u_2
inst✝² : CommSemiring R
inst✝¹ : Semiring A
inst✝ : Algebra R A
a : A
p : R[X]
⊢ (Finset.sum (support p) fun x => a • (↑(algebraMap R A[X]) (coeff p x) * X ^ x)) =
    Finset.sum (support p) fun x => ↑(monomial x) (a * ↑(algebraMap R A) (coeff p x))

tactic: rw [← Algebra.smul_def, ← C_mul', mul_smul_comm, C_mul_X_pow_eq_monomial, ← Algebra.commutes,
  ← Algebra.smul_def, smul_monomial]
state_before: case e_f.h
R : Type u_1
A : Type u_2
inst✝² : CommSemiring R
inst✝¹ : Semiring A
inst✝ : Algebra R A
a : A
p : R[X]
i : ℕ
⊢ a • (↑(algebraMap R A[X]) (coeff p i) * X ^ i) = ↑(monomial i) (a * ↑(algebraMap R A) (coeff p i))
Theorem: NormedSpace.polar_closedBall
File: Mathlib/Analysis/NormedSpace/Dual.lean

tactic: refine' Subset.antisymm _ (closedBall_inv_subset_polar_closedBall 𝕜)
state_before: 𝕜✝ : Type ?u.142772
inst✝⁵ : NontriviallyNormedField 𝕜✝
E✝ : Type ?u.142778
inst✝⁴ : SeminormedAddCommGroup E✝
inst✝³ : NormedSpace 𝕜✝ E✝
𝕜 : Type u_1
E : Type u_2
inst✝² : IsROrC 𝕜
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
hr : 0 < r
⊢ polar 𝕜 (closedBall 0 r) = closedBall 0 r⁻¹

tactic: intro x' h
state_before: 𝕜✝ : Type ?u.142772
inst✝⁵ : NontriviallyNormedField 𝕜✝
E✝ : Type ?u.142778
inst✝⁴ : SeminormedAddCommGroup E✝
inst✝³ : NormedSpace 𝕜✝ E✝
𝕜 : Type u_1
E : Type u_2
inst✝² : IsROrC 𝕜
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
hr : 0 < r
⊢ polar 𝕜 (closedBall 0 r) ⊆ closedBall 0 r⁻¹

tactic: simp only [mem_closedBall_zero_iff]
state_before: 𝕜✝ : Type ?u.142772
inst✝⁵ : NontriviallyNormedField 𝕜✝
E✝ : Type ?u.142778
inst✝⁴ : SeminormedAddCommGroup E✝
inst✝³ : NormedSpace 𝕜✝ E✝
𝕜 : Type u_1
E : Type u_2
inst✝² : IsROrC 𝕜
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
hr : 0 < r
x' : Dual 𝕜 E
h : x' ∈ polar 𝕜 (closedBall 0 r)
⊢ x' ∈ closedBall 0 r⁻¹

tactic: refine' ContinuousLinearMap.op_norm_le_of_ball hr (inv_nonneg.mpr hr.le) fun z _ => _
state_before: 𝕜✝ : Type ?u.142772
inst✝⁵ : NontriviallyNormedField 𝕜✝
E✝ : Type ?u.142778
inst✝⁴ : SeminormedAddCommGroup E✝
inst✝³ : NormedSpace 𝕜✝ E✝
𝕜 : Type u_1
E : Type u_2
inst✝² : IsROrC 𝕜
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
hr : 0 < r
x' : Dual 𝕜 E
h : x' ∈ polar 𝕜 (closedBall 0 r)
⊢ ‖x'‖ ≤ r⁻¹

tactic: simpa only [one_div] using LinearMap.bound_of_ball_bound' hr 1 x'.toLinearMap h z
state_before: 𝕜✝ : Type ?u.142772
inst✝⁵ : NontriviallyNormedField 𝕜✝
E✝ : Type ?u.142778
inst✝⁴ : SeminormedAddCommGroup E✝
inst✝³ : NormedSpace 𝕜✝ E✝
𝕜 : Type u_1
E : Type u_2
inst✝² : IsROrC 𝕜
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
r : ℝ
hr : 0 < r
x' : Dual 𝕜 E
h : x' ∈ polar 𝕜 (closedBall 0 r)
z : E
x✝ : z ∈ ball 0 r
⊢ ‖↑x' z‖ ≤ r⁻¹ * ‖z‖
Theorem: Cardinal.out_embedding
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: trans
state_before: α β : Type u
c c' : Cardinal
⊢ c ≤ c' ↔ Nonempty (Quotient.out c ↪ Quotient.out c')

tactic: rw [← Quotient.out_eq c, ← Quotient.out_eq c']
state_before: α β : Type u
c c' : Cardinal
⊢ c ≤ c' ↔ ?m.14386

tactic: rw [mk'_def, mk'_def, le_def]
state_before: α β : Type u
c c' : Cardinal
⊢ Quotient.mk isEquivalent (Quotient.out c) ≤ Quotient.mk isEquivalent (Quotient.out c') ↔
    Nonempty (Quotient.out c ↪ Quotient.out c')
Theorem: Set.card_union_le
File: Mathlib/Data/Finite/Card.lean

tactic: cases' _root_.finite_or_infinite (↥(s ∪ t)) with h h
state_before: α : Type u_1
β : Type ?u.6896
γ : Type ?u.6899
s t : Set α
⊢ Nat.card ↑(s ∪ t) ≤ Nat.card ↑s + Nat.card ↑t

tactic: rw [finite_coe_iff, finite_union, ← finite_coe_iff, ← finite_coe_iff] at h
state_before: case inl
α : Type u_1
β : Type ?u.6896
γ : Type ?u.6899
s t : Set α
h : Finite ↑(s ∪ t)
⊢ Nat.card ↑(s ∪ t) ≤ Nat.card ↑s + Nat.card ↑t

tactic: cases h
state_before: case inl
α : Type u_1
β : Type ?u.6896
γ : Type ?u.6899
s t : Set α
h : Finite ↑s ∧ Finite ↑t
⊢ Nat.card ↑(s ∪ t) ≤ Nat.card ↑s + Nat.card ↑t

tactic: rw [← Cardinal.natCast_le, Nat.cast_add, Finite.cast_card_eq_mk, Finite.cast_card_eq_mk,
  Finite.cast_card_eq_mk]
state_before: case inl.intro
α : Type u_1
β : Type ?u.6896
γ : Type ?u.6899
s t : Set α
left✝ : Finite ↑s
right✝ : Finite ↑t
⊢ Nat.card ↑(s ∪ t) ≤ Nat.card ↑s + Nat.card ↑t

tactic: exact Cardinal.mk_union_le s t
state_before: case inl.intro
α : Type u_1
β : Type ?u.6896
γ : Type ?u.6899
s t : Set α
left✝ : Finite ↑s
right✝ : Finite ↑t
⊢ Cardinal.mk ↑(s ∪ t) ≤ Cardinal.mk ↑s + Cardinal.mk ↑t

tactic: exact Nat.card_eq_zero_of_infinite.trans_le (zero_le _)
state_before: case inr
α : Type u_1
β : Type ?u.6896
γ : Type ?u.6899
s t : Set α
h : Infinite ↑(s ∪ t)
⊢ Nat.card ↑(s ∪ t) ≤ Nat.card ↑s + Nat.card ↑t
Theorem: Real.tendsto_exp_nhds_0_nhds_1
File: Mathlib/Analysis/SpecialFunctions/Exp.lean

tactic: convert continuous_exp.tendsto 0
state_before: α : Type ?u.22193
x y z : ℝ
l : Filter α
⊢ Tendsto exp (𝓝 0) (𝓝 1)

tactic: simp
state_before: case h.e'_5.h.e'_3
α : Type ?u.22193
x y z : ℝ
l : Filter α
⊢ 1 = exp 0
Theorem: Complex.circleIntegral_sub_inv_smul_of_differentiable_on_off_countable
File: Mathlib/Analysis/Complex/CauchyIntegral.lean

tactic: rw [← two_pi_I_inv_smul_circleIntegral_sub_inv_smul_of_differentiable_on_off_countable
  hs hw hc hd, smul_inv_smul₀]
state_before: E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ
c w : ℂ
f : ℂ → E
s : Set ℂ
hs : Set.Countable s
hw : w ∈ ball c R
hc : ContinuousOn f (closedBall c R)
hd : ∀ (x : ℂ), x ∈ ball c R \ s → DifferentiableAt ℂ f x
⊢ (∮ (z : ℂ) in C(c, R), (z - w)⁻¹ • f z) = (2 * ↑π * I) • f w

tactic: simp [Real.pi_ne_zero, I_ne_zero]
state_before: case hc
E : Type u
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℂ E
inst✝ : CompleteSpace E
R : ℝ
c w : ℂ
f : ℂ → E
s : Set ℂ
hs : Set.Countable s
hw : w ∈ ball c R
hc : ContinuousOn f (closedBall c R)
hd : ∀ (x : ℂ), x ∈ ball c R \ s → DifferentiableAt ℂ f x
⊢ 2 * ↑π * I ≠ 0
Theorem: Real.tan_pos_of_pos_of_lt_pi_div_two
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [tan_eq_sin_div_cos]
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ 0 < tan x

tactic: exact div_pos (sin_pos_of_pos_of_lt_pi h0x (by linarith)) (cos_pos_of_mem_Ioo ⟨by linarith, hxp⟩)
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ 0 < sin x / cos x

tactic: linarith
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ x < π

tactic: linarith
state_before: x : ℝ
h0x : 0 < x
hxp : x < π / 2
⊢ -(π / 2) < x
Theorem: LinearMap.lTensor_comp_apply
File: Mathlib/LinearAlgebra/TensorProduct.lean

tactic: rw [lTensor_comp, coe_comp]
state_before: R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type ?u.1241262
inst✝¹³ : Monoid R'
R'' : Type ?u.1241268
inst✝¹² : Semiring R''
M : Type u_2
N : Type u_3
P : Type u_5
Q : Type u_4
S : Type ?u.1241286
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : M ⊗[R] N
⊢ ↑(lTensor M (comp g f)) x = ↑(lTensor M g) (↑(lTensor M f) x)

tactic: rfl
state_before: R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type ?u.1241262
inst✝¹³ : Monoid R'
R'' : Type ?u.1241268
inst✝¹² : Semiring R''
M : Type u_2
N : Type u_3
P : Type u_5
Q : Type u_4
S : Type ?u.1241286
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
g : P →ₗ[R] Q
f : N →ₗ[R] P
x : M ⊗[R] N
⊢ (↑(lTensor M g) ∘ ↑(lTensor M f)) x = ↑(lTensor M g) (↑(lTensor M f) x)
Theorem: List.mem_bagInter
File: Mathlib/Data/List/Lattice.lean

tactic: simp only [nil_bagInter, not_mem_nil, false_and_iff]
state_before: α : Type u_1
l l₁ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a : α
l₂ : List α
⊢ a ∈ List.bagInter [] l₂ ↔ a ∈ [] ∧ a ∈ l₂

tactic: by_cases h : b ∈ l₂
state_before: α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
⊢ a ∈ List.bagInter (b :: l₁) l₂ ↔ a ∈ b :: l₁ ∧ a ∈ l₂

tactic: rw [cons_bagInter_of_pos _ h, mem_cons, mem_cons, mem_bagInter]
state_before: case pos
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : b ∈ l₂
⊢ a ∈ List.bagInter (b :: l₁) l₂ ↔ a ∈ b :: l₁ ∧ a ∈ l₂

tactic: by_cases ba : a = b
state_before: case pos
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : b ∈ l₂
⊢ a = b ∨ a ∈ l₁ ∧ a ∈ List.erase l₂ b ↔ (a = b ∨ a ∈ l₁) ∧ a ∈ l₂

tactic: simp only [ba, h, eq_self_iff_true, true_or_iff, true_and_iff]
state_before: case pos
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : b ∈ l₂
ba : a = b
⊢ a = b ∨ a ∈ l₁ ∧ a ∈ List.erase l₂ b ↔ (a = b ∨ a ∈ l₁) ∧ a ∈ l₂

tactic: simp only [mem_erase_of_ne ba, ba, false_or_iff]
state_before: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : b ∈ l₂
ba : ¬a = b
⊢ a = b ∨ a ∈ l₁ ∧ a ∈ List.erase l₂ b ↔ (a = b ∨ a ∈ l₁) ∧ a ∈ l₂

tactic: rw [cons_bagInter_of_neg _ h, mem_bagInter, mem_cons, or_and_right]
state_before: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ a ∈ List.bagInter (b :: l₁) l₂ ↔ a ∈ b :: l₁ ∧ a ∈ l₂

tactic: symm
state_before: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ a ∈ l₁ ∧ a ∈ l₂ ↔ a = b ∧ a ∈ l₂ ∨ a ∈ l₁ ∧ a ∈ l₂

tactic: apply or_iff_right_of_imp
state_before: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ a = b ∧ a ∈ l₂ ∨ a ∈ l₁ ∧ a ∈ l₂ ↔ a ∈ l₁ ∧ a ∈ l₂

tactic: rintro ⟨rfl, h'⟩
state_before: case neg.ha
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ a = b ∧ a ∈ l₂ → a ∈ l₁ ∧ a ∈ l₂

tactic: exact h.elim h'
state_before: case neg.ha.intro
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a✝ : α
inst✝ : DecidableEq α
a : α
l₁ l₂ : List α
h' : a ∈ l₂
h : ¬a ∈ l₂
⊢ a ∈ l₁ ∧ a ∈ l₂
Theorem: succChain_spec
File: Mathlib/Order/Chain.lean

tactic: have : IsChain r s ∧ SuperChain r s (choose h) :=
  @choose_spec _ (fun t => IsChain r s ∧ SuperChain r s t) _
state_before: α : Type u_1
β : Type ?u.7670
r : α → α → Prop
c c₁ c₂ c₃ s t : Set α
a b x y : α
h : ∃ t, IsChain r s ∧ SuperChain r s t
⊢ SuperChain r s (SuccChain r s)

tactic: simpa [SuccChain, dif_pos, exists_and_left.mp h] using this.2
state_before: α : Type u_1
β : Type ?u.7670
r : α → α → Prop
c c₁ c₂ c₃ s t : Set α
a b x y : α
h : ∃ t, IsChain r s ∧ SuperChain r s t
this : IsChain r s ∧ SuperChain r s (choose h)
⊢ SuperChain r s (SuccChain r s)
Theorem: map_coe_atTop_of_Ioo_subset
File: Mathlib/Topology/Order/Basic.lean

tactic: rcases eq_empty_or_nonempty (Iio b) with (hb' | ⟨a, ha⟩)
state_before: α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a b : α
s : Set α
hb : s ⊆ Iio b
hs : ∀ (a' : α), a' < b → ∃ a, a < b ∧ Ioo a b ⊆ s
⊢ map Subtype.val atTop = 𝓝[Iio b] b

tactic: have : IsEmpty s := ⟨fun x => hb'.subset (hb x.2)⟩
state_before: case inl
α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a b : α
s : Set α
hb : s ⊆ Iio b
hs : ∀ (a' : α), a' < b → ∃ a, a < b ∧ Ioo a b ⊆ s
hb' : Iio b = ∅
⊢ map Subtype.val atTop = 𝓝[Iio b] b

tactic: rw [filter_eq_bot_of_isEmpty atTop, Filter.map_bot, hb', nhdsWithin_empty]
state_before: case inl
α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a b : α
s : Set α
hb : s ⊆ Iio b
hs : ∀ (a' : α), a' < b → ∃ a, a < b ∧ Ioo a b ⊆ s
hb' : Iio b = ∅
this : IsEmpty ↑s
⊢ map Subtype.val atTop = 𝓝[Iio b] b

tactic: rw [← comap_coe_nhdsWithin_Iio_of_Ioo_subset hb fun _ => hs a ha, map_comap_of_mem]
state_before: case inr.intro
α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a✝ b : α
s : Set α
hb : s ⊆ Iio b
hs : ∀ (a' : α), a' < b → ∃ a, a < b ∧ Ioo a b ⊆ s
a : α
ha : a ∈ Iio b
⊢ map Subtype.val atTop = 𝓝[Iio b] b

tactic: rw [Subtype.range_val]
state_before: case inr.intro
α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a✝ b : α
s : Set α
hb : s ⊆ Iio b
hs : ∀ (a' : α), a' < b → ∃ a, a < b ∧ Ioo a b ⊆ s
a : α
ha : a ∈ Iio b
⊢ range Subtype.val ∈ 𝓝[Iio b] b

tactic: exact (mem_nhdsWithin_Iio_iff_exists_Ioo_subset' ha).2 (hs a ha)
state_before: case inr.intro
α : Type u
β : Type v
γ : Type w
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a✝ b : α
s : Set α
hb : s ⊆ Iio b
hs : ∀ (a' : α), a' < b → ∃ a, a < b ∧ Ioo a b ⊆ s
a : α
ha : a ∈ Iio b
⊢ s ∈ 𝓝[Iio b] b
Theorem: exists_lt_subset_ball
File: Mathlib/Topology/MetricSpace/Basic.lean

tactic: cases' le_or_lt r 0 with hr hr
state_before: α : Type u
β : Type v
X : Type ?u.438072
ι : Type ?u.438075
inst✝¹ : PseudoMetricSpace α
inst✝ : ProperSpace α
x : α
r : ℝ
s : Set α
hs : IsClosed s
h : s ⊆ ball x r
⊢ ∃ r', r' < r ∧ s ⊆ ball x r'

tactic: rw [ball_eq_empty.2 hr, subset_empty_iff] at h
state_before: case inl
α : Type u
β : Type v
X : Type ?u.438072
ι : Type ?u.438075
inst✝¹ : PseudoMetricSpace α
inst✝ : ProperSpace α
x : α
r : ℝ
s : Set α
hs : IsClosed s
h : s ⊆ ball x r
hr : r ≤ 0
⊢ ∃ r', r' < r ∧ s ⊆ ball x r'

tactic: subst s
state_before: case inl
α : Type u
β : Type v
X : Type ?u.438072
ι : Type ?u.438075
inst✝¹ : PseudoMetricSpace α
inst✝ : ProperSpace α
x : α
r : ℝ
s : Set α
hs : IsClosed s
h : s = ∅
hr : r ≤ 0
⊢ ∃ r', r' < r ∧ s ⊆ ball x r'

tactic: exact (exists_lt r).imp fun r' hr' => ⟨hr', empty_subset _⟩
state_before: case inl
α : Type u
β : Type v
X : Type ?u.438072
ι : Type ?u.438075
inst✝¹ : PseudoMetricSpace α
inst✝ : ProperSpace α
x : α
r : ℝ
hr : r ≤ 0
hs : IsClosed ∅
⊢ ∃ r', r' < r ∧ ∅ ⊆ ball x r'

tactic: exact (exists_pos_lt_subset_ball hr hs h).imp fun r' hr' => ⟨hr'.1.2, hr'.2⟩
state_before: case inr
α : Type u
β : Type v
X : Type ?u.438072
ι : Type ?u.438075
inst✝¹ : PseudoMetricSpace α
inst✝ : ProperSpace α
x : α
r : ℝ
s : Set α
hs : IsClosed s
h : s ⊆ ball x r
hr : 0 < r
⊢ ∃ r', r' < r ∧ s ⊆ ball x r'
Theorem: Int.card_Icc
File: Mathlib/Data/Int/Interval.lean

tactic: change (Finset.map _ _).card = _
state_before: a b : ℤ
⊢ card (Icc a b) = toNat (b + 1 - a)

tactic: rw [Finset.card_map, Finset.card_range]
state_before: a b : ℤ
⊢ card (map (Function.Embedding.trans Nat.castEmbedding (addLeftEmbedding a)) (range (toNat (b + 1 - a)))) =
    toNat (b + 1 - a)
Theorem: MonoidHom.ker_prodMap
File: Mathlib/GroupTheory/Subgroup/Basic.lean

tactic: rw [← comap_bot, ← comap_bot, ← comap_bot, ← prodMap_comap_prod, bot_prod_bot]
state_before: G : Type u_3
G'✝ : Type ?u.536179
inst✝⁷ : Group G
inst✝⁶ : Group G'✝
A : Type ?u.536188
inst✝⁵ : AddGroup A
N : Type u_4
P : Type ?u.536197
inst✝⁴ : Group N
inst✝³ : Group P
K : Subgroup G
M : Type ?u.536214
inst✝² : MulOneClass M
G' : Type u_1
N' : Type u_2
inst✝¹ : Group G'
inst✝ : Group N'
f : G →* N
g : G' →* N'
⊢ ker (prodMap f g) = prod (ker f) (ker g)
Theorem: CategoryTheory.Limits.colimit_map_colimitObjIsoColimitCompEvaluation_hom
File: Mathlib/CategoryTheory/Limits/FunctorCategory.lean

tactic: rw [← Iso.inv_comp_eq, ← Category.assoc, ← Iso.eq_comp_inv,
  colimitObjIsoColimitCompEvaluation_inv_colimit_map]
state_before: C : Type u
inst✝⁴ : Category C
D : Type u'
inst✝³ : Category D
J : Type u₁
inst✝² : Category J
K : Type u₂
inst✝¹ : Category K
inst✝ : HasColimitsOfShape J C
F : J ⥤ K ⥤ C
i j : K
f : i ⟶ j
⊢ (colimit F).map f ≫ (colimitObjIsoColimitCompEvaluation F j).hom =
    (colimitObjIsoColimitCompEvaluation F i).hom ≫ colimMap (whiskerLeft F ((evaluation K C).map f))
Theorem: Polynomial.coe_injective
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: ext
state_before: σ : Type ?u.4371968
R : Type u_1
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
⊢ x = y

tactic: simp_rw [← coeff_coe]
state_before: case a
σ : Type ?u.4371968
R : Type u_1
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
n✝ : ℕ
⊢ coeff x n✝ = coeff y n✝

tactic: congr
state_before: case a
σ : Type ?u.4371968
R : Type u_1
inst✝ : CommSemiring R
φ ψ x y : R[X]
h : Coe.coe x = Coe.coe y
n✝ : ℕ
⊢ ↑(PowerSeries.coeff R n✝) ↑x = ↑(PowerSeries.coeff R n✝) ↑y
Theorem: List.IsRotated.refl
File: Mathlib/Data/List/Rotate.lean

tactic: simp
state_before: α : Type u
l✝ l' l : List α
⊢ rotate l 0 = l
Theorem: MvPolynomial.derivation_C_mul'
File: Mathlib/Data/MvPolynomial/Derivation.lean

tactic: have : C (σ := σ) a • D f = D (C a * f) := by simp
state_before: σ : Type u_2
R : Type u_1
A : Type u_3
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid A
inst✝¹ : Module R A
inst✝ : Module (MvPolynomial σ R) A
D : Derivation R (MvPolynomial σ R) A
a : R
f : MvPolynomial σ R
⊢ ↑C a • ↑D f = a • ↑D f

tactic: rw [this, derivation_C_mul]
state_before: σ : Type u_2
R : Type u_1
A : Type u_3
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid A
inst✝¹ : Module R A
inst✝ : Module (MvPolynomial σ R) A
D : Derivation R (MvPolynomial σ R) A
a : R
f : MvPolynomial σ R
this : ↑C a • ↑D f = ↑D (↑C a * f)
⊢ ↑C a • ↑D f = a • ↑D f

tactic: simp
state_before: σ : Type u_2
R : Type u_1
A : Type u_3
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid A
inst✝¹ : Module R A
inst✝ : Module (MvPolynomial σ R) A
D : Derivation R (MvPolynomial σ R) A
a : R
f : MvPolynomial σ R
⊢ ↑C a • ↑D f = ↑D (↑C a * f)
Theorem: ZFSet.IsTransitive.sUnion'
File: Mathlib/SetTheory/ZFC/Ordinal.lean

tactic: rcases mem_sUnion.1 hy with ⟨w, hw, hw'⟩
state_before: x y✝ z✝ : ZFSet
H : ∀ (y : ZFSet), y ∈ x → IsTransitive y
y : ZFSet
hy : y ∈ ⋃₀ x
z : ZFSet
hz : z ∈ y
⊢ z ∈ ⋃₀ x

tactic: exact mem_sUnion_of_mem ((H w hw).mem_trans hz hw') hw
state_before: case intro.intro
x y✝ z✝ : ZFSet
H : ∀ (y : ZFSet), y ∈ x → IsTransitive y
y : ZFSet
hy : y ∈ ⋃₀ x
z : ZFSet
hz : z ∈ y
w : ZFSet
hw : w ∈ x
hw' : y ∈ w
⊢ z ∈ ⋃₀ x
Theorem: Int.strictAntiOn_natAbs
File: Mathlib/Data/Int/Lemmas.lean

tactic: simpa [Int.natAbs_neg] using
  natAbs_lt_natAbs_of_nonneg_of_lt (Right.nonneg_neg_iff.mpr hb) (neg_lt_neg_iff.mpr hab)
state_before: a✝ b✝ : ℤ
n : ℕ
a : ℤ
x✝ : a ∈ Iic 0
b : ℤ
hb : b ∈ Iic 0
hab : a < b
⊢ natAbs b < natAbs a