ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: affineHomeomorph_symm_apply
File: Mathlib/Topology/Algebra/Field.lean

Proof steps:
state_before: K : Type u_1
inst✝⁴ : DivisionRing K
inst✝³ : TopologicalSpace K
𝕜 : Type u_2
inst✝² : Field 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : TopologicalRing 𝕜
a b : 𝕜
h : a ≠ 0
x : 𝕜
⊢ (fun y => (y - b) / a) ((fun x => a * x + b) x) = x
state_after: K : Type u_1
inst✝⁴ : DivisionRing K
inst✝³ : TopologicalSpace K
𝕜 : Type u_2
inst✝² : Field 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : TopologicalRing 𝕜
a b : 𝕜
h : a ≠ 0
x : 𝕜
⊢ a * x / a = x
tactic: simp only [add_sub_cancel_right]
state_before: K : Type u_1
inst✝⁴ : DivisionRing K
inst✝³ : TopologicalSpace K
𝕜 : Type u_2
inst✝² : Field 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : TopologicalRing 𝕜
a b : 𝕜
h : a ≠ 0
x : 𝕜
⊢ a * x / a = x
state_after: no goals
tactic: exact mul_div_cancel_left₀ x h
state_before: K : Type u_1
inst✝⁴ : DivisionRing K
inst✝³ : TopologicalSpace K
𝕜 : Type u_2
inst✝² : Field 𝕜
inst✝¹ : TopologicalSpace 𝕜
inst✝ : TopologicalRing 𝕜
a b : 𝕜
h : a ≠ 0
y : 𝕜
⊢ (fun x => a * x + b) ((fun y => (y - b) / a) y) = y
state_after: no goals
tactic: simp [mul_div_cancel₀ _ h]
Theorem: WithLp.prod_nndist_eq_add
File: Mathlib/Analysis/Normed/Lp/ProdLp.lean

Proof steps:
state_before: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp✝ : Fact (1 ≤ p)
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
hp : p ≠ ⊤
x y : WithLp p (α × β)
⊢ ↑(nndist x y) = ↑((nndist x.1 y.1 ^ p.toReal + nndist x.2 y.2 ^ p.toReal) ^ (1 / p.toReal))
state_after: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp✝ : Fact (1 ≤ p)
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
hp : p ≠ ⊤
x y : WithLp p (α × β)
⊢ dist x y = (dist x.1 y.1 ^ p.toReal + dist x.2 y.2 ^ p.toReal) ^ (1 / p.toReal)
tactic: push_cast
state_before: p : ℝ≥0∞
𝕜 : Type u_1
α : Type u_2
β : Type u_3
hp✝ : Fact (1 ≤ p)
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
hp : p ≠ ⊤
x y : WithLp p (α × β)
⊢ dist x y = (dist x.1 y.1 ^ p.toReal + dist x.2 y.2 ^ p.toReal) ^ (1 / p.toReal)
state_after: no goals
tactic: exact prod_dist_eq_add (p.toReal_pos_iff_ne_top.mpr hp) _ _
Theorem: List.next_ne_head_ne_getLast
File: Mathlib/Data/List/Cycle.lean

Proof steps:
state_before: α : Type u_1
inst✝ : DecidableEq α
l : List α
x : α
h✝ : x ∈ l
y : α
h : x ∈ y :: l
hy : x ≠ y
hx : x ≠ (y :: l).getLast ⋯
⊢ x ∈ l
state_after: no goals
tactic: simpa [hy] using h
state_before: α : Type u_1
inst✝ : DecidableEq α
l : List α
x : α
h✝ : x ∈ l
y : α
h : x ∈ y :: l
hy : x ≠ y
hx : x ≠ (y :: l).getLast ⋯
⊢ (y :: l).next x h = l.next x ⋯
state_after: case x_mem
α : Type u_1
inst✝ : DecidableEq α
l : List α
x : α
h✝ : x ∈ l
y : α
h : x ∈ y :: l
hy : x ≠ y
hx : x ≠ (y :: l).getLast ⋯
⊢ x ∈ l

case x_ne
α : Type u_1
inst✝ : DecidableEq α
l : List α
x : α
h✝ : x ∈ l
y : α
h : x ∈ y :: l
hy : x ≠ y
hx : x ≠ (y :: l).getLast ⋯
⊢ x ≠ l.getLast ⋯
tactic: rw [next, next, nextOr_cons_of_ne _ _ _ _ hy, nextOr_eq_nextOr_of_mem_of_ne]
Theorem: WeierstrassCurve.Affine.nonsingular_iff
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ W.Nonsingular x y ↔ W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ y ≠ -y - W.a₁ * x - W.a₃)
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ 2 * y + W.a₁ * x + W.a₃ ≠ 0) ↔
    W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ y - (-y - W.a₁ * x - W.a₃) ≠ 0)
tactic: rw [nonsingular_iff', sub_ne_zero, ← sub_ne_zero (a := y)]
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ 2 * y + W.a₁ * x + W.a₃ ≠ 0) ↔
    W.Equation x y ∧ (W.a₁ * y ≠ 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ ∨ y - (-y - W.a₁ * x - W.a₃) ≠ 0)
state_after: case a.h.e'_2.h.e'_2.h.e'_2
R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ 2 * y + W.a₁ * x + W.a₃ = y - (-y - W.a₁ * x - W.a₃)
tactic: congr! 3
state_before: case a.h.e'_2.h.e'_2.h.e'_2
R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ 2 * y + W.a₁ * x + W.a₃ = y - (-y - W.a₁ * x - W.a₃)
state_after: no goals
tactic: ring1
Theorem: ConvexOn.map_centerMass_le
File: Mathlib/Analysis/Convex/Jensen.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
ι : Type u_5
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : OrderedAddCommGroup β
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f : E → β
t : Finset ι
w : ι → 𝕜
p : ι → E
v : 𝕜
q : E
hf : ConvexOn 𝕜 s f
h₀ : ∀ i ∈ t, 0 ≤ w i
h₁ : 0 < ∑ i ∈ t, w i
hmem : ∀ i ∈ t, p i ∈ s
⊢ f (t.centerMass w p) ≤ t.centerMass w (f ∘ p)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
ι : Type u_5
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : OrderedAddCommGroup β
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f : E → β
t : Finset ι
w : ι → 𝕜
p : ι → E
v : 𝕜
q : E
hf : ConvexOn 𝕜 s f
h₀ : ∀ i ∈ t, 0 ≤ w i
h₁ : 0 < ∑ i ∈ t, w i
hmem : ∀ i ∈ t, p i ∈ s
hmem' : ∀ i ∈ t, (p i, (f ∘ p) i) ∈ {p | p.1 ∈ s ∧ f p.1 ≤ p.2}
⊢ f (t.centerMass w p) ≤ t.centerMass w (f ∘ p)
tactic: have hmem' : ∀ i ∈ t, (p i, (f ∘ p) i) ∈ { p : E × β | p.1 ∈ s ∧ f p.1 ≤ p.2 } := fun i hi =>
    ⟨hmem i hi, le_rfl⟩
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
ι : Type u_5
inst✝⁵ : LinearOrderedField 𝕜
inst✝⁴ : AddCommGroup E
inst✝³ : OrderedAddCommGroup β
inst✝² : Module 𝕜 E
inst✝¹ : Module 𝕜 β
inst✝ : OrderedSMul 𝕜 β
s : Set E
f : E → β
t : Finset ι
w : ι → 𝕜
p : ι → E
v : 𝕜
q : E
hf : ConvexOn 𝕜 s f
h₀ : ∀ i ∈ t, 0 ≤ w i
h₁ : 0 < ∑ i ∈ t, w i
hmem : ∀ i ∈ t, p i ∈ s
hmem' : ∀ i ∈ t, (p i, (f ∘ p) i) ∈ {p | p.1 ∈ s ∧ f p.1 ≤ p.2}
⊢ f (t.centerMass w p) ≤ t.centerMass w (f ∘ p)
state_after: no goals
tactic: convert (hf.convex_epigraph.centerMass_mem h₀ h₁ hmem').2 <;>
    simp only [centerMass, Function.comp, Prod.smul_fst, Prod.fst_sum, Prod.smul_snd, Prod.snd_sum]
Theorem: connectedComponentIn_subset
File: Mathlib/Topology/Connected/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝ : TopologicalSpace α
s t u v F : Set α
x : α
⊢ connectedComponentIn F x ⊆ F
state_after: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝ : TopologicalSpace α
s t u v F : Set α
x : α
⊢ (if h : x ∈ F then Subtype.val '' connectedComponent ⟨x, h⟩ else ∅) ⊆ F
tactic: rw [connectedComponentIn]
state_before: α : Type u
β : Type v
ι : Type u_1
π : ι → Type u_2
inst✝ : TopologicalSpace α
s t u v F : Set α
x : α
⊢ (if h : x ∈ F then Subtype.val '' connectedComponent ⟨x, h⟩ else ∅) ⊆ F
state_after: no goals
tactic: split_ifs <;> simp
Theorem: Polynomial.isUnit_C_add_X_mul_iff
File: Mathlib/RingTheory/Polynomial/Nilpotent.lean

Proof steps:
state_before: R : Type u_1
r : R
inst✝ : CommRing R
P : R[X]
⊢ IsUnit (C r + X * P) ↔ IsUnit r ∧ IsNilpotent P
state_after: R : Type u_1
r : R
inst✝ : CommRing R
P : R[X]
this : ∀ (i : ℕ), (C r + X * P).coeff (i + 1) = P.coeff i
⊢ IsUnit (C r + X * P) ↔ IsUnit r ∧ IsNilpotent P
tactic: have : ∀ i, coeff (C r + X * P) (i + 1) = coeff P i := by simp
state_before: R : Type u_1
r : R
inst✝ : CommRing R
P : R[X]
this : ∀ (i : ℕ), (C r + X * P).coeff (i + 1) = P.coeff i
⊢ IsUnit (C r + X * P) ↔ IsUnit r ∧ IsNilpotent P
state_after: R : Type u_1
r : R
inst✝ : CommRing R
P : R[X]
this : ∀ (i : ℕ), (C r + X * P).coeff (i + 1) = P.coeff i
⊢ (IsUnit ((C r + X * P).coeff 0) ∧ ∀ (i : ℕ), IsNilpotent (P.coeff i)) ↔ IsUnit r ∧ IsNilpotent P
tactic: simp_rw [isUnit_iff_coeff_isUnit_isNilpotent, Nat.forall_ne_zero_iff, this]
state_before: R : Type u_1
r : R
inst✝ : CommRing R
P : R[X]
this : ∀ (i : ℕ), (C r + X * P).coeff (i + 1) = P.coeff i
⊢ (IsUnit ((C r + X * P).coeff 0) ∧ ∀ (i : ℕ), IsNilpotent (P.coeff i)) ↔ IsUnit r ∧ IsNilpotent P
state_after: no goals
tactic: simp only [coeff_add, coeff_C_zero, mul_coeff_zero, coeff_X_zero, zero_mul, add_zero,
    and_congr_right_iff, ← Polynomial.isNilpotent_iff]
Theorem: WeakBilin.tendsto_iff_forall_eval_tendsto
File: Mathlib/Topology/Algebra/Module/WeakDual.lean

Proof steps:
state_before: α : Type u_1
𝕜 : Type u_2
𝕝 : Type u_3
R : Type u_4
E : Type u_5
F : Type u_6
M : Type u_7
inst✝⁵ : TopologicalSpace 𝕜
inst✝⁴ : CommSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : Module 𝕜 E
inst✝¹ : AddCommMonoid F
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
l : Filter α
f : α → WeakBilin B
x : WeakBilin B
hB : Function.Injective ⇑B
⊢ Tendsto f l (𝓝 x) ↔ ∀ (y : F), Tendsto (fun i => (B (f i)) y) l (𝓝 ((B x) y))
state_after: α : Type u_1
𝕜 : Type u_2
𝕝 : Type u_3
R : Type u_4
E : Type u_5
F : Type u_6
M : Type u_7
inst✝⁵ : TopologicalSpace 𝕜
inst✝⁴ : CommSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : Module 𝕜 E
inst✝¹ : AddCommMonoid F
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
l : Filter α
f : α → WeakBilin B
x : WeakBilin B
hB : Function.Injective ⇑B
⊢ Tendsto ((fun x y => (B x) y) ∘ f) l (𝓝 fun y => (B x) y) ↔ Tendsto (fun i => ⇑(B (f i))) l (𝓝 ⇑(B x))
tactic: rw [← tendsto_pi_nhds, Embedding.tendsto_nhds_iff (embedding hB)]
state_before: α : Type u_1
𝕜 : Type u_2
𝕝 : Type u_3
R : Type u_4
E : Type u_5
F : Type u_6
M : Type u_7
inst✝⁵ : TopologicalSpace 𝕜
inst✝⁴ : CommSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : Module 𝕜 E
inst✝¹ : AddCommMonoid F
inst✝ : Module 𝕜 F
B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜
l : Filter α
f : α → WeakBilin B
x : WeakBilin B
hB : Function.Injective ⇑B
⊢ Tendsto ((fun x y => (B x) y) ∘ f) l (𝓝 fun y => (B x) y) ↔ Tendsto (fun i => ⇑(B (f i))) l (𝓝 ⇑(B x))
state_after: no goals
tactic: rfl
Theorem: LinearOrder.bot_topologicalSpace_eq_generateFrom
File: Mathlib/Topology/Instances/Discrete.lean

Proof steps:
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
⊢ ⊥ = generateFrom {s | ∃ a, s = Ioi a ∨ s = Iio a}
state_after: α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
a : α
⊢ IsOpen {a}
tactic: refine (eq_bot_of_singletons_open fun a => ?_).symm
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
a : α
⊢ IsOpen {a}
state_after: α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
a : α
h_singleton_eq_inter : {a} = Iic a ∩ Ici a
⊢ IsOpen {a}
tactic: have h_singleton_eq_inter : {a} = Iic a ∩ Ici a := by rw [inter_comm, Ici_inter_Iic, Icc_self a]
state_before: α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
a : α
h_singleton_eq_inter : {a} = Iic a ∩ Ici a
⊢ IsOpen {a}
state_after: case pos
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
a : α
h_singleton_eq_inter : {a} = Iic a ∩ Ici a
ha_top : IsTop a
⊢ IsOpen {a}

case neg
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : PredOrder α
inst✝ : SuccOrder α
a : α
h_singleton_eq_inter : {a} = Iic a ∩ Ici a
ha_top : ¬IsTop a
⊢ IsOpen {a}
tactic: by_cases ha_top : IsTop a
Theorem: CliffordAlgebra.ι_sq_scalar
File: Mathlib/LinearAlgebra/CliffordAlgebra/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ (ι Q) m * (ι Q) m = (algebraMap R (CliffordAlgebra Q)) (Q m)
state_after: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ ((RingQuot.mkAlgHom R (Rel Q)).toLinearMap ∘ₗ TensorAlgebra.ι R) m *
      ((RingQuot.mkAlgHom R (Rel Q)).toLinearMap ∘ₗ TensorAlgebra.ι R) m =
    (algebraMap R (CliffordAlgebra Q)) (Q m)
tactic: rw [ι]
state_before: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ ((RingQuot.mkAlgHom R (Rel Q)).toLinearMap ∘ₗ TensorAlgebra.ι R) m *
      ((RingQuot.mkAlgHom R (Rel Q)).toLinearMap ∘ₗ TensorAlgebra.ι R) m =
    (algebraMap R (CliffordAlgebra Q)) (Q m)
state_after: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ (RingQuot.mkAlgHom R (Rel Q)).toLinearMap ((TensorAlgebra.ι R) m) *
      (RingQuot.mkAlgHom R (Rel Q)).toLinearMap ((TensorAlgebra.ι R) m) =
    (algebraMap R (CliffordAlgebra Q)) (Q m)
tactic: erw [LinearMap.comp_apply]
state_before: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ (RingQuot.mkAlgHom R (Rel Q)).toLinearMap ((TensorAlgebra.ι R) m) *
      (RingQuot.mkAlgHom R (Rel Q)).toLinearMap ((TensorAlgebra.ι R) m) =
    (algebraMap R (CliffordAlgebra Q)) (Q m)
state_after: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ (algebraMap R (RingQuot (Rel Q))) (Q m) = (algebraMap R (CliffordAlgebra Q)) (Q m)
tactic: rw [AlgHom.toLinearMap_apply, ← map_mul (RingQuot.mkAlgHom R (Rel Q)),
    RingQuot.mkAlgHom_rel R (Rel.of m), AlgHom.commutes]
state_before: R : Type u_1
inst✝² : CommRing R
M : Type u_2
inst✝¹ : AddCommGroup M
inst✝ : Module R M
Q : QuadraticForm R M
n : ℕ
m : M
⊢ (algebraMap R (RingQuot (Rel Q))) (Q m) = (algebraMap R (CliffordAlgebra Q)) (Q m)
state_after: no goals
tactic: rfl
Theorem: FractionalIdeal.mul_one_div_le_one
File: Mathlib/RingTheory/FractionalIdeal/Operations.lean

Proof steps:
state_before: R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
⊢ I * (1 / I) ≤ 1
state_after: case pos
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I = 0
⊢ I * (1 / I) ≤ 1

case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : ¬I = 0
⊢ I * (1 / I) ≤ 1
tactic: by_cases hI : I = 0
Theorem: AddSubmonoid.mrange_inr
File: Mathlib/Algebra/Group/Submonoid/Operations.lean

Proof steps:
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : MulOneClass P
S : Submonoid M
A : Type u_4
inst✝ : SetLike A M
hA : SubmonoidClass A M
S' : A
⊢ mrange (inr M N) = ⊥.prod ⊤
state_after: no goals
tactic: simpa only [mrange_eq_map] using map_inr ⊤
Theorem: Polynomial.exists_root_of_degree_eq_one
File: Mathlib/Algebra/Polynomial/FieldDivision.lean

Proof steps:
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
h : p.degree = 1
⊢ p.IsRoot (-(p.coeff 0 / p.coeff 1))
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
h : p.degree = 1
this : p.coeff 1 ≠ 0
⊢ p.IsRoot (-(p.coeff 0 / p.coeff 1))
tactic: have : p.coeff 1 ≠ 0 := by
      have h' := natDegree_eq_of_degree_eq_some h
      change natDegree p = 1 at h'; rw [← h']
      exact mt leadingCoeff_eq_zero.1 fun h0 => by simp [h0] at h
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
h : p.degree = 1
this : p.coeff 1 ≠ 0
⊢ p.IsRoot (-(p.coeff 0 / p.coeff 1))
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
h : p.degree = 1
this : p.coeff 1 ≠ 0
⊢ (C (p.coeff 1) * X + C (p.coeff 0)).IsRoot (-(p.coeff 0 / p.coeff 1))
tactic: conv in p => rw [eq_X_add_C_of_degree_le_one (show degree p ≤ 1 by rw [h])]
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n : ℕ
inst✝ : Field R
p q : R[X]
h : p.degree = 1
this : p.coeff 1 ≠ 0
⊢ (C (p.coeff 1) * X + C (p.coeff 0)).IsRoot (-(p.coeff 0 / p.coeff 1))
state_after: no goals
tactic: simp [IsRoot, mul_div_cancel₀ _ this]
Theorem: Equiv.Set.sumDiffSubset_symm_apply_of_not_mem
File: Mathlib/Logic/Equiv/Set.lean

Proof steps:
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s t : Set α
h : s ⊆ t
inst✝ : DecidablePred fun x => x ∈ s
x : ↑t
hx : ↑x ∉ s
⊢ (Set.sumDiffSubset h).symm x = Sum.inr ⟨↑x, ⋯⟩
state_after: case a
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s t : Set α
h : s ⊆ t
inst✝ : DecidablePred fun x => x ∈ s
x : ↑t
hx : ↑x ∉ s
⊢ (Set.sumDiffSubset h) ((Set.sumDiffSubset h).symm x) = (Set.sumDiffSubset h) (Sum.inr ⟨↑x, ⋯⟩)
tactic: apply (Equiv.Set.sumDiffSubset h).injective
state_before: case a
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s t : Set α
h : s ⊆ t
inst✝ : DecidablePred fun x => x ∈ s
x : ↑t
hx : ↑x ∉ s
⊢ (Set.sumDiffSubset h) ((Set.sumDiffSubset h).symm x) = (Set.sumDiffSubset h) (Sum.inr ⟨↑x, ⋯⟩)
state_after: case a
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s t : Set α
h : s ⊆ t
inst✝ : DecidablePred fun x => x ∈ s
x : ↑t
hx : ↑x ∉ s
⊢ x = inclusion ⋯ ⟨↑x, ⋯⟩
tactic: simp only [apply_symm_apply, sumDiffSubset_apply_inr]
state_before: case a
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s t : Set α
h : s ⊆ t
inst✝ : DecidablePred fun x => x ∈ s
x : ↑t
hx : ↑x ∉ s
⊢ x = inclusion ⋯ ⟨↑x, ⋯⟩
state_after: no goals
tactic: exact Subtype.eq rfl
Theorem: Equivalence.quot_mk_eq_iff
File: Mathlib/Data/Quot.lean

Proof steps:
state_before: α✝ : Sort u_1
β : Sort u_2
α : Type u_3
r : α → α → Prop
h : Equivalence r
x y : α
⊢ Quot.mk r x = Quot.mk r y ↔ r x y
state_after: case mp
α✝ : Sort u_1
β : Sort u_2
α : Type u_3
r : α → α → Prop
h : Equivalence r
x y : α
⊢ Quot.mk r x = Quot.mk r y → r x y

case mpr
α✝ : Sort u_1
β : Sort u_2
α : Type u_3
r : α → α → Prop
h : Equivalence r
x y : α
⊢ r x y → Quot.mk r x = Quot.mk r y
tactic: constructor
Theorem: RelSeries.length_ne_zero
File: Mathlib/Order/RelSeries.lean

Proof steps:
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
⊢ s.length ≠ 0 ↔ {x | x ∈ s}.Nontrivial
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ r (s.toFun 0) (s.toFun 0)
tactic: refine ⟨fun h ↦ ⟨s 0, by simp [mem_def], s 1, by simp [mem_def], fun rid ↦ irrefl (s 0) ?_⟩,
    length_ne_zero_of_nontrivial⟩
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ r (s.toFun 0) (s.toFun 0)
state_after: α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ r (s.toFun 0) (s.toFun 1)
tactic: nth_rw 2 [rid]
state_before: α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ r (s.toFun 0) (s.toFun 1)
state_after: case h.e'_2.h.e'_4
α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ 1 = ⟨0, ⋯⟩.succ
tactic: convert s.step ⟨0, by omega⟩
state_before: case h.e'_2.h.e'_4
α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ 1 = ⟨0, ⋯⟩.succ
state_after: case h.e'_2.h.e'_4.h
α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ ↑1 = ↑⟨0, ⋯⟩.succ
tactic: ext
state_before: case h.e'_2.h.e'_4.h
α : Type u_1
r : Rel α α
β : Type u_2
s✝ : Rel β β
s : RelSeries r
x : α
irrefl : Irreflexive r
h : s.length ≠ 0
rid : s.toFun 0 = s.toFun 1
⊢ ↑1 = ↑⟨0, ⋯⟩.succ
state_after: no goals
tactic: simpa [Nat.pos_iff_ne_zero]
Theorem: Ordinal.lsub_le_iff
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

Proof steps:
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 v u}
⊢ lsub f ≤ a ↔ ∀ (i : ι), f i < a
state_after: case h.e'_2.h.a
α : 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 v u}
a✝ : ι
⊢ f a✝ < a ↔ (succ ∘ f) a✝ ≤ a
tactic: convert sup_le_iff.{_, v} (f := succ ∘ f) (a := a) using 2
state_before: case h.e'_2.h.a
α : 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 v u}
a✝ : ι
⊢ f a✝ < a ↔ (succ ∘ f) a✝ ≤ a
state_after: no goals
tactic: simp only [comp_apply, succ_le_iff]
Theorem: HomologicalComplex₂.ι_D₁
File: Mathlib/Algebra/Homology/TotalComplex.lean

Proof steps:
state_before: C : Type u_1
inst✝⁴ : Category.{u_5, u_1} C
inst✝³ : Preadditive C
I₁ : Type u_2
I₂ : Type u_3
I₁₂ : Type u_4
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
K L M : HomologicalComplex₂ C c₁ c₂
φ : K ⟶ L
e : K ≅ L
ψ : L ⟶ M
c₁₂ : ComplexShape I₁₂
inst✝² : DecidableEq I₁₂
inst✝¹ : TotalComplexShape c₁ c₂ c₁₂
inst✝ : K.HasTotal c₁₂
i₁₂ i₁₂' : I₁₂
i₁ : I₁
i₂ : I₂
h : c₁.π c₂ c₁₂ (i₁, i₂) = i₁₂
⊢ K.ιTotal c₁₂ i₁ i₂ i₁₂ h ≫ K.D₁ c₁₂ i₁₂ i₁₂' = K.d₁ c₁₂ i₁ i₂ i₁₂'
state_after: no goals
tactic: apply totalAux.ιMapObj_D₁
Theorem: Filter.compl_diagonal_mem_prod
File: Mathlib/Order/Filter/Bases.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
l l' : Filter α
p : ι → Prop
s : ι → Set α
t : Set α
i : ι
p' : ι' → Prop
s' : ι' → Set α
i' : ι'
l₁ l₂ : Filter α
⊢ (diagonal α)ᶜ ∈ l₁ ×ˢ l₂ ↔ Disjoint l₁ l₂
state_after: no goals
tactic: simp only [mem_prod_iff, Filter.disjoint_iff, prod_subset_compl_diagonal_iff_disjoint]
Theorem: Cardinal.eq_aleph'_of_eq_card_ord
File: Mathlib/SetTheory/Cardinal/Ordinal.lean

Proof steps:
state_before: o : Ordinal.{u_1}
ho : o.card.ord = o
⊢ (aleph' (alephIdx.relIso o.card)).ord = o
state_after: no goals
tactic: simpa using ho
Theorem: GaloisInsertion.isAtom_iff'
File: Mathlib/Order/Atoms.lean

Proof steps:
state_before: ι : Sort u_1
α : Type u_2
β : Type u_3
inst✝⁴ : PartialOrder α
inst✝³ : PartialOrder β
inst✝² : OrderBot α
inst✝¹ : IsAtomic α
inst✝ : OrderBot β
l : α → β
u : β → α
gi : GaloisInsertion l u
hbot : u ⊥ = ⊥
h_atom : ∀ (a : α), IsAtom a → u (l a) = a
b : β
⊢ IsAtom (u b) ↔ IsAtom b
state_after: no goals
tactic: rw [← gi.isAtom_iff hbot h_atom, gi.l_u_eq]
Theorem: Equiv.Perm.eq_on_support_mem_disjoint
File: Mathlib/GroupTheory/Perm/Support.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
l : List (Perm α)
h : f ∈ l
hl : List.Pairwise Disjoint l
⊢ ∀ x ∈ f.support, f x = l.prod x
state_after: case nil
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
h : f ∈ []
hl : List.Pairwise Disjoint []
⊢ ∀ x ∈ f.support, f x = [].prod x

case cons
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g hd : Perm α
tl : List (Perm α)
IH : f ∈ tl → List.Pairwise Disjoint tl → ∀ x ∈ f.support, f x = tl.prod x
h : f ∈ hd :: tl
hl : List.Pairwise Disjoint (hd :: tl)
⊢ ∀ x ∈ f.support, f x = (hd :: tl).prod x
tactic: induction' l with hd tl IH
Theorem: AddCommGroup.ModEq.add_iff_right
File: Mathlib/Algebra/ModEq.lean

Proof steps:
state_before: α : Type u_1
inst✝ : AddCommGroup α
p a a₁ a₂ b b₁ b₂ c : α
n : ℕ
z : ℤ
x✝ : a₂ ≡ b₂ [PMOD p]
m : ℤ
hm : b₂ - a₂ = m • p
⊢ (∃ b, b₁ + b₂ - (a₁ + a₂) = (Equiv.symm (Equiv.addRight m)).symm b • p) ↔ a₁ ≡ b₁ [PMOD p]
state_after: no goals
tactic: simp [add_sub_add_comm, hm, add_smul, ModEq]