ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: UpperHalfPlane.dist_of_re_eq
File: Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean

Proof steps:
state_before: z w : ℍ
r R : ℝ
h : z.re = w.re
⊢ dist z w = dist (log z.im) (log w.im)
state_after: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ dist z w = dist (log z.im) (log w.im)
tactic: have h₀ : 0 < z.im / w.im := by positivity
state_before: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ dist z w = dist (log z.im) (log w.im)
state_after: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ dist z.im (w.im * ((z.im / w.im + w.im / z.im) / 2)) = w.im * |(z.im / w.im - w.im / z.im) / 2|
tactic: rw [dist_eq_iff_dist_coe_center_eq, Real.dist_eq, ← abs_sinh, ← log_div z.im_ne_zero w.im_ne_zero,
    sinh_log h₀, dist_of_re_eq, coe_im, coe_im, center_im, cosh_abs, cosh_log h₀, inv_div] <;>
  [skip; exact h]
state_before: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ dist z.im (w.im * ((z.im / w.im + w.im / z.im) / 2)) = w.im * |(z.im / w.im - w.im / z.im) / 2|
state_after: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ dist z.im (w.im * ((z.im / w.im + w.im / z.im) / 2)) = |w.im| * |(z.im / w.im - w.im / z.im) / 2|
tactic: nth_rw 4 [← abs_of_pos w.im_pos]
state_before: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ dist z.im (w.im * ((z.im / w.im + w.im / z.im) / 2)) = |w.im| * |(z.im / w.im - w.im / z.im) / 2|
state_after: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ |z.im - w.im * ((z.im / w.im + w.im / z.im) / 2)| = |w.im * ((z.im / w.im - w.im / z.im) / 2)|
tactic: simp only [← _root_.abs_mul, coe_im, Real.dist_eq]
state_before: z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ |z.im - w.im * ((z.im / w.im + w.im / z.im) / 2)| = |w.im * ((z.im / w.im - w.im / z.im) / 2)|
state_after: case e_a
z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ z.im - w.im * ((z.im / w.im + w.im / z.im) / 2) = w.im * ((z.im / w.im - w.im / z.im) / 2)
tactic: congr 1
state_before: case e_a
z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ z.im - w.im * ((z.im / w.im + w.im / z.im) / 2) = w.im * ((z.im / w.im - w.im / z.im) / 2)
state_after: case e_a
z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ z.im * (w.im * z.im * 2) - w.im * (z.im * z.im + w.im * w.im) = w.im * (z.im * z.im - w.im * w.im)
tactic: field_simp
state_before: case e_a
z w : ℍ
r R : ℝ
h : z.re = w.re
h₀ : 0 < z.im / w.im
⊢ z.im * (w.im * z.im * 2) - w.im * (z.im * z.im + w.im * w.im) = w.im * (z.im * z.im - w.im * w.im)
state_after: no goals
tactic: ring
Theorem: CategoryTheory.Limits.splitMonoOfIdempotentOfIsLimitFork_retraction
File: Mathlib/CategoryTheory/Limits/Shapes/Equalizers.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
⊢ f ≫ 𝟙 X = f ≫ f
state_after: no goals
tactic: simp [hf]
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
⊢ c.ι ≫ i.lift (Fork.ofι f ⋯) = 𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj zero)
state_after: C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
this : Mono c.ι := mono_of_isLimit_fork i
⊢ c.ι ≫ i.lift (Fork.ofι f ⋯) = 𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj zero)
tactic: letI := mono_of_isLimit_fork i
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
this : Mono c.ι := mono_of_isLimit_fork i
⊢ c.ι ≫ i.lift (Fork.ofι f ⋯) = 𝟙 (((Functor.const WalkingParallelPair).obj c.pt).obj zero)
state_after: C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
this : Mono c.ι := mono_of_isLimit_fork i
⊢ c.ι ≫ 𝟙 X = c.ι
tactic: rw [← cancel_mono_id c.ι, Category.assoc, Fork.IsLimit.lift_ι, Fork.ι_ofι, ← c.condition]
state_before: C : Type u
inst✝ : Category.{v, u} C
X✝ Y : C
f✝ g : X✝ ⟶ Y
X : C
f : X ⟶ X
hf : f ≫ f = f
c : Fork (𝟙 X) f
i : IsLimit c
this : Mono c.ι := mono_of_isLimit_fork i
⊢ c.ι ≫ 𝟙 X = c.ι
state_after: no goals
tactic: exact Category.comp_id c.ι
Theorem: IntermediateField.insepDegree_bot
File: Mathlib/FieldTheory/SeparableClosure.lean

Proof steps:
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
⊢ insepDegree F ↥⊥ = 1
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
this : Cardinal.lift.{u, v} (insepDegree F ↥⊥) = Cardinal.lift.{v, u} (insepDegree F F)
⊢ insepDegree F ↥⊥ = 1
tactic: have := lift_insepDegree_eq_of_equiv _ _ _ (botEquiv F E)
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
this : Cardinal.lift.{u, v} (insepDegree F ↥⊥) = Cardinal.lift.{v, u} (insepDegree F F)
⊢ insepDegree F ↥⊥ = 1
state_after: no goals
tactic: rwa [insepDegree_self, Cardinal.lift_one, ← Cardinal.lift_one.{v, u}, Cardinal.lift_inj] at this
Theorem: CategoryTheory.Endofunctor.Algebra.equivOfNatIso_counitIso
File: Mathlib/CategoryTheory/Endofunctor/Algebra.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ C
A A₀ A₁ A₂ : Algebra F✝
f : A₀ ⟶ A₁
g : A₁ ⟶ A₂
F G : C ⥤ C
α : F ≅ G
⊢ 𝟙 F = α.hom ≫ α.inv
state_after: no goals
tactic: simp
state_before: C : Type u
inst✝ : Category.{v, u} C
F✝ : C ⥤ C
A A₀ A₁ A₂ : Algebra F✝
f : A₀ ⟶ A₁
g : A₁ ⟶ A₂
F G : C ⥤ C
α : F ≅ G
⊢ α.inv ≫ α.hom = 𝟙 G
state_after: no goals
tactic: simp
Theorem: SimpleGraph.Walk.cons_isPath_iff
File: Mathlib/Combinatorics/SimpleGraph/Path.lean

Proof steps:
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v✝ w✝ u v w : V
h : G.Adj u v
p : G.Walk v w
⊢ (cons h p).IsPath ↔ p.IsPath ∧ u ∉ p.support
state_after: no goals
tactic: constructor <;> simp (config := { contextual := true }) [isPath_def]
Theorem: Int.gcd_eq_zero_iff
File: Mathlib/Data/Int/GCD.lean

Proof steps:
state_before: i j : ℤ
⊢ i.gcd j = 0 ↔ i = 0 ∧ j = 0
state_after: no goals
tactic: rw [gcd, Nat.gcd_eq_zero_iff, natAbs_eq_zero, natAbs_eq_zero]
Theorem: Filter.Tendsto.atBot_mul_const'
File: Mathlib/Order/Filter/Archimedean.lean

Proof steps:
state_before: α : Type u_1
R : Type u_2
l : Filter α
f : α → R
r : R
inst✝¹ : LinearOrderedRing R
inst✝ : Archimedean R
hr : 0 < r
hf : Tendsto f l atBot
⊢ Tendsto (fun x => f x * r) l atBot
state_after: α : Type u_1
R : Type u_2
l : Filter α
f : α → R
r : R
inst✝¹ : LinearOrderedRing R
inst✝ : Archimedean R
hr : 0 < r
hf : Tendsto (fun x => -f x) l atTop
⊢ Tendsto (fun x => -f x * r) l atTop
tactic: simp only [← tendsto_neg_atTop_iff, ← neg_mul] at hf ⊢
state_before: α : Type u_1
R : Type u_2
l : Filter α
f : α → R
r : R
inst✝¹ : LinearOrderedRing R
inst✝ : Archimedean R
hr : 0 < r
hf : Tendsto (fun x => -f x) l atTop
⊢ Tendsto (fun x => -f x * r) l atTop
state_after: no goals
tactic: exact hf.atTop_mul_const' hr
Theorem: lineMap_lt_right_iff_lt
File: Mathlib/LinearAlgebra/AffineSpace/Ordered.lean

Proof steps:
state_before: k : Type u_1
E : Type u_2
PE : Type u_3
inst✝³ : OrderedRing k
inst✝² : OrderedAddCommGroup E
inst✝¹ : Module k E
inst✝ : OrderedSMul k E
a a' b b' : E
r r' : k
h : r < 1
⊢ (lineMap a b) r < b ↔ (lineMap a b) r < (lineMap a b) 1
state_after: no goals
tactic: rw [lineMap_apply_one]
Theorem: Set.Finite.equiv_image_eq_iff_subset
File: Mathlib/Data/Finite/Card.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s t : Set α
ht : t.Finite
e : α ≃ α
hs : s.Finite
h : ⇑e '' s = s
⊢ ⇑e '' s ⊆ s
state_after: no goals
tactic: rw [h]
Theorem: Ordnode.splitMax_eq
File: Mathlib/Data/Ordmap/Ordset.lean

Proof steps:
state_before: α : Type u_1
x✝ : ℕ
l : Ordnode α
x : α
ls : ℕ
ll : Ordnode α
lx : α
lr : Ordnode α
⊢ l.splitMax' x (node ls ll lx lr) = ((node x✝ l x (node ls ll lx lr)).eraseMax, findMax' x (node ls ll lx lr))
state_after: no goals
tactic: rw [splitMax', splitMax_eq ls ll lx lr, findMax', eraseMax]
Theorem: nsmul_le_nsmul_right
File: Mathlib/Algebra/Order/Monoid/Unbundled/Pow.lean

Proof steps:
state_before: β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
⊢ a ^ 0 ≤ b ^ 0
state_after: no goals
tactic: simp
state_before: β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
k : ℕ
⊢ a ^ (k + 1) ≤ b ^ (k + 1)
state_after: β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
k : ℕ
⊢ a ^ k * a ≤ b ^ k * b
tactic: rw [pow_succ, pow_succ]
state_before: β : Type u_1
G : Type u_2
M : Type u_3
inst✝³ : Monoid M
inst✝² : Preorder M
inst✝¹ : CovariantClass M M (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
x : M
inst✝ : CovariantClass M M (swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : M
hab : a ≤ b
k : ℕ
⊢ a ^ k * a ≤ b ^ k * b
state_after: no goals
tactic: exact mul_le_mul' (pow_le_pow_left' hab k) hab
Theorem: IsLocalizedModule.mk'_cancel'
File: Mathlib/Algebra/Module/LocalizedModule.lean

Proof steps:
state_before: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid M'
inst✝⁹ : AddCommMonoid M''
A : Type u_5
inst✝⁸ : CommSemiring A
inst✝⁷ : Algebra R A
inst✝⁶ : Module A M'
inst✝⁵ : IsLocalization S A
inst✝⁴ : Module R M
inst✝³ : Module R M'
inst✝² : Module R M''
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
g : M →ₗ[R] M''
inst✝ : IsLocalizedModule S f
m : M
s : ↥S
⊢ s • mk' f m s = f m
state_after: no goals
tactic: rw [Submonoid.smul_def, ← mk'_smul, ← Submonoid.smul_def, mk'_cancel]
Theorem: Filter.tendsto_const_mul_atTop_iff_pos
File: Mathlib/Order/Filter/AtTopBot.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
inst✝ : l.NeBot
h : Tendsto f l atTop
⊢ Tendsto (fun x => r * f x) l atTop ↔ 0 < r
state_after: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
inst✝ : l.NeBot
h : Tendsto f l atTop
hrf : Tendsto (fun x => r * f x) l atTop
hr : r ≤ 0
⊢ False
tactic: refine ⟨fun hrf => not_le.mp fun hr => ?_, fun hr => (tendsto_const_mul_atTop_of_pos hr).mpr h⟩
state_before: ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
inst✝ : l.NeBot
h : Tendsto f l atTop
hrf : Tendsto (fun x => r * f x) l atTop
hr : r ≤ 0
⊢ False
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
inst✝ : l.NeBot
h : Tendsto f l atTop
hrf : Tendsto (fun x => r * f x) l atTop
hr : r ≤ 0
x : β
hx : 0 ≤ f x
hrx : 0 < r * f x
⊢ False
tactic: rcases ((h.eventually_ge_atTop 0).and (hrf.eventually_gt_atTop 0)).exists with ⟨x, hx, hrx⟩
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
inst✝¹ : LinearOrderedSemifield α
l : Filter β
f : β → α
r c : α
n : ℕ
inst✝ : l.NeBot
h : Tendsto f l atTop
hrf : Tendsto (fun x => r * f x) l atTop
hr : r ≤ 0
x : β
hx : 0 ≤ f x
hrx : 0 < r * f x
⊢ False
state_after: no goals
tactic: exact (mul_nonpos_of_nonpos_of_nonneg hr hx).not_lt hrx
Theorem: CategoryTheory.Limits.colimit.pre_map
File: Mathlib/CategoryTheory/Limits/HasLimits.lean

Proof steps:
state_before: J : Type u₁
inst✝⁴ : Category.{v₁, u₁} J
K : Type u₂
inst✝³ : Category.{v₂, u₂} K
C : Type u
inst✝² : Category.{v, u} C
F : J ⥤ C
inst✝¹ : HasColimitsOfShape J C
G : J ⥤ C
α : F ⟶ G
inst✝ : HasColimitsOfShape K C
E : K ⥤ J
⊢ pre F E ≫ colim.map α = colim.map (whiskerLeft E α) ≫ pre G E
state_after: case w
J : Type u₁
inst✝⁴ : Category.{v₁, u₁} J
K : Type u₂
inst✝³ : Category.{v₂, u₂} K
C : Type u
inst✝² : Category.{v, u} C
F : J ⥤ C
inst✝¹ : HasColimitsOfShape J C
G : J ⥤ C
α : F ⟶ G
inst✝ : HasColimitsOfShape K C
E : K ⥤ J
j✝ : K
⊢ ι (E ⋙ F) j✝ ≫ pre F E ≫ colim.map α = ι (E ⋙ F) j✝ ≫ colim.map (whiskerLeft E α) ≫ pre G E
tactic: ext
state_before: case w
J : Type u₁
inst✝⁴ : Category.{v₁, u₁} J
K : Type u₂
inst✝³ : Category.{v₂, u₂} K
C : Type u
inst✝² : Category.{v, u} C
F : J ⥤ C
inst✝¹ : HasColimitsOfShape J C
G : J ⥤ C
α : F ⟶ G
inst✝ : HasColimitsOfShape K C
E : K ⥤ J
j✝ : K
⊢ ι (E ⋙ F) j✝ ≫ pre F E ≫ colim.map α = ι (E ⋙ F) j✝ ≫ colim.map (whiskerLeft E α) ≫ pre G E
state_after: case w
J : Type u₁
inst✝⁴ : Category.{v₁, u₁} J
K : Type u₂
inst✝³ : Category.{v₂, u₂} K
C : Type u
inst✝² : Category.{v, u} C
F : J ⥤ C
inst✝¹ : HasColimitsOfShape J C
G : J ⥤ C
α : F ⟶ G
inst✝ : HasColimitsOfShape K C
E : K ⥤ J
j✝ : K
⊢ α.app (E.obj j✝) ≫ ι G (E.obj j✝) = (whiskerLeft E α).app j✝ ≫ ι G (E.obj j✝)
tactic: rw [← assoc, colimit.ι_pre, colimit.ι_map, ← assoc, colimit.ι_map, assoc, colimit.ι_pre]
state_before: case w
J : Type u₁
inst✝⁴ : Category.{v₁, u₁} J
K : Type u₂
inst✝³ : Category.{v₂, u₂} K
C : Type u
inst✝² : Category.{v, u} C
F : J ⥤ C
inst✝¹ : HasColimitsOfShape J C
G : J ⥤ C
α : F ⟶ G
inst✝ : HasColimitsOfShape K C
E : K ⥤ J
j✝ : K
⊢ α.app (E.obj j✝) ≫ ι G (E.obj j✝) = (whiskerLeft E α).app j✝ ≫ ι G (E.obj j✝)
state_after: no goals
tactic: rfl
Theorem: Matrix.inv_submatrix_equiv
File: Mathlib/LinearAlgebra/Matrix/NonsingularInverse.lean

Proof steps:
state_before: l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝⁴ : Fintype n
inst✝³ : DecidableEq n
inst✝² : CommRing α
A✝ B : Matrix n n α
inst✝¹ : Fintype m
inst✝ : DecidableEq m
A : Matrix m m α
e₁ e₂ : n ≃ m
⊢ (A.submatrix ⇑e₁ ⇑e₂)⁻¹ = A⁻¹.submatrix ⇑e₂ ⇑e₁
state_after: case pos
l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝⁴ : Fintype n
inst✝³ : DecidableEq n
inst✝² : CommRing α
A✝ B : Matrix n n α
inst✝¹ : Fintype m
inst✝ : DecidableEq m
A : Matrix m m α
e₁ e₂ : n ≃ m
h : IsUnit A
⊢ (A.submatrix ⇑e₁ ⇑e₂)⁻¹ = A⁻¹.submatrix ⇑e₂ ⇑e₁

case neg
l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝⁴ : Fintype n
inst✝³ : DecidableEq n
inst✝² : CommRing α
A✝ B : Matrix n n α
inst✝¹ : Fintype m
inst✝ : DecidableEq m
A : Matrix m m α
e₁ e₂ : n ≃ m
h : ¬IsUnit A
⊢ (A.submatrix ⇑e₁ ⇑e₂)⁻¹ = A⁻¹.submatrix ⇑e₂ ⇑e₁
tactic: by_cases h : IsUnit A
Theorem: MulLECancellable.le_mul_iff_one_le_right
File: Mathlib/Algebra/Order/Monoid/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : LE α
inst✝¹ : MulOneClass α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
ha : MulLECancellable a
⊢ a ≤ a * b ↔ a * 1 ≤ a * b
state_after: no goals
tactic: rw [mul_one]
Theorem: Orientation.two_zsmul_oangle_neg_self_left
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

Proof steps:
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
⊢ 2 • o.oangle (-x) x = 0
state_after: no goals
tactic: by_cases hx : x = 0 <;> simp [hx]
Theorem: _private.Mathlib.Analysis.InnerProductSpace.OfNorm.0.InnerProductSpaceable.add_left_aux6
File: Mathlib/Analysis/InnerProductSpace/OfNorm.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
x y z : E
⊢ ‖I • (x + y) - z‖ * ‖I • (x + y) - z‖ =
    (‖I • (2 • x + y)‖ * ‖I • (2 • x + y)‖ + ‖I • y - 2 • z‖ * ‖I • y - 2 • z‖) / 2 - ‖I • x + z‖ * ‖I • x + z‖
state_after: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
x y z : E
⊢ ‖I • (2 • x + y)‖ * ‖I • (2 • x + y)‖ + ‖I • y - 2 • z‖ * ‖I • y - 2 • z‖ =
    2 * (‖I • (x + y) - z‖ * ‖I • (x + y) - z‖ + ‖I • x + z‖ * ‖I • x + z‖)
tactic: rw [eq_sub_iff_add_eq, eq_div_iff (two_ne_zero' ℝ), mul_comm _ (2 : ℝ), eq_comm]
state_before: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
x y z : E
⊢ ‖I • (2 • x + y)‖ * ‖I • (2 • x + y)‖ + ‖I • y - 2 • z‖ * ‖I • y - 2 • z‖ =
    2 * (‖I • (x + y) - z‖ * ‖I • (x + y) - z‖ + ‖I • x + z‖ * ‖I • x + z‖)
state_after: 𝕜 : Type u_1
inst✝³ : RCLike 𝕜
E : Type u_2
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : InnerProductSpaceable E
x y z : E
h₀ :
  ‖I • (x + y) - z + (I • x + z)‖ * ‖I • (x + y) - z + (I • x + z)‖ +
      ‖I • (x + y) - z - (I • x + z)‖ * ‖I • (x + y) - z - (I • x + z)‖ =
    2 * (‖I • (x + y) - z‖ * ‖I • (x + y) - z‖ + ‖I • x + z‖ * ‖I • x + z‖)
⊢ ‖I • (2 • x + y)‖ * ‖I • (2 • x + y)‖ + ‖I • y - 2 • z‖ * ‖I • y - 2 • z‖ =
    2 * (‖I • (x + y) - z‖ * ‖I • (x + y) - z‖ + ‖I • x + z‖ * ‖I • x + z‖)
tactic: have h₀ := parallelogram_identity ((I : 𝕜) • (x + y) - z) ((I : 𝕜) • x + z)
Theorem: nonempty_oreSet_of_strongRankCondition
File: Mathlib/LinearAlgebra/Dimension/Localization.lean

Proof steps:
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
⊢ Nonempty (OreLocalization.OreSet R⁰)
state_after: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
h : ¬Nonempty (OreLocalization.OreSet R⁰)
⊢ False
tactic: by_contra h
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
h : ¬Nonempty (OreLocalization.OreSet R⁰)
⊢ False
state_after: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
h : ¬Nonempty (OreLocalization.OreSet R⁰)
this : ℵ₀ ≤ Module.rank R R
⊢ False
tactic: have := aleph0_le_rank_of_isEmpty_oreSet (not_nonempty_iff.mp h)
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
h : ¬Nonempty (OreLocalization.OreSet R⁰)
this : ℵ₀ ≤ Module.rank R R
⊢ False
state_after: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
h : ¬Nonempty (OreLocalization.OreSet R⁰)
this : ℵ₀ ≤ 1
⊢ False
tactic: rw [rank_self] at this
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : IsDomain R
S : Submonoid R
inst✝ : StrongRankCondition R
h : ¬Nonempty (OreLocalization.OreSet R⁰)
this : ℵ₀ ≤ 1
⊢ False
state_after: no goals
tactic: exact this.not_lt one_lt_aleph0
Theorem: Stream'.Seq.eq_or_mem_of_mem_cons
File: Mathlib/Data/Seq/Seq.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
a b : α
f : Stream' (Option α)
al : f.IsSeq
h✝ : a ∈ cons b ⟨f, al⟩
h : some a = some b
⊢ a = b
state_after: no goals
tactic: injection h
Theorem: isGenericPoint_iff_forall_closed
File: Mathlib/Topology/Sober.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
hS : IsClosed S
hxS : x ∈ S
⊢ IsGenericPoint x S ↔ ∀ (Z : Set α), IsClosed Z → x ∈ Z → S ⊆ Z
state_after: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
hS : IsClosed S
hxS : x ∈ S
this : closure {x} ⊆ S
⊢ IsGenericPoint x S ↔ ∀ (Z : Set α), IsClosed Z → x ∈ Z → S ⊆ Z
tactic: have : closure {x} ⊆ S := closure_minimal (singleton_subset_iff.2 hxS) hS
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
x y : α
S U Z : Set α
hS : IsClosed S
hxS : x ∈ S
this : closure {x} ⊆ S
⊢ IsGenericPoint x S ↔ ∀ (Z : Set α), IsClosed Z → x ∈ Z → S ⊆ Z
state_after: no goals
tactic: simp_rw [IsGenericPoint, subset_antisymm_iff, this, true_and_iff, closure, subset_sInter_iff,
    mem_setOf_eq, and_imp, singleton_subset_iff]
Theorem: exists_nsmul_ne_zero_of_isAddCyclic
File: Mathlib/GroupTheory/SpecificGroups/Cyclic.lean

Proof steps:
state_before: α : Type u
a : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
G_cyclic : IsCyclic G
k : ℕ
k_pos : k ≠ 0
k_lt_card_G : k < Fintype.card G
⊢ ∃ a, a ^ k ≠ 1
state_after: case mk.intro
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
k_lt_card_G : k < Fintype.card G
a : G
ha : ∀ (x : G), x ∈ zpowers a
⊢ ∃ a, a ^ k ≠ 1
tactic: rcases G_cyclic with ⟨a, ha⟩
state_before: case mk.intro
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
k_lt_card_G : k < Fintype.card G
a : G
ha : ∀ (x : G), x ∈ zpowers a
⊢ ∃ a, a ^ k ≠ 1
state_after: case h
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
k_lt_card_G : k < Fintype.card G
a : G
ha : ∀ (x : G), x ∈ zpowers a
⊢ a ^ k ≠ 1
tactic: use a
state_before: case h
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
k_lt_card_G : k < Fintype.card G
a : G
ha : ∀ (x : G), x ∈ zpowers a
⊢ a ^ k ≠ 1
state_after: case h
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
a : G
ha : ∀ (x : G), x ∈ zpowers a
k_lt_card_G : a ^ k = 1
⊢ Fintype.card G ≤ k
tactic: contrapose! k_lt_card_G
state_before: case h
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
a : G
ha : ∀ (x : G), x ∈ zpowers a
k_lt_card_G : a ^ k = 1
⊢ Fintype.card G ≤ k
state_after: case h.e'_3
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
a : G
ha : ∀ (x : G), x ∈ zpowers a
k_lt_card_G : a ^ k = 1
⊢ Fintype.card G = orderOf a
tactic: convert orderOf_le_of_pow_eq_one k_pos.bot_lt k_lt_card_G
state_before: case h.e'_3
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
a : G
ha : ∀ (x : G), x ∈ zpowers a
k_lt_card_G : a ^ k = 1
⊢ Fintype.card G = orderOf a
state_after: case h.e'_3
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
a : G
ha : ∀ (x : G), x ∈ zpowers a
k_lt_card_G : a ^ k = 1
⊢ ⊤ ≤ zpowers a
tactic: rw [← Nat.card_eq_fintype_card, ← Nat.card_zpowers, eq_comm, card_eq_iff_eq_top, eq_top_iff]
state_before: case h.e'_3
α : Type u
a✝ : α
inst✝² : Group α
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
k : ℕ
k_pos : k ≠ 0
a : G
ha : ∀ (x : G), x ∈ zpowers a
k_lt_card_G : a ^ k = 1
⊢ ⊤ ≤ zpowers a
state_after: no goals
tactic: exact fun x _ ↦ ha x
Theorem: HahnSeries.single_zero_mul_coeff
File: Mathlib/RingTheory/HahnSeries/Multiplication.lean

Proof steps:
state_before: Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_4
inst✝¹ : OrderedCancelAddCommMonoid Γ
inst✝ : NonUnitalNonAssocSemiring R
r : R
x : HahnSeries Γ R
a : Γ
⊢ ((single 0) r * x).coeff a = r * x.coeff a
state_after: no goals
tactic: rw [← add_zero a, single_mul_coeff_add, add_zero]