ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Metric.finite_approx_of_totallyBounded
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

Proof steps:
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε ε₁ ε₂ : ℝ
s✝ s : Set α
hs : TotallyBounded s
⊢ ∀ ε > 0, ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, ball y ε
state_after: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε✝ ε₁ ε₂ : ℝ
s✝ s : Set α
hs : TotallyBounded s
ε : ℝ
ε_pos : ε > 0
⊢ ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, ball y ε
tactic: intro ε ε_pos
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε✝ ε₁ ε₂ : ℝ
s✝ s : Set α
hs : TotallyBounded s
ε : ℝ
ε_pos : ε > 0
⊢ ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, ball y ε
state_after: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε✝ ε₁ ε₂ : ℝ
s✝ s : Set α
hs : ∀ d ∈ 𝓤 α, ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
ε : ℝ
ε_pos : ε > 0
⊢ ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, ball y ε
tactic: rw [totallyBounded_iff_subset] at hs
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y z : α
δ ε✝ ε₁ ε₂ : ℝ
s✝ s : Set α
hs : ∀ d ∈ 𝓤 α, ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, {x | (x, y) ∈ d}
ε : ℝ
ε_pos : ε > 0
⊢ ∃ t ⊆ s, t.Finite ∧ s ⊆ ⋃ y ∈ t, ball y ε
state_after: no goals
tactic: exact hs _ (dist_mem_uniformity ε_pos)
Theorem: Absorbs.univ
File: Mathlib/Topology/Bornology/Absorbs.lean

Proof steps:
state_before: G₀ : Type u_1
α : Type u_2
inst✝² : GroupWithZero G₀
inst✝¹ : Bornology G₀
inst✝ : MulAction G₀ α
s t u : Set α
S : Set (Set α)
a : G₀
ha : a ≠ 0
⊢ s ⊆ a • univ
state_after: G₀ : Type u_1
α : Type u_2
inst✝² : GroupWithZero G₀
inst✝¹ : Bornology G₀
inst✝ : MulAction G₀ α
s t u : Set α
S : Set (Set α)
a : G₀
ha : a ≠ 0
⊢ s ⊆ univ
tactic: rw [smul_set_univ₀ ha]
state_before: G₀ : Type u_1
α : Type u_2
inst✝² : GroupWithZero G₀
inst✝¹ : Bornology G₀
inst✝ : MulAction G₀ α
s t u : Set α
S : Set (Set α)
a : G₀
ha : a ≠ 0
⊢ s ⊆ univ
state_after: no goals
tactic: apply subset_univ
Theorem: one_le_gauge_of_not_mem
File: Mathlib/Analysis/Convex/Gauge.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
x : E
a : ℝ
hs₁ : StarConvex ℝ 0 s
hs₂ : Absorbs ℝ s {x}
hx : x ∉ s
⊢ x ∉ 1 • s
state_after: no goals
tactic: rwa [one_smul]
Theorem: IsAddHom.to_isAddMonoidHom
File: Mathlib/Deprecated/Group.lean

Proof steps:
state_before: α : Type u
β : Type v
inst✝¹ : MulOneClass α
inst✝ : Group β
f : α → β
hf : IsMulHom f
⊢ f 1 * f 1 = f 1
state_after: no goals
tactic: rw [← hf.map_mul, one_mul]
Theorem: contDiff_top_iff_fderiv
File: Mathlib/Analysis/Calculus/ContDiff/Defs.lean

Proof steps:
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
⊢ ContDiff 𝕜 ⊤ f ↔ Differentiable 𝕜 f ∧ ContDiff 𝕜 ⊤ fun y => fderiv 𝕜 f y
state_after: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
⊢ ContDiffOn 𝕜 ⊤ f univ ↔ DifferentiableOn 𝕜 f univ ∧ ContDiffOn 𝕜 ⊤ (fun y => fderivWithin 𝕜 f univ y) univ
tactic: simp only [← contDiffOn_univ, ← differentiableOn_univ, ← fderivWithin_univ]
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type uX
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f f₁ : E → F
g : F → G
x x₀ : E
c : F
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
⊢ ContDiffOn 𝕜 ⊤ f univ ↔ DifferentiableOn 𝕜 f univ ∧ ContDiffOn 𝕜 ⊤ (fun y => fderivWithin 𝕜 f univ y) univ
state_after: no goals
tactic: rw [contDiffOn_top_iff_fderivWithin uniqueDiffOn_univ]
Theorem: EllipticCurve.variableChange_a₃
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
E : EllipticCurve R
C : WeierstrassCurve.VariableChange R
⊢ ↑(C.u⁻¹ ^ 12 * E.Δ') = (E.variableChange C).Δ
state_after: no goals
tactic: rw [Units.val_mul, Units.val_pow_eq_pow_val, coe_Δ', E.variableChange_Δ]
Theorem: NumberField.mem_span_basisOfFractionalIdeal
File: Mathlib/NumberTheory/NumberField/FractionalIdeal.lean

Proof steps:
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
x : K
⊢ x ∈ Submodule.span ℤ (Set.range ⇑(basisOfFractionalIdeal K I)) ↔ x ∈ ↑↑I
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
x : K
⊢ x ∈ LinearMap.range (↑ℤ (↑↑I).subtype) ↔ x ∈ ↑↑I
tactic: rw [basisOfFractionalIdeal, (fractionalIdealBasis K I.1).ofIsLocalizedModule_span ℚ ℤ⁰ _]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
x : K
⊢ x ∈ LinearMap.range (↑ℤ (↑↑I).subtype) ↔ x ∈ ↑↑I
state_after: no goals
tactic: simp
Theorem: RCLike.one_im
File: Mathlib/Analysis/RCLike/Basic.lean

Proof steps:
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
⊢ im 1 = 0
state_after: no goals
tactic: rw [← ofReal_one, ofReal_im]
Theorem: Function.Exact.of_ladder_addEquiv_of_exact'
File: Mathlib/Algebra/Exact.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑g₁₂ ⇑g₂₃
⊢ Exact ⇑f₁₂ ⇑f₂₃
state_after: case refine_1
R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑g₁₂ ⇑g₂₃
⊢ f₁₂.comp ↑e₁.symm = (↑e₂.symm).comp g₁₂

case refine_2
R : Type u_1
M : Type u_2
M' : Type u_3
N : Type u_4
N' : Type u_5
P : Type u_6
P' : Type u_7
inst✝⁸ : AddGroup M
inst✝⁷ : AddGroup N
inst✝⁶ : AddGroup P
f : M →+ N
g : N →+ P
X₁ : Type u_8
X₂ : Type u_9
X₃ : Type u_10
Y₁ : Type u_11
Y₂ : Type u_12
Y₃ : Type u_13
inst✝⁵ : AddCommMonoid X₁
inst✝⁴ : AddCommMonoid X₂
inst✝³ : AddCommMonoid X₃
inst✝² : AddCommMonoid Y₁
inst✝¹ : AddCommMonoid Y₂
inst✝ : AddCommMonoid Y₃
e₁ : X₁ ≃+ Y₁
e₂ : X₂ ≃+ Y₂
e₃ : X₃ ≃+ Y₃
f₁₂ : X₁ →+ X₂
f₂₃ : X₂ →+ X₃
g₁₂ : Y₁ →+ Y₂
g₂₃ : Y₂ →+ Y₃
comm₁₂ : g₁₂.comp ↑e₁ = (↑e₂).comp f₁₂
comm₂₃ : g₂₃.comp ↑e₂ = (↑e₃).comp f₂₃
H : Exact ⇑g₁₂ ⇑g₂₃
⊢ f₂₃.comp ↑e₂.symm = (↑e₃.symm).comp g₂₃
tactic: refine of_ladder_addEquiv_of_exact e₁.symm e₂.symm e₃.symm ?_ ?_ H
Theorem: Sym.cons_of_coe_eq
File: Mathlib/Data/Sym/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
v : Vector α n
⊢ ↑(a ::ₛ ofVector v) = ↑(ofVector (a ::ᵥ v))
state_after: case mk
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
val✝ : List α
property✝ : val✝.length = n
⊢ ↑(a ::ₛ ofVector ⟨val✝, property✝⟩) = ↑(ofVector (a ::ᵥ ⟨val✝, property✝⟩))
tactic: cases v
state_before: case mk
α : Type u_1
β : Type u_2
n n' m : ℕ
s : Sym α n
a✝ b a : α
val✝ : List α
property✝ : val✝.length = n
⊢ ↑(a ::ₛ ofVector ⟨val✝, property✝⟩) = ↑(ofVector (a ::ᵥ ⟨val✝, property✝⟩))
state_after: no goals
tactic: rfl
Theorem: Finset.image₂_singleton_left
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 x : γ
⊢ x ∈ image₂ f {a} t ↔ x ∈ image (fun b => f a b) t
state_after: no goals
tactic: simp
Theorem: csInf_Ioi
File: Mathlib/Order/ConditionallyCompleteLattice/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝² : ConditionallyCompleteLattice α
s t : Set α
a b : α
inst✝¹ : NoMaxOrder α
inst✝ : DenselyOrdered α
w : α
hw : a < w
⊢ ∃ a_1 ∈ Ioi a, a_1 < w
state_after: no goals
tactic: simpa using exists_between hw
Theorem: Polynomial.aeval_eq_zero_of_dvd_aeval_eq_zero
File: Mathlib/Algebra/Polynomial/AlgebraMap.lean

Proof steps:
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type u_1
B : Type u_2
a✝ b : R
n : ℕ
inst✝⁹ : CommSemiring R
inst✝⁸ : Semiring A
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R A
inst✝⁴ : Algebra R A'
inst✝³ : Algebra R B
p✝ q✝ : R[X]
x : A
inst✝² : CommSemiring S
inst✝¹ : CommSemiring T
inst✝ : Algebra S T
p q : S[X]
h₁ : p ∣ q
a : T
h₂ : (aeval a) p = 0
⊢ (aeval a) q = 0
state_after: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type u_1
B : Type u_2
a✝ b : R
n : ℕ
inst✝⁹ : CommSemiring R
inst✝⁸ : Semiring A
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R A
inst✝⁴ : Algebra R A'
inst✝³ : Algebra R B
p✝ q✝ : R[X]
x : A
inst✝² : CommSemiring S
inst✝¹ : CommSemiring T
inst✝ : Algebra S T
p q : S[X]
h₁ : p ∣ q
a : T
h₂ : eval a (map (algebraMap S T) p) = 0
⊢ eval a (map (algebraMap S T) q) = 0
tactic: rw [aeval_def, ← eval_map] at h₂ ⊢
state_before: R : Type u
S : Type v
T : Type w
A : Type z
A' : Type u_1
B : Type u_2
a✝ b : R
n : ℕ
inst✝⁹ : CommSemiring R
inst✝⁸ : Semiring A
inst✝⁷ : CommSemiring A'
inst✝⁶ : Semiring B
inst✝⁵ : Algebra R A
inst✝⁴ : Algebra R A'
inst✝³ : Algebra R B
p✝ q✝ : R[X]
x : A
inst✝² : CommSemiring S
inst✝¹ : CommSemiring T
inst✝ : Algebra S T
p q : S[X]
h₁ : p ∣ q
a : T
h₂ : eval a (map (algebraMap S T) p) = 0
⊢ eval a (map (algebraMap S T) q) = 0
state_after: no goals
tactic: exact eval_eq_zero_of_dvd_of_eval_eq_zero (Polynomial.map_dvd (algebraMap S T) h₁) h₂
Theorem: Matrix.det_smul_of_tower
File: Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean

Proof steps:
state_before: m : Type u_1
n : Type u_2
inst✝⁸ : DecidableEq n
inst✝⁷ : Fintype n
inst✝⁶ : DecidableEq m
inst✝⁵ : Fintype m
R : Type v
inst✝⁴ : CommRing R
α : Type u_3
inst✝³ : Monoid α
inst✝² : DistribMulAction α R
inst✝¹ : IsScalarTower α R R
inst✝ : SMulCommClass α R R
c : α
A : Matrix n n R
⊢ (c • A).det = c ^ Fintype.card n • A.det
state_after: no goals
tactic: rw [← smul_one_smul R c A, det_smul, smul_pow, one_pow, smul_mul_assoc, one_mul]
Theorem: ProbabilityTheory.Kernel.isSFiniteKernel_sum
File: Mathlib/Probability/Kernel/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
inst✝ : Countable ι
κs : ι → Kernel α β
hκs : ∀ (n : ι), IsSFiniteKernel (κs n)
⊢ IsSFiniteKernel (Kernel.sum κs)
state_after: case inl
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
inst✝ : Countable ι
κs : ι → Kernel α β
hκs : ∀ (n : ι), IsSFiniteKernel (κs n)
val✝ : Fintype ι
⊢ IsSFiniteKernel (Kernel.sum κs)

case inr
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
inst✝ : Countable ι
κs : ι → Kernel α β
hκs : ∀ (n : ι), IsSFiniteKernel (κs n)
val✝ : Infinite ι
⊢ IsSFiniteKernel (Kernel.sum κs)
tactic: cases fintypeOrInfinite ι
state_before: case inr
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
inst✝ : Countable ι
κs : ι → Kernel α β
hκs : ∀ (n : ι), IsSFiniteKernel (κs n)
val✝ : Infinite ι
⊢ IsSFiniteKernel (Kernel.sum κs)
state_after: case inr.intro
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
inst✝ : Countable ι
κs : ι → Kernel α β
hκs : ∀ (n : ι), IsSFiniteKernel (κs n)
val✝¹ : Infinite ι
val✝ : Denumerable ι
⊢ IsSFiniteKernel (Kernel.sum κs)
tactic: cases nonempty_denumerable ι
state_before: case inr.intro
α : Type u_1
β : Type u_2
ι : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
κ : Kernel α β
inst✝ : Countable ι
κs : ι → Kernel α β
hκs : ∀ (n : ι), IsSFiniteKernel (κs n)
val✝¹ : Infinite ι
val✝ : Denumerable ι
⊢ IsSFiniteKernel (Kernel.sum κs)
state_after: no goals
tactic: exact isSFiniteKernel_sum_of_denumerable hκs
Theorem: Metric.hausdorffDist_closure₁
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

Proof steps:
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoMetricSpace α
inst✝ : PseudoMetricSpace β
s t u : Set α
x y : α
Φ : α → β
⊢ hausdorffDist (closure s) t = hausdorffDist s t
state_after: no goals
tactic: simp [hausdorffDist]
Theorem: List.sum_map_zero
File: Mathlib/Algebra/BigOperators/Group/List.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝ : MulOneClass M
l✝ : List M
a : M
l : List ι
⊢ (map (fun x => 1) l).prod = 1
state_after: no goals
tactic: induction l with
  | nil => rfl
  | cons hd tl ih => rw [map_cons, prod_one_cons, ih]
Theorem: isTopologicalBasis_pi
File: Mathlib/Topology/Bases.lean

Proof steps:
state_before: ι : Type u_1
X : ι → Type u_2
inst✝ : (i : ι) → TopologicalSpace (X i)
T : (i : ι) → Set (Set (X i))
cond : ∀ (i : ι), IsTopologicalBasis (T i)
⊢ IsTopologicalBasis {S | ∃ U F, (∀ i ∈ F, U i ∈ T i) ∧ S = (↑F).pi U}
state_after: no goals
tactic: simpa only [Set.pi_def] using IsTopologicalBasis.iInf_induced cond eval
Theorem: OpenEmbedding.open_iff_image_open
File: Mathlib/Topology/Maps/Basic.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
hf : OpenEmbedding f
s : Set X
h : IsOpen (f '' s)
⊢ IsOpen s
state_after: case h.e'_3
X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
hf : OpenEmbedding f
s : Set X
h : IsOpen (f '' s)
⊢ f ⁻¹' (f '' s) = s
tactic: convert ← h.preimage hf.toEmbedding.continuous
state_before: case h.e'_3
X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
hf : OpenEmbedding f
s : Set X
h : IsOpen (f '' s)
⊢ f ⁻¹' (f '' s) = s
state_after: no goals
tactic: apply preimage_image_eq _ hf.inj
Theorem: Polynomial.natSepDegree_pow
File: Mathlib/FieldTheory/SeparableDegree.lean

Proof steps:
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
n : ℕ
⊢ (f ^ n).natSepDegree = if n = 0 then 0 else f.natSepDegree
state_after: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
n : ℕ
⊢ (n • f.aroots (AlgebraicClosure F)).toFinset.card = if n = 0 then 0 else (f.aroots (AlgebraicClosure F)).toFinset.card
tactic: simp only [natSepDegree_eq_of_isAlgClosed (AlgebraicClosure F), aroots_pow]
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
n : ℕ
⊢ (n • f.aroots (AlgebraicClosure F)).toFinset.card = if n = 0 then 0 else (f.aroots (AlgebraicClosure F)).toFinset.card
state_after: case pos
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
n : ℕ
h : n = 0
⊢ (n • f.aroots (AlgebraicClosure F)).toFinset.card = if n = 0 then 0 else (f.aroots (AlgebraicClosure F)).toFinset.card

case neg
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
n : ℕ
h : ¬n = 0
⊢ (n • f.aroots (AlgebraicClosure F)).toFinset.card = if n = 0 then 0 else (f.aroots (AlgebraicClosure F)).toFinset.card
tactic: by_cases h : n = 0
state_before: case neg
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
f : F[X]
n : ℕ
h : ¬n = 0
⊢ (n • f.aroots (AlgebraicClosure F)).toFinset.card = if n = 0 then 0 else (f.aroots (AlgebraicClosure F)).toFinset.card
state_after: no goals
tactic: simp only [h, Multiset.toFinset_nsmul _ n h, ite_false]
Theorem: Finset.card_Ioi_eq_card_Ici_sub_one
File: Mathlib/Order/Interval/Finset/Basic.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
inst✝¹ : PartialOrder α
inst✝ : LocallyFiniteOrderTop α
a : α
⊢ (Ioi a).card = (Ici a).card - 1
state_after: no goals
tactic: rw [Ici_eq_cons_Ioi, card_cons, Nat.add_sub_cancel_right]
Theorem: IsometryEquiv.funUnique_invFun
File: Mathlib/Topology/MetricSpace/Isometry.lean

Proof steps:
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
inst✝⁴ : PseudoEMetricSpace α
inst✝³ : PseudoEMetricSpace β
inst✝² : PseudoEMetricSpace γ
inst✝¹ : Unique ι
inst✝ : Fintype ι
x hx : ι → α
⊢ edist ((Equiv.funUnique ι α).toFun x) ((Equiv.funUnique ι α).toFun hx) = edist x hx
state_after: no goals
tactic: simp [edist_pi_def, Finset.univ_unique, Finset.sup_singleton]
Theorem: Cardinal.lift_ord
File: Mathlib/SetTheory/Ordinal/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
c : Cardinal.{v}
⊢ Ordinal.lift.{u, v} c.ord = (lift.{u, v} c).ord
state_after: case refine_1
α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
c : Cardinal.{v}
a : Ordinal.{max v u}
ha : a < Ordinal.lift.{u, v} c.ord
⊢ a < (lift.{u, v} c).ord

case refine_2
α : Type u
β : Type u_1
γ : Type u_2
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
c : Cardinal.{v}
⊢ (lift.{u, v} c).ord ≤ Ordinal.lift.{u, v} c.ord
tactic: refine le_antisymm (le_of_forall_lt fun a ha => ?_) ?_
Theorem: ZMod.χ₄_int_eq_if_mod_four
File: Mathlib/NumberTheory/LegendreSymbol/ZModChar.lean

Proof steps:
state_before: n : ℤ
⊢ χ₄ ↑n = if n % 2 = 0 then 0 else if n % 4 = 1 then 1 else -1
state_after: n : ℤ
help : ∀ (m : ℤ), 0 ≤ m → m < 4 → χ₄ ↑m = if m % 2 = 0 then 0 else if m = 1 then 1 else -1
⊢ χ₄ ↑n = if n % 2 = 0 then 0 else if n % 4 = 1 then 1 else -1
tactic: have help : ∀ m : ℤ, 0 ≤ m → m < 4 → χ₄ m = if m % 2 = 0 then 0 else if m = 1 then 1 else -1 := by
    decide
state_before: n : ℤ
help : ∀ (m : ℤ), 0 ≤ m → m < 4 → χ₄ ↑m = if m % 2 = 0 then 0 else if m = 1 then 1 else -1
⊢ χ₄ ↑n = if n % 2 = 0 then 0 else if n % 4 = 1 then 1 else -1
state_after: n : ℤ
help : ∀ (m : ℤ), 0 ≤ m → m < 4 → χ₄ ↑m = if m % 2 = 0 then 0 else if m = 1 then 1 else -1
⊢ χ₄ ↑(n % ↑4) = if n % 4 % 2 = 0 then 0 else if n % 4 = 1 then 1 else -1
tactic: rw [← Int.emod_emod_of_dvd n (by omega : (2 : ℤ) ∣ 4), ← ZMod.intCast_mod n 4]
state_before: n : ℤ
help : ∀ (m : ℤ), 0 ≤ m → m < 4 → χ₄ ↑m = if m % 2 = 0 then 0 else if m = 1 then 1 else -1
⊢ χ₄ ↑(n % ↑4) = if n % 4 % 2 = 0 then 0 else if n % 4 = 1 then 1 else -1
state_after: no goals
tactic: exact help (n % 4) (Int.emod_nonneg n (by omega)) (Int.emod_lt n (by omega))
Theorem: smul_lt_smul_iff_of_neg_left
File: Mathlib/Algebra/Order/Module/Defs.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
a a₁ a₂ : α
b b₁ b₂ : β
inst✝⁴ : OrderedRing α
inst✝³ : OrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : PosSMulStrictMono α β
inst✝ : PosSMulReflectLT α β
ha : a < 0
⊢ a • b₁ < a • b₂ ↔ b₂ < b₁
state_after: α : Type u_1
β : Type u_2
a a₁ a₂ : α
b b₁ b₂ : β
inst✝⁴ : OrderedRing α
inst✝³ : OrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : PosSMulStrictMono α β
inst✝ : PosSMulReflectLT α β
ha : a < 0
⊢ -a • b₂ < -a • b₁ ↔ b₂ < b₁
tactic: rw [← neg_neg a, neg_smul, neg_smul (-a), neg_lt_neg_iff]
state_before: α : Type u_1
β : Type u_2
a a₁ a₂ : α
b b₁ b₂ : β
inst✝⁴ : OrderedRing α
inst✝³ : OrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : PosSMulStrictMono α β
inst✝ : PosSMulReflectLT α β
ha : a < 0
⊢ -a • b₂ < -a • b₁ ↔ b₂ < b₁
state_after: no goals
tactic: exact smul_lt_smul_iff_of_pos_left (neg_pos_of_neg ha)
Theorem: TopCat.fst_iso_of_right_embedding_range_subset
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
hg : Embedding ⇑g
H : Set.range ⇑f ⊆ Set.range ⇑g
⊢ IsIso (pullback.fst f g)
state_after: J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
hg : Embedding ⇑g
H : Set.range ⇑f ⊆ Set.range ⇑g
esto : ↑(pullback f g) ≃ₜ ↑X :=
  (Homeomorph.ofEmbedding ⇑(pullback.fst f g) ⋯).trans
    { toFun := Subtype.val, invFun := fun x => ⟨x, ⋯⟩, left_inv := ⋯, right_inv := ⋯, continuous_toFun := ⋯,
      continuous_invFun := ⋯ }
⊢ IsIso (pullback.fst f g)
tactic: let esto : (pullback f g : TopCat) ≃ₜ X :=
    (Homeomorph.ofEmbedding _ (fst_embedding_of_right_embedding f hg)).trans
      { toFun := Subtype.val
        invFun := fun x =>
          ⟨x, by
            rw [pullback_fst_range]
            exact ⟨_, (H (Set.mem_range_self x)).choose_spec.symm⟩⟩
        left_inv := fun ⟨_, _⟩ => rfl
        right_inv := fun x => rfl }
state_before: J : Type v
inst✝ : SmallCategory J
X✝ Y✝ Z : TopCat
X Y S : TopCat
f : X ⟶ S
g : Y ⟶ S
hg : Embedding ⇑g
H : Set.range ⇑f ⊆ Set.range ⇑g
esto : ↑(pullback f g) ≃ₜ ↑X :=
  (Homeomorph.ofEmbedding ⇑(pullback.fst f g) ⋯).trans
    { toFun := Subtype.val, invFun := fun x => ⟨x, ⋯⟩, left_inv := ⋯, right_inv := ⋯, continuous_toFun := ⋯,
      continuous_invFun := ⋯ }
⊢ IsIso (pullback.fst f g)
state_after: no goals
tactic: convert (isoOfHomeo esto).isIso_hom
Theorem: AddCommute.sub_sub_sub_comm
File: Mathlib/Algebra/Group/Commute/Basic.lean

Proof steps:
state_before: G : Type u_1
inst✝ : DivisionMonoid G
a b c d : G
hbc : Commute b c
hbd : Commute b⁻¹ d
hcd : Commute c⁻¹ d
⊢ a / b / (c / d) = a / c / (b / d)
state_after: no goals
tactic: simp_rw [div_eq_mul_inv, mul_inv_rev, inv_inv, hbd.symm.eq, hcd.symm.eq,
    hbc.inv_inv.mul_mul_mul_comm]
Theorem: HomologicalComplex.extend.d_none_eq_zero'
File: Mathlib/Algebra/Homology/Embedding/Extend.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{u_4, u_3} C
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
K : HomologicalComplex C c
e : c.Embedding c'
i j : Option ι
hj : j = none
⊢ d K i j = 0
state_after: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{u_4, u_3} C
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
K : HomologicalComplex C c
e : c.Embedding c'
i : Option ι
⊢ d K i none = 0
tactic: subst hj
state_before: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{u_4, u_3} C
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
K : HomologicalComplex C c
e : c.Embedding c'
i : Option ι
⊢ d K i none = 0
state_after: no goals
tactic: cases i <;> rfl