1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.Presieve.Arrows.Compatible.familyOfElements_compatible
File: Mathlib/CategoryTheory/Sites/IsSheafFor.lean

tactic: rintro Y₁ Y₂ Z g₁ g₂ f₁ f₂ ⟨i⟩ ⟨j⟩ hgf
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S : Sieve X✝
R : Presieve X✝
B : C
I : Type u_1
X : I → C
π : (i : I) → X i ⟶ B
x : (i : I) → P.obj { unop := X i }
hx : Compatible P π x
⊢ hx.familyOfElements.Compatible
state_after: case mk.mk
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y✝¹ : C
S : Sieve X✝
R : Presieve X✝
B : C
I : Type u_1
X : I → C
π : (i : I) → X i ⟶ B
x : (i : I) → P.obj { unop := X i }
hx : Compatible P π x
Z Y✝ : C
i : I
g₁ : Z ⟶ X i
Y : C
j : I
g₂ : Z ⟶ X j
hgf : g₁ ≫ π i = g₂ ≫ π j
⊢ P.map g₁.op (hx.familyOfElements (π i) ⋯) = P.map g₂.op (hx.familyOfElements (π j) ⋯)

tactic: simp [hx i j Z g₁ g₂ hgf]
state_before: case mk.mk
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y✝¹ : C
S : Sieve X✝
R : Presieve X✝
B : C
I : Type u_1
X : I → C
π : (i : I) → X i ⟶ B
x : (i : I) → P.obj { unop := X i }
hx : Compatible P π x
Z Y✝ : C
i : I
g₁ : Z ⟶ X i
Y : C
j : I
g₂ : Z ⟶ X j
hgf : g₁ ≫ π i = g₂ ≫ π j
⊢ P.map g₁.op (hx.familyOfElements (π i) ⋯) = P.map g₂.op (hx.familyOfElements (π j) ⋯)
state_after: no goals
Theorem: CategoryTheory.Limits.biprod.braid_natural
File: Mathlib/CategoryTheory/Limits/Shapes/Biproducts.lean

tactic: aesop_cat
state_before: J : Type w
C : Type u
inst✝⁴ : Category.{v, u} C
inst✝³ : HasZeroMorphisms C
D : Type uD
inst✝² : Category.{uD', uD} D
inst✝¹ : HasZeroMorphisms D
P Q : C
inst✝ : HasBinaryBiproducts C
W X Y Z : C
f : X ⟶ Y
g : Z ⟶ W
⊢ map f g ≫ (braiding Y W).hom = (braiding X Z).hom ≫ map g f
state_after: no goals
Theorem: SimpleGraph.Connected.boxProd
File: Mathlib/Combinatorics/SimpleGraph/Prod.lean

tactic: haveI := hG.nonempty
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
hG : G.Connected
hH : H.Connected
⊢ (G □ H).Connected
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
hG : G.Connected
hH : H.Connected
this : Nonempty α
⊢ (G □ H).Connected

tactic: haveI := hH.nonempty
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
hG : G.Connected
hH : H.Connected
this : Nonempty α
⊢ (G □ H).Connected
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
hG : G.Connected
hH : H.Connected
this✝ : Nonempty α
this : Nonempty β
⊢ (G □ H).Connected

tactic: exact ⟨hG.preconnected.boxProd hH.preconnected⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
G : SimpleGraph α
H : SimpleGraph β
hG : G.Connected
hH : H.Connected
this✝ : Nonempty α
this : Nonempty β
⊢ (G □ H).Connected
state_after: no goals
Theorem: not_bddAbove_iff
File: Mathlib/Order/Bounds/Basic.lean

tactic: simp only [not_bddAbove_iff', not_le]
state_before: α✝ : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α✝
inst✝¹ : Preorder β
s✝ t : Set α✝
a b : α✝
α : Type u_1
inst✝ : LinearOrder α
s : Set α
⊢ ¬BddAbove s ↔ ∀ (x : α), ∃ y ∈ s, x < y
state_after: no goals
Theorem: dvd_generator_iff
File: Mathlib/LinearAlgebra/FreeModule/PID.lean

tactic: conv_rhs => rw [← span_singleton_generator I]
state_before: ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
M : Type u_3
inst✝² : AddCommGroup M
inst✝¹ : Module R M
b : ι → M
I : Ideal R
inst✝ : IsPrincipal I
x : R
hx : x ∈ I
⊢ x ∣ generator I ↔ I = Ideal.span {x}
state_after: ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
M : Type u_3
inst✝² : AddCommGroup M
inst✝¹ : Module R M
b : ι → M
I : Ideal R
inst✝ : IsPrincipal I
x : R
hx : x ∈ I
⊢ x ∣ generator I ↔ span R {generator I} = Ideal.span {x}

tactic: rw [Ideal.submodule_span_eq, Ideal.span_singleton_eq_span_singleton, ← dvd_dvd_iff_associated,
  ← mem_iff_generator_dvd]
state_before: ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
M : Type u_3
inst✝² : AddCommGroup M
inst✝¹ : Module R M
b : ι → M
I : Ideal R
inst✝ : IsPrincipal I
x : R
hx : x ∈ I
⊢ x ∣ generator I ↔ span R {generator I} = Ideal.span {x}
state_after: ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
M : Type u_3
inst✝² : AddCommGroup M
inst✝¹ : Module R M
b : ι → M
I : Ideal R
inst✝ : IsPrincipal I
x : R
hx : x ∈ I
⊢ x ∣ generator I ↔ x ∈ I ∧ x ∣ generator I

tactic: exact ⟨fun h ↦ ⟨hx, h⟩, fun h ↦ h.2⟩
state_before: ι : Type u_1
R : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
M : Type u_3
inst✝² : AddCommGroup M
inst✝¹ : Module R M
b : ι → M
I : Ideal R
inst✝ : IsPrincipal I
x : R
hx : x ∈ I
⊢ x ∣ generator I ↔ x ∈ I ∧ x ∣ generator I
state_after: no goals
Theorem: CategoryTheory.MonoidalCategory.inv_tensor
File: Mathlib/CategoryTheory/Monoidal/Category.lean

tactic: simp [tensorHom_def ,whisker_exchange]
state_before: C✝ : Type u
𝒞 : Category.{v, u} C✝
inst✝⁴ : MonoidalCategory C✝
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : MonoidalCategory C
W X Y Z : C
f : W ⟶ X
inst✝¹ : IsIso f
g : Y ⟶ Z
inst✝ : IsIso g
⊢ inv (f ⊗ g) = inv f ⊗ inv g
state_after: no goals
Theorem: Traversable.traverse_id
File: Mathlib/Control/Traversable/Lemmas.lean

tactic: ext
state_before: t : Type u → Type u
inst✝⁵ : Traversable t
inst✝⁴ : LawfulTraversable t
F G : Type u → Type u
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
α β γ : Type u
g : α → F β
h : β → G γ
f : β → γ
x : t β
⊢ traverse pure = pure
state_after: case h
t : Type u → Type u
inst✝⁵ : Traversable t
inst✝⁴ : LawfulTraversable t
F G : Type u → Type u
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
α β γ : Type u
g : α → F β
h : β → G γ
f : β → γ
x : t β
x✝ : t α
⊢ traverse pure x✝ = pure x✝

tactic: exact id_traverse _
state_before: case h
t : Type u → Type u
inst✝⁵ : Traversable t
inst✝⁴ : LawfulTraversable t
F G : Type u → Type u
inst✝³ : Applicative F
inst✝² : LawfulApplicative F
inst✝¹ : Applicative G
inst✝ : LawfulApplicative G
α β γ : Type u
g : α → F β
h : β → G γ
f : β → γ
x : t β
x✝ : t α
⊢ traverse pure x✝ = pure x✝
state_after: no goals
Theorem: Cardinal.toENatAux_gc
File: Mathlib/SetTheory/Cardinal/ENat.lean

tactic: cases lt_or_le x ℵ₀ with
| inl hx => lift x to ℕ using hx; simp
| inr hx => simp [toENatAux_eq_top hx, (ofENat_le_aleph0 n).trans hx]
state_before: n : ℕ∞
x : Cardinal.{u_1}
⊢ ↑n ≤ x ↔ n ≤ x.toENatAux
state_after: no goals

tactic: lift x to ℕ using hx
state_before: case inl
n : ℕ∞
x : Cardinal.{u_1}
hx : x < ℵ₀
⊢ ↑n ≤ x ↔ n ≤ x.toENatAux
state_after: case inl.intro
n : ℕ∞
x : ℕ
⊢ ↑n ≤ ↑x ↔ n ≤ (↑x).toENatAux

tactic: simp
state_before: case inl.intro
n : ℕ∞
x : ℕ
⊢ ↑n ≤ ↑x ↔ n ≤ (↑x).toENatAux
state_after: no goals

tactic: simp [toENatAux_eq_top hx, (ofENat_le_aleph0 n).trans hx]
state_before: case inr
n : ℕ∞
x : Cardinal.{u_1}
hx : ℵ₀ ≤ x
⊢ ↑n ≤ x ↔ n ≤ x.toENatAux
state_after: no goals
Theorem: LieIdeal.derivedSeries_eq_bot_iff
File: Mathlib/Algebra/Lie/Solvable.lean

tactic: rw [← derivedSeries_eq_derivedSeriesOfIdeal_map, map_eq_bot_iff, ker_incl, eq_bot_iff]
state_before: R : Type u
L : Type v
M : Type w
L' : Type w₁
inst✝⁴ : CommRing R
inst✝³ : LieRing L
inst✝² : LieAlgebra R L
inst✝¹ : LieRing L'
inst✝ : LieAlgebra R L'
I J : LieIdeal R L
f : L' →ₗ⁅R⁆ L
k : ℕ
⊢ derivedSeries R (↥↑I) k = ⊥ ↔ derivedSeriesOfIdeal R L k I = ⊥
state_after: no goals
Theorem: MonoidHom.eq_iff_eq_on_generator
File: Mathlib/GroupTheory/SpecificGroups/Cyclic.lean

tactic: rw [DFunLike.ext_iff]
state_before: α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
⊢ f₁ = f₂ ↔ f₁ g = f₂ g
state_after: α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
⊢ (∀ (x : G), f₁ x = f₂ x) ↔ f₁ g = f₂ g

tactic: refine ⟨fun H ↦ H g, fun H x ↦ ?_⟩
state_before: α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
⊢ (∀ (x : G), f₁ x = f₂ x) ↔ f₁ g = f₂ g
state_after: α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
H : f₁ g = f₂ g
x : G
⊢ f₁ x = f₂ x

tactic: obtain ⟨n, hn⟩ := mem_zpowers_iff.mp <| hg x
state_before: α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
H : f₁ g = f₂ g
x : G
⊢ f₁ x = f₂ x
state_after: case intro
α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
H : f₁ g = f₂ g
x : G
n : ℤ
hn : g ^ n = x
⊢ f₁ x = f₂ x

tactic: rw [← hn, map_zpow, map_zpow, H]
state_before: case intro
α : Type u
a : α
G : Type u_1
G' : Type u_2
inst✝¹ : Group G
inst✝ : Group G'
g : G
hg : ∀ (x : G), x ∈ zpowers g
g' : G'
f₁ f₂ : G →* G'
H : f₁ g = f₂ g
x : G
n : ℤ
hn : g ^ n = x
⊢ f₁ x = f₂ x
state_after: no goals
Theorem: dvdNotUnit_of_dvd_of_not_dvd
File: Mathlib/Algebra/GroupWithZero/Divisibility.lean

tactic: constructor
state_before: α : Type u_1
inst✝ : CommMonoidWithZero α
a b : α
hd : a ∣ b
hnd : ¬b ∣ a
⊢ DvdNotUnit a b
state_after: case left
α : Type u_1
inst✝ : CommMonoidWithZero α
a b : α
hd : a ∣ b
hnd : ¬b ∣ a
⊢ a ≠ 0

case right
α : Type u_1
inst✝ : CommMonoidWithZero α
a b : α
hd : a ∣ b
hnd : ¬b ∣ a
⊢ ∃ x, ¬IsUnit x ∧ b = a * x

tactic: rintro rfl
state_before: case left
α : Type u_1
inst✝ : CommMonoidWithZero α
a b : α
hd : a ∣ b
hnd : ¬b ∣ a
⊢ a ≠ 0
state_after: case left
α : Type u_1
inst✝ : CommMonoidWithZero α
b : α
hd : 0 ∣ b
hnd : ¬b ∣ 0
⊢ False

tactic: exact hnd (dvd_zero _)
state_before: case left
α : Type u_1
inst✝ : CommMonoidWithZero α
b : α
hd : 0 ∣ b
hnd : ¬b ∣ 0
⊢ False
state_after: no goals

tactic: rcases hd with ⟨c, rfl⟩
state_before: case right
α : Type u_1
inst✝ : CommMonoidWithZero α
a b : α
hd : a ∣ b
hnd : ¬b ∣ a
⊢ ∃ x, ¬IsUnit x ∧ b = a * x
state_after: case right.intro
α : Type u_1
inst✝ : CommMonoidWithZero α
a c : α
hnd : ¬a * c ∣ a
⊢ ∃ x, ¬IsUnit x ∧ a * c = a * x

tactic: refine ⟨c, ?_, rfl⟩
state_before: case right.intro
α : Type u_1
inst✝ : CommMonoidWithZero α
a c : α
hnd : ¬a * c ∣ a
⊢ ∃ x, ¬IsUnit x ∧ a * c = a * x
state_after: case right.intro
α : Type u_1
inst✝ : CommMonoidWithZero α
a c : α
hnd : ¬a * c ∣ a
⊢ ¬IsUnit c

tactic: rintro ⟨u, rfl⟩
state_before: case right.intro
α : Type u_1
inst✝ : CommMonoidWithZero α
a c : α
hnd : ¬a * c ∣ a
⊢ ¬IsUnit c
state_after: case right.intro.intro
α : Type u_1
inst✝ : CommMonoidWithZero α
a : α
u : αˣ
hnd : ¬a * ↑u ∣ a
⊢ False

tactic: simp at hnd
state_before: case right.intro.intro
α : Type u_1
inst✝ : CommMonoidWithZero α
a : α
u : αˣ
hnd : ¬a * ↑u ∣ a
⊢ False
state_after: no goals
Theorem: Real.Angle.sin_eq_zero_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: nth_rw 1 [← sin_zero]
state_before: θ : Angle
⊢ θ.sin = 0 ↔ θ = 0 ∨ θ = ↑π
state_after: θ : Angle
⊢ θ.sin = sin 0 ↔ θ = 0 ∨ θ = ↑π

tactic: rw [sin_eq_iff_eq_or_add_eq_pi]
state_before: θ : Angle
⊢ θ.sin = sin 0 ↔ θ = 0 ∨ θ = ↑π
state_after: θ : Angle
⊢ θ = 0 ∨ θ + 0 = ↑π ↔ θ = 0 ∨ θ = ↑π

tactic: simp
state_before: θ : Angle
⊢ θ = 0 ∨ θ + 0 = ↑π ↔ θ = 0 ∨ θ = ↑π
state_after: no goals
Theorem: Finset.sum_centroidWeightsIndicator_eq_one_of_card_eq_add_one
File: Mathlib/LinearAlgebra/AffineSpace/Combination.lean

tactic: rw [sum_centroidWeightsIndicator]
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁵ : DivisionRing k
inst✝⁴ : AddCommGroup V
inst✝³ : Module k V
inst✝² : AffineSpace V P
ι : Type u_4
s : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝¹ : CharZero k
inst✝ : Fintype ι
n : ℕ
h : s.card = n + 1
⊢ ∑ i : ι, centroidWeightsIndicator k s i = 1
state_after: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁵ : DivisionRing k
inst✝⁴ : AddCommGroup V
inst✝³ : Module k V
inst✝² : AffineSpace V P
ι : Type u_4
s : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝¹ : CharZero k
inst✝ : Fintype ι
n : ℕ
h : s.card = n + 1
⊢ ∑ i ∈ s, centroidWeights k s i = 1

tactic: exact s.sum_centroidWeights_eq_one_of_card_eq_add_one k h
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝⁵ : DivisionRing k
inst✝⁴ : AddCommGroup V
inst✝³ : Module k V
inst✝² : AffineSpace V P
ι : Type u_4
s : Finset ι
ι₂ : Type u_5
s₂ : Finset ι₂
inst✝¹ : CharZero k
inst✝ : Fintype ι
n : ℕ
h : s.card = n + 1
⊢ ∑ i ∈ s, centroidWeights k s i = 1
state_after: no goals
Theorem: Units.inv_mul_cancel_left
File: Mathlib/Algebra/Group/Units.lean

tactic: rw [← mul_assoc, inv_mul, one_mul]
state_before: α : Type u
inst✝ : Monoid α
a✝ b✝ c u a : αˣ
b : α
⊢ ↑a⁻¹ * (↑a * b) = b
state_after: no goals
Theorem: adjoinRootXPowSubCEquiv_root
File: Mathlib/FieldTheory/KummerExtension.lean

tactic: rw [adjoinRootXPowSubCEquiv, AlgEquiv.coe_ofBijective, liftHom_root]
state_before: K : Type u
inst✝³ : Field K
n : ℕ
hζ : (primitiveRoots n K).Nonempty
hn : 0 < n
a : K
H : Irreducible (X ^ n - C a)
L : Type u_1
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : IsSplittingField K L (X ^ n - C a)
α : L
hα : α ^ n = (algebraMap K L) a
⊢ (adjoinRootXPowSubCEquiv hζ H hα) (root (X ^ n - C a)) = α
state_after: no goals
Theorem: Set.ordConnectedComponent_mem_nhds
File: Mathlib/Topology/Order/T5.lean

tactic: refine ⟨fun h => mem_of_superset h ordConnectedComponent_subset, fun h => ?_⟩
state_before: X : Type u_1
inst✝² : LinearOrder X
inst✝¹ : TopologicalSpace X
inst✝ : OrderTopology X
a b c : X
s t : Set X
⊢ s.ordConnectedComponent a ∈ 𝓝 a ↔ s ∈ 𝓝 a
state_after: X : Type u_1
inst✝² : LinearOrder X
inst✝¹ : TopologicalSpace X
inst✝ : OrderTopology X
a b c : X
s t : Set X
h : s ∈ 𝓝 a
⊢ s.ordConnectedComponent a ∈ 𝓝 a

tactic: rcases exists_Icc_mem_subset_of_mem_nhds h with ⟨b, c, ha, ha', hs⟩
state_before: X : Type u_1
inst✝² : LinearOrder X
inst✝¹ : TopologicalSpace X
inst✝ : OrderTopology X
a b c : X
s t : Set X
h : s ∈ 𝓝 a
⊢ s.ordConnectedComponent a ∈ 𝓝 a
state_after: case intro.intro.intro.intro
X : Type u_1
inst✝² : LinearOrder X
inst✝¹ : TopologicalSpace X
inst✝ : OrderTopology X
a b✝ c✝ : X
s t : Set X
h : s ∈ 𝓝 a
b c : X
ha : a ∈ Icc b c
ha' : Icc b c ∈ 𝓝 a
hs : Icc b c ⊆ s
⊢ s.ordConnectedComponent a ∈ 𝓝 a

tactic: exact mem_of_superset ha' (subset_ordConnectedComponent ha hs)
state_before: case intro.intro.intro.intro
X : Type u_1
inst✝² : LinearOrder X
inst✝¹ : TopologicalSpace X
inst✝ : OrderTopology X
a b✝ c✝ : X
s t : Set X
h : s ∈ 𝓝 a
b c : X
ha : a ∈ Icc b c
ha' : Icc b c ∈ 𝓝 a
hs : Icc b c ⊆ s
⊢ s.ordConnectedComponent a ∈ 𝓝 a
state_after: no goals
Theorem: List.prev_cons_cons_eq'
File: Mathlib/Data/List/Cycle.lean

tactic: rw [prev, dif_pos hx]
state_before: α : Type u_1
inst✝ : DecidableEq α
l : List α
x y z : α
h : x ∈ y :: z :: l
hx : x = y
⊢ (y :: z :: l).prev x h = (z :: l).getLast ⋯
state_after: no goals
Theorem: StrictMonoOn.congr
File: Mathlib/Data/Set/Function.lean

tactic: intro a ha b hb hab
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : StrictMonoOn f₁ s
h : EqOn f₁ f₂ s
⊢ StrictMonoOn f₂ s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : StrictMonoOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a < b
⊢ f₂ a < f₂ b

tactic: rw [← h ha, ← h hb]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : StrictMonoOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a < b
⊢ f₂ a < f₂ b
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : StrictMonoOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a < b
⊢ f₁ a < f₁ b

tactic: exact h₁ ha hb hab
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
s : Set α
f₁ f₂ : α → β
inst✝¹ : Preorder α
inst✝ : Preorder β
h₁ : StrictMonoOn f₁ s
h : EqOn f₁ f₂ s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : a < b
⊢ f₁ a < f₁ b
state_after: no goals
Theorem: RCLike.im_eq_zero
File: Mathlib/Analysis/RCLike/Basic.lean

tactic: rw [← re_add_im z, h]
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
h : I = 0
z : K
⊢ im z = 0
state_after: K : Type u_1
E : Type u_2
inst✝ : RCLike K
h : I = 0
z : K
⊢ im (↑(re z) + ↑(im z) * 0) = 0

tactic: simp
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
h : I = 0
z : K
⊢ im (↑(re z) + ↑(im z) * 0) = 0
state_after: no goals
Theorem: CategoryTheory.StructuredArrow.hom_eq_iff
File: Mathlib/CategoryTheory/Comma/StructuredArrow.lean

tactic: rw [h]
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
S S' S'' : D
Y✝ Y' Y'' : C
T T' : C ⥤ D
X Y : StructuredArrow S T
f g : X ⟶ Y
h : f = g
⊢ f.right = g.right
state_after: no goals
Theorem: Cycle.next_reverse_eq_prev'
File: Mathlib/Data/List/Cycle.lean

tactic: simp [← prev_reverse_eq_next]
state_before: α : Type u_1
inst✝ : DecidableEq α
s : Cycle α
hs : s.reverse.Nodup
x : α
hx : x ∈ s.reverse
⊢ s.reverse.next hs x hx = s.prev ⋯ x ⋯
state_after: no goals
Theorem: convexJoin_convexJoin_convexJoin_comm
File: Mathlib/Analysis/Convex/Join.lean

tactic: simp_rw [← convexJoin_assoc, convexJoin_right_comm]
state_before: ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s✝ t✝ u✝ : Set E
x y : E
s t u v : Set E
⊢ convexJoin 𝕜 (convexJoin 𝕜 s t) (convexJoin 𝕜 u v) = convexJoin 𝕜 (convexJoin 𝕜 s u) (convexJoin 𝕜 t v)
state_after: no goals
Theorem: integrableOn_Icc_iff_integrableOn_Ioc
File: Mathlib/MeasureTheory/Integral/IntegrableOn.lean

tactic: rw [measure_singleton]
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace α
inst✝³ : NormedAddCommGroup E
inst✝² : PartialOrder α
inst✝¹ : MeasurableSingletonClass α
f : α → E
μ : Measure α
a b : α
inst✝ : NoAtoms μ
⊢ μ {a} ≠ ⊤
state_after: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace α
inst✝³ : NormedAddCommGroup E
inst✝² : PartialOrder α
inst✝¹ : MeasurableSingletonClass α
f : α → E
μ : Measure α
a b : α
inst✝ : NoAtoms μ
⊢ 0 ≠ ⊤

tactic: exact ENNReal.zero_ne_top
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
inst✝⁴ : MeasurableSpace α
inst✝³ : NormedAddCommGroup E
inst✝² : PartialOrder α
inst✝¹ : MeasurableSingletonClass α
f : α → E
μ : Measure α
a b : α
inst✝ : NoAtoms μ
⊢ 0 ≠ ⊤
state_after: no goals
Theorem: Batteries.RBNode.any_iff
File: .lake/packages/batteries/Batteries/Data/RBMap/Basic.lean

tactic: induction t <;> simp [*, any, Any, or_assoc]
state_before: α : Type u_1
p : α → Bool
t : RBNode α
⊢ any p t = true ↔ Any (fun x => p x = true) t
state_after: no goals
Theorem: PFun.core_eq
File: Mathlib/Data/PFun.lean

tactic: rw [preimage_eq, Set.inter_union_distrib_right, Set.union_comm (Dom f), Set.compl_union_self,
  Set.inter_univ, Set.union_eq_self_of_subset_right (f.compl_dom_subset_core s)]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ι : Type u_6
f✝ f : α →. β
s : Set β
⊢ f.core s = f.preimage s ∪ f.Domᶜ
state_after: no goals
Theorem: CochainComplex.HomComplex.Cocycle.coe_zero
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplex.lean

tactic: rfl
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
⊢ ↑0 = 0
state_after: no goals
Theorem: Set.preimage_sub_const_Ioi
File: Mathlib/Data/Set/Pointwise/Interval.lean

tactic: simp [sub_eq_add_neg]
state_before: α : Type u_1
inst✝ : OrderedAddCommGroup α
a b c : α
⊢ (fun x => x - a) ⁻¹' Ioi b = Ioi (b + a)
state_after: no goals
Theorem: Complex.nndist_conj_self
File: Mathlib/Analysis/Complex/Basic.lean

tactic: rw [← dist_nndist, NNReal.coe_mul, NNReal.coe_two, Real.coe_nnabs, dist_conj_self]
state_before: z✝ : ℂ
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℂ E
z : ℂ
⊢ ↑(nndist ((starRingEnd ℂ) z) z) = ↑(2 * Real.nnabs z.im)
state_after: no goals
Theorem: Int.natCast_dvd_natCast
File: Mathlib/Data/Int/Defs.lean

tactic: rintro ⟨a, h⟩
state_before: a b c d m✝ n✝ : ℤ
m n : ℕ
⊢ ↑m ∣ ↑n → m ∣ n
state_after: case intro
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
⊢ m ∣ n

tactic: obtain rfl | hm := m.eq_zero_or_pos
state_before: case intro
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
⊢ m ∣ n
state_after: case intro.inl
a✝ b c d m n✝ : ℤ
n : ℕ
a : ℤ
h : ↑n = ↑0 * a
⊢ 0 ∣ n

case intro.inr
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
hm : m > 0
⊢ m ∣ n

tactic: have ha : 0 ≤ a := Int.not_lt.1 fun ha ↦ by
  simpa [← h, Int.not_lt.2 (Int.natCast_nonneg _)]
    using Int.mul_neg_of_pos_of_neg (natCast_pos.2 hm) ha
state_before: case intro.inr
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
hm : m > 0
⊢ m ∣ n
state_after: case intro.inr
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
hm : m > 0
ha : 0 ≤ a
⊢ m ∣ n

tactic: lift a to ℕ using ha
state_before: case intro.inr
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
hm : m > 0
ha : 0 ≤ a
⊢ m ∣ n
state_after: case intro.inr.intro
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
hm : m > 0
a : ℕ
h : ↑n = ↑m * ↑a
⊢ m ∣ n

tactic: norm_cast at h
state_before: case intro.inr.intro
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
hm : m > 0
a : ℕ
h : ↑n = ↑m * ↑a
⊢ m ∣ n
state_after: case intro.inr.intro
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
hm : m > 0
a : ℕ
h : n = m * a
⊢ m ∣ n

tactic: exact ⟨a, h⟩
state_before: case intro.inr.intro
a✝ b c d m✝ n✝ : ℤ
m n : ℕ
hm : m > 0
a : ℕ
h : n = m * a
⊢ m ∣ n
state_after: no goals

tactic: simpa using h
state_before: case intro.inl
a✝ b c d m n✝ : ℤ
n : ℕ
a : ℤ
h : ↑n = ↑0 * a
⊢ 0 ∣ n
state_after: no goals

tactic: simpa [← h, Int.not_lt.2 (Int.natCast_nonneg _)]
  using Int.mul_neg_of_pos_of_neg (natCast_pos.2 hm) ha
state_before: a✝ b c d m✝ n✝ : ℤ
m n : ℕ
a : ℤ
h : ↑n = ↑m * a
hm : m > 0
ha : a < 0
⊢ False
state_after: no goals

tactic: rintro ⟨a, rfl⟩
state_before: a b c d m✝ n✝ : ℤ
m n : ℕ
⊢ m ∣ n → ↑m ∣ ↑n
state_after: case intro
a✝ b c d m✝ n : ℤ
m a : ℕ
⊢ ↑m ∣ ↑(m * a)

tactic: simp [Int.dvd_mul_right]
state_before: case intro
a✝ b c d m✝ n : ℤ
m a : ℕ
⊢ ↑m ∣ ↑(m * a)
state_after: no goals
Theorem: EuclideanGeometry.oangle_left_eq_arctan_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: have hs : (∡ p₃ p₁ p₂).sign = 1 := by rw [← oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ ∡ p₃ p₁ p₂ = ↑(Real.arctan (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
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₃ p₁ p₂).sign = 1
⊢ ∡ p₃ p₁ p₂ = ↑(Real.arctan (dist p₃ p₂ / dist p₁ p₂))

tactic: rw [oangle_eq_angle_of_sign_eq_one hs, angle_comm,
  angle_eq_arctan_of_angle_eq_pi_div_two (angle_rev_eq_pi_div_two_of_oangle_eq_pi_div_two h)
    (left_ne_of_oangle_eq_pi_div_two h)]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
hs : (∡ p₃ p₁ p₂).sign = 1
⊢ ∡ p₃ p₁ p₂ = ↑(Real.arctan (dist p₃ p₂ / dist p₁ p₂))
state_after: no goals

tactic: rw [← oangle_rotate_sign, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₂ p₃ : P
h : ∡ p₁ p₂ p₃ = ↑(π / 2)
⊢ (∡ p₃ p₁ p₂).sign = 1
state_after: no goals
Theorem: Int.nonneg_of_normalize_eq_self
File: Mathlib/Algebra/GCDMonoid/Nat.lean

tactic: rw [abs_eq_normalize, hz]
state_before: z : ℤ
hz : normalize z = z
⊢ |z| = z
state_after: no goals