1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Nat.succ_div_of_not_dvd
File: Mathlib/Data/Nat/Defs.lean

tactic: rw [succ_div, if_neg hba, Nat.add_zero]
state_before: a b c d m n k : ℕ
p q : ℕ → Prop
hba : ¬b ∣ a + 1
⊢ (a + 1) / b = a / b
state_after: no goals
Theorem: LiouvilleWith.sub_int_iff
File: Mathlib/NumberTheory/Liouville/LiouvilleWith.lean

tactic: rw [← Rat.cast_intCast, sub_rat_iff]
state_before: p q x y : ℝ
r : ℚ
m : ℤ
n : ℕ
⊢ LiouvilleWith p (x - ↑m) ↔ LiouvilleWith p x
state_after: no goals
Theorem: Perfect.closure_nhds_inter
File: Mathlib/Topology/Perfect.lean

tactic: constructor
state_before: α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ Perfect (closure (U ∩ C)) ∧ (closure (U ∩ C)).Nonempty
state_after: case left
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ Perfect (closure (U ∩ C))

case right
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ (closure (U ∩ C)).Nonempty

tactic: apply Nonempty.closure
state_before: case right
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ (closure (U ∩ C)).Nonempty
state_after: case right.a
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ (U ∩ C).Nonempty

tactic: exact ⟨x, ⟨xU, xC⟩⟩
state_before: case right.a
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ (U ∩ C).Nonempty
state_after: no goals

tactic: apply Preperfect.perfect_closure
state_before: case left
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ Perfect (closure (U ∩ C))
state_after: case left.hC
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ Preperfect (U ∩ C)

tactic: exact hC.acc.open_inter Uop
state_before: case left.hC
α : Type u_1
inst✝ : TopologicalSpace α
C U : Set α
hC : Perfect C
x : α
xC : x ∈ C
xU : x ∈ U
Uop : IsOpen U
⊢ Preperfect (U ∩ C)
state_after: no goals
Theorem: Asymptotics.isTheta_const_mul_left
File: Mathlib/Analysis/Asymptotics/Theta.lean

tactic: simpa only [← smul_eq_mul] using isTheta_const_smul_left hc
state_before: α : Type u_1
β : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
E' : Type u_6
F' : Type u_7
G' : Type u_8
E'' : Type u_9
F'' : Type u_10
G'' : Type u_11
R : Type u_12
R' : Type u_13
𝕜 : Type u_14
𝕜' : Type u_15
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f✝ : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
l l' : Filter α
c : 𝕜
f : α → 𝕜
hc : c ≠ 0
⊢ (fun x => c * f x) =Θ[l] g ↔ f =Θ[l] g
state_after: no goals
Theorem: AlgebraicGeometry.isAffineOpen_top
File: Mathlib/AlgebraicGeometry/AffineScheme.lean

tactic: convert isAffineOpen_opensRange (𝟙 X)
state_before: X : Scheme
inst✝ : IsAffine X
⊢ IsAffineOpen ⊤
state_after: case h.e'_2
X : Scheme
inst✝ : IsAffine X
⊢ ⊤ = Scheme.Hom.opensRange (𝟙 X)

tactic: ext1
state_before: case h.e'_2
X : Scheme
inst✝ : IsAffine X
⊢ ⊤ = Scheme.Hom.opensRange (𝟙 X)
state_after: case h.e'_2.h
X : Scheme
inst✝ : IsAffine X
⊢ ↑⊤ = ↑(Scheme.Hom.opensRange (𝟙 X))

tactic: exact Set.range_id.symm
state_before: case h.e'_2.h
X : Scheme
inst✝ : IsAffine X
⊢ ↑⊤ = ↑(Scheme.Hom.opensRange (𝟙 X))
state_after: no goals
Theorem: Polynomial.coeff_divX
File: Mathlib/Algebra/Polynomial/Inductions.lean

tactic: rw [add_comm]
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ p.divX.coeff n = p.coeff (n + 1)
state_after: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ p.divX.coeff n = p.coeff (1 + n)

tactic: cases p
state_before: R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ p.divX.coeff n = p.coeff (1 + n)
state_after: case ofFinsupp
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Semiring R
q : R[X]
toFinsupp✝ : AddMonoidAlgebra R ℕ
⊢ { toFinsupp := toFinsupp✝ }.divX.coeff n = { toFinsupp := toFinsupp✝ }.coeff (1 + n)

tactic: rfl
state_before: case ofFinsupp
R : Type u
S : Type v
T : Type w
A : Type z
a b : R
n : ℕ
inst✝ : Semiring R
q : R[X]
toFinsupp✝ : AddMonoidAlgebra R ℕ
⊢ { toFinsupp := toFinsupp✝ }.divX.coeff n = { toFinsupp := toFinsupp✝ }.coeff (1 + n)
state_after: no goals
Theorem: CategoryTheory.Presieve.in_coverByImage
File: Mathlib/CategoryTheory/Sites/DenseSubsite.lean

tactic: simp
state_before: C : Type u_1
inst✝² : Category.{u_4, u_1} C
D : Type u_2
inst✝¹ : Category.{u_5, u_2} D
E : Type u_3
inst✝ : Category.{?u.4157, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
G : C ⥤ D
X : D
Y : C
f : G.obj Y ⟶ X
⊢ 𝟙 (G.obj Y) ≫ f = f
state_after: no goals
Theorem: Stonean.pullback.hom_ext
File: Mathlib/Topology/Category/Stonean/Limits.lean

tactic: ext z
state_before: X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
hfst : a ≫ fst f hi = b ≫ fst f hi
⊢ a = b
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
hfst : a ≫ fst f hi = b ≫ fst f hi
z : (forget Stonean).obj W
⊢ a z = b z

tactic: apply_fun (fun q => q z) at hfst
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
hfst : a ≫ fst f hi = b ≫ fst f hi
z : (forget Stonean).obj W
⊢ a z = b z
state_after: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ a z = b z

tactic: apply Subtype.ext
state_before: case w
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ a z = b z
state_after: case w.a
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ ↑(a z) = ↑(b z)

tactic: exact hfst
state_before: case w.a
X✝ Y✝ Z✝ : Stonean
f✝ : X✝ ⟶ Z✝
i✝ : Y✝ ⟶ Z✝
hi✝ : OpenEmbedding ⇑i✝
X Y Z W : Stonean
f : X ⟶ Z
i : Y ⟶ Z
hi : OpenEmbedding ⇑i
a b : W ⟶ (cone f hi).pt
z : (forget Stonean).obj W
hfst : (a ≫ fst f hi) z = (b ≫ fst f hi) z
⊢ ↑(a z) = ↑(b z)
state_after: no goals
Theorem: Matrix.Commute.mul_zpow
File: Mathlib/LinearAlgebra/Matrix/ZPow.lean

tactic: simp [h.mul_pow n]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A B : M
h : Commute A B
n : ℕ
⊢ (A * B) ^ ↑n = A ^ ↑n * B ^ ↑n
state_after: no goals

tactic: rw [zpow_negSucc, zpow_negSucc, zpow_negSucc, ← mul_inv_rev,
  h.mul_pow n.succ, (h.pow_pow _ _).eq]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A B : M
h : Commute A B
n : ℕ
⊢ (A * B) ^ -[n+1] = A ^ -[n+1] * B ^ -[n+1]
state_after: no goals
Theorem: CategoryTheory.ShiftMkCore.assoc_inv_app
File: Mathlib/CategoryTheory/Shift/Basic.lean

tactic: rw [add_assoc]
state_before: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
m₁ m₂ m₃ : A
X : C
⊢ (h.F (m₁ + (m₂ + m₃))).obj X = (h.F (m₁ + m₂ + m₃)).obj X
state_after: no goals

tactic: rw [← cancel_mono ((h.add (m₁ + m₂) m₃).hom.app X ≫ (h.F m₃).map ((h.add m₁ m₂).hom.app X)),
  Category.assoc, Category.assoc, Category.assoc, Iso.inv_hom_id_app_assoc, ← Functor.map_comp,
  Iso.inv_hom_id_app, Functor.map_id, h.assoc_hom_app, eqToHom_trans_assoc, eqToHom_refl,
  Category.id_comp, Iso.inv_hom_id_app_assoc, Iso.inv_hom_id_app]
state_before: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
m₁ m₂ m₃ : A
X : C
⊢ (h.F m₃).map ((h.add m₁ m₂).inv.app X) ≫ (h.add (m₁ + m₂) m₃).inv.app X =
    (h.add m₂ m₃).inv.app ((h.F m₁).obj X) ≫ (h.add m₁ (m₂ + m₃)).inv.app X ≫ eqToHom ⋯
state_after: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
m₁ m₂ m₃ : A
X : C
⊢ 𝟙 ((h.F m₃).obj ((h.F m₁ ⋙ h.F m₂).obj X)) = 𝟙 ((h.F m₂ ⋙ h.F m₃).obj ((h.F m₁).obj X))

tactic: rfl
state_before: C : Type u
A : Type u_1
inst✝¹ : Category.{v, u} C
inst✝ : AddMonoid A
h : ShiftMkCore C A
m₁ m₂ m₃ : A
X : C
⊢ 𝟙 ((h.F m₃).obj ((h.F m₁ ⋙ h.F m₂).obj X)) = 𝟙 ((h.F m₂ ⋙ h.F m₃).obj ((h.F m₁).obj X))
state_after: no goals
Theorem: Ordinal.le_mex_of_forall
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: by_contra! h
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
a : Ordinal.{max u v}
H : ∀ b < a, ∃ i, f i = b
⊢ a ≤ mex f
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
a : Ordinal.{max u v}
H : ∀ b < a, ∃ i, f i = b
h : mex f < a
⊢ False

tactic: exact mex_not_mem_range f (H _ h)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
a : Ordinal.{max u v}
H : ∀ b < a, ∃ i, f i = b
h : mex f < a
⊢ False
state_after: no goals
Theorem: clusterPt_principal_iff_frequently
File: Mathlib/Topology/Basic.lean

tactic: simp only [clusterPt_principal_iff, frequently_iff, Set.Nonempty, exists_prop, mem_inter_iff]
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
⊢ ClusterPt x (𝓟 s) ↔ ∃ᶠ (y : X) in 𝓝 x, y ∈ s
state_after: no goals
Theorem: Nat.ceilRoot_zero_right
File: Mathlib/Data/Nat/Factorization/Root.lean

tactic: simp [ceilRoot]
state_before: a b n✝ n : ℕ
⊢ n.ceilRoot 0 = 0
state_after: no goals
Theorem: exists_dist_lt_le
File: Mathlib/Analysis/NormedSpace/Pointwise.lean

tactic: obtain ⟨y, yz, xy⟩ :=
  exists_dist_le_lt hε hδ (show dist z x < δ + ε by simpa only [dist_comm, add_comm] using h)
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 ≤ ε
h : dist x z < ε + δ
⊢ ∃ y, dist x y < δ ∧ dist y z ≤ ε
state_after: case intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y✝ z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 ≤ ε
h : dist x z < ε + δ
y : E
yz : dist z y ≤ ε
xy : dist y x < δ
⊢ ∃ y, dist x y < δ ∧ dist y z ≤ ε

tactic: exact ⟨y, by simp [dist_comm x y, dist_comm y z, *]⟩
state_before: case intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y✝ z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 ≤ ε
h : dist x z < ε + δ
y : E
yz : dist z y ≤ ε
xy : dist y x < δ
⊢ ∃ y, dist x y < δ ∧ dist y z ≤ ε
state_after: no goals

tactic: simpa only [dist_comm, add_comm] using h
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 ≤ ε
h : dist x z < ε + δ
⊢ dist z x < δ + ε
state_after: no goals

tactic: simp [dist_comm x y, dist_comm y z, *]
state_before: 𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedField 𝕜
inst✝² : SeminormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
x y✝ z : E
δ ε : ℝ
hδ : 0 < δ
hε : 0 ≤ ε
h : dist x z < ε + δ
y : E
yz : dist z y ≤ ε
xy : dist y x < δ
⊢ dist x y < δ ∧ dist y z ≤ ε
state_after: no goals
Theorem: Quaternion.norm_star
File: Mathlib/Analysis/Quaternion.lean

tactic: simp_rw [norm_eq_sqrt_real_inner, inner_self, normSq_star]
state_before: a : ℍ
⊢ ‖star a‖ = ‖a‖
state_after: no goals
Theorem: NNReal.sqrt_mul
File: Mathlib/Data/Real/Sqrt.lean

tactic: rw [sqrt_eq_iff_eq_sq, mul_pow, sq_sqrt, sq_sqrt]
state_before: x✝ y✝ x y : ℝ≥0
⊢ sqrt (x * y) = sqrt x * sqrt y
state_after: no goals
Theorem: RCLike.norm_coe_norm
File: Mathlib/Analysis/NormedSpace/RCLike.lean

tactic: simp
state_before: 𝕜 : Type u_1
inst✝¹ : RCLike 𝕜
E : Type u_2
inst✝ : NormedAddCommGroup E
z : E
⊢ ‖↑‖z‖‖ = ‖z‖
state_after: no goals
Theorem: PowerSeries.rescale_neg_one_X
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: rw [rescale_X, map_neg, map_one, neg_one_mul]
state_before: R : Type u_1
A : Type u_2
inst✝ : CommRing A
⊢ (rescale (-1)) X = -X
state_after: no goals
Theorem: OrthonormalBasis.det_to_matrix_orthonormalBasis_of_opposite_orientation
File: Mathlib/Analysis/InnerProductSpace/Orientation.lean

tactic: contrapose! h
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
ι : Type u_2
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
ne : Nonempty ι
e f : OrthonormalBasis ι ℝ E
x : Orientation ℝ E ι
h : e.toBasis.orientation ≠ f.toBasis.orientation
⊢ e.toBasis.det ⇑f = -1
state_after: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
ι : Type u_2
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
ne : Nonempty ι
e f : OrthonormalBasis ι ℝ E
x : Orientation ℝ E ι
h : e.toBasis.det ⇑f ≠ -1
⊢ e.toBasis.orientation = f.toBasis.orientation

tactic: simp [e.toBasis.orientation_eq_iff_det_pos,
  (e.det_to_matrix_orthonormalBasis_real f).resolve_right h]
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace ℝ E
ι : Type u_2
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
ne : Nonempty ι
e f : OrthonormalBasis ι ℝ E
x : Orientation ℝ E ι
h : e.toBasis.det ⇑f ≠ -1
⊢ e.toBasis.orientation = f.toBasis.orientation
state_after: no goals
Theorem: normalizerCondition_iff_only_full_group_self_normalizing
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: apply forall_congr'
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H K : Subgroup G
N : Type u_5
inst✝ : Group N
⊢ NormalizerCondition G ↔ ∀ (H : Subgroup G), H.normalizer = H → H = ⊤
state_after: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H K : Subgroup G
N : Type u_5
inst✝ : Group N
⊢ ∀ (a : Subgroup G), a < ⊤ → a < a.normalizer ↔ a.normalizer = a → a = ⊤

tactic: intro H
state_before: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H K : Subgroup G
N : Type u_5
inst✝ : Group N
⊢ ∀ (a : Subgroup G), a < ⊤ → a < a.normalizer ↔ a.normalizer = a → a = ⊤
state_after: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H✝ K : Subgroup G
N : Type u_5
inst✝ : Group N
H : Subgroup G
⊢ H < ⊤ → H < H.normalizer ↔ H.normalizer = H → H = ⊤

tactic: simp only [lt_iff_le_and_ne, le_normalizer, true_and_iff, le_top, Ne]
state_before: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H✝ K : Subgroup G
N : Type u_5
inst✝ : Group N
H : Subgroup G
⊢ H < ⊤ → H < H.normalizer ↔ H.normalizer = H → H = ⊤
state_after: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H✝ K : Subgroup G
N : Type u_5
inst✝ : Group N
H : Subgroup G
⊢ ¬H = ⊤ → ¬H = H.normalizer ↔ H.normalizer = H → H = ⊤

tactic: tauto
state_before: case h
G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁴ : Group G
inst✝³ : Group G'
inst✝² : Group G''
A : Type u_4
inst✝¹ : AddGroup A
H✝ K : Subgroup G
N : Type u_5
inst✝ : Group N
H : Subgroup G
⊢ ¬H = ⊤ → ¬H = H.normalizer ↔ H.normalizer = H → H = ⊤
state_after: no goals
Theorem: lipschitzOnWith_inv_iff
File: Mathlib/Analysis/Normed/Group/Uniform.lean

tactic: simp [LipschitzOnWith]
state_before: 𝓕 : Type u_1
α✝ : Type u_2
E✝ : Type u_3
F : Type u_4
inst✝³ : SeminormedCommGroup E✝
inst✝² : SeminormedCommGroup F
a a₁ a₂ b b₁ b₂ : E✝
r r₁ r₂ : ℝ
α : Type u_5
E : Type u_6
inst✝¹ : SeminormedCommGroup E
inst✝ : PseudoEMetricSpace α
K Kf Kg : ℝ≥0
f g : α → E
s : Set α
x : α
⊢ LipschitzOnWith K f⁻¹ s ↔ LipschitzOnWith K f s
state_after: no goals
Theorem: MonoidHom.range_top_iff_surjective
File: Mathlib/Algebra/Group/Subgroup/Basic.lean

tactic: rw [coe_range, coe_top]
state_before: G : Type u_1
G' : Type u_2
G'' : Type u_3
inst✝⁶ : Group G
inst✝⁵ : Group G'
inst✝⁴ : Group G''
A : Type u_4
inst✝³ : AddGroup A
N✝ : Type u_5
P : Type u_6
inst✝² : Group N✝
inst✝¹ : Group P
K : Subgroup G
N : Type u_7
inst✝ : Group N
f : G →* N
⊢ ↑f.range = ↑⊤ ↔ Set.range ⇑f = Set.univ
state_after: no goals
Theorem: FirstOrder.Language.Substructure.realize_formula_top
File: Mathlib/ModelTheory/Substructures.lean

tactic: rw [← Substructure.topEquiv.realize_formula φ]
state_before: L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S : L.Substructure M
s : Set M
α : Type u_3
φ : L.Formula α
v : α → ↥⊤
⊢ φ.Realize v ↔ φ.Realize (Subtype.val ∘ v)
state_after: L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S : L.Substructure M
s : Set M
α : Type u_3
φ : L.Formula α
v : α → ↥⊤
⊢ φ.Realize (⇑topEquiv ∘ v) ↔ φ.Realize (Subtype.val ∘ v)

tactic: simp
state_before: L : Language
M : Type w
N : Type u_1
P : Type u_2
inst✝² : L.Structure M
inst✝¹ : L.Structure N
inst✝ : L.Structure P
S : L.Substructure M
s : Set M
α : Type u_3
φ : L.Formula α
v : α → ↥⊤
⊢ φ.Realize (⇑topEquiv ∘ v) ↔ φ.Realize (Subtype.val ∘ v)
state_after: no goals
Theorem: Nat.bit1_mod_bit0
File: Mathlib/Algebra/Ring/Parity.lean

tactic: have h₁ := congr_arg bit1 (Nat.div_add_mod n m)
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
⊢ bit1 n % bit0 m = bit1 (n % m)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit1 (m * (n / m) + n % m) = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)

tactic: rw [bit1_add, bit0_eq_two_mul, ← mul_assoc, ← bit0_eq_two_mul] at h₁
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit1 (m * (n / m) + n % m) = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit0 m * (n / m) + bit1 (n % m) = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)

tactic: have h₂ := Nat.div_add_mod (bit1 n) (bit0 m)
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit0 m * (n / m) + bit1 (n % m) = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit0 m * (n / m) + bit1 (n % m) = bit1 n
h₂ : bit0 m * (bit1 n / bit0 m) + bit1 n % bit0 m = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)

tactic: rw [bit1_div_bit0] at h₂
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit0 m * (n / m) + bit1 (n % m) = bit1 n
h₂ : bit0 m * (bit1 n / bit0 m) + bit1 n % bit0 m = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)
state_after: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit0 m * (n / m) + bit1 (n % m) = bit1 n
h₂ : bit0 m * (n / m) + bit1 n % bit0 m = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)

tactic: exact Nat.add_left_cancel (h₂.trans h₁.symm)
state_before: F : Type u_1
α : Type u_2
β : Type u_3
R : Type u_4
m n : ℕ
h₁ : bit0 m * (n / m) + bit1 (n % m) = bit1 n
h₂ : bit0 m * (n / m) + bit1 n % bit0 m = bit1 n
⊢ bit1 n % bit0 m = bit1 (n % m)
state_after: no goals
Theorem: Finset.card_le_one_iff_subset_singleton
File: Mathlib/Data/Finset/Card.lean

tactic: refine ⟨fun H => ?_, ?_⟩
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
⊢ s.card ≤ 1 ↔ ∃ x, s ⊆ {x}
state_after: case refine_1
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : s.card ≤ 1
⊢ ∃ x, s ⊆ {x}

case refine_2
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
⊢ (∃ x, s ⊆ {x}) → s.card ≤ 1

tactic: obtain rfl | ⟨x, hx⟩ := s.eq_empty_or_nonempty
state_before: case refine_1
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : s.card ≤ 1
⊢ ∃ x, s ⊆ {x}
state_after: case refine_1.inl
α : Type u_1
β : Type u_2
R : Type u_3
t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : ∅.card ≤ 1
⊢ ∃ x, ∅ ⊆ {x}

case refine_1.inr.intro
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : s.card ≤ 1
x : α
hx : x ∈ s
⊢ ∃ x, s ⊆ {x}

tactic: exact ⟨Classical.arbitrary α, empty_subset _⟩
state_before: case refine_1.inl
α : Type u_1
β : Type u_2
R : Type u_3
t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : ∅.card ≤ 1
⊢ ∃ x, ∅ ⊆ {x}
state_after: no goals

tactic: exact ⟨x, fun y hy => by rw [card_le_one.1 H y hy x hx, mem_singleton]⟩
state_before: case refine_1.inr.intro
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : s.card ≤ 1
x : α
hx : x ∈ s
⊢ ∃ x, s ⊆ {x}
state_after: no goals

tactic: rw [card_le_one.1 H y hy x hx, mem_singleton]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
H : s.card ≤ 1
x : α
hx : x ∈ s
y : α
hy : y ∈ s
⊢ y ∈ {x}
state_after: no goals

tactic: rintro ⟨x, hx⟩
state_before: case refine_2
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
⊢ (∃ x, s ⊆ {x}) → s.card ≤ 1
state_after: case refine_2.intro
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
x : α
hx : s ⊆ {x}
⊢ s.card ≤ 1

tactic: rw [← card_singleton x]
state_before: case refine_2.intro
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
x : α
hx : s ⊆ {x}
⊢ s.card ≤ 1
state_after: case refine_2.intro
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
x : α
hx : s ⊆ {x}
⊢ s.card ≤ {x}.card

tactic: exact card_le_card hx
state_before: case refine_2.intro
α : Type u_1
β : Type u_2
R : Type u_3
s t u : Finset α
f : α → β
n : ℕ
inst✝ : Nonempty α
x : α
hx : s ⊆ {x}
⊢ s.card ≤ {x}.card
state_after: no goals
Theorem: List.Chain.rel
File: Mathlib/Data/List/Chain.lean

tactic: rw [chain_iff_pairwise] at hl
state_before: α : Type u
β : Type v
R r : α → α → Prop
l l₁ l₂ : List α
a b : α
inst✝ : IsTrans α R
hl : Chain R a l
hb : b ∈ l
⊢ R a b
state_after: α : Type u
β : Type v
R r : α → α → Prop
l l₁ l₂ : List α
a b : α
inst✝ : IsTrans α R
hl : Pairwise R (a :: l)
hb : b ∈ l
⊢ R a b

tactic: exact rel_of_pairwise_cons hl hb
state_before: α : Type u
β : Type v
R r : α → α → Prop
l l₁ l₂ : List α
a b : α
inst✝ : IsTrans α R
hl : Pairwise R (a :: l)
hb : b ∈ l
⊢ R a b
state_after: no goals