ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: TopologicalSpace.Opens.openEmbedding_obj_top
File: Mathlib/Topology/Category/TopCat/Opens.lean

Proof steps:
state_before: X : TopCat
U : Opens ↑X
⊢ ⋯.functor.obj ⊤ = U
state_after: case h
X : TopCat
U : Opens ↑X
⊢ ↑(⋯.functor.obj ⊤) = ↑U
tactic: ext1
state_before: case h
X : TopCat
U : Opens ↑X
⊢ ↑(⋯.functor.obj ⊤) = ↑U
state_after: no goals
tactic: exact Set.image_univ.trans Subtype.range_coe
Theorem: Orientation.norm_div_tan_oangle_add_left_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

Proof steps:
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ ‖x‖ / (o.oangle (x + y) y).tan = ‖y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ‖x‖ / ((-o).oangle y (x + y)).tan = ‖y‖
tactic: rw [← neg_inj, oangle_rev, ← oangle_neg_orientation_eq_neg, neg_inj] at h ⊢
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ‖x‖ / ((-o).oangle y (x + y)).tan = ‖y‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ‖x‖ / ((-o).oangle y (y + x)).tan = ‖y‖
tactic: rw [add_comm]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (-o).oangle y x = ↑(π / 2)
⊢ ‖x‖ / ((-o).oangle y (y + x)).tan = ‖y‖
state_after: no goals
tactic: exact (-o).norm_div_tan_oangle_add_right_of_oangle_eq_pi_div_two h
Theorem: wittStructureInt_vars
File: Mathlib/RingTheory/WittVector/StructurePolynomial.lean

Proof steps:
state_before: p : ℕ
R : Type u_1
idx : Type u_2
inst✝¹ : CommRing R
hp : Fact (Nat.Prime p)
inst✝ : Fintype idx
Φ : MvPolynomial idx ℤ
n : ℕ
⊢ (wittStructureInt p Φ n).vars ⊆ Finset.univ ×ˢ Finset.range (n + 1)
state_after: p : ℕ
R : Type u_1
idx : Type u_2
inst✝¹ : CommRing R
hp : Fact (Nat.Prime p)
inst✝ : Fintype idx
Φ : MvPolynomial idx ℤ
n : ℕ
this : Function.Injective ⇑(Int.castRingHom ℚ)
⊢ (wittStructureInt p Φ n).vars ⊆ Finset.univ ×ˢ Finset.range (n + 1)
tactic: have : Function.Injective (Int.castRingHom ℚ) := Int.cast_injective
state_before: p : ℕ
R : Type u_1
idx : Type u_2
inst✝¹ : CommRing R
hp : Fact (Nat.Prime p)
inst✝ : Fintype idx
Φ : MvPolynomial idx ℤ
n : ℕ
this : Function.Injective ⇑(Int.castRingHom ℚ)
⊢ (wittStructureInt p Φ n).vars ⊆ Finset.univ ×ˢ Finset.range (n + 1)
state_after: p : ℕ
R : Type u_1
idx : Type u_2
inst✝¹ : CommRing R
hp : Fact (Nat.Prime p)
inst✝ : Fintype idx
Φ : MvPolynomial idx ℤ
n : ℕ
this : Function.Injective ⇑(Int.castRingHom ℚ)
⊢ (wittStructureRat p ((map (Int.castRingHom ℚ)) Φ) n).vars ⊆ Finset.univ ×ˢ Finset.range (n + 1)
tactic: rw [← vars_map_of_injective _ this, map_wittStructureInt]
state_before: p : ℕ
R : Type u_1
idx : Type u_2
inst✝¹ : CommRing R
hp : Fact (Nat.Prime p)
inst✝ : Fintype idx
Φ : MvPolynomial idx ℤ
n : ℕ
this : Function.Injective ⇑(Int.castRingHom ℚ)
⊢ (wittStructureRat p ((map (Int.castRingHom ℚ)) Φ) n).vars ⊆ Finset.univ ×ˢ Finset.range (n + 1)
state_after: no goals
tactic: apply wittStructureRat_vars
Theorem: HurwitzZeta.completedHurwitzZetaEven_neg
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

Proof steps:
state_before: a : UnitAddCircle
s : ℂ
⊢ completedHurwitzZetaEven (-a) s = completedHurwitzZetaEven a s
state_after: no goals
tactic: simp only [completedHurwitzZetaEven, hurwitzEvenFEPair_neg]
Theorem: MeasureTheory.Measure.measure_toMeasurable_add_inter_left
File: Mathlib/MeasureTheory/Measure/MeasureSpace.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t✝ s t : Set α
hs : MeasurableSet s
ht : (μ + ν) t ≠ ⊤
⊢ μ (toMeasurable (μ + ν) t ∩ s) = μ (t ∩ s)
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t✝ s t : Set α
hs : MeasurableSet s
ht : (μ + ν) t ≠ ⊤
⊢ μ t = μ (toMeasurable (μ + ν) t)

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Type u_5
R : Type u_6
R' : Type u_7
m0 : MeasurableSpace α
inst✝¹ : MeasurableSpace β
inst✝ : MeasurableSpace γ
μ μ₁ μ₂ μ₃ ν ν' ν₁ ν₂ : Measure α
s✝ s' t✝ s t : Set α
hs : MeasurableSet s
ht : (μ + ν) t ≠ ⊤
⊢ μ t ≠ ⊤
tactic: refine (measure_inter_eq_of_measure_eq hs ?_ (subset_toMeasurable _ _) ?_).symm
Theorem: alexDiscEquivPreord_counitIso
File: Mathlib/Topology/Order/Category/AlexDisc.lean

Proof steps:
state_before: X : AlexDisc
⊢ ↑((𝟭 AlexDisc).obj X) ≃ₜ
    ↑(((forget₂ AlexDisc TopCat ⋙ topToPreord) ⋙
            { obj := fun X => AlexDisc.of (WithUpperSet ↑X), map := fun {X Y} => WithUpperSet.map, map_id := ⋯,
              map_comp := ⋯ }).obj
        X)
state_after: X : AlexDisc
⊢ ↑X ≃ₜ WithUpperSet (Specialization ↑X)
tactic: dsimp
state_before: X : AlexDisc
⊢ ↑X ≃ₜ WithUpperSet (Specialization ↑X)
state_after: no goals
tactic: exact homeoWithUpperSetTopologyorderIso X
state_before: X : Preord
⊢ ↑(({ obj := fun X => AlexDisc.of (WithUpperSet ↑X), map := fun {X Y} => WithUpperSet.map, map_id := ⋯,
              map_comp := ⋯ } ⋙
            forget₂ AlexDisc TopCat ⋙ topToPreord).obj
        X) ≃o
    ↑((𝟭 Preord).obj X)
state_after: X : Preord
⊢ Specialization (WithUpperSet ↑X) ≃o ↑X
tactic: dsimp
state_before: X : Preord
⊢ Specialization (WithUpperSet ↑X) ≃o ↑X
state_after: no goals
tactic: exact (orderIsoSpecializationWithUpperSetTopology X).symm
Theorem: IsUnifLocDoublingMeasure.eventually_measure_le_scaling_constant_mul
File: Mathlib/MeasureTheory/Measure/Doubling.lean

Proof steps:
state_before: α : Type u_1
inst✝² : MetricSpace α
inst✝¹ : MeasurableSpace α
μ : Measure α
inst✝ : IsUnifLocDoublingMeasure μ
K : ℝ
⊢ ∀ᶠ (r : ℝ) in 𝓝[>] 0, ∀ (x : α), μ (closedBall x (K * r)) ≤ ↑(scalingConstantOf μ K) * μ (closedBall x r)
state_after: case h
α : Type u_1
inst✝² : MetricSpace α
inst✝¹ : MeasurableSpace α
μ : Measure α
inst✝ : IsUnifLocDoublingMeasure μ
K r : ℝ
hr : ∀ (x : α), ∀ t ≤ K, μ (closedBall x (t * r)) ≤ ↑(Classical.choose ⋯) * μ (closedBall x r)
x : α
⊢ μ (closedBall x (K * r)) ≤ ↑(scalingConstantOf μ K) * μ (closedBall x r)
tactic: filter_upwards [Classical.choose_spec
      (exists_eventually_forall_measure_closedBall_le_mul μ K)] with r hr x
state_before: case h
α : Type u_1
inst✝² : MetricSpace α
inst✝¹ : MeasurableSpace α
μ : Measure α
inst✝ : IsUnifLocDoublingMeasure μ
K r : ℝ
hr : ∀ (x : α), ∀ t ≤ K, μ (closedBall x (t * r)) ≤ ↑(Classical.choose ⋯) * μ (closedBall x r)
x : α
⊢ μ (closedBall x (K * r)) ≤ ↑(scalingConstantOf μ K) * μ (closedBall x r)
state_after: no goals
tactic: exact (hr x K le_rfl).trans (mul_le_mul_right' (ENNReal.coe_le_coe.2 (le_max_left _ _)) _)
Theorem: StieltjesFunction.borel_le_measurable
File: Mathlib/MeasureTheory/Measure/Stieltjes.lean

Proof steps:
state_before: f : StieltjesFunction
⊢ borel ℝ ≤ f.outer.caratheodory
state_after: f : StieltjesFunction
⊢ MeasurableSpace.generateFrom (range Ioi) ≤ f.outer.caratheodory
tactic: rw [borel_eq_generateFrom_Ioi]
state_before: f : StieltjesFunction
⊢ MeasurableSpace.generateFrom (range Ioi) ≤ f.outer.caratheodory
state_after: f : StieltjesFunction
⊢ ∀ t ∈ range Ioi, MeasurableSet t
tactic: refine MeasurableSpace.generateFrom_le ?_
state_before: f : StieltjesFunction
⊢ ∀ t ∈ range Ioi, MeasurableSet t
state_after: no goals
tactic: simp (config := { contextual := true }) [f.measurableSet_Ioi]
Theorem: IsPGroup.iff_orderOf
File: Mathlib/GroupTheory/PGroup.lean

Proof steps:
state_before: p : ℕ
G : Type u_1
inst✝ : Group G
hp : Fact (Nat.Prime p)
g : G
k : ℕ
hk : orderOf g = p ^ k
⊢ g ^ p ^ k = 1
state_after: no goals
tactic: rw [← hk, pow_orderOf_eq_one]
Theorem: HomologicalComplex.singleObjHomologySelfIso_inv_naturality
File: Mathlib/Algebra/Homology/SingleHomology.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroObject C
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
j : ι
A B : C
f : A ⟶ B
⊢ (singleObjHomologySelfIso c j A).inv ≫ homologyMap ((single C c j).map f) j = f ≫ (singleObjHomologySelfIso c j B).inv
state_after: no goals
tactic: rw [← cancel_mono (singleObjHomologySelfIso c j B).hom, assoc, assoc,
    singleObjHomologySelfIso_hom_naturality,
    Iso.inv_hom_id_assoc, Iso.inv_hom_id, comp_id]
Theorem: AddChar.pow_mulShift
File: Mathlib/Algebra/Group/AddChar.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝¹ : Ring R
inst✝ : CommMonoid M
ψ : AddChar R M
n : ℕ
⊢ ψ ^ n = ψ.mulShift ↑n
state_after: case h
R : Type u_1
M : Type u_2
inst✝¹ : Ring R
inst✝ : CommMonoid M
ψ : AddChar R M
n : ℕ
x : R
⊢ (ψ ^ n) x = (ψ.mulShift ↑n) x
tactic: ext x
state_before: case h
R : Type u_1
M : Type u_2
inst✝¹ : Ring R
inst✝ : CommMonoid M
ψ : AddChar R M
n : ℕ
x : R
⊢ (ψ ^ n) x = (ψ.mulShift ↑n) x
state_after: no goals
tactic: rw [pow_apply, ← mulShift_spec']
Theorem: Heyting.IsRegular.disjoint_compl_left_iff
File: Mathlib/Order/Heyting/Regular.lean

Proof steps:
state_before: α : Type u_1
inst✝ : HeytingAlgebra α
a b : α
ha : IsRegular a
⊢ Disjoint aᶜ b ↔ b ≤ a
state_after: no goals
tactic: rw [← le_compl_iff_disjoint_left, ha.eq]
Theorem: MeasureTheory.integrable_of_forall_fin_meas_le
File: Mathlib/MeasureTheory/Function/L1Space.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
m : MeasurableSpace α
μ ν : Measure α
inst✝⁴ : MeasurableSpace δ
inst✝³ : NormedAddCommGroup β
inst✝² : NormedAddCommGroup γ
E : Type u_5
m0 : MeasurableSpace α
inst✝¹ : NormedAddCommGroup E
inst✝ : SigmaFinite μ
C : ℝ≥0∞
hC : C < ⊤
f : α → E
hf_meas : AEStronglyMeasurable f μ
hf : ∀ (s : Set α), MeasurableSet s → μ s ≠ ⊤ → ∫⁻ (x : α) in s, ↑‖f x‖₊ ∂μ ≤ C
⊢ SigmaFinite (μ.trim ?m.372407)
state_after: no goals
tactic: rwa [@trim_eq_self _ m]
Theorem: Topology.isLawson_le_isScott
File: Mathlib/Topology/Order/LawsonTopology.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝² : Preorder α
L S : TopologicalSpace α
inst✝¹ : IsLawson α
inst✝ : IsScott α
⊢ L ≤ S
state_after: α : Type u_1
β : Type u_2
inst✝² : Preorder α
L S : TopologicalSpace α
inst✝¹ : IsLawson α
inst✝ : IsScott α
⊢ lawson α ≤ scott α
tactic: rw [@IsScott.topology_eq α _ S _, @IsLawson.topology_eq_lawson α _ L _]
state_before: α : Type u_1
β : Type u_2
inst✝² : Preorder α
L S : TopologicalSpace α
inst✝¹ : IsLawson α
inst✝ : IsScott α
⊢ lawson α ≤ scott α
state_after: no goals
tactic: exact inf_le_right
Theorem: MeasureTheory.Measure.join_zero
File: Mathlib/MeasureTheory/Measure/GiryMonad.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
⊢ join 0 = 0
state_after: case h
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : MeasurableSet s
⊢ (join 0) s = 0 s
tactic: ext1 s hs
state_before: case h
α : Type u_1
β : Type u_2
inst✝¹ : MeasurableSpace α
inst✝ : MeasurableSpace β
s : Set α
hs : MeasurableSet s
⊢ (join 0) s = 0 s
state_after: no goals
tactic: simp only [hs, join_apply, lintegral_zero_measure, coe_zero, Pi.zero_apply]
Theorem: Prod.one_mk_mul_one_mk
File: Mathlib/Algebra/Group/Prod.lean

Proof steps:
state_before: A : Type u_1
B : Type u_2
G : Type u_3
H : Type u_4
M : Type u_5
N : Type u_6
P : Type u_7
inst✝¹ : Monoid M
inst✝ : Mul N
b₁ b₂ : N
⊢ (1, b₁) * (1, b₂) = (1, b₁ * b₂)
state_after: no goals
tactic: rw [mk_mul_mk, mul_one]
Theorem: Stream'.corec_id_id_eq_const
File: Mathlib/Data/Stream/Init.lean

Proof steps:
state_before: α : Type u
β : Type v
δ : Type w
a : α
⊢ corec id id a = const a
state_after: no goals
tactic: rw [corec_def, map_id, iterate_id]
Theorem: UniformContinuous.iterate
File: Mathlib/Topology/UniformSpace/Basic.lean

Proof steps:
state_before: α : Type ua
β : Type ub
γ : Type uc
δ : Type ud
ι : Sort u_1
inst✝¹ : UniformSpace α
inst✝ : UniformSpace β
T : β → β
n : ℕ
h : UniformContinuous T
⊢ UniformContinuous T^[n]
state_after: no goals
tactic: induction n with
  | zero => exact uniformContinuous_id
  | succ n hn => exact Function.iterate_succ _ _ ▸ UniformContinuous.comp hn h
Theorem: convex_stdSimplex
File: Mathlib/Analysis/Convex/Basic.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
ι : Type u_5
inst✝¹ : OrderedSemiring 𝕜
inst✝ : Fintype ι
⊢ Convex 𝕜 (stdSimplex 𝕜 ι)
state_after: case refine_1
𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
ι : Type u_5
inst✝¹ : OrderedSemiring 𝕜
inst✝ : Fintype ι
f : ι → 𝕜
hf : f ∈ stdSimplex 𝕜 ι
g : ι → 𝕜
hg : g ∈ stdSimplex 𝕜 ι
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
x : ι
⊢ 0 ≤ (a • f + b • g) x

case refine_2
𝕜 : Type u_1
E : Type u_2
F : Type u_3
β : Type u_4
ι : Type u_5
inst✝¹ : OrderedSemiring 𝕜
inst✝ : Fintype ι
f : ι → 𝕜
hf : f ∈ stdSimplex 𝕜 ι
g : ι → 𝕜
hg : g ∈ stdSimplex 𝕜 ι
a b : 𝕜
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
⊢ ∑ x : ι, (a • f + b • g) x = 1
tactic: refine fun f hf g hg a b ha hb hab => ⟨fun x => ?_, ?_⟩
Theorem: GenContFract.of_s_succ
File: Mathlib/Algebra/ContinuedFractions/Computation/Translations.lean

Proof steps:
state_before: K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v : K
n✝ n : ℕ
⊢ (of v).s.get? (n + 1) = (of (fract v)⁻¹).s.get? n
state_after: case inl
K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v : K
n✝ n : ℕ
h : fract v = 0
⊢ (of v).s.get? (n + 1) = (of (fract v)⁻¹).s.get? n

case inr
K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v : K
n✝ n : ℕ
h : fract v ≠ 0
⊢ (of v).s.get? (n + 1) = (of (fract v)⁻¹).s.get? n
tactic: rcases eq_or_ne (fract v) 0 with h | h
state_before: case inr
K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v : K
n✝ n : ℕ
h : fract v ≠ 0
⊢ (of v).s.get? (n + 1) = (of (fract v)⁻¹).s.get? n
state_after: case inr.inl
K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v : K
n✝ n : ℕ
h : fract v ≠ 0
h₁ : (of (fract v)⁻¹).s.get? n = none
⊢ (of v).s.get? (n + 1) = (of (fract v)⁻¹).s.get? n

case inr.inr
K : Type u_1
inst✝¹ : LinearOrderedField K
inst✝ : FloorRing K
v : K
n✝ n : ℕ
h : fract v ≠ 0
h₁ : (of (fract v)⁻¹).s.get? n ≠ none
⊢ (of v).s.get? (n + 1) = (of (fract v)⁻¹).s.get? n
tactic: rcases eq_or_ne ((of (fract v)⁻¹).s.get? n) none with h₁ | h₁
Theorem: Polynomial.Separable.map
File: Mathlib/FieldTheory/Separable.lean

Proof steps:
state_before: R : Type u
inst✝¹ : CommSemiring R
S : Type v
inst✝ : CommSemiring S
p : R[X]
h : p.Separable
f : R →+* S
a b : R[X]
H : a * p + b * derivative p = 1
⊢ Polynomial.map f a * Polynomial.map f p + Polynomial.map f b * derivative (Polynomial.map f p) = 1
state_after: no goals
tactic: rw [derivative_map, ← Polynomial.map_mul, ← Polynomial.map_mul, ← Polynomial.map_add, H,
      Polynomial.map_one]
Theorem: Irreducible.dvd_symm
File: Mathlib/Algebra/Associated/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : Monoid α
p q : α
hp : Irreducible p
hq : Irreducible q
⊢ p ∣ q → q ∣ p
state_after: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : Monoid α
p : α
hp : Irreducible p
q' : α
hq : Irreducible (p * q')
⊢ p * q' ∣ p
tactic: rintro ⟨q', rfl⟩
state_before: case intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : Monoid α
p : α
hp : Irreducible p
q' : α
hq : Irreducible (p * q')
⊢ p * q' ∣ p
state_after: no goals
tactic: rw [IsUnit.mul_right_dvd (Or.resolve_left (of_irreducible_mul hq) hp.not_unit)]
Theorem: Nat.totient_eq_div_primeFactors_mul
File: Mathlib/Data/Nat/Totient.lean

Proof steps:
state_before: n : ℕ
⊢ φ n = (n / ∏ p ∈ n.primeFactors, p) * ∏ p ∈ n.primeFactors, (p - 1)
state_after: n : ℕ
⊢ 0 < ∏ p ∈ n.primeFactors, p
tactic: rw [← mul_div_left n.totient, totient_mul_prod_primeFactors, mul_comm,
    Nat.mul_div_assoc _ (prod_primeFactors_dvd n), mul_comm]
state_before: n : ℕ
⊢ 0 < ∏ p ∈ n.primeFactors, p
state_after: no goals
tactic: exact prod_pos (fun p => pos_of_mem_primeFactors)
Theorem: IsAntichain.maximals_eq
File: Mathlib/Order/Minimal.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
r r₁ r₂ : α → α → Prop
s t : Set α
a✝ b✝ x : α
h : IsAntichain r s
a : α
ha : a ∈ s
b : α
hb : b ∈ s
hab : r a b
⊢ r b a
state_after: α : Type u_1
β : Type u_2
r r₁ r₂ : α → α → Prop
s t : Set α
a✝ b x : α
h : IsAntichain r s
a : α
ha hb : a ∈ s
hab : r a a
⊢ r a a
tactic: obtain rfl := h.eq ha hb hab
state_before: α : Type u_1
β : Type u_2
r r₁ r₂ : α → α → Prop
s t : Set α
a✝ b x : α
h : IsAntichain r s
a : α
ha hb : a ∈ s
hab : r a a
⊢ r a a
state_after: no goals
tactic: exact hab
Theorem: Filter.Eventually.volume_pos_of_nhds_real
File: Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean

Proof steps:
state_before: ι : Type u_1
inst✝ : Fintype ι
p : ℝ → Prop
a : ℝ
h : ∀ᶠ (x : ℝ) in 𝓝 a, p x
⊢ 0 < volume {x | p x}
state_after: case intro.intro.intro
ι : Type u_1
inst✝ : Fintype ι
p : ℝ → Prop
a : ℝ
h : ∀ᶠ (x : ℝ) in 𝓝 a, p x
l u : ℝ
hx : a ∈ Ioo l u
hs : Ioo l u ⊆ {x | p x}
⊢ 0 < volume {x | p x}
tactic: rcases h.exists_Ioo_subset with ⟨l, u, hx, hs⟩
state_before: case intro.intro.intro
ι : Type u_1
inst✝ : Fintype ι
p : ℝ → Prop
a : ℝ
h : ∀ᶠ (x : ℝ) in 𝓝 a, p x
l u : ℝ
hx : a ∈ Ioo l u
hs : Ioo l u ⊆ {x | p x}
⊢ 0 < volume {x | p x}
state_after: case intro.intro.intro
ι : Type u_1
inst✝ : Fintype ι
p : ℝ → Prop
a : ℝ
h : ∀ᶠ (x : ℝ) in 𝓝 a, p x
l u : ℝ
hx : a ∈ Ioo l u
hs : Ioo l u ⊆ {x | p x}
⊢ 0 < volume (Ioo l u)
tactic: refine lt_of_lt_of_le ?_ (measure_mono hs)
state_before: case intro.intro.intro
ι : Type u_1
inst✝ : Fintype ι
p : ℝ → Prop
a : ℝ
h : ∀ᶠ (x : ℝ) in 𝓝 a, p x
l u : ℝ
hx : a ∈ Ioo l u
hs : Ioo l u ⊆ {x | p x}
⊢ 0 < volume (Ioo l u)
state_after: no goals
tactic: simpa [-mem_Ioo] using hx.1.trans hx.2
Theorem: List.exists_perm_sublist
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

Proof steps:
state_before: α : Type u_1
l₁ l₂ l₂' : List α
s : l₁ <+ l₂
p : l₂ ~ l₂'
⊢ ∃ l₁', l₁' ~ l₁ ∧ l₁' <+ l₂'
state_after: no goals
tactic: induction p generalizing l₁ with
  | nil => exact ⟨[], sublist_nil.mp s ▸ .rfl, nil_sublist _⟩
  | cons x _ IH =>
    match s with
    | .cons _ s => let ⟨l₁', p', s'⟩ := IH s; exact ⟨l₁', p', s'.cons _⟩
    | .cons₂ _ s => let ⟨l₁', p', s'⟩ := IH s; exact ⟨x :: l₁', p'.cons x, s'.cons₂ _⟩
  | swap x y l' =>
    match s with
    | .cons _ (.cons _ s) => exact ⟨_, .rfl, (s.cons _).cons _⟩
    | .cons _ (.cons₂ _ s) => exact ⟨x :: _, .rfl, (s.cons _).cons₂ _⟩
    | .cons₂ _ (.cons _ s) => exact ⟨y :: _, .rfl, (s.cons₂ _).cons _⟩
    | .cons₂ _ (.cons₂ _ s) => exact ⟨x :: y :: _, .swap .., (s.cons₂ _).cons₂ _⟩
  | trans _ _ IH₁ IH₂ =>
    let ⟨m₁, pm, sm⟩ := IH₁ s
    let ⟨r₁, pr, sr⟩ := IH₂ sm
    exact ⟨r₁, pr.trans pm, sr⟩
Theorem: neg_inv
File: Mathlib/Algebra/Field/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
K : Type u_3
inst✝¹ : DivisionMonoid K
inst✝ : HasDistribNeg K
a b : K
⊢ -a⁻¹ = (-a)⁻¹
state_after: no goals
tactic: rw [inv_eq_one_div, inv_eq_one_div, div_neg_eq_neg_div]
Theorem: Finset.mem_disjUnion
File: Mathlib/Data/Finset/Basic.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
s t : Finset α
h : _root_.Disjoint s t
a : α
⊢ a ∈ s.disjUnion t h ↔ a ∈ s ∨ a ∈ t
state_after: case mk.mk
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
t : Finset α
a : α
val✝ : Multiset α
s : List α
nodup✝ : Nodup (Quot.mk Setoid.r s)
h : _root_.Disjoint { val := Quot.mk Setoid.r s, nodup := nodup✝ } t
⊢ a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝ }.disjUnion t h ↔
    a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝ } ∨ a ∈ t
tactic: rcases s with ⟨⟨s⟩⟩
state_before: case mk.mk
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
t : Finset α
a : α
val✝ : Multiset α
s : List α
nodup✝ : Nodup (Quot.mk Setoid.r s)
h : _root_.Disjoint { val := Quot.mk Setoid.r s, nodup := nodup✝ } t
⊢ a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝ }.disjUnion t h ↔
    a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝ } ∨ a ∈ t
state_after: case mk.mk.mk.mk
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
a : α
val✝¹ : Multiset α
s : List α
nodup✝¹ : Nodup (Quot.mk Setoid.r s)
val✝ : Multiset α
t : List α
nodup✝ : Nodup (Quot.mk Setoid.r t)
h : _root_.Disjoint { val := Quot.mk Setoid.r s, nodup := nodup✝¹ } { val := Quot.mk Setoid.r t, nodup := nodup✝ }
⊢ a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝¹ }.disjUnion { val := Quot.mk Setoid.r t, nodup := nodup✝ } h ↔
    a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝¹ } ∨ a ∈ { val := Quot.mk Setoid.r t, nodup := nodup✝ }
tactic: rcases t with ⟨⟨t⟩⟩
state_before: case mk.mk.mk.mk
α✝ : Type u_1
β : Type u_2
γ : Type u_3
α : Type u_4
a : α
val✝¹ : Multiset α
s : List α
nodup✝¹ : Nodup (Quot.mk Setoid.r s)
val✝ : Multiset α
t : List α
nodup✝ : Nodup (Quot.mk Setoid.r t)
h : _root_.Disjoint { val := Quot.mk Setoid.r s, nodup := nodup✝¹ } { val := Quot.mk Setoid.r t, nodup := nodup✝ }
⊢ a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝¹ }.disjUnion { val := Quot.mk Setoid.r t, nodup := nodup✝ } h ↔
    a ∈ { val := Quot.mk Setoid.r s, nodup := nodup✝¹ } ∨ a ∈ { val := Quot.mk Setoid.r t, nodup := nodup✝ }
state_after: no goals
tactic: apply List.mem_append
Theorem: SimpleGraph.iInf_adj_of_nonempty
File: Mathlib/Combinatorics/SimpleGraph/Basic.lean

Proof steps:
state_before: ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v w : V
e : Sym2 V
inst✝ : Nonempty ι
f : ι → SimpleGraph V
⊢ (⨅ i, f i).Adj a b ↔ ∀ (i : ι), (f i).Adj a b
state_after: no goals
tactic: rw [iInf, sInf_adj_of_nonempty (Set.range_nonempty _), Set.forall_mem_range]
Theorem: isEmpty_fun
File: Mathlib/Logic/IsEmpty.lean

Proof steps:
state_before: α : Sort u_1
β : Sort u_2
γ : Sort u_3
⊢ IsEmpty (α → β) ↔ Nonempty α ∧ IsEmpty β
state_after: no goals
tactic: rw [isEmpty_pi, ← exists_true_iff_nonempty, ← exists_and_right, true_and]