ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Matrix.det_fin_two
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

Proof steps:
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix (Fin 2) (Fin 2) R
⊢ A.det = A 0 0 * A 1 1 - A 0 1 * A 1 0
state_after: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix (Fin 2) (Fin 2) R
⊢ (-1) ^ 0 * A 0 0 * A 1 1 + (-1) ^ (0 + 1) * A 0 1 * A 1 0 = A 0 0 * A 1 1 - A 0 1 * A 1 0
tactic: simp only [det_succ_row_zero, det_unique, Fin.default_eq_zero, submatrix_apply,
    Fin.succ_zero_eq_one, Fin.sum_univ_succ, Fin.val_zero, Fin.zero_succAbove, univ_unique,
    Fin.val_succ, Fin.coe_fin_one, Fin.succ_succAbove_zero, sum_singleton]
state_before: m : Type u_1
n : Type u_2
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
A : Matrix (Fin 2) (Fin 2) R
⊢ (-1) ^ 0 * A 0 0 * A 1 1 + (-1) ^ (0 + 1) * A 0 1 * A 1 0 = A 0 0 * A 1 1 - A 0 1 * A 1 0
state_after: no goals
tactic: ring
Theorem: Int.ModEq.of_mul_left
File: Mathlib/Data/Int/ModEq.lean

Proof steps:
state_before: m✝ n a b c d m : ℤ
h : a ≡ b [ZMOD m * n]
⊢ a ≡ b [ZMOD n]
state_after: m✝ n a b c d m : ℤ
h : m * n ∣ b - a
⊢ n ∣ b - a
tactic: rw [modEq_iff_dvd] at *
state_before: m✝ n a b c d m : ℤ
h : m * n ∣ b - a
⊢ n ∣ b - a
state_after: no goals
tactic: exact (dvd_mul_left n m).trans h
Theorem: ConcaveOn.antitoneOn_derivWithin
File: Mathlib/Analysis/Convex/Deriv.lean

Proof steps:
state_before: S : Set ℝ
f : ℝ → ℝ
x y f' : ℝ
hfc : ConcaveOn ℝ S f
hfd : DifferentiableOn ℝ f S
⊢ AntitoneOn (derivWithin f S) S
state_after: S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConcaveOn ℝ S f
hfd : DifferentiableOn ℝ f S
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
⊢ derivWithin f S y ≤ derivWithin f S x
tactic: intro x hx y hy hxy
state_before: S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConcaveOn ℝ S f
hfd : DifferentiableOn ℝ f S
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
⊢ derivWithin f S y ≤ derivWithin f S x
state_after: case inl
S : Set ℝ
f : ℝ → ℝ
x✝ y f' : ℝ
hfc : ConcaveOn ℝ S f
hfd : DifferentiableOn ℝ f S
x : ℝ
hx hy : x ∈ S
hxy : x ≤ x
⊢ derivWithin f S x ≤ derivWithin f S x

case inr
S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConcaveOn ℝ S f
hfd : DifferentiableOn ℝ f S
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
hxy' : x < y
⊢ derivWithin f S y ≤ derivWithin f S x
tactic: rcases eq_or_lt_of_le hxy with rfl | hxy'
state_before: case inr
S : Set ℝ
f : ℝ → ℝ
x✝ y✝ f' : ℝ
hfc : ConcaveOn ℝ S f
hfd : DifferentiableOn ℝ f S
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x ≤ y
hxy' : x < y
⊢ derivWithin f S y ≤ derivWithin f S x
state_after: no goals
tactic: exact (hfc.derivWithin_le_slope hx hy hxy' (hfd y hy)).trans
    (hfc.slope_le_derivWithin hx hy hxy' (hfd x hx))
Theorem: UpperHalfPlane.tanh_half_dist
File: Mathlib/Analysis/Complex/UpperHalfPlane/Metric.lean

Proof steps:
state_before: z✝ w✝ : ℍ
r R : ℝ
z w : ℍ
⊢ tanh (dist z w / 2) = dist ↑z ↑w / dist (↑z) ((starRingEnd ℂ) ↑w)
state_after: z✝ w✝ : ℍ
r R : ℝ
z w : ℍ
⊢ 2 * √(z.im * w.im) ≠ 0
tactic: rw [tanh_eq_sinh_div_cosh, sinh_half_dist, cosh_half_dist, div_div_div_comm, div_self, div_one]
state_before: z✝ w✝ : ℍ
r R : ℝ
z w : ℍ
⊢ 2 * √(z.im * w.im) ≠ 0
state_after: no goals
tactic: positivity
Theorem: Ordinal.apply_lt_nfpBFamily
File: Mathlib/SetTheory/Ordinal/FixedPoint.lean

Proof steps:
state_before: o : Ordinal.{u}
f : (b : Ordinal.{u}) → b < o → Ordinal.{max u v} → Ordinal.{max u v}
H : ∀ (i : Ordinal.{u}) (hi : i < o), IsNormal (f i hi)
a b : Ordinal.{max v u}
hb : b < o.nfpBFamily f a
i : Ordinal.{u}
hi : i < o
⊢ f i hi b < o.nfpBFamily f a
state_after: o : Ordinal.{u}
f : (b : Ordinal.{u}) → b < o → Ordinal.{max u v} → Ordinal.{max u v}
H : ∀ (i : Ordinal.{u}) (hi : i < o), IsNormal (f i hi)
a b : Ordinal.{max v u}
hb : b < o.nfpBFamily f a
i : Ordinal.{u}
hi : i < o
⊢ o.familyOfBFamily f (enum (fun x x_1 => x < x_1) i ⋯) b < o.nfpBFamily f a
tactic: rw [← familyOfBFamily_enum o f]
state_before: o : Ordinal.{u}
f : (b : Ordinal.{u}) → b < o → Ordinal.{max u v} → Ordinal.{max u v}
H : ∀ (i : Ordinal.{u}) (hi : i < o), IsNormal (f i hi)
a b : Ordinal.{max v u}
hb : b < o.nfpBFamily f a
i : Ordinal.{u}
hi : i < o
⊢ o.familyOfBFamily f (enum (fun x x_1 => x < x_1) i ⋯) b < o.nfpBFamily f a
state_after: no goals
tactic: apply apply_lt_nfpFamily (fun _ => H _ _) hb
Theorem: Multiset.Disjoint.dedup_add
File: Mathlib/Data/Multiset/Dedup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
s t : Multiset α
h : s.Disjoint t
⊢ (s + t).dedup = s.dedup + t.dedup
state_after: case h
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
a✝ b✝ : List α
h : Disjoint (Quot.mk Setoid.r a✝) (Quot.mk Setoid.r b✝)
⊢ (Quot.mk Setoid.r a✝ + Quot.mk Setoid.r b✝).dedup = dedup (Quot.mk Setoid.r a✝) + dedup (Quot.mk Setoid.r b✝)
tactic: induction s, t using Quot.induction_on₂
state_before: case h
α : Type u_1
β : Type u_2
inst✝ : DecidableEq α
a✝ b✝ : List α
h : Disjoint (Quot.mk Setoid.r a✝) (Quot.mk Setoid.r b✝)
⊢ (Quot.mk Setoid.r a✝ + Quot.mk Setoid.r b✝).dedup = dedup (Quot.mk Setoid.r a✝) + dedup (Quot.mk Setoid.r b✝)
state_after: no goals
tactic: exact congr_arg ((↑) : List α → Multiset α) <| List.Disjoint.dedup_append h
Theorem: gal_X_sub_C_isSolvable
File: Mathlib/FieldTheory/AbelRuffini.lean

Proof steps:
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
x : F
⊢ IsSolvable (X - C x).Gal
state_after: no goals
tactic: infer_instance
Theorem: NumberField.InfinitePlace.mk_conjugate_eq
File: Mathlib/NumberTheory/NumberField/Embeddings.lean

Proof steps:
state_before: k : Type u_1
inst✝² : Field k
K : Type u_2
inst✝¹ : Field K
F : Type u_3
inst✝ : Field F
φ : K →+* ℂ
⊢ mk (ComplexEmbedding.conjugate φ) = mk φ
state_after: k : Type u_1
inst✝² : Field k
K : Type u_2
inst✝¹ : Field K
F : Type u_3
inst✝ : Field F
φ : K →+* ℂ
x : K
⊢ (mk (ComplexEmbedding.conjugate φ)) x = (mk φ) x
tactic: refine DFunLike.ext _ _ (fun x => ?_)
state_before: k : Type u_1
inst✝² : Field k
K : Type u_2
inst✝¹ : Field K
F : Type u_3
inst✝ : Field F
φ : K →+* ℂ
x : K
⊢ (mk (ComplexEmbedding.conjugate φ)) x = (mk φ) x
state_after: no goals
tactic: rw [apply, apply, ComplexEmbedding.conjugate_coe_eq, Complex.abs_conj]
Theorem: Commute.mul_neg_geom_sum₂
File: Mathlib/Algebra/GeomSum.lean

Proof steps:
state_before: α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ (y - x) * ∑ i ∈ range n, x ^ i * y ^ (n - 1 - i) = y ^ n - x ^ n
state_after: case a
α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ MulOpposite.op ((y - x) * ∑ i ∈ range n, x ^ i * y ^ (n - 1 - i)) = MulOpposite.op (y ^ n - x ^ n)
tactic: apply op_injective
state_before: case a
α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ MulOpposite.op ((y - x) * ∑ i ∈ range n, x ^ i * y ^ (n - 1 - i)) = MulOpposite.op (y ^ n - x ^ n)
state_after: case a
α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ MulOpposite.op (∑ i ∈ range n, x ^ i * y ^ (n - 1 - i)) * (MulOpposite.op y - MulOpposite.op x) =
    MulOpposite.op y ^ n - MulOpposite.op x ^ n
tactic: simp only [op_mul, op_sub, op_geom_sum₂, op_pow]
state_before: case a
α : Type u
inst✝ : Ring α
x y : α
h : Commute x y
n : ℕ
⊢ MulOpposite.op (∑ i ∈ range n, x ^ i * y ^ (n - 1 - i)) * (MulOpposite.op y - MulOpposite.op x) =
    MulOpposite.op y ^ n - MulOpposite.op x ^ n
state_after: no goals
tactic: simp [(Commute.op h.symm).geom_sum₂_mul n]
Theorem: IsScalarTower.algebraMap_eq
File: Mathlib/Algebra/Algebra/Tower.lean

Proof steps:
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
M : Type v₁
inst✝¹⁰ : CommSemiring R
inst✝⁹ : CommSemiring S
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S A
inst✝⁴ : Algebra S B
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S B
x : R
⊢ (algebraMap R A) x = ((algebraMap S A).comp (algebraMap R S)) x
state_after: no goals
tactic: simp_rw [RingHom.comp_apply, Algebra.algebraMap_eq_smul_one, smul_assoc, one_smul]
Theorem: tendsto_norm_atTop_iff_cobounded
File: Mathlib/Analysis/Normed/Group/Bounded.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
f : α → E
l : Filter α
⊢ Tendsto (fun x => ‖f x‖) l atTop ↔ Tendsto f l (cobounded E)
state_after: α : Type u_1
ι : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
f : α → E
l : Filter α
⊢ Tendsto (fun x => ‖f x‖) l atTop ↔ Tendsto (norm ∘ f) l atTop
tactic: rw [← comap_norm_atTop', tendsto_comap_iff]
state_before: α : Type u_1
ι : Type u_2
E : Type u_3
F : Type u_4
G : Type u_5
inst✝² : SeminormedGroup E
inst✝¹ : SeminormedGroup F
inst✝ : SeminormedGroup G
s : Set E
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
f : α → E
l : Filter α
⊢ Tendsto (fun x => ‖f x‖) l atTop ↔ Tendsto (norm ∘ f) l atTop
state_after: no goals
tactic: rfl
Theorem: div_sub'
File: Mathlib/Algebra/Field/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
K : Type u_3
inst✝ : Field K
a b c : K
hc : c ≠ 0
⊢ a / c - b = (a - c * b) / c
state_after: no goals
tactic: simpa using div_sub_div a b hc one_ne_zero
Theorem: SimpleGraph.partitionable_iff_colorable
File: Mathlib/Combinatorics/SimpleGraph/Partition.lean

Proof steps:
state_before: V : Type u
G : SimpleGraph V
n : ℕ
⊢ G.Partitionable n ↔ G.Colorable n
state_after: case mp
V : Type u
G : SimpleGraph V
n : ℕ
⊢ G.Partitionable n → G.Colorable n

case mpr
V : Type u
G : SimpleGraph V
n : ℕ
⊢ G.Colorable n → G.Partitionable n
tactic: constructor
Theorem: Complex.ofReal_cpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

Proof steps:
state_before: x : ℝ
hx : 0 ≤ x
y : ℝ
⊢ ↑(x ^ y) = ↑x ^ ↑y
state_after: x : ℝ
hx : 0 ≤ x
y : ℝ
⊢ ↑(if x = 0 then if y = 0 then 1 else 0 else rexp (Real.log x * y)) =
    if x = 0 then if y = 0 then 1 else 0 else cexp (log ↑x * ↑y)
tactic: simp only [Real.rpow_def_of_nonneg hx, Complex.cpow_def, ofReal_eq_zero]
state_before: x : ℝ
hx : 0 ≤ x
y : ℝ
⊢ ↑(if x = 0 then if y = 0 then 1 else 0 else rexp (Real.log x * y)) =
    if x = 0 then if y = 0 then 1 else 0 else cexp (log ↑x * ↑y)
state_after: no goals
tactic: split_ifs <;>
    simp [Complex.ofReal_log hx]
Theorem: CoxeterSystem.length_simple
File: Mathlib/GroupTheory/Coxeter/Length.lean

Proof steps:
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
⊢ cs.length (cs.simple i) = 1
state_after: case h₁
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
⊢ cs.length (cs.simple i) ≤ 1

case h₂
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
i : B
⊢ 1 ≤ cs.length (cs.simple i)
tactic: apply Nat.le_antisymm
Theorem: EuclideanGeometry.reflection_eq_iff_orthogonalProjection_eq
File: Mathlib/Geometry/Euclidean/Basic.lean

Proof steps:
state_before: V : Type u_1
P : Type u_2
inst✝⁷ : NormedAddCommGroup V
inst✝⁶ : InnerProductSpace ℝ V
inst✝⁵ : MetricSpace P
inst✝⁴ : NormedAddTorsor V P
s₁ s₂ : AffineSubspace ℝ P
inst✝³ : Nonempty ↥s₁
inst✝² : Nonempty ↥s₂
inst✝¹ : HasOrthogonalProjection s₁.direction
inst✝ : HasOrthogonalProjection s₂.direction
p : P
⊢ (reflection s₁) p = (reflection s₂) p ↔ ↑((orthogonalProjection s₁) p) = ↑((orthogonalProjection s₂) p)
state_after: V : Type u_1
P : Type u_2
inst✝⁷ : NormedAddCommGroup V
inst✝⁶ : InnerProductSpace ℝ V
inst✝⁵ : MetricSpace P
inst✝⁴ : NormedAddTorsor V P
s₁ s₂ : AffineSubspace ℝ P
inst✝³ : Nonempty ↥s₁
inst✝² : Nonempty ↥s₂
inst✝¹ : HasOrthogonalProjection s₁.direction
inst✝ : HasOrthogonalProjection s₂.direction
p : P
⊢ ↑((orthogonalProjection s₁) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₁) p) =
      ↑((orthogonalProjection s₂) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₂) p) ↔
    ↑((orthogonalProjection s₁) p) = ↑((orthogonalProjection s₂) p)
tactic: rw [reflection_apply, reflection_apply]
state_before: V : Type u_1
P : Type u_2
inst✝⁷ : NormedAddCommGroup V
inst✝⁶ : InnerProductSpace ℝ V
inst✝⁵ : MetricSpace P
inst✝⁴ : NormedAddTorsor V P
s₁ s₂ : AffineSubspace ℝ P
inst✝³ : Nonempty ↥s₁
inst✝² : Nonempty ↥s₂
inst✝¹ : HasOrthogonalProjection s₁.direction
inst✝ : HasOrthogonalProjection s₂.direction
p : P
⊢ ↑((orthogonalProjection s₁) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₁) p) =
      ↑((orthogonalProjection s₂) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₂) p) ↔
    ↑((orthogonalProjection s₁) p) = ↑((orthogonalProjection s₂) p)
state_after: case mp
V : Type u_1
P : Type u_2
inst✝⁷ : NormedAddCommGroup V
inst✝⁶ : InnerProductSpace ℝ V
inst✝⁵ : MetricSpace P
inst✝⁴ : NormedAddTorsor V P
s₁ s₂ : AffineSubspace ℝ P
inst✝³ : Nonempty ↥s₁
inst✝² : Nonempty ↥s₂
inst✝¹ : HasOrthogonalProjection s₁.direction
inst✝ : HasOrthogonalProjection s₂.direction
p : P
⊢ ↑((orthogonalProjection s₁) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₁) p) =
      ↑((orthogonalProjection s₂) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₂) p) →
    ↑((orthogonalProjection s₁) p) = ↑((orthogonalProjection s₂) p)

case mpr
V : Type u_1
P : Type u_2
inst✝⁷ : NormedAddCommGroup V
inst✝⁶ : InnerProductSpace ℝ V
inst✝⁵ : MetricSpace P
inst✝⁴ : NormedAddTorsor V P
s₁ s₂ : AffineSubspace ℝ P
inst✝³ : Nonempty ↥s₁
inst✝² : Nonempty ↥s₂
inst✝¹ : HasOrthogonalProjection s₁.direction
inst✝ : HasOrthogonalProjection s₂.direction
p : P
⊢ ↑((orthogonalProjection s₁) p) = ↑((orthogonalProjection s₂) p) →
    ↑((orthogonalProjection s₁) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₁) p) =
      ↑((orthogonalProjection s₂) p) -ᵥ p +ᵥ ↑((orthogonalProjection s₂) p)
tactic: constructor
Theorem: Polynomial.EisensteinCriterionAux.le_natDegree_of_map_eq_mul_X_pow
File: Mathlib/RingTheory/EisensteinCriterion.lean

Proof steps:
state_before: R : Type u_1
inst✝ : CommRing R
n : ℕ
P : Ideal R
hP : P.IsPrime
q : R[X]
c : (R ⧸ P)[X]
hq : map (mk P) q = c * X ^ n
hc0 : c.degree = 0
⊢ ↑n = (map (mk P) q).degree
state_after: no goals
tactic: rw [hq, degree_mul, hc0, zero_add, degree_pow, degree_X, nsmul_one]
Theorem: Set.IsPWO.submonoid_closure
File: Mathlib/Algebra/Group/Submonoid/Pointwise.lean

Proof steps:
state_before: α : Type u_1
G : Type u_2
M : Type u_3
R : Type u_4
A : Type u_5
inst✝² : Monoid M
inst✝¹ : AddMonoid A
inst✝ : OrderedCancelCommMonoid α
s : Set α
hpos : ∀ x ∈ s, 1 ≤ x
h : s.IsPWO
⊢ (↑(Submonoid.closure s)).IsPWO
state_after: α : Type u_1
G : Type u_2
M : Type u_3
R : Type u_4
A : Type u_5
inst✝² : Monoid M
inst✝¹ : AddMonoid A
inst✝ : OrderedCancelCommMonoid α
s : Set α
hpos : ∀ x ∈ s, 1 ≤ x
h : s.IsPWO
⊢ (List.prod '' {l | ∀ x ∈ l, x ∈ s}).IsPWO
tactic: rw [Submonoid.closure_eq_image_prod]
state_before: α : Type u_1
G : Type u_2
M : Type u_3
R : Type u_4
A : Type u_5
inst✝² : Monoid M
inst✝¹ : AddMonoid A
inst✝ : OrderedCancelCommMonoid α
s : Set α
hpos : ∀ x ∈ s, 1 ≤ x
h : s.IsPWO
⊢ ∀ a₁ ∈ {l | ∀ x ∈ l, x ∈ s},
    ∀ a₂ ∈ {l | ∀ x ∈ l, x ∈ s}, List.SublistForall₂ (fun x x_1 => x ≤ x_1) a₁ a₂ → a₁.prod ≤ a₂.prod
state_after: no goals
tactic: exact fun l1 _ l2 hl2 h12 => h12.prod_le_prod' fun x hx => hpos x <| hl2 x hx
Theorem: Set.pairwiseDisjoint_range_iff
File: Mathlib/Data/Set/Pairwise/Basic.lean

Proof steps:
state_before: α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
r p q : α✝ → α✝ → Prop
inst✝¹ : PartialOrder α✝
inst✝ : OrderBot α✝
s t : Set ι
f✝ g : ι → α✝
α : Type u_6
β : Type u_7
f : α → Set β
⊢ (range f).PairwiseDisjoint id ↔ ∀ (x y : α), f x = f y ∨ Disjoint (f x) (f y)
state_after: case mp
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
r p q : α✝ → α✝ → Prop
inst✝¹ : PartialOrder α✝
inst✝ : OrderBot α✝
s t : Set ι
f✝ g : ι → α✝
α : Type u_6
β : Type u_7
f : α → Set β
⊢ (range f).PairwiseDisjoint id → ∀ (x y : α), f x = f y ∨ Disjoint (f x) (f y)

case mpr
α✝ : Type u_1
β✝ : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
r p q : α✝ → α✝ → Prop
inst✝¹ : PartialOrder α✝
inst✝ : OrderBot α✝
s t : Set ι
f✝ g : ι → α✝
α : Type u_6
β : Type u_7
f : α → Set β
⊢ (∀ (x y : α), f x = f y ∨ Disjoint (f x) (f y)) → (range f).PairwiseDisjoint id
tactic: constructor
Theorem: MeasureTheory.IsFundamentalDomain.quotientMeasureEqMeasurePreimage_quotientMeasure
File: Mathlib/MeasureTheory/Group/FundamentalDomain.lean

Proof steps:
state_before: G : Type u_1
H : Type u_2
α : Type u_3
β : Type u_4
E : Type u_5
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
ν : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : SMulInvariantMeasure G α ν
inst✝ : MeasurableSMul G α
s : Set α
fund_dom_s : IsFundamentalDomain G s ν
t : Set α
fund_dom_t : IsFundamentalDomain G t ν
⊢ Measure.map (Quotient.mk α_mod_G) (ν.restrict s) = Measure.map (Quotient.mk α_mod_G) (ν.restrict t)
state_after: no goals
tactic: rw [fund_dom_s.quotientMeasure_eq _ fund_dom_t]
Theorem: MvPolynomial.degrees_sub
File: Mathlib/Algebra/MvPolynomial/CommRing.lean

Proof steps:
state_before: R : Type u
S : Type v
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommRing R
p✝ q✝ : MvPolynomial σ R
inst✝ : DecidableEq σ
p q : MvPolynomial σ R
⊢ (p - q).degrees ≤ p.degrees ⊔ q.degrees
state_after: no goals
tactic: simpa only [sub_eq_add_neg] using le_trans (degrees_add p (-q)) (by rw [degrees_neg])
Theorem: Polynomial.sum_zero_index
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]
S : Type u_1
inst✝ : AddCommMonoid S
f : ℕ → R → S
⊢ sum 0 f = 0
state_after: no goals
tactic: simp [sum]
Theorem: UpperSet.infIrred_Ici
File: Mathlib/Order/Birkhoff.lean

Proof steps:
state_before: α : Type u_1
inst✝ : PartialOrder α
s : UpperSet α
a : α
⊢ InfIrred (Ici a)
state_after: α : Type u_1
inst✝ : PartialOrder α
s✝ : UpperSet α
a : α
s t : UpperSet α
hst : s ⊓ t = Ici a
⊢ s = Ici a ∨ t = Ici a
tactic: refine ⟨fun h ↦ Ici_ne_top h.eq_top, fun s t hst ↦ ?_⟩
state_before: α : Type u_1
inst✝ : PartialOrder α
s✝ : UpperSet α
a : α
s t : UpperSet α
hst : s ⊓ t = Ici a
⊢ s = Ici a ∨ t = Ici a
state_after: α : Type u_1
inst✝ : PartialOrder α
s✝ : UpperSet α
a : α
s t : UpperSet α
hst : s ⊓ t = Ici a
this : a ∈ Ici a
⊢ s = Ici a ∨ t = Ici a
tactic: have := mem_Ici_iff.2 (le_refl a)
state_before: α : Type u_1
inst✝ : PartialOrder α
s✝ : UpperSet α
a : α
s t : UpperSet α
hst : s ⊓ t = Ici a
this : a ∈ Ici a
⊢ s = Ici a ∨ t = Ici a
state_after: α : Type u_1
inst✝ : PartialOrder α
s✝ : UpperSet α
a : α
s t : UpperSet α
hst : s ⊓ t = Ici a
this : a ∈ s ⊓ t
⊢ s = Ici a ∨ t = Ici a
tactic: rw [← hst] at this
state_before: α : Type u_1
inst✝ : PartialOrder α
s✝ : UpperSet α
a : α
s t : UpperSet α
hst : s ⊓ t = Ici a
this : a ∈ s ⊓ t
⊢ s = Ici a ∨ t = Ici a
state_after: no goals
tactic: exact this.imp (fun ha ↦ le_antisymm (le_Ici.2 ha) <| hst.ge.trans inf_le_left) fun ha ↦
      le_antisymm (le_Ici.2 ha) <| hst.ge.trans inf_le_right
Theorem: ULift.down_inj
File: Mathlib/Logic/Function/ULift.lean

Proof steps:
state_before: α : Type u_1
a b : ULift.{u_2, u_1} α
h : a = b
⊢ a.down = b.down
state_after: no goals
tactic: rw [h]
Theorem: Class.ofSet.inj
File: Mathlib/SetTheory/ZFC/Basic.lean

Proof steps:
state_before: x y : ZFSet
h : ↑x = ↑y
z : ZFSet
⊢ z ∈ x ↔ z ∈ y
state_after: x y : ZFSet
h : ↑x = ↑y
z : ZFSet
⊢ ↑x z ↔ ↑y z
tactic: change (x : Class.{u}) z ↔ (y : Class.{u}) z
state_before: x y : ZFSet
h : ↑x = ↑y
z : ZFSet
⊢ ↑x z ↔ ↑y z
state_after: no goals
tactic: rw [h]
Theorem: PFunctor.M.ext_aux
File: Mathlib/Data/PFunctor/Univariate/M.lean

Proof steps:
state_before: F : PFunctor.{u}
X : Type u_1
f : X → ↑F X
inst✝¹ : Inhabited F.M
inst✝ : DecidableEq F.A
n : ℕ
x y z : F.M
hx : Agree' n z x
hy : Agree' n z y
hrec : ∀ (ps : Path F), n = length ps → iselect ps x = iselect ps y
⊢ x.approx (n + 1) = y.approx (n + 1)
state_after: case zero
F : PFunctor.{u}
X : Type u_1
f : X → ↑F X
inst✝¹ : Inhabited F.M
inst✝ : DecidableEq F.A
x y z : F.M
hx : Agree' 0 z x
hy : Agree' 0 z y
hrec : ∀ (ps : Path F), 0 = length ps → iselect ps x = iselect ps y
⊢ x.approx (0 + 1) = y.approx (0 + 1)

case succ
F : PFunctor.{u}
X : Type u_1
f : X → ↑F X
inst✝¹ : Inhabited F.M
inst✝ : DecidableEq F.A
n : ℕ
n_ih :
  ∀ (x y z : F.M),
    Agree' n z x →
      Agree' n z y →
        (∀ (ps : Path F), n = length ps → iselect ps x = iselect ps y) → x.approx (n + 1) = y.approx (n + 1)
x y z : F.M
hx : Agree' (n + 1) z x
hy : Agree' (n + 1) z y
hrec : ∀ (ps : Path F), n + 1 = length ps → iselect ps x = iselect ps y
⊢ x.approx (n + 1 + 1) = y.approx (n + 1 + 1)
tactic: induction' n with n n_ih generalizing x y z
Theorem: Monoid.CoprodI.NeWord.replaceHead_head
File: Mathlib/GroupTheory/CoprodI.lean

Proof steps:
state_before: ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
i j : ι
x : M i
hnotone : x ≠ 1
w : NeWord M i j
⊢ (replaceHead x hnotone w).head = x
state_after: case singleton
ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
i j i✝ : ι
x✝ : M i✝
a✝ : x✝ ≠ 1
x : M i✝
hnotone : x ≠ 1
⊢ (replaceHead x hnotone (singleton x✝ a✝)).head = x

case append
ι : Type u_1
M : ι → Type u_2
inst✝¹ : (i : ι) → Monoid (M i)
N : Type u_3
inst✝ : Monoid N
i j i✝ j✝ k✝ l✝ : ι
_w₁✝ : NeWord M i✝ j✝
_hne✝ : j✝ ≠ k✝
_w₂✝ : NeWord M k✝ l✝
_w₁_ih✝ : ∀ (x : M i✝) (hnotone : x ≠ 1), (replaceHead x hnotone _w₁✝).head = x
_w₂_ih✝ : ∀ (x : M k✝) (hnotone : x ≠ 1), (replaceHead x hnotone _w₂✝).head = x
x : M i✝
hnotone : x ≠ 1
⊢ (replaceHead x hnotone (_w₁✝.append _hne✝ _w₂✝)).head = x
tactic: induction w
Theorem: RatFunc.coe_ne_zero
File: Mathlib/RingTheory/LaurentSeries.lean

Proof steps:
state_before: R : Type u_1
F : Type u
inst✝ : Field F
p q : F[X]
f✝ g : RatFunc F
f : F[X]
hf : f ≠ 0
⊢ ↑f ≠ 0
state_after: no goals
tactic: simp only [ne_eq, Polynomial.coe_eq_zero_iff, hf, not_false_eq_true]
Theorem: UniqueFactorizationMonoid.dvd_of_mem_normalizedFactors
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

Proof steps:
state_before: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a p : α
H : p ∈ normalizedFactors a
⊢ p ∣ a
state_after: case pos
α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a p : α
H : p ∈ normalizedFactors a
hcases : a = 0
⊢ p ∣ a

case neg
α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a p : α
H : p ∈ normalizedFactors a
hcases : ¬a = 0
⊢ p ∣ a
tactic: by_cases hcases : a = 0
Theorem: CategoryTheory.Functor.sectionsFunctor_map_coe
File: Mathlib/CategoryTheory/Types.lean

Proof steps:
state_before: J : Type u
inst✝ : Category.{v, u} J
F G : J ⥤ Type w
φ : F ⟶ G
x : (fun F => ↑F.sections) F
j j' : J
f : j ⟶ j'
⊢ (F.map f ≫ φ.app j') (↑x j) = (fun j => φ.app j (↑x j)) j'
state_after: no goals
tactic: simp [x.2 f]
Theorem: Ring.not_isField_iff_exists_ideal_bot_lt_and_lt_top
File: Mathlib/RingTheory/Ideal/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
R : Type u_1
inst✝¹ : CommSemiring R
inst✝ : Nontrivial R
⊢ ¬IsField R ↔ ∃ I, ⊥ < I ∧ I < ⊤
state_after: case mp
α : Type u
β : Type v
R : Type u_1
inst✝¹ : CommSemiring R
inst✝ : Nontrivial R
⊢ ¬IsField R → ∃ I, ⊥ < I ∧ I < ⊤

case mpr
α : Type u
β : Type v
R : Type u_1
inst✝¹ : CommSemiring R
inst✝ : Nontrivial R
⊢ (∃ I, ⊥ < I ∧ I < ⊤) → ¬IsField R
tactic: constructor