ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: ENNReal.div_top
File: Mathlib/Data/ENNReal/Inv.lean

Proof steps:
state_before: a b c d : ℝ≥0∞
r p q : ℝ≥0
⊢ a / ⊤ = 0
state_after: no goals
tactic: rw [div_eq_mul_inv, inv_top, mul_zero]
Theorem: Surreal.Multiplication.P1_of_lt
File: Mathlib/SetTheory/Surreal/Multiplication.lean

Proof steps:
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
h₁ : P3 x₃ x₂ y₂ y₃
h₂ : P3 x₁ x₃ y₂ y₁
⊢ P1 x₁ x₂ x₃ y₁ y₂ y₃
state_after: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
h₁ : P3 x₃ x₂ y₂ y₃
h₂ : P3 x₁ x₃ y₂ y₁
⊢ ⟦x₃ * y₂⟧ + (⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ + ⟦x₃ * y₃⟧) < ⟦x₃ * y₂⟧ + (⟦x₃ * y₁⟧ + ⟦x₂ * y₃⟧ + ⟦x₁ * y₂⟧)
tactic: rw [P1, sub_lt_sub_iff, ← add_lt_add_iff_left ⟦x₃ * y₂⟧]
state_before: x x₁ x₂ x₃ x' y y₁ y₂ y₃ y' : PGame
h₁ : P3 x₃ x₂ y₂ y₃
h₂ : P3 x₁ x₃ y₂ y₁
⊢ ⟦x₃ * y₂⟧ + (⟦x₁ * y₁⟧ + ⟦x₂ * y₂⟧ + ⟦x₃ * y₃⟧) < ⟦x₃ * y₂⟧ + (⟦x₃ * y₁⟧ + ⟦x₂ * y₃⟧ + ⟦x₁ * y₂⟧)
state_after: no goals
tactic: convert add_lt_add h₁ h₂ using 1 <;> abel
Theorem: Filter.tendsto_image_smallSets
File: Mathlib/Order/Filter/SmallSets.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
⊢ Tendsto (fun x => f '' x) la.smallSets lb.smallSets ↔ Tendsto f la lb
state_after: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
⊢ (∀ t ∈ lb, ∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ t) ↔ Tendsto f la lb
tactic: rw [tendsto_smallSets_iff]
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
⊢ (∀ t ∈ lb, ∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ t) ↔ Tendsto f la lb
state_after: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ u) ↔ u ∈ map f la
tactic: refine forall₂_congr fun u hu ↦ ?_
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∀ᶠ (x : Set α) in la.smallSets, f '' x ⊆ u) ↔ u ∈ map f la
state_after: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∃ s ∈ la, f '' s ⊆ u) ↔ u ∈ map f la
tactic: rw [eventually_smallSets' fun s t hst ht ↦ (image_subset _ hst).trans ht]
state_before: α : Type u_1
β : Type u_2
ι : Sort u_3
l l' la : Filter α
lb : Filter β
f : α → β
u : Set β
hu : u ∈ lb
⊢ (∃ s ∈ la, f '' s ⊆ u) ↔ u ∈ map f la
state_after: no goals
tactic: simp only [image_subset_iff, exists_mem_subset_iff, mem_map]
Theorem: edist_le_tsum_of_edist_le_of_tendsto₀
File: Mathlib/Topology/Instances/ENNReal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : PseudoEMetricSpace α
f : ℕ → α
d : ℕ → ℝ≥0∞
hf : ∀ (n : ℕ), edist (f n) (f n.succ) ≤ d n
a : α
ha : Tendsto f atTop (𝓝 a)
⊢ edist (f 0) a ≤ ∑' (m : ℕ), d m
state_after: no goals
tactic: simpa using edist_le_tsum_of_edist_le_of_tendsto d hf ha 0
Theorem: BoxIntegral.Prepartition.mem_restrict'
File: Mathlib/Analysis/BoxIntegral/Partition/Basic.lean

Proof steps:
state_before: ι : Type u_1
I J J₁ J₂ : Box ι
π π₁ π₂ : Prepartition I
x : ι → ℝ
πi πi₁ πi₂ : (J : Box ι) → Prepartition J
⊢ J₁ ∈ π.restrict J ↔ ∃ J' ∈ π, ↑J₁ = ↑J ∩ ↑J'
state_after: no goals
tactic: simp only [mem_restrict, ← Box.withBotCoe_inj, Box.coe_inf, Box.coe_coe]
Theorem: CategoryTheory.OverPresheafAux.YonedaCollection.map₁_fst
File: Mathlib/CategoryTheory/Comma/Presheaf.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X : C
G : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
η : F ⟶ G
p : YonedaCollection F X
⊢ (map₁ η p).fst = p.fst
state_after: no goals
tactic: simp [map₁]
Theorem: TopologicalSpace.IsSeparable.secondCountableTopology
File: Mathlib/Topology/Metrizable/Basic.lean

Proof steps:
state_before: ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
⊢ SecondCountableTopology ↑s
state_after: ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
this : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
⊢ SecondCountableTopology ↑s
tactic: letI := pseudoMetrizableSpacePseudoMetric X
state_before: ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
this : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
⊢ SecondCountableTopology ↑s
state_after: ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
this✝ : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
this : SeparableSpace ↑s
⊢ SecondCountableTopology ↑s
tactic: have := hs.separableSpace
state_before: ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
this✝ : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
this : SeparableSpace ↑s
⊢ SecondCountableTopology ↑s
state_after: no goals
tactic: exact UniformSpace.secondCountable_of_separable s
Theorem: Polynomial.sum_roots_eq_nextCoeff_of_monic_of_split
File: Mathlib/Algebra/Polynomial/Splits.lean

Proof steps:
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ P.nextCoeff = -P.roots.sum
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun a => X - C a) P.roots).prod.nextCoeff = -P.roots.sum
tactic: nth_rw 1 [eq_prod_roots_of_monic_of_splits_id hmo hP]
state_before: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun a => X - C a) P.roots).prod.nextCoeff = -P.roots.sum
state_after: R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ (Multiset.map (fun i => (X - C i).nextCoeff) P.roots).sum = -P.roots.sum

R : Type u_1
F : Type u
K : Type v
L : Type w
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Field F
i : K →+* L
inst✝¹ : Algebra R K
inst✝ : Algebra R L
P : K[X]
hmo : P.Monic
hP : Splits (RingHom.id K) P
⊢ ∀ a ∈ P.roots, (X - C a).Monic
tactic: rw [Monic.nextCoeff_multiset_prod _ _ fun a ha => _]
Theorem: SimpleGraph.Walk.IsPath.of_append_left
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
p : G.Walk u v
q : G.Walk v w
⊢ (p.append q).IsPath → p.IsPath
state_after: 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
p : G.Walk u v
q : G.Walk v w
⊢ (p.support ++ q.support.tail).Nodup → p.support.Nodup
tactic: simp only [isPath_def, support_append]
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
p : G.Walk u v
q : G.Walk v w
⊢ (p.support ++ q.support.tail).Nodup → p.support.Nodup
state_after: no goals
tactic: exact List.Nodup.of_append_left
Theorem: CauSeq.lt_of_eq_of_lt
File: Mathlib/Algebra/Order/CauSeq/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrderedField α
f g h : CauSeq α abs
fg : f ≈ g
gh : g < h
⊢ f < h
state_after: α : Type u_1
β : Type u_2
inst✝ : LinearOrderedField α
f g h : CauSeq α abs
fg : f ≈ g
gh : g < h
this : (h - g + -(f - g)).Pos
⊢ f < h
tactic: have := pos_add_limZero gh (neg_limZero fg)
state_before: α : Type u_1
β : Type u_2
inst✝ : LinearOrderedField α
f g h : CauSeq α abs
fg : f ≈ g
gh : g < h
this : (h - g + -(f - g)).Pos
⊢ f < h
state_after: no goals
tactic: rwa [← sub_eq_add_neg, sub_sub_sub_cancel_right] at this
Theorem: Representation.ofModule_asAlgebraHom_apply_apply
File: Mathlib/RepresentationTheory/Basic.lean

Proof steps:
state_before: k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Monoid G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
M : Type u_4
inst✝¹ : AddCommMonoid M
inst✝ : Module (MonoidAlgebra k G) M
r : MonoidAlgebra k G
m : RestrictScalars k (MonoidAlgebra k G) M
⊢ ((ofModule M).asAlgebraHom r) m =
    (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm (r • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m)
state_after: case hM
k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Monoid G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
M : Type u_4
inst✝¹ : AddCommMonoid M
inst✝ : Module (MonoidAlgebra k G) M
r : MonoidAlgebra k G
m : RestrictScalars k (MonoidAlgebra k G) M
⊢ ∀ (g : G),
    ((ofModule M).asAlgebraHom ((of k G) g)) m =
      (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm
        ((of k G) g • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m)

case hadd
k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Monoid G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
M : Type u_4
inst✝¹ : AddCommMonoid M
inst✝ : Module (MonoidAlgebra k G) M
r : MonoidAlgebra k G
m : RestrictScalars k (MonoidAlgebra k G) M
⊢ ∀ (f g : MonoidAlgebra k G),
    ((ofModule M).asAlgebraHom f) m =
        (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm
          (f • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m) →
      ((ofModule M).asAlgebraHom g) m =
          (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm
            (g • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m) →
        ((ofModule M).asAlgebraHom (f + g)) m =
          (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm
            ((f + g) • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m)

case hsmul
k : Type u_1
G : Type u_2
V : Type u_3
inst✝⁵ : CommSemiring k
inst✝⁴ : Monoid G
inst✝³ : AddCommMonoid V
inst✝² : Module k V
ρ : Representation k G V
M : Type u_4
inst✝¹ : AddCommMonoid M
inst✝ : Module (MonoidAlgebra k G) M
r : MonoidAlgebra k G
m : RestrictScalars k (MonoidAlgebra k G) M
⊢ ∀ (r : k) (f : MonoidAlgebra k G),
    ((ofModule M).asAlgebraHom f) m =
        (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm
          (f • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m) →
      ((ofModule M).asAlgebraHom (r • f)) m =
        (RestrictScalars.addEquiv k (MonoidAlgebra k G) M).symm
          ((r • f) • (RestrictScalars.addEquiv k (MonoidAlgebra k G) M) m)
tactic: apply MonoidAlgebra.induction_on r
Theorem: DFinsupp.card_Ioo
File: Mathlib/Data/DFinsupp/Interval.lean

Proof steps:
state_before: ι : Type u_1
α : ι → Type u_2
inst✝⁴ : DecidableEq ι
inst✝³ : (i : ι) → DecidableEq (α i)
inst✝² : (i : ι) → PartialOrder (α i)
inst✝¹ : (i : ι) → Zero (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
f g : Π₀ (i : ι), α i
⊢ (Ioo f g).card = ∏ i ∈ f.support ∪ g.support, (Icc (f i) (g i)).card - 2
state_after: no goals
tactic: rw [card_Ioo_eq_card_Icc_sub_two, card_Icc]
Theorem: Finset.Nat.antidiagonal_eq_image
File: Mathlib/Data/Finset/NatAntidiagonal.lean

Proof steps:
state_before: n : ℕ
⊢ antidiagonal n = image (fun i => (i, n - i)) (range (n + 1))
state_after: no goals
tactic: simp only [antidiagonal_eq_map, map_eq_image, Function.Embedding.coeFn_mk]
Theorem: QuadraticForm.baseChange_ext
File: Mathlib/LinearAlgebra/QuadraticForm/TensorProduct.lean

Proof steps:
state_before: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing A
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : AddCommGroup M₂
inst✝⁷ : Algebra R A
inst✝⁶ : Module R M₁
inst✝⁵ : Module A M₁
inst✝⁴ : SMulCommClass R A M₁
inst✝³ : SMulCommClass A R M₁
inst✝² : IsScalarTower R A M₁
inst✝¹ : Module R M₂
inst✝ : Invertible 2
Q₁ Q₂ : QuadraticForm A (A ⊗[R] M₂)
h : ∀ (m : M₂), Q₁ (1 ⊗ₜ[R] m) = Q₂ (1 ⊗ₜ[R] m)
⊢ Q₁ = Q₂
state_after: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing A
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : AddCommGroup M₂
inst✝⁷ : Algebra R A
inst✝⁶ : Module R M₁
inst✝⁵ : Module A M₁
inst✝⁴ : SMulCommClass R A M₁
inst✝³ : SMulCommClass A R M₁
inst✝² : IsScalarTower R A M₁
inst✝¹ : Module R M₂
inst✝ : Invertible 2
Q₁ Q₂ : QuadraticForm A (A ⊗[R] M₂)
h : ∀ (a : A) (m : M₂), Q₁ (a ⊗ₜ[R] m) = Q₂ (a ⊗ₜ[R] m)
⊢ Q₁ = Q₂
tactic: replace h (a m) : Q₁ (a ⊗ₜ m) = Q₂ (a ⊗ₜ m) := by
    rw [← mul_one a, ← smul_eq_mul, ← smul_tmul', QuadraticMap.map_smul, QuadraticMap.map_smul, h]
state_before: R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing A
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : AddCommGroup M₂
inst✝⁷ : Algebra R A
inst✝⁶ : Module R M₁
inst✝⁵ : Module A M₁
inst✝⁴ : SMulCommClass R A M₁
inst✝³ : SMulCommClass A R M₁
inst✝² : IsScalarTower R A M₁
inst✝¹ : Module R M₂
inst✝ : Invertible 2
Q₁ Q₂ : QuadraticForm A (A ⊗[R] M₂)
h : ∀ (a : A) (m : M₂), Q₁ (a ⊗ₜ[R] m) = Q₂ (a ⊗ₜ[R] m)
⊢ Q₁ = Q₂
state_after: case H
R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing A
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : AddCommGroup M₂
inst✝⁷ : Algebra R A
inst✝⁶ : Module R M₁
inst✝⁵ : Module A M₁
inst✝⁴ : SMulCommClass R A M₁
inst✝³ : SMulCommClass A R M₁
inst✝² : IsScalarTower R A M₁
inst✝¹ : Module R M₂
inst✝ : Invertible 2
Q₁ Q₂ : QuadraticForm A (A ⊗[R] M₂)
h : ∀ (a : A) (m : M₂), Q₁ (a ⊗ₜ[R] m) = Q₂ (a ⊗ₜ[R] m)
x : A ⊗[R] M₂
⊢ Q₁ x = Q₂ x
tactic: ext x
state_before: case H
R : Type uR
A : Type uA
M₁ : Type uM₁
M₂ : Type uM₂
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing A
inst✝⁹ : AddCommGroup M₁
inst✝⁸ : AddCommGroup M₂
inst✝⁷ : Algebra R A
inst✝⁶ : Module R M₁
inst✝⁵ : Module A M₁
inst✝⁴ : SMulCommClass R A M₁
inst✝³ : SMulCommClass A R M₁
inst✝² : IsScalarTower R A M₁
inst✝¹ : Module R M₂
inst✝ : Invertible 2
Q₁ Q₂ : QuadraticForm A (A ⊗[R] M₂)
h : ∀ (a : A) (m : M₂), Q₁ (a ⊗ₜ[R] m) = Q₂ (a ⊗ₜ[R] m)
x : A ⊗[R] M₂
⊢ Q₁ x = Q₂ x
state_after: no goals
tactic: induction x with
  | tmul => simp [h]
  | zero => simp
  | add x y hx hy =>
    have : Q₁.polarBilin = Q₂.polarBilin := by
      ext
      dsimp [polar]
      rw [← TensorProduct.tmul_add, h, h, h]
    replace := congr($this x y)
    dsimp [polar] at this
    linear_combination this + hx + hy
Theorem: LucasLehmer.mersenne_coe_X
File: Mathlib/NumberTheory/LucasLehmer.lean

Proof steps:
state_before: p : ℕ
⊢ ↑(mersenne p) = 0
state_after: case h₁
p : ℕ
⊢ (2 ^ p - 1).minFac ∣ 2 ^ p - 1
tactic: ext <;> simp [mersenne, q, ZMod.natCast_zmod_eq_zero_iff_dvd, -pow_pos]
state_before: case h₁
p : ℕ
⊢ (2 ^ p - 1).minFac ∣ 2 ^ p - 1
state_after: no goals
tactic: apply Nat.minFac_dvd
Theorem: AddSubmonoid.multiset_sum_mem
File: Mathlib/Algebra/Group/Submonoid/Membership.lean

Proof steps:
state_before: M✝ : Type u_1
A : Type u_2
B : Type u_3
inst✝³ : Monoid M✝
inst✝² : SetLike B M✝
inst✝¹ : SubmonoidClass B M✝
S✝ : B
s : Submonoid M✝
M : Type u_4
inst✝ : CommMonoid M
S : Submonoid M
m : Multiset M
hm : ∀ a ∈ m, a ∈ S
⊢ m.prod ∈ S
state_after: case intro
M✝ : Type u_1
A : Type u_2
B : Type u_3
inst✝³ : Monoid M✝
inst✝² : SetLike B M✝
inst✝¹ : SubmonoidClass B M✝
S✝ : B
s : Submonoid M✝
M : Type u_4
inst✝ : CommMonoid M
S : Submonoid M
m : Multiset ↥S
⊢ (Multiset.map Subtype.val m).prod ∈ S
tactic: lift m to Multiset S using hm
state_before: case intro
M✝ : Type u_1
A : Type u_2
B : Type u_3
inst✝³ : Monoid M✝
inst✝² : SetLike B M✝
inst✝¹ : SubmonoidClass B M✝
S✝ : B
s : Submonoid M✝
M : Type u_4
inst✝ : CommMonoid M
S : Submonoid M
m : Multiset ↥S
⊢ (Multiset.map Subtype.val m).prod ∈ S
state_after: case intro
M✝ : Type u_1
A : Type u_2
B : Type u_3
inst✝³ : Monoid M✝
inst✝² : SetLike B M✝
inst✝¹ : SubmonoidClass B M✝
S✝ : B
s : Submonoid M✝
M : Type u_4
inst✝ : CommMonoid M
S : Submonoid M
m : Multiset ↥S
⊢ ↑m.prod ∈ S
tactic: rw [← coe_multiset_prod]
state_before: case intro
M✝ : Type u_1
A : Type u_2
B : Type u_3
inst✝³ : Monoid M✝
inst✝² : SetLike B M✝
inst✝¹ : SubmonoidClass B M✝
S✝ : B
s : Submonoid M✝
M : Type u_4
inst✝ : CommMonoid M
S : Submonoid M
m : Multiset ↥S
⊢ ↑m.prod ∈ S
state_after: no goals
tactic: exact m.prod.coe_prop
Theorem: measurable_eq_mp
File: Mathlib/MeasureTheory/MeasurableSpace/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort uι
s t u : Set α
π : δ → Type u_6
inst✝² : MeasurableSpace α
inst✝¹ : (a : δ) → MeasurableSpace (π a)
inst✝ : MeasurableSpace γ
i i' : δ
h : i = i'
⊢ Measurable ⋯.mp
state_after: case refl
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort uι
s t u : Set α
π : δ → Type u_6
inst✝² : MeasurableSpace α
inst✝¹ : (a : δ) → MeasurableSpace (π a)
inst✝ : MeasurableSpace γ
i : δ
⊢ Measurable ⋯.mp
tactic: cases h
state_before: case refl
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
δ' : Type u_5
ι : Sort uι
s t u : Set α
π : δ → Type u_6
inst✝² : MeasurableSpace α
inst✝¹ : (a : δ) → MeasurableSpace (π a)
inst✝ : MeasurableSpace γ
i : δ
⊢ Measurable ⋯.mp
state_after: no goals
tactic: exact measurable_id
Theorem: himp_inf_himp_inf_le
File: Mathlib/Order/Heyting/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : GeneralizedHeytingAlgebra α
a b c d : α
⊢ (b ⇨ c) ⊓ (a ⇨ b) ⊓ a ≤ c
state_after: no goals
tactic: simpa using @himp_le_himp_himp_himp
Theorem: Finset.image_image₂
File: Mathlib/Data/Finset/NAry.lean

Proof steps:
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
f : α → β → γ
g : γ → δ
⊢ ↑(image g (image₂ f s t)) = ↑(image₂ (fun a b => g (f a b)) s t)
state_after: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
f : α → β → γ
g : γ → δ
⊢ g '' image2 f ↑s ↑t = image2 (fun a b => g (f a b)) ↑s ↑t
tactic: push_cast
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f✝ f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Finset α
t t' : Finset β
u u' : Finset γ
a a' : α
b b' : β
c : γ
f : α → β → γ
g : γ → δ
⊢ g '' image2 f ↑s ↑t = image2 (fun a b => g (f a b)) ↑s ↑t
state_after: no goals
tactic: exact image_image2 _ _
Theorem: Set.Finite.finite_of_compl
File: Mathlib/Data/Set/Finite.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s : Set α
hs : s.Finite
hsc : sᶜ.Finite
⊢ Finite α
state_after: α : Type u
β : Type v
ι : Sort w
γ : Type x
s : Set α
hs : s.Finite
hsc : sᶜ.Finite
⊢ (s ∪ sᶜ).Finite
tactic: rw [← finite_univ_iff, ← union_compl_self s]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s : Set α
hs : s.Finite
hsc : sᶜ.Finite
⊢ (s ∪ sᶜ).Finite
state_after: no goals
tactic: exact hs.union hsc
Theorem: Real.toNNReal_lt_one
File: Mathlib/Data/NNReal/Basic.lean

Proof steps:
state_before: r : ℝ
⊢ r.toNNReal < 1 ↔ r < 1
state_after: no goals
tactic: simp only [← not_le, one_le_toNNReal]
Theorem: QuotientAddGroup.equivIcoMod_symm_apply
File: Mathlib/Algebra/Order/ToIntervalMod.lean

Proof steps:
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a : α
b : α ⧸ AddSubgroup.zmultiples p
⊢ (fun x => ↑↑x) ((fun b => ⟨⋯.lift b, ⋯⟩) b) = b
state_after: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ (fun x => ↑↑x) ((fun b => ⟨⋯.lift b, ⋯⟩) ↑z✝) = ↑z✝
tactic: induction b using QuotientAddGroup.induction_on'
state_before: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ (fun x => ↑↑x) ((fun b => ⟨⋯.lift b, ⋯⟩) ↑z✝) = ↑z✝
state_after: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ ↑(toIcoMod hp a z✝) = ↑z✝
tactic: dsimp
state_before: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ ↑(toIcoMod hp a z✝) = ↑z✝
state_after: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ -toIcoDiv hp a z✝ • p ∈ AddSubgroup.zmultiples p
tactic: rw [QuotientAddGroup.eq_iff_sub_mem, toIcoMod_sub_self]
state_before: case H
α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b c : α
n : ℤ
a z✝ : α
⊢ -toIcoDiv hp a z✝ • p ∈ AddSubgroup.zmultiples p
state_after: no goals
tactic: apply AddSubgroup.zsmul_mem_zmultiples
Theorem: Nat.cast_pow
File: Mathlib/Data/Nat/Cast/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝ : Semiring α
m✝ n m : ℕ
⊢ ↑(m ^ 0) = ↑m ^ 0
state_after: no goals
tactic: simp
state_before: α : Type u_1
β : Type u_2
inst✝ : Semiring α
m✝ n✝ m n : ℕ
⊢ ↑(m ^ (n + 1)) = ↑m ^ (n + 1)
state_after: no goals
tactic: rw [_root_.pow_succ', _root_.pow_succ', cast_mul, cast_pow m n]
Theorem: List.revzip_sublists
File: Mathlib/Data/List/Sublists.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
l : List α
⊢ ∀ (l₁ l₂ : List α), (l₁, l₂) ∈ l.sublists.revzip → l₁ ++ l₂ ~ l
state_after: α : Type u
β : Type v
γ : Type w
l : List α
⊢ ∀ (l₁ l₂ : List α), (l₁, l₂) ∈ l.sublists.zip l.sublists.reverse → l₁ ++ l₂ ~ l
tactic: rw [revzip]
state_before: α : Type u
β : Type v
γ : Type w
l : List α
⊢ ∀ (l₁ l₂ : List α), (l₁, l₂) ∈ l.sublists.zip l.sublists.reverse → l₁ ++ l₂ ~ l
state_after: case nil
α : Type u
β : Type v
γ : Type w
⊢ ∀ (l₁ l₂ : List α), (l₁, l₂) ∈ [].sublists.zip [].sublists.reverse → l₁ ++ l₂ ~ []

case append_singleton
α : Type u
β : Type v
γ : Type w
l' : List α
a : α
ih : ∀ (l₁ l₂ : List α), (l₁, l₂) ∈ l'.sublists.zip l'.sublists.reverse → l₁ ++ l₂ ~ l'
⊢ ∀ (l₁ l₂ : List α), (l₁, l₂) ∈ (l' ++ [a]).sublists.zip (l' ++ [a]).sublists.reverse → l₁ ++ l₂ ~ l' ++ [a]
tactic: induction' l using List.reverseRecOn with l' a ih