1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.HasLiftingProperty.of_arrow_iso_left
File: Mathlib/CategoryTheory/LiftingProperties/Basic.lean

tactic: rw [Arrow.iso_w' e]
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
A✝ B✝ B'✝ X✝ Y✝ Y' : C
i✝ : A✝ ⟶ B✝
i'✝ : B✝ ⟶ B'✝
p✝ : X✝ ⟶ Y✝
p' : Y✝ ⟶ Y'
A B A' B' X Y : C
i : A ⟶ B
i' : A' ⟶ B'
e : Arrow.mk i ≅ Arrow.mk i'
p : X ⟶ Y
hip : HasLiftingProperty i p
⊢ HasLiftingProperty i' p
state_after: C : Type u_1
inst✝ : Category.{u_2, u_1} C
A✝ B✝ B'✝ X✝ Y✝ Y' : C
i✝ : A✝ ⟶ B✝
i'✝ : B✝ ⟶ B'✝
p✝ : X✝ ⟶ Y✝
p' : Y✝ ⟶ Y'
A B A' B' X Y : C
i : A ⟶ B
i' : A' ⟶ B'
e : Arrow.mk i ≅ Arrow.mk i'
p : X ⟶ Y
hip : HasLiftingProperty i p
⊢ HasLiftingProperty (e.inv.left ≫ i ≫ e.hom.right) p

tactic: infer_instance
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
A✝ B✝ B'✝ X✝ Y✝ Y' : C
i✝ : A✝ ⟶ B✝
i'✝ : B✝ ⟶ B'✝
p✝ : X✝ ⟶ Y✝
p' : Y✝ ⟶ Y'
A B A' B' X Y : C
i : A ⟶ B
i' : A' ⟶ B'
e : Arrow.mk i ≅ Arrow.mk i'
p : X ⟶ Y
hip : HasLiftingProperty i p
⊢ HasLiftingProperty (e.inv.left ≫ i ≫ e.hom.right) p
state_after: no goals
Theorem: List.diff_append
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

tactic: simp only [diff_eq_foldl, foldl_append]
state_before: α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
l₁ l₂ l₃ : List α
⊢ l₁.diff (l₂ ++ l₃) = (l₁.diff l₂).diff l₃
state_after: no goals
Theorem: Cardinal.aleph0_le_lift
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: rw [← lift_aleph0.{v, u}, lift_le]
state_before: α β : Type u
c : Cardinal.{u}
⊢ ℵ₀ ≤ lift.{v, u} c ↔ ℵ₀ ≤ c
state_after: no goals
Theorem: CategoryTheory.Injective.injective_iff_preservesEpimorphisms_yoneda_obj
File: Mathlib/CategoryTheory/Preadditive/Injective.lean

tactic: rw [injective_iff_projective_op, Projective.projective_iff_preservesEpimorphisms_coyoneda_obj]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
J : C
⊢ Injective J ↔ (yoneda.obj J).PreservesEpimorphisms
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
J : C
⊢ (coyoneda.obj { unop := { unop := J } }).PreservesEpimorphisms ↔ (yoneda.obj J).PreservesEpimorphisms

tactic: exact Functor.preservesEpimorphisms.iso_iff (Coyoneda.objOpOp _)
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
J : C
⊢ (coyoneda.obj { unop := { unop := J } }).PreservesEpimorphisms ↔ (yoneda.obj J).PreservesEpimorphisms
state_after: no goals
Theorem: PosNum.lt_to_nat
File: Mathlib/Data/Num/Lemmas.lean

tactic: simp only at h
state_before: α : Type u_1
m n : PosNum
h : Ordering.casesOn Ordering.lt (↑m < ↑n) (m = n) (↑n < ↑m)
⊢ ↑m < ↑n ↔ Ordering.lt = Ordering.lt
state_after: α : Type u_1
m n : PosNum
h : ↑m < ↑n
⊢ ↑m < ↑n ↔ Ordering.lt = Ordering.lt

tactic: simp [h]
state_before: α : Type u_1
m n : PosNum
h : ↑m < ↑n
⊢ ↑m < ↑n ↔ Ordering.lt = Ordering.lt
state_after: no goals

tactic: simp only at h
state_before: α : Type u_1
m n : PosNum
h : Ordering.casesOn Ordering.eq (↑m < ↑n) (m = n) (↑n < ↑m)
⊢ ↑m < ↑n ↔ Ordering.eq = Ordering.lt
state_after: α : Type u_1
m n : PosNum
h : m = n
⊢ ↑m < ↑n ↔ Ordering.eq = Ordering.lt

tactic: simp [h, lt_irrefl]
state_before: α : Type u_1
m n : PosNum
h : m = n
⊢ ↑m < ↑n ↔ Ordering.eq = Ordering.lt
state_after: no goals

tactic: simp [not_lt_of_gt h]
state_before: α : Type u_1
m n : PosNum
h : Ordering.casesOn Ordering.gt (↑m < ↑n) (m = n) (↑n < ↑m)
⊢ ↑m < ↑n ↔ Ordering.gt = Ordering.lt
state_after: no goals
Theorem: Matrix.transpose_zpow
File: Mathlib/LinearAlgebra/Matrix/ZPow.lean

tactic: rw [zpow_natCast, zpow_natCast, transpose_pow]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
n : ℕ
⊢ (A ^ ↑n)ᵀ = Aᵀ ^ ↑n
state_after: no goals

tactic: rw [zpow_negSucc, zpow_negSucc, transpose_nonsing_inv, transpose_pow]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A : M
n : ℕ
⊢ (A ^ -[n+1])ᵀ = Aᵀ ^ -[n+1]
state_after: no goals
Theorem: AlgebraicGeometry.isOpenImmersion_iff_stalk
File: Mathlib/AlgebraicGeometry/Morphisms/OpenImmersion.lean

tactic: constructor
state_before: X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
⊢ IsOpenImmersion f ↔
    OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)
state_after: case mp
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
⊢ IsOpenImmersion f →
    OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)

case mpr
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
⊢ (OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)) →
    IsOpenImmersion f

tactic: intro h
state_before: case mp
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
⊢ IsOpenImmersion f →
    OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)
state_after: case mp
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
h : IsOpenImmersion f
⊢ OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)

tactic: exact ⟨h.1, inferInstance⟩
state_before: case mp
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
h : IsOpenImmersion f
⊢ OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)
state_after: no goals

tactic: rintro ⟨h₁, h₂⟩
state_before: case mpr
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
⊢ (OpenEmbedding ⇑f.val.base ∧ ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)) →
    IsOpenImmersion f
state_after: case mpr.intro
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
h₁ : OpenEmbedding ⇑f.val.base
h₂ : ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)
⊢ IsOpenImmersion f

tactic: exact IsOpenImmersion.of_stalk_iso f h₁
state_before: case mpr.intro
X Y Z : Scheme
f✝ : X ⟶ Y
g : Y ⟶ Z
f : X ⟶ Y
h₁ : OpenEmbedding ⇑f.val.base
h₂ : ∀ (x : ↑↑X.toPresheafedSpace), IsIso (PresheafedSpace.stalkMap f.val x)
⊢ IsOpenImmersion f
state_after: no goals
Theorem: Con.conGen_of_con
File: Mathlib/GroupTheory/Congruence/Basic.lean

tactic: rw [conGen_eq]
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c✝ c : Con M
⊢ conGen ⇑c ≤ c
state_after: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c✝ c : Con M
⊢ sInf {s | ∀ (x y : M), c x y → s x y} ≤ c

tactic: exact sInf_le fun _ _ => id
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝² : Mul M
inst✝¹ : Mul N
inst✝ : Mul P
c✝ c : Con M
⊢ sInf {s | ∀ (x y : M), c x y → s x y} ≤ c
state_after: no goals
Theorem: Submonoid.LocalizationMap.mk'_mul_cancel_left
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: rw [mul_comm, mk'_mul_cancel_right]
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 : M
y : ↥S
⊢ f.mk' (↑y * x) y = f.toMap x
state_after: no goals
Theorem: PNat.dvd_iff
File: Mathlib/Data/PNat/Basic.lean

tactic: constructor <;> intro h
state_before: k m : ℕ+
⊢ k ∣ m ↔ ↑k ∣ ↑m
state_after: case mp
k m : ℕ+
h : k ∣ m
⊢ ↑k ∣ ↑m

case mpr
k m : ℕ+
h : ↑k ∣ ↑m
⊢ k ∣ m

tactic: rcases h with ⟨_, rfl⟩
state_before: case mp
k m : ℕ+
h : k ∣ m
⊢ ↑k ∣ ↑m
state_after: case mp.intro
k w✝ : ℕ+
⊢ ↑k ∣ ↑(k * w✝)

tactic: apply dvd_mul_right
state_before: case mp.intro
k w✝ : ℕ+
⊢ ↑k ∣ ↑(k * w✝)
state_after: no goals

tactic: rcases h with ⟨a, h⟩
state_before: case mpr
k m : ℕ+
h : ↑k ∣ ↑m
⊢ k ∣ m
state_after: case mpr.intro
k m : ℕ+
a : ℕ
h : ↑m = ↑k * a
⊢ k ∣ m

tactic: obtain ⟨n, rfl⟩ := Nat.exists_eq_succ_of_ne_zero (n := a) <| by
  rintro rfl
  simp only [mul_zero, ne_zero] at h
state_before: case mpr.intro
k m : ℕ+
a : ℕ
h : ↑m = ↑k * a
⊢ k ∣ m
state_after: case mpr.intro.intro
k m : ℕ+
n : ℕ
h : ↑m = ↑k * n.succ
⊢ k ∣ m

tactic: use ⟨n.succ, n.succ_pos⟩
state_before: case mpr.intro.intro
k m : ℕ+
n : ℕ
h : ↑m = ↑k * n.succ
⊢ k ∣ m
state_after: case h
k m : ℕ+
n : ℕ
h : ↑m = ↑k * n.succ
⊢ m = k * ⟨n.succ, ⋯⟩

tactic: rw [← coe_inj, h, mul_coe, mk_coe]
state_before: case h
k m : ℕ+
n : ℕ
h : ↑m = ↑k * n.succ
⊢ m = k * ⟨n.succ, ⋯⟩
state_after: no goals

tactic: rintro rfl
state_before: k m : ℕ+
a : ℕ
h : ↑m = ↑k * a
⊢ a ≠ 0
state_after: k m : ℕ+
h : ↑m = ↑k * 0
⊢ False

tactic: simp only [mul_zero, ne_zero] at h
state_before: k m : ℕ+
h : ↑m = ↑k * 0
⊢ False
state_after: no goals
Theorem: Orientation.inner_rotation_pi_div_two_left
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: rw [rotation_pi_div_two, inner_rightAngleRotation_self]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
⊢ ⟪(o.rotation ↑(π / 2)) x, x⟫_ℝ = 0
state_after: no goals
Theorem: Polynomial.toContinuousMap_X_eq_id
File: Mathlib/Topology/ContinuousFunction/Polynomial.lean

tactic: ext
state_before: R : Type u_1
inst✝² : Semiring R
inst✝¹ : TopologicalSpace R
inst✝ : TopologicalSemiring R
⊢ X.toContinuousMap = ContinuousMap.id R
state_after: case h
R : Type u_1
inst✝² : Semiring R
inst✝¹ : TopologicalSpace R
inst✝ : TopologicalSemiring R
a✝ : R
⊢ X.toContinuousMap a✝ = (ContinuousMap.id R) a✝

tactic: simp
state_before: case h
R : Type u_1
inst✝² : Semiring R
inst✝¹ : TopologicalSpace R
inst✝ : TopologicalSemiring R
a✝ : R
⊢ X.toContinuousMap a✝ = (ContinuousMap.id R) a✝
state_after: no goals
Theorem: complete_univ
File: Mathlib/Topology/UniformSpace/Cauchy.lean

tactic: rcases CompleteSpace.complete hf with ⟨x, hx⟩
state_before: α✝ : Type u
β : Type v
uniformSpace : UniformSpace α✝
α : Type u
inst✝¹ : UniformSpace α
inst✝ : CompleteSpace α
f : Filter α
hf : Cauchy f
x✝ : f ≤ 𝓟 univ
⊢ ∃ x ∈ univ, f ≤ 𝓝 x
state_after: case intro
α✝ : Type u
β : Type v
uniformSpace : UniformSpace α✝
α : Type u
inst✝¹ : UniformSpace α
inst✝ : CompleteSpace α
f : Filter α
hf : Cauchy f
x✝ : f ≤ 𝓟 univ
x : α
hx : f ≤ 𝓝 x
⊢ ∃ x ∈ univ, f ≤ 𝓝 x

tactic: exact ⟨x, mem_univ x, hx⟩
state_before: case intro
α✝ : Type u
β : Type v
uniformSpace : UniformSpace α✝
α : Type u
inst✝¹ : UniformSpace α
inst✝ : CompleteSpace α
f : Filter α
hf : Cauchy f
x✝ : f ≤ 𝓟 univ
x : α
hx : f ≤ 𝓝 x
⊢ ∃ x ∈ univ, f ≤ 𝓝 x
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.leftUnitor_tensor_inv'
File: Mathlib/CategoryTheory/Monoidal/CoherenceLemmas.lean

tactic: coherence
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : MonoidalCategory C
X Y : C
⊢ (λ_ (X ⊗ Y)).inv = ((λ_ X).inv ⊗ 𝟙 Y) ≫ (α_ (𝟙_ C) X Y).hom
state_after: no goals
Theorem: RCLike.neg_iff_exists_ofReal
File: Mathlib/Analysis/RCLike/Basic.lean

tactic: simp_rw [neg_iff (K := K), ext_iff (K := K)]
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z w : K
⊢ z < 0 ↔ ∃ x < 0, ↑x = z
state_after: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z w : K
⊢ re z < 0 ∧ im z = 0 ↔ ∃ x < 0, re ↑x = re z ∧ im ↑x = im z

tactic: aesop
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z w : K
⊢ re z < 0 ∧ im z = 0 ↔ ∃ x < 0, re ↑x = re z ∧ im ↑x = im z
state_after: no goals
Theorem: RingSeminorm.seminorm_one_eq_one_iff_ne_zero
File: Mathlib/Analysis/Normed/Ring/Seminorm.lean

tactic: refine
  ⟨fun h =>
    ne_zero_iff.mpr
      ⟨1, by
        rw [h]
        exact one_ne_zero⟩,
    fun h => ?_⟩
state_before: F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
⊢ p 1 = 1 ↔ p ≠ 0
state_after: F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
⊢ p 1 = 1

tactic: obtain hp0 | hp0 := (apply_nonneg p (1 : R)).eq_or_gt
state_before: F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
⊢ p 1 = 1
state_after: case inl
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
⊢ p 1 = 1

case inr
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : 0 < p 1
⊢ p 1 = 1

tactic: rw [h]
state_before: F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p 1 = 1
⊢ p 1 ≠ 0
state_after: F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p 1 = 1
⊢ 1 ≠ 0

tactic: exact one_ne_zero
state_before: F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p 1 = 1
⊢ 1 ≠ 0
state_after: no goals

tactic: exfalso
state_before: case inl
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
⊢ p 1 = 1
state_after: case inl
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
⊢ False

tactic: refine h (ext fun x => (apply_nonneg _ _).antisymm' ?_)
state_before: case inl
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
⊢ False
state_after: case inl
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
x : R
⊢ p x ≤ 0

tactic: simpa only [hp0, mul_one, mul_zero] using map_mul_le_mul p x 1
state_before: case inl
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
x : R
⊢ p x ≤ 0
state_after: no goals

tactic: refine hp.antisymm ((le_mul_iff_one_le_left hp0).1 ?_)
state_before: case inr
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : 0 < p 1
⊢ p 1 = 1
state_after: case inr
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : 0 < p 1
⊢ p 1 ≤ p 1 * p 1

tactic: simpa only [one_mul] using map_mul_le_mul p (1 : R) _
state_before: case inr
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : 0 < p 1
⊢ p 1 ≤ p 1 * p 1
state_after: no goals
Theorem: Int.lcm_zero_right
File: Mathlib/Data/Int/GCD.lean

tactic: rw [Int.lcm]
state_before: i : ℤ
⊢ i.lcm 0 = 0
state_after: i : ℤ
⊢ i.natAbs.lcm (natAbs 0) = 0

tactic: apply Nat.lcm_zero_right
state_before: i : ℤ
⊢ i.natAbs.lcm (natAbs 0) = 0
state_after: no goals
Theorem: Profinite.NobelingProof.Products.lt_nil_empty
File: Mathlib/Topology/Category/Profinite/Nobeling.lean

tactic: ext ⟨m, hm⟩
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
⊢ {m | m < nil} = ∅
state_after: case h.mk
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
m : List I
hm : List.Chain' (fun x x_1 => x > x_1) m
⊢ ⟨m, hm⟩ ∈ {m | m < nil} ↔ ⟨m, hm⟩ ∈ ∅

tactic: refine ⟨fun h ↦ ?_, by tauto⟩
state_before: case h.mk
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
m : List I
hm : List.Chain' (fun x x_1 => x > x_1) m
⊢ ⟨m, hm⟩ ∈ {m | m < nil} ↔ ⟨m, hm⟩ ∈ ∅
state_after: case h.mk
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
m : List I
hm : List.Chain' (fun x x_1 => x > x_1) m
h : ⟨m, hm⟩ ∈ {m | m < nil}
⊢ ⟨m, hm⟩ ∈ ∅

tactic: simp only [Set.mem_setOf_eq, lt_iff_lex_lt, nil, List.Lex.not_nil_right] at h
state_before: case h.mk
I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
m : List I
hm : List.Chain' (fun x x_1 => x > x_1) m
h : ⟨m, hm⟩ ∈ {m | m < nil}
⊢ ⟨m, hm⟩ ∈ ∅
state_after: no goals

tactic: tauto
state_before: I : Type u
inst✝¹ : LinearOrder I
inst✝ : IsWellOrder I fun x x_1 => x < x_1
C : Set (I → Bool)
m : List I
hm : List.Chain' (fun x x_1 => x > x_1) m
⊢ ⟨m, hm⟩ ∈ ∅ → ⟨m, hm⟩ ∈ {m | m < nil}
state_after: no goals
Theorem: CategoryTheory.isDetector_iff_reflectsIsomorphisms_coyoneda_obj
File: Mathlib/CategoryTheory/Generator.lean

tactic: refine
  ⟨fun hG => ⟨fun f hf => hG.def _ fun h => ?_⟩, fun h =>
    (isDetector_def _).2 fun X Y f hf => ?_⟩
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
⊢ IsDetector G ↔ (coyoneda.obj { unop := G }).ReflectsIsomorphisms
state_after: case refine_1
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
hG : IsDetector G
A✝ B✝ : C
f : A✝ ⟶ B✝
hf : IsIso ((coyoneda.obj { unop := G }).map f)
h : G ⟶ B✝
⊢ ∃! h', h' ≫ f = h

case refine_2
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
h : (coyoneda.obj { unop := G }).ReflectsIsomorphisms
X Y : C
f : X ⟶ Y
hf : ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
⊢ IsIso f

tactic: rw [isIso_iff_bijective, Function.bijective_iff_existsUnique] at hf
state_before: case refine_1
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
hG : IsDetector G
A✝ B✝ : C
f : A✝ ⟶ B✝
hf : IsIso ((coyoneda.obj { unop := G }).map f)
h : G ⟶ B✝
⊢ ∃! h', h' ≫ f = h
state_after: case refine_1
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
hG : IsDetector G
A✝ B✝ : C
f : A✝ ⟶ B✝
hf : ∀ (b : (coyoneda.obj { unop := G }).obj B✝), ∃! a, (coyoneda.obj { unop := G }).map f a = b
h : G ⟶ B✝
⊢ ∃! h', h' ≫ f = h

tactic: exact hf h
state_before: case refine_1
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
hG : IsDetector G
A✝ B✝ : C
f : A✝ ⟶ B✝
hf : ∀ (b : (coyoneda.obj { unop := G }).obj B✝), ∃! a, (coyoneda.obj { unop := G }).map f a = b
h : G ⟶ B✝
⊢ ∃! h', h' ≫ f = h
state_after: no goals

tactic: suffices IsIso ((coyoneda.obj (op G)).map f) by
  exact @isIso_of_reflects_iso _ _ _ _ _ _ _ (coyoneda.obj (op G)) _ h
state_before: case refine_2
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
h : (coyoneda.obj { unop := G }).ReflectsIsomorphisms
X Y : C
f : X ⟶ Y
hf : ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
⊢ IsIso f
state_after: case refine_2
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
h : (coyoneda.obj { unop := G }).ReflectsIsomorphisms
X Y : C
f : X ⟶ Y
hf : ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
⊢ IsIso ((coyoneda.obj { unop := G }).map f)

tactic: rwa [isIso_iff_bijective, Function.bijective_iff_existsUnique]
state_before: case refine_2
C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
h : (coyoneda.obj { unop := G }).ReflectsIsomorphisms
X Y : C
f : X ⟶ Y
hf : ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
⊢ IsIso ((coyoneda.obj { unop := G }).map f)
state_after: no goals

tactic: exact @isIso_of_reflects_iso _ _ _ _ _ _ _ (coyoneda.obj (op G)) _ h
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
G : C
h : (coyoneda.obj { unop := G }).ReflectsIsomorphisms
X Y : C
f : X ⟶ Y
hf : ∀ (h : G ⟶ Y), ∃! h', h' ≫ f = h
this : IsIso ((coyoneda.obj { unop := G }).map f)
⊢ IsIso f
state_after: no goals
Theorem: Metric.mem_ball'
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

tactic: rw [dist_comm, mem_ball]
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε ε₁ ε₂ : ℝ
s : Set α
⊢ y ∈ ball x ε ↔ dist x y < ε
state_after: no goals
Theorem: CategoryTheory.Idempotents.DoldKan.N₂_map_isoΓ₀_hom_app_f
File: Mathlib/AlgebraicTopology/DoldKan/EquivalencePseudoabelian.lean

tactic: ext
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : IsIdempotentComplete C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
⊢ (N₂.map (isoΓ₀.hom.app X)).f = PInfty
state_after: case h
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : IsIdempotentComplete C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
i✝ : ℕ
⊢ (N₂.map (isoΓ₀.hom.app X)).f.f i✝ = PInfty.f i✝

tactic: apply comp_id
state_before: case h
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : IsIdempotentComplete C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
i✝ : ℕ
⊢ (N₂.map (isoΓ₀.hom.app X)).f.f i✝ = PInfty.f i✝
state_after: no goals
Theorem: norm_le_norm_add_norm_div
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: rw [norm_div_rev]
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖v‖ ≤ ‖u‖ + ‖u / v‖
state_after: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖v‖ ≤ ‖u‖ + ‖v / u‖

tactic: exact norm_le_norm_add_norm_div' v u
state_before: 𝓕 : Type u_1
𝕜 : Type u_2
α : Type u_3
ι : Type u_4
κ : Type u_5
E : Type u_6
F : Type u_7
G : Type u_8
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
u v : E
⊢ ‖v‖ ≤ ‖u‖ + ‖v / u‖
state_after: no goals
Theorem: bihimp_of_ge
File: Mathlib/Order/SymmDiff.lean

tactic: rw [bihimp, himp_eq_top_iff.2 h, top_inf_eq]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : GeneralizedHeytingAlgebra α
a✝ b✝ c d a b : α
h : b ≤ a
⊢ a ⇔ b = a ⇨ b
state_after: no goals
Theorem: Relation.not_cutExpand_zero
File: Mathlib/Logic/Hydra.lean

tactic: classical
rw [cutExpand_iff]
rintro ⟨_, _, _, ⟨⟩, _⟩
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
s : Multiset α
⊢ ¬CutExpand r s 0
state_after: no goals

tactic: rw [cutExpand_iff]
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
s : Multiset α
⊢ ¬CutExpand r s 0
state_after: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
s : Multiset α
⊢ ¬∃ t a, (∀ a' ∈ t, r a' a) ∧ a ∈ 0 ∧ s = erase 0 a + t

tactic: rintro ⟨_, _, _, ⟨⟩, _⟩
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
s : Multiset α
⊢ ¬∃ t a, (∀ a' ∈ t, r a' a) ∧ a ∈ 0 ∧ s = erase 0 a + t
state_after: no goals
Theorem: tendsto_const_mul_pow_nhds_iff
File: Mathlib/Topology/Algebra/Order/Field.lean

tactic: simp [tendsto_const_mul_pow_nhds_iff', hc]
state_before: 𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : OrderTopology 𝕜
l : Filter α
f g : α → 𝕜
n : ℕ
c d : 𝕜
hc : c ≠ 0
⊢ Tendsto (fun x => c * x ^ n) atTop (𝓝 d) ↔ n = 0 ∧ c = d
state_after: no goals
Theorem: MvPFunctor.comp.get_map
File: Mathlib/Data/PFunctor/Multivariate/Basic.lean

tactic: rfl
state_before: n m : ℕ
P : MvPFunctor.{u} n
Q : Fin2 n → MvPFunctor.{u} m
α β : TypeVec.{u} m
f : α ⟹ β
x : ↑(P.comp Q) α
⊢ get (f <$$> x) = (fun i x => f <$$> x) <$$> get x
state_after: no goals
Theorem: Cardinal.prod_ne_zero
File: Mathlib/SetTheory/Cardinal/Basic.lean

tactic: simp [prod_eq_zero]
state_before: α β : Type u
ι : Type u_1
f : ι → Cardinal.{u_2}
⊢ prod f ≠ 0 ↔ ∀ (i : ι), f i ≠ 0
state_after: no goals