ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: ConvexOn.monotoneOn_deriv
File: Mathlib/Analysis/Convex/Deriv.lean

Proof steps:
state_before: S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : ConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
⊢ MonotoneOn (deriv f) S
state_after: S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
⊢ deriv f x ≤ deriv f y
tactic: intro x hx y hy hxy
state_before: S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
⊢ deriv f x ≤ deriv f y
state_after: case inl
S : Set ℝ
f : ℝ → ℝ
x✝ y f' : ℝ
hfc : ConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx hy : x ∈ S
hxy : x ≤ x
⊢ deriv f x ≤ deriv f x

case inr
S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
hxy' : x < y
⊢ deriv f x ≤ deriv f y
tactic: rcases eq_or_lt_of_le hxy with rfl | hxy'
state_before: case inr
S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConvexOn ℝ S f
hfd : ∀ x ∈ S, DifferentiableAt ℝ f x
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
hxy' : x < y
⊢ deriv f x ≤ deriv f y
state_after: no goals
tactic: exact (hfc.deriv_le_slope hx hy hxy' (hfd x hx)).trans (hfc.slope_le_deriv hx hy hxy' (hfd y hy))
Theorem: Polynomial.forall_eq_iff_forall_eq
File: Mathlib/Algebra/Polynomial/Basic.lean

Proof steps:
state_before: R : Type u
a b : R
m n : ℕ
inst✝ : Semiring R
p q : R[X]
⊢ (∀ (f g : R[X]), f = g) ↔ ∀ (a b : R), a = b
state_after: no goals
tactic: simpa only [← subsingleton_iff] using subsingleton_iff_subsingleton
Theorem: WithTop.image_coe_Ioi
File: Mathlib/Order/Interval/Set/WithBotTop.lean

Proof steps:
state_before: α : Type u_1
inst✝ : Preorder α
a b : α
⊢ some '' Ioi a = Ioo ↑a ⊤
state_after: no goals
tactic: rw [← preimage_coe_Ioi, image_preimage_eq_inter_range, range_coe, Ioi_inter_Iio]
Theorem: Set.countable_setOf_finite_subset
File: Mathlib/Data/Set/Countable.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
⊢ {t | t.Finite ∧ t ⊆ s}.Countable
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
⊢ {t | t.Finite ∧ t ⊆ s}.Countable
tactic: have := hs.to_subtype
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
⊢ {t | t.Finite ∧ t ⊆ s}.Countable
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
⊢ {t | t.Finite ∧ t ⊆ s} ⊆ range fun t => Subtype.val '' ↑t
tactic: refine (countable_range fun t : Finset s => Subtype.val '' (t : Set s)).mono ?_
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
⊢ {t | t.Finite ∧ t ⊆ s} ⊆ range fun t => Subtype.val '' ↑t
state_after: case intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
t : Set α
ht : t.Finite
hts : t ⊆ s
⊢ t ∈ range fun t => Subtype.val '' ↑t
tactic: rintro t ⟨ht, hts⟩
state_before: case intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
t : Set α
ht : t.Finite
hts : t ⊆ s
⊢ t ∈ range fun t => Subtype.val '' ↑t
state_after: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
t : Set ↑s
ht : (Subtype.val '' t).Finite
⊢ Subtype.val '' t ∈ range fun t => Subtype.val '' ↑t
tactic: lift t to Set s using hts
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
t : Set ↑s
ht : (Subtype.val '' t).Finite
⊢ Subtype.val '' t ∈ range fun t => Subtype.val '' ↑t
state_after: case intro.intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
t : Finset ↑s
ht : (Subtype.val '' ↑t).Finite
⊢ Subtype.val '' ↑t ∈ range fun t => Subtype.val '' ↑t
tactic: lift t to Finset s using ht.of_finite_image Subtype.val_injective.injOn
state_before: case intro.intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
s : Set α
hs : s.Countable
this : Countable ↑s
t : Finset ↑s
ht : (Subtype.val '' ↑t).Finite
⊢ Subtype.val '' ↑t ∈ range fun t => Subtype.val '' ↑t
state_after: no goals
tactic: exact mem_range_self _
Theorem: mul_inv_le_iff
File: Mathlib/Algebra/Order/Field/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a * b⁻¹ ≤ c ↔ a ≤ b * c
state_after: no goals
tactic: rw [mul_comm, inv_mul_le_iff h]
Theorem: Function.HasTemperateGrowth.const
File: Mathlib/Analysis/Distribution/SchwartzSpace.lean

Proof steps:
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
D : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
V : Type u_7
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
c : F
⊢ Function.HasTemperateGrowth (fderiv ℝ fun x => c)
state_after: no goals
tactic: simpa using .zero
state_before: 𝕜 : Type u_1
𝕜' : Type u_2
D : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
V : Type u_7
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
c : F
x : E
⊢ ‖c‖ ≤ ‖c‖ * (1 + ‖x‖) ^ 0
state_after: no goals
tactic: simp
Theorem: FractionalIdeal.dual_mul_self
File: Mathlib/RingTheory/DedekindDomain/Different.lean

Proof steps:
state_before: A : Type u_1
K : Type u_2
L : Type u
B : Type u_3
inst✝¹⁸ : CommRing A
inst✝¹⁷ : Field K
inst✝¹⁶ : CommRing B
inst✝¹⁵ : Field L
inst✝¹⁴ : Algebra A K
inst✝¹³ : Algebra B L
inst✝¹² : Algebra A B
inst✝¹¹ : Algebra K L
inst✝¹⁰ : Algebra A L
inst✝⁹ : IsScalarTower A K L
inst✝⁸ : IsScalarTower A B L
inst✝⁷ : IsDomain A
inst✝⁶ : IsFractionRing A K
inst✝⁵ : IsIntegralClosure B A L
inst✝⁴ : IsFractionRing B L
inst✝³ : FiniteDimensional K L
inst✝² : Algebra.IsSeparable K L
inst✝¹ : IsIntegrallyClosed A
inst✝ : IsDedekindDomain B
I J : FractionalIdeal B⁰ L
hI : I ≠ 0
hJ : J ≠ 0
⊢ dual A K I * I = dual A K 1
state_after: no goals
tactic: rw [dual_eq_mul_inv, mul_assoc, inv_mul_cancel hI, mul_one]
Theorem: EReal.le_iff_le_forall_real_gt
File: Mathlib/Data/Real/EReal.lean

Proof steps:
state_before: x y : EReal
⊢ (∀ (z : ℝ), x < ↑z → y ≤ ↑z) ↔ y ≤ x
state_after: x y : EReal
⊢ y ≤ x ↔ ∀ (z : ℝ), x < ↑z → y ≤ ↑z
tactic: symm
state_before: x y : EReal
⊢ y ≤ x ↔ ∀ (z : ℝ), x < ↑z → y ≤ ↑z
state_after: x y : EReal
⊢ (∀ (z : ℝ), x < ↑z → y ≤ ↑z) → y ≤ x
tactic: refine ⟨fun h z x_lt_z ↦ le_trans h (le_of_lt x_lt_z), ?_⟩
state_before: x y : EReal
⊢ (∀ (z : ℝ), x < ↑z → y ≤ ↑z) → y ≤ x
state_after: x y : EReal
h : ∀ (z : ℝ), x < ↑z → y ≤ ↑z
⊢ y ≤ x
tactic: intro h
state_before: x y : EReal
h : ∀ (z : ℝ), x < ↑z → y ≤ ↑z
⊢ y ≤ x
state_after: case h_bot
y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
⊢ y ≤ ⊥

case h_real
y : EReal
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → y ≤ ↑z
⊢ y ≤ ↑a✝

case h_top
y : EReal
h : ∀ (z : ℝ), ⊤ < ↑z → y ≤ ↑z
⊢ y ≤ ⊤
tactic: induction x
Theorem: joinedIn_iff_joined
File: Mathlib/Topology/Connected/PathConnected.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
x_in : x ∈ F
y_in : y ∈ F
h : Joined ⟨x, x_in⟩ ⟨y, y_in⟩
⊢ ∀ (t : ↑I), (h.somePath.map ⋯) t ∈ F
state_after: no goals
tactic: simp
Theorem: Complex.cpow_int_mul
File: Mathlib/Analysis/SpecialFunctions/Pow/Complex.lean

Proof steps:
state_before: x : ℂ
n : ℤ
y : ℂ
⊢ x ^ (↑n * y) = (x ^ y) ^ n
state_after: case inl
n : ℤ
y : ℂ
⊢ 0 ^ (↑n * y) = (0 ^ y) ^ n

case inr
x : ℂ
n : ℤ
y : ℂ
hx : x ≠ 0
⊢ x ^ (↑n * y) = (x ^ y) ^ n
tactic: rcases eq_or_ne x 0 with rfl | hx
Theorem: Finset.centroid_mem_convexHull
File: Mathlib/Analysis/Convex/Combination.lean

Proof steps:
state_before: R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι
c : R
t : Finset ι
w : ι → R
z : ι → E
s : Finset E
hs : s.Nonempty
⊢ centroid R s id ∈ (convexHull R) ↑s
state_after: R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι
c : R
t : Finset ι
w : ι → R
z : ι → E
s : Finset E
hs : s.Nonempty
⊢ s.centerMass (centroidWeights R s) id ∈ (convexHull R) ↑s
tactic: rw [s.centroid_eq_centerMass hs]
state_before: R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι
c : R
t : Finset ι
w : ι → R
z : ι → E
s : Finset E
hs : s.Nonempty
⊢ s.centerMass (centroidWeights R s) id ∈ (convexHull R) ↑s
state_after: case hw₀
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι
c : R
t : Finset ι
w : ι → R
z : ι → E
s : Finset E
hs : s.Nonempty
⊢ ∀ i ∈ s, 0 ≤ centroidWeights R s i

case hws
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι
c : R
t : Finset ι
w : ι → R
z : ι → E
s : Finset E
hs : s.Nonempty
⊢ 0 < ∑ i ∈ s, centroidWeights R s i
tactic: apply s.centerMass_id_mem_convexHull
Theorem: MonoidWithZeroHom.ext_rat'
File: Mathlib/Data/Rat/Cast/Defs.lean

Proof steps:
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝³ : FunLike F α β
M₀ : Type u_5
inst✝² : MonoidWithZero M₀
inst✝¹ : FunLike F ℚ M₀
inst✝ : MonoidWithZeroHomClass F ℚ M₀
f g : F
h : ∀ (m : ℤ), f ↑m = g ↑m
r : ℚ
⊢ f r = g r
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝³ : FunLike F α β
M₀ : Type u_5
inst✝² : MonoidWithZero M₀
inst✝¹ : FunLike F ℚ M₀
inst✝ : MonoidWithZeroHomClass F ℚ M₀
f g : F
h : ∀ (m : ℤ), f ↑m = g ↑m
r : ℚ
⊢ f ↑↑r.den = g ↑↑r.den
tactic: rw [← r.num_div_den, div_eq_mul_inv, map_mul, map_mul, h, ← Int.cast_natCast,
      eq_on_inv₀ f g]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝³ : FunLike F α β
M₀ : Type u_5
inst✝² : MonoidWithZero M₀
inst✝¹ : FunLike F ℚ M₀
inst✝ : MonoidWithZeroHomClass F ℚ M₀
f g : F
h : ∀ (m : ℤ), f ↑m = g ↑m
r : ℚ
⊢ f ↑↑r.den = g ↑↑r.den
state_after: no goals
tactic: apply h
Theorem: isOpen_prod_iff
File: Mathlib/Topology/Constructions.lean

Proof steps:
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : TopologicalSpace W
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
s : Set (X × Y)
⊢ (∀ x ∈ s, s ∈ 𝓝 x) ↔ ∀ (a : X) (b : Y), (a, b) ∈ s → ∃ u v, IsOpen u ∧ IsOpen v ∧ a ∈ u ∧ b ∈ v ∧ u ×ˢ v ⊆ s
state_after: no goals
tactic: simp_rw [Prod.forall, mem_nhds_prod_iff', and_left_comm]
Theorem: CategoryTheory.ShortComplex.RightHomologyData.ofIsLimitKernelFork_g'
File: Mathlib/Algebra/Homology/ShortComplex/RightHomology.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.RightHomologyData
A : C
hf : S.f = 0
c : KernelFork S.g
hc : IsLimit c
⊢ (ofIsLimitKernelFork S hf c hc).g' = S.g
state_after: no goals
tactic: rw [← cancel_epi (ofIsLimitKernelFork S hf c hc).p, p_g',
    ofIsLimitKernelFork_p, id_comp]
Theorem: MeasureTheory.Measure.restrict_union₀
File: Mathlib/MeasureTheory/Measure/Restrict.lean

Proof steps:
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s s' t : Set α
h : AEDisjoint μ s t
ht : NullMeasurableSet t μ
⊢ μ.restrict (s ∪ t) = μ.restrict s + μ.restrict t
state_after: no goals
tactic: simp [← restrict_union_add_inter₀ s ht, restrict_zero_set h]
Theorem: inv_antitoneOn_Icc_left
File: Mathlib/Algebra/Order/Field/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ AntitoneOn (fun x => x⁻¹) (Set.Icc a b)
state_after: case h.e'_5.h.h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
x✝ : α
⊢ x✝ = x✝ - 0
tactic: convert sub_inv_antitoneOn_Icc_left hb
state_before: case h.e'_5.h.h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
x✝ : α
⊢ x✝ = x✝ - 0
state_after: no goals
tactic: exact (sub_zero _).symm
Theorem: Real.pi_lt_3141593
File: Mathlib/Data/Real/Pi/Bounds.lean

Proof steps:
state_before: ⊢ π < 3.141593
state_after: no goals
tactic: pi_upper_bound
        [27720 / 19601, 56935 / 30813, 49359 / 25163, 258754 / 130003, 113599 / 56868,
          1101994 / 551163, 8671537 / 4336095, 3877807 / 1938940, 52483813 / 26242030,
          56946167 / 28473117, 23798415 / 11899211]
Theorem: IsSeparatedMap.pullback
File: Mathlib/Topology/SeparatedMap.lean

Proof steps:
state_before: X : Type u_1
Y : Sort u_2
A : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
sep : IsSeparatedMap f
g : A → Y
⊢ IsSeparatedMap snd
state_after: X : Type u_1
Y : Sort u_2
A : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
sep : IsClosed (Function.pullbackDiagonal f)
g : A → Y
⊢ IsClosed (Function.pullbackDiagonal snd)
tactic: rw [isSeparatedMap_iff_isClosed_diagonal] at sep ⊢
state_before: X : Type u_1
Y : Sort u_2
A : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
sep : IsClosed (Function.pullbackDiagonal f)
g : A → Y
⊢ IsClosed (Function.pullbackDiagonal snd)
state_after: X : Type u_1
Y : Sort u_2
A : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
sep : IsClosed (Function.pullbackDiagonal f)
g : A → Y
⊢ IsClosed (Function.PullbackSelf.map_fst ⁻¹' Function.pullbackDiagonal f)
tactic: rw [← preimage_map_fst_pullbackDiagonal]
state_before: X : Type u_1
Y : Sort u_2
A : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
f : X → Y
sep : IsClosed (Function.pullbackDiagonal f)
g : A → Y
⊢ IsClosed (Function.PullbackSelf.map_fst ⁻¹' Function.pullbackDiagonal f)
state_after: no goals
tactic: refine sep.preimage (Continuous.mapPullback ?_ ?_) <;>
  apply_rules [continuous_fst, continuous_subtype_val, Continuous.comp]
Theorem: SlimCheck.InjectiveFunction.applyId_injective
File: Mathlib/Testing/SlimCheck/Functions.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
⊢ Injective (applyId (xs.zip ys))
state_after: α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
x y : α
h : applyId (xs.zip ys) x = applyId (xs.zip ys) y
⊢ x = y
tactic: intro x y h
state_before: α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
x y : α
h : applyId (xs.zip ys) x = applyId (xs.zip ys) y
⊢ x = y
state_after: case pos
α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
x y : α
h : applyId (xs.zip ys) x = applyId (xs.zip ys) y
hx : x ∈ xs
hy : y ∈ xs
⊢ x = y

case neg
α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
x y : α
h : applyId (xs.zip ys) x = applyId (xs.zip ys) y
hx : x ∈ xs
hy : y ∉ xs
⊢ x = y

case pos
α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
x y : α
h : applyId (xs.zip ys) x = applyId (xs.zip ys) y
hx : x ∉ xs
hy : y ∈ xs
⊢ x = y

case neg
α : Type u
β : Type v
γ : Sort w
inst✝ : DecidableEq α
xs ys : List α
h₀ : xs.Nodup
h₁ : xs ~ ys
x y : α
h : applyId (xs.zip ys) x = applyId (xs.zip ys) y
hx : x ∉ xs
hy : y ∉ xs
⊢ x = y
tactic: by_cases hx : x ∈ xs <;> by_cases hy : y ∈ xs
Theorem: AddSemiconjBy.of_map
File: Mathlib/Algebra/Group/Commute/Hom.lean

Proof steps:
state_before: F : Type u_1
M : Type u_2
N : Type u_3
inst✝³ : Mul M
inst✝² : Mul N
a x y : M
inst✝¹ : FunLike F M N
inst✝ : MulHomClass F M N
f : F
hf : Function.Injective ⇑f
h : SemiconjBy (f a) (f x) (f y)
⊢ f (a * x) = f (y * a)
state_after: no goals
tactic: simpa only [SemiconjBy, map_mul] using h
Theorem: IsPrimitiveRoot.zeta_sub_one_prime'
File: Mathlib/NumberTheory/Cyclotomic/Rat.lean

Proof steps:
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
h : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
⊢ Prime (hζ.toInteger - 1)
state_after: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
h : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
⊢ IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
tactic: convert zeta_sub_one_prime (k := 0) (by simpa only [zero_add, pow_one])
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
h : IsCyclotomicExtension {p} ℚ K
hζ : IsPrimitiveRoot ζ ↑p
⊢ IsCyclotomicExtension {p ^ (0 + 1)} ℚ K
state_after: no goals
tactic: simpa only [zero_add, pow_one]
Theorem: Sym2.rel_iff
File: Mathlib/Data/Sym/Sym2.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
x y z w : α
⊢ Rel α (x, y) (z, w) ↔ x = z ∧ y = w ∨ x = w ∧ y = z
state_after: no goals
tactic: simp
Theorem: NNReal.nndist_zero_eq_val'
File: Mathlib/Topology/MetricSpace/Pseudo/Constructions.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
z : ℝ≥0
⊢ nndist z 0 = z
state_after: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
z : ℝ≥0
⊢ nndist 0 z = z
tactic: rw [nndist_comm]
state_before: α : Type u_1
β : Type u_2
inst✝ : PseudoMetricSpace α
z : ℝ≥0
⊢ nndist 0 z = z
state_after: no goals
tactic: exact NNReal.nndist_zero_eq_val z
Theorem: LDL.lowerInv_triangular
File: Mathlib/LinearAlgebra/Matrix/LDL.lean

Proof steps:
state_before: 𝕜 : Type u_1
inst✝⁴ : RCLike 𝕜
n : Type u_2
inst✝³ : LinearOrder n
inst✝² : IsWellOrder n fun x x_1 => x < x_1
inst✝¹ : LocallyFiniteOrderBot n
S : Matrix n n 𝕜
inst✝ : Fintype n
hS : S.PosDef
i j : n
hij : i < j
⊢ lowerInv hS i j = 0
state_after: no goals
tactic: rw [←
    @gramSchmidt_triangular 𝕜 (n → 𝕜) _ (_ : _) (InnerProductSpace.ofMatrix hS.transpose) n _ _ _
      i j hij (Pi.basisFun 𝕜 n),
    Pi.basisFun_repr, LDL.lowerInv]
Theorem: Metric.thickening_iUnion
File: Mathlib/Topology/MetricSpace/Thickening.lean

Proof steps:
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝ : PseudoEMetricSpace α
δ✝ ε : ℝ
s t : Set α
x : α
δ : ℝ
f : ι → Set α
⊢ thickening δ (⋃ i, f i) = ⋃ i, thickening δ (f i)
state_after: no goals
tactic: simp_rw [thickening, infEdist_iUnion, iInf_lt_iff, setOf_exists]
Theorem: Irrational.beattySeq_symmDiff_beattySeq_pos
File: Mathlib/NumberTheory/Rayleigh.lean

Proof steps:
state_before: r s : ℝ
hrs : r.IsConjExponent s
hr : Irrational r
⊢ {x | ∃ k > 0, beattySeq r k = x} ∆ {x | ∃ k > 0, beattySeq s k = x} = {n | 0 < n}
state_after: no goals
tactic: rw [← hr.beattySeq'_pos_eq, beattySeq'_symmDiff_beattySeq_pos hrs]
Theorem: openSegment_same
File: Mathlib/Analysis/Convex/Segment.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁷ : OrderedRing 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : AddCommGroup G
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
x z : E
x✝ : z ∈ openSegment 𝕜 x x
a b : 𝕜
left✝¹ : 0 < a
left✝ : 0 < b
hab : a + b = 1
hz : a • x + b • x = z
⊢ z ∈ {x}
state_after: no goals
tactic: simpa only [← add_smul, mem_singleton_iff, hab, one_smul, eq_comm] using hz
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁷ : OrderedRing 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : AddCommGroup G
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
x z : E
h : z = x
⊢ z ∈ openSegment 𝕜 x x
state_after: case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁷ : OrderedRing 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : AddCommGroup G
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
x z : E
h : z = x
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
⊢ z ∈ openSegment 𝕜 x x
tactic: obtain ⟨a, ha₀, ha₁⟩ := DenselyOrdered.dense (0 : 𝕜) 1 zero_lt_one
state_before: case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁷ : OrderedRing 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : AddCommGroup G
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
x z : E
h : z = x
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
⊢ z ∈ openSegment 𝕜 x x
state_after: case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁷ : OrderedRing 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : AddCommGroup G
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
x z : E
h : z = x
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
⊢ a • x + (1 - a) • x = z
tactic: refine ⟨a, 1 - a, ha₀, sub_pos_of_lt ha₁, add_sub_cancel _ _, ?_⟩
state_before: case intro.intro
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁷ : OrderedRing 𝕜
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : AddCommGroup G
inst✝³ : Module 𝕜 E
inst✝² : Module 𝕜 F
inst✝¹ : Nontrivial 𝕜
inst✝ : DenselyOrdered 𝕜
x z : E
h : z = x
a : 𝕜
ha₀ : 0 < a
ha₁ : a < 1
⊢ a • x + (1 - a) • x = z
state_after: no goals
tactic: rw [← add_smul, add_sub_cancel, one_smul, h]
Theorem: Polynomial.aeval_eq_smeval
File: Mathlib/Algebra/Polynomial/Smeval.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (aeval x) p = p.smeval x
state_after: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => (fun r => r • 1) a * x ^ e) = p.sum (smul_pow x)
tactic: rw [aeval_def, eval₂_def, Algebra.algebraMap_eq_smul_one', smeval_def]
state_before: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => (fun r => r • 1) a * x ^ e) = p.sum (smul_pow x)
state_after: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => a • x ^ e) = p.sum (smul_pow x)
tactic: simp only [Algebra.smul_mul_assoc, one_mul]
state_before: R : Type u_1
inst✝² : CommSemiring R
S : Type u_2
inst✝¹ : Semiring S
inst✝ : Algebra R S
x : S
p : R[X]
⊢ (p.sum fun e a => a • x ^ e) = p.sum (smul_pow x)
state_after: no goals
tactic: exact rfl
Theorem: CliffordAlgebra.toProd_one_tmul_ι
File: Mathlib/LinearAlgebra/CliffordAlgebra/Prod.lean

Proof steps:
state_before: R : Type u_1
M₁ : Type u_2
M₂ : Type u_3
N : Type u_4
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M₁
inst✝⁴ : AddCommGroup M₂
inst✝³ : AddCommGroup N
inst✝² : Module R M₁
inst✝¹ : Module R M₂
inst✝ : Module R N
Q₁ : QuadraticForm R M₁
Q₂ : QuadraticForm R M₂
Qₙ : QuadraticForm R N
m₂ : M₂
⊢ (toProd Q₁ Q₂) (1 ᵍ⊗ₜ[R] (ι Q₂) m₂) = (ι (QuadraticMap.prod Q₁ Q₂)) (0, m₂)
state_after: no goals
tactic: rw [toProd, GradedTensorProduct.lift_tmul, map_one, one_mul, map_apply_ι,
    QuadraticMap.Isometry.inr_apply]