ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: WithTop.sub_eq_top_iff
File: Mathlib/Algebra/Order/Sub/WithTop.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝¹ : Sub α
inst✝ : Bot α
a b : WithTop α
⊢ a - b = ⊤ ↔ a = ⊤ ∧ b ≠ ⊤
state_after: no goals
tactic: induction a <;> induction b <;>
    simp only [← coe_sub, coe_ne_top, sub_top, zero_ne_top, top_sub_coe, false_and, Ne,
      not_true_eq_false, not_false_eq_true, and_false, and_self]
Theorem: IsOpen.isConnected_iff_isPathConnected
File: Mathlib/Topology/Connected/PathConnected.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
⊢ IsPathConnected U ↔ IsConnected U
state_after: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
⊢ PathConnectedSpace ↑U ↔ ConnectedSpace ↑U
tactic: rw [isConnected_iff_connectedSpace, isPathConnected_iff_pathConnectedSpace]
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
⊢ PathConnectedSpace ↑U ↔ ConnectedSpace ↑U
state_after: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
this : LocPathConnectedSpace ↑U
⊢ PathConnectedSpace ↑U ↔ ConnectedSpace ↑U
tactic: haveI := locPathConnected_of_isOpen U_op
state_before: X : Type u_1
Y : Type u_2
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
inst✝ : LocPathConnectedSpace X
U : Set X
U_op : IsOpen U
this : LocPathConnectedSpace ↑U
⊢ PathConnectedSpace ↑U ↔ ConnectedSpace ↑U
state_after: no goals
tactic: exact pathConnectedSpace_iff_connectedSpace
Theorem: TopCat.embedding_of_pullback_embeddings
File: Mathlib/Topology/Category/TopCat/Limits/Pullbacks.lean

Proof steps:
state_before: J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
⊢ Embedding ⇑(limit.π (cospan f g) WalkingCospan.one)
state_after: case h.e'_5.h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
e_2✝ : ↑((cospan f g).obj WalkingCospan.one) = ↑S
⊢ ⇑(limit.π (cospan f g) WalkingCospan.one) = ⇑g ∘ ⇑(pullback.snd f g)
tactic: convert H₂.comp (snd_embedding_of_left_embedding H₁ g)
state_before: case h.e'_5.h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
e_2✝ : ↑((cospan f g).obj WalkingCospan.one) = ↑S
⊢ ⇑(limit.π (cospan f g) WalkingCospan.one) = ⇑g ∘ ⇑(pullback.snd f g)
state_after: case h.e'_5.h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
e_2✝ : ↑((cospan f g).obj WalkingCospan.one) = ↑S
⊢ ⇑(limit.π (cospan f g) WalkingCospan.one) = ⇑(pullback.snd f g ≫ g)
tactic: erw [← coe_comp]
state_before: case h.e'_5.h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
e_2✝ : ↑((cospan f g).obj WalkingCospan.one) = ↑S
⊢ ⇑(limit.π (cospan f g) WalkingCospan.one) = ⇑(pullback.snd f g ≫ g)
state_after: case h.e'_5.h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
e_2✝ : ↑((cospan f g).obj WalkingCospan.one) = ↑S
⊢ ⇑(limit.π (cospan f g) WalkingCospan.right ≫ (cospan f g).map WalkingCospan.Hom.inr) = ⇑(pullback.snd f g ≫ g)
tactic: rw [← limit.w _ WalkingCospan.Hom.inr]
state_before: case h.e'_5.h
J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
H₁ : Embedding ⇑f
H₂ : Embedding ⇑g
e_2✝ : ↑((cospan f g).obj WalkingCospan.one) = ↑S
⊢ ⇑(limit.π (cospan f g) WalkingCospan.right ≫ (cospan f g).map WalkingCospan.Hom.inr) = ⇑(pullback.snd f g ≫ g)
state_after: no goals
tactic: rfl
Theorem: Polynomial.splits_iff_card_roots
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]
⊢ Splits (RingHom.id K) p ↔ Multiset.card p.roots = p.natDegree
state_after: case mp
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]
⊢ Splits (RingHom.id K) p → Multiset.card p.roots = p.natDegree

case mpr
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]
⊢ Multiset.card p.roots = p.natDegree → Splits (RingHom.id K) p
tactic: constructor
Theorem: SimpleGraph.cliqueFinset_map_of_equiv
File: Mathlib/Combinatorics/SimpleGraph/Clique.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
inst✝⁵ : Fintype α
inst✝⁴ : DecidableEq α
inst✝³ : DecidableRel G.Adj
n✝ : ℕ
a b c : α
s : Finset α
inst✝² : DecidableRel H.Adj
inst✝¹ : Fintype β
inst✝ : DecidableEq β
e : α ≃ β
n : ℕ
⊢ ↑((SimpleGraph.map e.toEmbedding G).cliqueFinset n) =
    ↑(map { toFun := map e.toEmbedding, inj' := ⋯ } (G.cliqueFinset n))
state_after: α : Type u_1
β : Type u_2
G H : SimpleGraph α
inst✝⁵ : Fintype α
inst✝⁴ : DecidableEq α
inst✝³ : DecidableRel G.Adj
n✝ : ℕ
a b c : α
s : Finset α
inst✝² : DecidableRel H.Adj
inst✝¹ : Fintype β
inst✝ : DecidableEq β
e : α ≃ β
n : ℕ
⊢ (SimpleGraph.map e.toEmbedding G).cliqueSet n = ⇑{ toFun := map e.toEmbedding, inj' := ⋯ } '' G.cliqueSet n
tactic: push_cast
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
inst✝⁵ : Fintype α
inst✝⁴ : DecidableEq α
inst✝³ : DecidableRel G.Adj
n✝ : ℕ
a b c : α
s : Finset α
inst✝² : DecidableRel H.Adj
inst✝¹ : Fintype β
inst✝ : DecidableEq β
e : α ≃ β
n : ℕ
⊢ (SimpleGraph.map e.toEmbedding G).cliqueSet n = ⇑{ toFun := map e.toEmbedding, inj' := ⋯ } '' G.cliqueSet n
state_after: no goals
tactic: exact cliqueSet_map_of_equiv _ _ _
Theorem: Field.closure_subset
File: Mathlib/Deprecated/Subfield.lean

Proof steps:
state_before: F : Type u_1
inst✝ : Field F
S T : Set F
hT : IsSubfield T
H : S ⊆ T
⊢ closure S ⊆ T
state_after: case intro.intro.intro.intro.refl
F : Type u_1
inst✝ : Field F
S T : Set F
hT : IsSubfield T
H : S ⊆ T
p : F
hp : p ∈ Ring.closure S
q : F
hq : q ∈ Ring.closure S
⊢ p / q ∈ T
tactic: rintro _ ⟨p, hp, q, hq, hq0, rfl⟩
state_before: case intro.intro.intro.intro.refl
F : Type u_1
inst✝ : Field F
S T : Set F
hT : IsSubfield T
H : S ⊆ T
p : F
hp : p ∈ Ring.closure S
q : F
hq : q ∈ Ring.closure S
⊢ p / q ∈ T
state_after: no goals
tactic: exact hT.div_mem (Ring.closure_subset hT.toIsSubring H hp)
    (Ring.closure_subset hT.toIsSubring H hq)
Theorem: HurwitzZeta.tendsto_hurwitzZetaEven_sub_one_div_nhds_one
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

Proof steps:
state_before: a : UnitAddCircle
⊢ Tendsto (fun s => hurwitzZetaEven a s - 1 / (s - 1) / s.Gammaℝ) (𝓝 1) (𝓝 (hurwitzZetaEven a 1))
state_after: no goals
tactic: simpa only [one_div, sub_self, div_zero, Gammaℝ_one, div_one, sub_zero] using
    (differentiableAt_hurwitzZetaEven_sub_one_div a).continuousAt.tendsto
Theorem: CategoryTheory.ComposableArrows.scMapIso_hom
File: Mathlib/Algebra/Homology/ExactSequence.lean

Proof steps:
state_before: C : Type u_1
inst✝¹ : Category.{?u.53009, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S S₁ S₂ : ComposableArrows C n
e : S₁ ≅ S₂
h₁ : S₁.IsComplex
h₂ : S₂.IsComplex
i : ℕ
hi : autoParam (i + 2 ≤ n) _auto✝
⊢ scMap e.hom h₁ h₂ i ⋯ ≫ scMap e.inv h₂ h₁ i ⋯ = 𝟙 (S₁.sc h₁ i ⋯)
state_after: no goals
tactic: ext <;> dsimp <;> simp
state_before: C : Type u_1
inst✝¹ : Category.{?u.53009, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S S₁ S₂ : ComposableArrows C n
e : S₁ ≅ S₂
h₁ : S₁.IsComplex
h₂ : S₂.IsComplex
i : ℕ
hi : autoParam (i + 2 ≤ n) _auto✝
⊢ scMap e.inv h₂ h₁ i ⋯ ≫ scMap e.hom h₁ h₂ i ⋯ = 𝟙 (S₂.sc h₂ i ⋯)
state_after: no goals
tactic: ext <;> dsimp <;> simp
Theorem: Nat.minFac_lemma
File: Mathlib/Data/Nat/Prime/Defs.lean

Proof steps:
state_before: n✝ n k : ℕ
h : ¬n < k * k
⊢ 0 < 2
state_after: no goals
tactic: decide
Theorem: ZMod.val_one_eq_one_mod
File: Mathlib/Data/ZMod/Basic.lean

Proof steps:
state_before: m n✝ n : ℕ
⊢ val 1 = 1 % n
state_after: no goals
tactic: rw [← Nat.cast_one, val_natCast]
Theorem: mul_dvd_mul_iff_left
File: Mathlib/Algebra/GroupWithZero/Divisibility.lean

Proof steps:
state_before: α : Type u_1
inst✝ : CancelMonoidWithZero α
a b c : α
ha : a ≠ 0
d : α
⊢ a * c = a * b * d ↔ c = b * d
state_after: no goals
tactic: rw [mul_assoc, mul_right_inj' ha]
Theorem: Real.toNNReal_lt_natCast'
File: Mathlib/Data/NNReal/Basic.lean

Proof steps:
state_before: n : ℕ
r : ℝ
⊢ r.toNNReal < ↑n ↔ r < ↑n ∧ n ≠ 0
state_after: no goals
tactic: simpa [pos_iff_ne_zero] using toNNReal_lt_toNNReal_iff' (r := r) (p := n)
Theorem: Antitone.map_iSup_of_continuousAt'
File: Mathlib/Topology/Order/Monotone.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁷ : ConditionallyCompleteLinearOrder α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : OrderTopology α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderClosedTopology β
inst✝¹ : Nonempty γ
ι : Sort u_4
inst✝ : Nonempty ι
f : α → β
g : ι → α
Cf : ContinuousAt f (iSup g)
Af : Antitone f
bdd : autoParam (BddAbove (range g)) _auto✝
⊢ f (⨆ i, g i) = ⨅ i, f (g i)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁷ : ConditionallyCompleteLinearOrder α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : OrderTopology α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderClosedTopology β
inst✝¹ : Nonempty γ
ι : Sort u_4
inst✝ : Nonempty ι
f : α → β
g : ι → α
Cf : ContinuousAt f (iSup g)
Af : Antitone f
bdd : autoParam (BddAbove (range g)) _auto✝
⊢ sInf (range (f ∘ g)) = sInf (range fun i => f (g i))
tactic: rw [iSup, Antitone.map_sSup_of_continuousAt' Cf Af (range_nonempty g) bdd, ← range_comp, iInf]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁷ : ConditionallyCompleteLinearOrder α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : OrderTopology α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderClosedTopology β
inst✝¹ : Nonempty γ
ι : Sort u_4
inst✝ : Nonempty ι
f : α → β
g : ι → α
Cf : ContinuousAt f (iSup g)
Af : Antitone f
bdd : autoParam (BddAbove (range g)) _auto✝
⊢ sInf (range (f ∘ g)) = sInf (range fun i => f (g i))
state_after: no goals
tactic: rfl
Theorem: joinedIn_univ
File: Mathlib/Topology/Connected/PathConnected.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
x y z : X
ι : Type u_3
F : Set X
⊢ JoinedIn univ x y ↔ Joined x y
state_after: no goals
tactic: simp [JoinedIn, Joined, exists_true_iff_nonempty]
Theorem: Order.Ideal.lt_sup_principal_of_not_mem
File: Mathlib/Order/Ideal.lean

Proof steps:
state_before: P : Type u_1
inst✝¹ : SemilatticeSup P
inst✝ : IsDirected P fun x x_1 => x ≥ x_1
x : P
I J K s t : Ideal P
hx : x ∉ I
h : I = I ⊔ principal x
⊢ x ∈ I
state_after: no goals
tactic: simpa only [left_eq_sup, principal_le_iff] using h
Theorem: Finset.mulIndicator_biUnion
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

Proof steps:
state_before: ι : Type u_1
κ✝¹ : Type u_2
α : Type u_3
β : Type u_4
γ : Type u_5
s✝ s₁ s₂ : Finset α
a : α
f✝ g : α → β
inst✝ : CommMonoid β
κ✝ : Type u_6
κ : Type u_7
s : Finset ι
t : ι → Set κ
f : κ → β
⊢ (↑s).PairwiseDisjoint t → (⋃ i ∈ s, t i).mulIndicator f = fun a => ∏ i ∈ s, (t i).mulIndicator f a
state_after: no goals
tactic: classical
  refine Finset.induction_on s (by simp) fun i s hi ih hs ↦ funext fun j ↦ ?_
  rw [prod_insert hi, set_biUnion_insert, mulIndicator_union_of_not_mem_inter,
    ih (hs.subset <| subset_insert _ _)]
  simp only [not_exists, exists_prop, mem_iUnion, mem_inter_iff, not_and]
  exact fun hji i' hi' hji' ↦ (ne_of_mem_of_not_mem hi' hi).symm <|
    hs.elim_set (mem_insert_self _ _) (mem_insert_of_mem hi') _ hji hji'
Theorem: MeasureTheory.IsStoppingTime.measurableSet_ge'
File: Mathlib/Probability/Process/Stopping.lean

Proof steps:
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
⊢ MeasurableSet {ω | i ≤ τ ω}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
this : {ω | i ≤ τ ω} = {ω | τ ω = i} ∪ {ω | i < τ ω}
⊢ MeasurableSet {ω | i ≤ τ ω}
tactic: have : {ω | i ≤ τ ω} = {ω | τ ω = i} ∪ {ω | i < τ ω} := by
    ext1 ω
    simp only [le_iff_lt_or_eq, Set.mem_setOf_eq, Set.mem_union]
    rw [@eq_comm _ i, or_comm]
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
this : {ω | i ≤ τ ω} = {ω | τ ω = i} ∪ {ω | i < τ ω}
⊢ MeasurableSet {ω | i ≤ τ ω}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
this : {ω | i ≤ τ ω} = {ω | τ ω = i} ∪ {ω | i < τ ω}
⊢ MeasurableSet ({ω | τ ω = i} ∪ {ω | i < τ ω})
tactic: rw [this]
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
inst✝² : TopologicalSpace ι
inst✝¹ : OrderTopology ι
inst✝ : FirstCountableTopology ι
hτ : IsStoppingTime f τ
i : ι
this : {ω | i ≤ τ ω} = {ω | τ ω = i} ∪ {ω | i < τ ω}
⊢ MeasurableSet ({ω | τ ω = i} ∪ {ω | i < τ ω})
state_after: no goals
tactic: exact (hτ.measurableSet_eq' i).union (hτ.measurableSet_gt' i)
Theorem: StructureGroupoid.id_mem_maximalAtlas
File: Mathlib/Geometry/Manifold/ChartedSpace.lean

Proof steps:
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝² : TopologicalSpace H
inst✝¹ : TopologicalSpace M
inst✝ : ChartedSpace H M
G : StructureGroupoid H
⊢ PartialHomeomorph.refl H ∈ atlas H H
state_after: no goals
tactic: simp
Theorem: LinearOrderedField.inducedMap_inv_self
File: Mathlib/Algebra/Order/CompleteField.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝³ : LinearOrderedField α
inst✝² : ConditionallyCompleteLinearOrderedField β
inst✝¹ : ConditionallyCompleteLinearOrderedField γ
inst✝ : Archimedean α
a : α
b✝ : β
q : ℚ
b : β
⊢ inducedMap γ β (inducedMap β γ b) = b
state_after: no goals
tactic: rw [inducedMap_inducedMap, inducedMap_self]
Theorem: InnerProductSpace.volume_closedBall
File: Mathlib/MeasureTheory/Measure/Lebesgue/VolumeOfBalls.lean

Proof steps:
state_before: E : Type u_1
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : InnerProductSpace ℝ E
inst✝³ : FiniteDimensional ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
inst✝ : Nontrivial E
x : E
r : ℝ
⊢ volume (Metric.closedBall x r) =
    ENNReal.ofReal r ^ finrank ℝ E * ENNReal.ofReal (√π ^ finrank ℝ E / Gamma (↑(finrank ℝ E) / 2 + 1))
state_after: no goals
tactic: rw [addHaar_closedBall_eq_addHaar_ball, InnerProductSpace.volume_ball _]
Theorem: UniformInducing.equicontinuous_iff
File: Mathlib/Topology/UniformSpace/Equicontinuity.lean

Proof steps:
state_before: ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
F : ι → X → α
u : α → β
hu : UniformInducing u
⊢ Equicontinuous F ↔ Equicontinuous ((fun x => u ∘ x) ∘ F)
state_after: case a
ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
F : ι → X → α
u : α → β
hu : UniformInducing u
x : X
⊢ EquicontinuousAt F x ↔ EquicontinuousAt ((fun x => u ∘ x) ∘ F) x
tactic: congrm ∀ x, ?_
state_before: case a
ι : Type u_1
κ : Type u_2
X : Type u_3
X' : Type u_4
Y : Type u_5
Z : Type u_6
α : Type u_7
α' : Type u_8
β : Type u_9
β' : Type u_10
γ : Type u_11
𝓕 : Type u_12
tX : TopologicalSpace X
tY : TopologicalSpace Y
tZ : TopologicalSpace Z
uα : UniformSpace α
uβ : UniformSpace β
uγ : UniformSpace γ
F : ι → X → α
u : α → β
hu : UniformInducing u
x : X
⊢ EquicontinuousAt F x ↔ EquicontinuousAt ((fun x => u ∘ x) ∘ F) x
state_after: no goals
tactic: rw [hu.equicontinuousAt_iff]
Theorem: Complex.arg_mul_cos_add_sin_mul_I_coe_angle
File: Mathlib/Analysis/SpecialFunctions/Complex/Arg.lean

Proof steps:
state_before: a x z : ℂ
r : ℝ
hr : 0 < r
θ : Real.Angle
⊢ ↑(↑r * (↑θ.cos + ↑θ.sin * I)).arg = θ
state_after: case h
a x z : ℂ
r : ℝ
hr : 0 < r
θ : ℝ
⊢ ↑(↑r * (↑(↑θ).cos + ↑(↑θ).sin * I)).arg = ↑θ
tactic: induction' θ using Real.Angle.induction_on with θ
state_before: case h
a x z : ℂ
r : ℝ
hr : 0 < r
θ : ℝ
⊢ ↑(↑r * (↑(↑θ).cos + ↑(↑θ).sin * I)).arg = ↑θ
state_after: case h
a x z : ℂ
r : ℝ
hr : 0 < r
θ : ℝ
⊢ ∃ k, (↑r * (↑(Real.cos θ) + ↑(Real.sin θ) * I)).arg - θ = 2 * π * ↑k
tactic: rw [Real.Angle.cos_coe, Real.Angle.sin_coe, Real.Angle.angle_eq_iff_two_pi_dvd_sub]
state_before: case h
a x z : ℂ
r : ℝ
hr : 0 < r
θ : ℝ
⊢ ∃ k, (↑r * (↑(Real.cos θ) + ↑(Real.sin θ) * I)).arg - θ = 2 * π * ↑k
state_after: case h
a x z : ℂ
r : ℝ
hr : 0 < r
θ : ℝ
⊢ (↑r * (↑(Real.cos θ) + ↑(Real.sin θ) * I)).arg - θ = 2 * π * ↑⌊(π - θ) / (2 * π)⌋
tactic: use ⌊(π - θ) / (2 * π)⌋
state_before: case h
a x z : ℂ
r : ℝ
hr : 0 < r
θ : ℝ
⊢ (↑r * (↑(Real.cos θ) + ↑(Real.sin θ) * I)).arg - θ = 2 * π * ↑⌊(π - θ) / (2 * π)⌋
state_after: no goals
tactic: exact mod_cast arg_mul_cos_add_sin_mul_I_sub hr θ
Theorem: CategoryTheory.Idempotents.split_iff_of_iso
File: Mathlib/CategoryTheory/Idempotents/Basic.lean

Proof steps:
state_before: C : Type u_1
inst✝ : Category.{u_2, u_1} C
X X' : C
φ : X ≅ X'
p : X ⟶ X
p' : X' ⟶ X'
hpp' : p ≫ φ.hom = φ.hom ≫ p'
⊢ (∃ Y i e, i ≫ e = 𝟙 Y ∧ e ≫ i = p) ↔ ∃ Y' i' e', i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p'
state_after: case mp
C : Type u_1
inst✝ : Category.{u_2, u_1} C
X X' : C
φ : X ≅ X'
p : X ⟶ X
p' : X' ⟶ X'
hpp' : p ≫ φ.hom = φ.hom ≫ p'
⊢ (∃ Y i e, i ≫ e = 𝟙 Y ∧ e ≫ i = p) → ∃ Y' i' e', i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p'

case mpr
C : Type u_1
inst✝ : Category.{u_2, u_1} C
X X' : C
φ : X ≅ X'
p : X ⟶ X
p' : X' ⟶ X'
hpp' : p ≫ φ.hom = φ.hom ≫ p'
⊢ (∃ Y' i' e', i' ≫ e' = 𝟙 Y' ∧ e' ≫ i' = p') → ∃ Y i e, i ≫ e = 𝟙 Y ∧ e ≫ i = p
tactic: constructor
Theorem: inv_mul_cancel_comm
File: Mathlib/Algebra/Group/Defs.lean

Proof steps:
state_before: G : Type u_1
inst✝ : CommGroup G
a b : G
⊢ a⁻¹ * b * a = b
state_after: no goals
tactic: rw [mul_comm, mul_inv_cancel_left]
Theorem: CategoryTheory.IsKernelPair.of_isIso_of_mono
File: Mathlib/CategoryTheory/Limits/Shapes/KernelPair.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ IsKernelPair f a a
state_after: C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ IsPullback a a f f
tactic: change IsPullback _ _ _ _
state_before: C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ IsPullback a a f f
state_after: case h.e'_8
C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ a = a ≫ 𝟙 X

case h.e'_9
C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ f = 𝟙 X ≫ f
tactic: convert (IsPullback.of_horiz_isIso ⟨(rfl : a ≫ 𝟙 X = _ )⟩).paste_vert (IsKernelPair.id_of_mono f)
state_before: case h.e'_8
C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ a = a ≫ 𝟙 X

case h.e'_9
C : Type u
inst✝² : Category.{v, u} C
R X Y Z : C
f : X ⟶ Y
a b : R ⟶ X
inst✝¹ : IsIso a
inst✝ : Mono f
⊢ f = 𝟙 X ≫ f
state_after: no goals
tactic: all_goals { simp }
Theorem: edist_sub_left
File: Mathlib/Topology/MetricSpace/IsometricSMul.lean

Proof steps:
state_before: M : Type u
G : Type v
X : Type w
inst✝⁶ : PseudoEMetricSpace X
inst✝⁵ : Group G
inst✝⁴ : MulAction G X
inst✝³ : IsometricSMul G X
inst✝² : PseudoEMetricSpace G
inst✝¹ : IsometricSMul G G
inst✝ : IsometricSMul Gᵐᵒᵖ G
a b c : G
⊢ edist (a / b) (a / c) = edist b c
state_after: no goals
tactic: rw [div_eq_mul_inv, div_eq_mul_inv, edist_mul_left, edist_inv_inv]
Theorem: CircleDeg1Lift.le_iterate_pos_iff
File: Mathlib/Dynamics/Circle/RotationNumber/TranslationNumber.lean

Proof steps:
state_before: f g : CircleDeg1Lift
x : ℝ
m : ℤ
n : ℕ
hn : 0 < n
⊢ x + ↑n * ↑m ≤ (⇑f)^[n] x ↔ x + ↑m ≤ f x
state_after: no goals
tactic: simpa only [not_lt] using not_congr (f.iterate_pos_lt_iff hn)
Theorem: Nat.Prime.even_sub_one
File: Mathlib/Data/Nat/Prime/Basic.lean

Proof steps:
state_before: n✝ p : ℕ
hp : Prime p
h2 : p ≠ 2
n : ℕ
hn : p = 2 * n + 1
⊢ p - 1 = n + n
state_after: no goals
tactic: rw [hn, Nat.add_sub_cancel, two_mul]
Theorem: Polynomial.Monic.not_dvd_of_natDegree_lt
File: Mathlib/Algebra/Polynomial/Monic.lean

Proof steps:
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝ : Semiring R
p q r : R[X]
hp : p.Monic
h0 : q ≠ 0
hl : q.natDegree < p.natDegree
⊢ ¬p ∣ q
state_after: case intro
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝ : Semiring R
p r✝ : R[X]
hp : p.Monic
r : R[X]
h0 : p * r ≠ 0
hl : (p * r).natDegree < p.natDegree
⊢ False
tactic: rintro ⟨r, rfl⟩
state_before: case intro
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝ : Semiring R
p r✝ : R[X]
hp : p.Monic
r : R[X]
h0 : p * r ≠ 0
hl : (p * r).natDegree < p.natDegree
⊢ False
state_after: case intro
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝ : Semiring R
p r✝ : R[X]
hp : p.Monic
r : R[X]
h0 : p * r ≠ 0
hl : p.natDegree + r.natDegree < p.natDegree
⊢ False
tactic: rw [hp.natDegree_mul' <| right_ne_zero_of_mul h0] at hl
state_before: case intro
R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝ : Semiring R
p r✝ : R[X]
hp : p.Monic
r : R[X]
h0 : p * r ≠ 0
hl : p.natDegree + r.natDegree < p.natDegree
⊢ False
state_after: no goals
tactic: exact hl.not_le (Nat.le_add_right _ _)
Theorem: Set.mul_eq_one_iff
File: Mathlib/Data/Set/Pointwise/Basic.lean

Proof steps:
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : DivisionMonoid α
s t : Set α
⊢ s * t = 1 ↔ ∃ a b, s = {a} ∧ t = {b} ∧ a * b = 1
state_after: case refine_1
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : DivisionMonoid α
s t : Set α
h : s * t = 1
⊢ ∃ a b, s = {a} ∧ t = {b} ∧ a * b = 1

case refine_2
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝ : DivisionMonoid α
s t : Set α
⊢ (∃ a b, s = {a} ∧ t = {b} ∧ a * b = 1) → s * t = 1
tactic: refine ⟨fun h => ?_, ?_⟩