ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Matroid.subset_closure_iff_forall_subset_flat
File: Mathlib/Data/Matroid/Closure.lean

Proof steps:
state_before: ι : Type u_1
α : Type u_2
M : Matroid α
F X✝ Y : Set α
e : α
X : Set α
hX : autoParam (X ⊆ M.E) _auto✝
⊢ Y ⊆ M.closure X ↔ ∀ (F : Set α), M.Flat F → X ⊆ F → Y ⊆ F
state_after: no goals
tactic: simp_rw [M.closure_def' X, subset_sInter_iff, mem_setOf, and_imp]
Theorem: Monotone.image_upperBounds_subset_upperBounds_image
File: Mathlib/Order/Bounds/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝¹ : Preorder α
inst✝ : Preorder β
f : α → β
Hf✝ : Monotone f
a : α
s : Set α
Hf : Monotone f
⊢ f '' upperBounds s ⊆ upperBounds (f '' s)
state_after: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝¹ : Preorder α
inst✝ : Preorder β
f : α → β
Hf✝ : Monotone f
a✝ : α
s : Set α
Hf : Monotone f
a : α
ha : a ∈ upperBounds s
⊢ f a ∈ upperBounds (f '' s)
tactic: rintro _ ⟨a, ha, rfl⟩
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝¹ : Preorder α
inst✝ : Preorder β
f : α → β
Hf✝ : Monotone f
a✝ : α
s : Set α
Hf : Monotone f
a : α
ha : a ∈ upperBounds s
⊢ f a ∈ upperBounds (f '' s)
state_after: no goals
tactic: exact Hf.mem_upperBounds_image ha
Theorem: CategoryTheory.Subobject.ofMkLEMk_comp
File: Mathlib/CategoryTheory/Subobject/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
X Y Z : C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
B A₁ A₂ : C
f : A₁ ⟶ B
g : A₂ ⟶ B
inst✝¹ : Mono f
inst✝ : Mono g
h : mk f ≤ mk g
⊢ ofMkLEMk f g h ≫ g = f
state_after: no goals
tactic: simp [ofMkLEMk]
Theorem: RingCon.sSup_eq_ringConGen
File: Mathlib/RingTheory/Congruence/Basic.lean

Proof steps:
state_before: α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
⊢ sSup S = ringConGen fun x y => ∃ c ∈ S, c x y
state_after: α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
⊢ sSup S = sInf {s | ∀ (x y : R), (∃ c ∈ S, c x y) → s x y}
tactic: rw [ringConGen_eq]
state_before: α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
⊢ sSup S = sInf {s | ∀ (x y : R), (∃ c ∈ S, c x y) → s x y}
state_after: α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
⊢ upperBounds S = {s | ∀ (x y : R), (∃ c ∈ S, c x y) → s x y}
tactic: apply congr_arg sInf
state_before: α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
⊢ upperBounds S = {s | ∀ (x y : R), (∃ c ∈ S, c x y) → s x y}
state_after: case h
α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
x✝ : RingCon R
⊢ x✝ ∈ upperBounds S ↔ x✝ ∈ {s | ∀ (x y : R), (∃ c ∈ S, c x y) → s x y}
tactic: ext
state_before: case h
α : Type u_1
R : Type u_2
inst✝¹ : Add R
inst✝ : Mul R
S : Set (RingCon R)
x✝ : RingCon R
⊢ x✝ ∈ upperBounds S ↔ x✝ ∈ {s | ∀ (x y : R), (∃ c ∈ S, c x y) → s x y}
state_after: no goals
tactic: exact ⟨fun h _ _ ⟨r, hr⟩ => h hr.1 hr.2, fun h r hS _ _ hr => h _ _ ⟨r, hS, hr⟩⟩
Theorem: LinearMap.mem_skewAdjointSubmodule
File: Mathlib/LinearAlgebra/SesquilinearForm.lean

Proof steps:
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : AddCommGroup M₂
inst✝ : Module R M₂
B F : M →ₗ[R] M →ₗ[R] M₂
f : Module.End R M
⊢ f ∈ B.skewAdjointSubmodule ↔ B.IsSkewAdjoint f
state_after: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : AddCommGroup M₂
inst✝ : Module R M₂
B F : M →ₗ[R] M →ₗ[R] M₂
f : Module.End R M
⊢ f ∈ B.skewAdjointSubmodule ↔ (-B).IsAdjointPair B f f
tactic: rw [isSkewAdjoint_iff_neg_self_adjoint]
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
R₃ : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
Mₗ₁ : Type u_9
Mₗ₁' : Type u_10
Mₗ₂ : Type u_11
Mₗ₂' : Type u_12
K : Type u_13
K₁ : Type u_14
K₂ : Type u_15
V : Type u_16
V₁ : Type u_17
V₂ : Type u_18
n : Type u_19
inst✝⁶ : CommRing R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : AddCommGroup M₁
inst✝² : Module R M₁
inst✝¹ : AddCommGroup M₂
inst✝ : Module R M₂
B F : M →ₗ[R] M →ₗ[R] M₂
f : Module.End R M
⊢ f ∈ B.skewAdjointSubmodule ↔ (-B).IsAdjointPair B f f
state_after: no goals
tactic: exact Iff.rfl
Theorem: Order.IsSuccLimit.succ_ne
File: Mathlib/Order/SuccPred/Limit.lean

Proof steps:
state_before: α : Type u_1
inst✝² : Preorder α
a : α
inst✝¹ : SuccOrder α
inst✝ : NoMaxOrder α
h : IsSuccLimit a
b : α
⊢ succ b ≠ a
state_after: α : Type u_1
inst✝² : Preorder α
inst✝¹ : SuccOrder α
inst✝ : NoMaxOrder α
b : α
h : IsSuccLimit (succ b)
⊢ False
tactic: rintro rfl
state_before: α : Type u_1
inst✝² : Preorder α
inst✝¹ : SuccOrder α
inst✝ : NoMaxOrder α
b : α
h : IsSuccLimit (succ b)
⊢ False
state_after: no goals
tactic: exact not_isMax _ h.isMax
Theorem: NFA.toεNFA_εClosure
File: Mathlib/Computability/EpsilonNFA.lean

Proof steps:
state_before: α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a : α
M : NFA α σ
S : Set σ
⊢ M.toεNFA.εClosure S = S
state_after: case h
α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a✝ : α
M : NFA α σ
S : Set σ
a : σ
⊢ a ∈ M.toεNFA.εClosure S ↔ a ∈ S
tactic: ext a
state_before: case h
α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a✝ : α
M : NFA α σ
S : Set σ
a : σ
⊢ a ∈ M.toεNFA.εClosure S ↔ a ∈ S
state_after: case h
α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a✝ : α
M : NFA α σ
S : Set σ
a : σ
⊢ a ∈ M.toεNFA.εClosure S → a ∈ S
tactic: refine ⟨?_, εNFA.εClosure.base _⟩
state_before: case h
α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a✝ : α
M : NFA α σ
S : Set σ
a : σ
⊢ a ∈ M.toεNFA.εClosure S → a ∈ S
state_after: case h.base
α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a✝ : α
M : NFA α σ
S : Set σ
a : σ
h : a ∈ S
⊢ a ∈ S

case h.step
α : Type u
σ σ' : Type v
M✝ : εNFA α σ
S✝ : Set σ
x : List α
s : σ
a✝¹ : α
M : NFA α σ
S : Set σ
a s✝ : σ
a✝ : M.toεNFA.εClosure S s✝
h : a ∈ M.toεNFA.step s✝ none
⊢ a ∈ S
tactic: rintro (⟨_, h⟩ | ⟨_, _, h, _⟩)
Theorem: nhdsSet_le_iff
File: Mathlib/Topology/Separation.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
⊢ 𝓝ˢ s ≤ 𝓝ˢ t ↔ s ⊆ t
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
⊢ 𝓝ˢ s ≤ 𝓝ˢ t → s ⊆ t
tactic: refine ⟨?_, fun h => monotone_nhdsSet h⟩
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
⊢ 𝓝ˢ s ≤ 𝓝ˢ t → s ⊆ t
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
⊢ (∀ x ∈ 𝓝ˢ t, x ∈ 𝓝ˢ s) → s ⊆ t
tactic: simp_rw [Filter.le_def]
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
⊢ (∀ x ∈ 𝓝ˢ t, x ∈ 𝓝ˢ s) → s ⊆ t
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
h : ∀ x ∈ 𝓝ˢ t, x ∈ 𝓝ˢ s
x : X
hx : x ∈ s
⊢ x ∈ t
tactic: intro h x hx
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
h : ∀ x ∈ 𝓝ˢ t, x ∈ 𝓝ˢ s
x : X
hx : x ∈ s
⊢ x ∈ t
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
x : X
hx : x ∈ s
h : {x}ᶜ ∈ 𝓝ˢ t → {x}ᶜ ∈ 𝓝ˢ s
⊢ x ∈ t
tactic: specialize h {x}ᶜ
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
x : X
hx : x ∈ s
h : {x}ᶜ ∈ 𝓝ˢ t → {x}ᶜ ∈ 𝓝ˢ s
⊢ x ∈ t
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
x : X
hx : x ∈ s
h : x ∉ t → x ∉ s
⊢ x ∈ t
tactic: simp_rw [compl_singleton_mem_nhdsSet_iff] at h
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
x : X
hx : x ∈ s
h : x ∉ t → x ∉ s
⊢ x ∈ t
state_after: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
x : X
hx : x ∈ s
h : x ∉ t → x ∉ s
hxt : x ∉ t
⊢ False
tactic: by_contra hxt
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T1Space X
s t : Set X
x : X
hx : x ∈ s
h : x ∉ t → x ∉ s
hxt : x ∉ t
⊢ False
state_after: no goals
tactic: exact h hxt hx
Theorem: AlternatingMap.map_add_swap
File: Mathlib/LinearAlgebra/Alternating/Basic.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : M [⋀^ι]→ₗ[R] N
g g₂ : M [⋀^ι]→ₗ[R] N'
g' : M' [⋀^ι]→ₗ[R] N'
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ f v + f (v ∘ ⇑(Equiv.swap i j)) = 0
state_after: R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : M [⋀^ι]→ₗ[R] N
g g₂ : M [⋀^ι]→ₗ[R] N'
g' : M' [⋀^ι]→ₗ[R] N'
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ f (v ∘ ⇑(Equiv.swap i j)) + f v = 0
tactic: rw [add_comm]
state_before: R : Type u_1
inst✝¹⁵ : Semiring R
M : Type u_2
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
N : Type u_3
inst✝¹² : AddCommMonoid N
inst✝¹¹ : Module R N
P : Type u_4
inst✝¹⁰ : AddCommMonoid P
inst✝⁹ : Module R P
M' : Type u_5
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
N' : Type u_6
inst✝⁶ : AddCommGroup N'
inst✝⁵ : Module R N'
ι : Type u_7
ι' : Type u_8
ι'' : Type u_9
M₂ : Type u_10
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
M₃ : Type u_11
inst✝² : AddCommMonoid M₃
inst✝¹ : Module R M₃
f f' : M [⋀^ι]→ₗ[R] N
g g₂ : M [⋀^ι]→ₗ[R] N'
g' : M' [⋀^ι]→ₗ[R] N'
v : ι → M
v' : ι → M'
inst✝ : DecidableEq ι
i j : ι
hij : i ≠ j
⊢ f (v ∘ ⇑(Equiv.swap i j)) + f v = 0
state_after: no goals
tactic: exact f.map_swap_add v hij
Theorem: NonarchimedeanAddGroup.nonarchimedean_of_emb
File: Mathlib/Topology/Algebra/Nonarchimedean/Basic.lean

Proof steps:
state_before: G : Type u_1
inst✝⁸ : Group G
inst✝⁷ : TopologicalSpace G
inst✝⁶ : NonarchimedeanGroup G
H : Type u_2
inst✝⁵ : Group H
inst✝⁴ : TopologicalSpace H
inst✝³ : TopologicalGroup H
K : Type u_3
inst✝² : Group K
inst✝¹ : TopologicalSpace K
inst✝ : NonarchimedeanGroup K
f : G →* H
emb : OpenEmbedding ⇑f
U : Set H
hU : U ∈ 𝓝 1
⊢ ⇑f ⁻¹' U ∈ 𝓝 1
state_after: case a
G : Type u_1
inst✝⁸ : Group G
inst✝⁷ : TopologicalSpace G
inst✝⁶ : NonarchimedeanGroup G
H : Type u_2
inst✝⁵ : Group H
inst✝⁴ : TopologicalSpace H
inst✝³ : TopologicalGroup H
K : Type u_3
inst✝² : Group K
inst✝¹ : TopologicalSpace K
inst✝ : NonarchimedeanGroup K
f : G →* H
emb : OpenEmbedding ⇑f
U : Set H
hU : U ∈ 𝓝 1
⊢ U ∈ 𝓝 (f 1)
tactic: apply emb.continuous.tendsto
state_before: case a
G : Type u_1
inst✝⁸ : Group G
inst✝⁷ : TopologicalSpace G
inst✝⁶ : NonarchimedeanGroup G
H : Type u_2
inst✝⁵ : Group H
inst✝⁴ : TopologicalSpace H
inst✝³ : TopologicalGroup H
K : Type u_3
inst✝² : Group K
inst✝¹ : TopologicalSpace K
inst✝ : NonarchimedeanGroup K
f : G →* H
emb : OpenEmbedding ⇑f
U : Set H
hU : U ∈ 𝓝 1
⊢ U ∈ 𝓝 (f 1)
state_after: no goals
tactic: rwa [f.map_one]
Theorem: KaehlerDifferential.mapBaseChange_surjective
File: Mathlib/RingTheory/Kaehler/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : Algebra R S
M : Type u_1
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : Module S M
inst✝⁹ : IsScalarTower R S M
A : Type u_2
B : Type u_3
inst✝⁸ : CommRing A
inst✝⁷ : CommRing B
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : Algebra S B
inst✝² : IsScalarTower R A B
inst✝¹ : IsScalarTower R S B
inst✝ : SMulCommClass S A B
h : Function.Surjective ⇑(algebraMap A B)
⊢ Function.Surjective ⇑(mapBaseChange R A B)
state_after: R : Type u
S : Type v
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : Algebra R S
M : Type u_1
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : Module S M
inst✝⁹ : IsScalarTower R S M
A : Type u_2
B : Type u_3
inst✝⁸ : CommRing A
inst✝⁷ : CommRing B
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : Algebra S B
inst✝² : IsScalarTower R A B
inst✝¹ : IsScalarTower R S B
inst✝ : SMulCommClass S A B
h : Function.Surjective ⇑(algebraMap A B)
this : Subsingleton (Ω[B⁄A])
⊢ Function.Surjective ⇑(mapBaseChange R A B)
tactic: have := subsingleton_of_surjective A B h
state_before: R : Type u
S : Type v
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : Algebra R S
M : Type u_1
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : Module S M
inst✝⁹ : IsScalarTower R S M
A : Type u_2
B : Type u_3
inst✝⁸ : CommRing A
inst✝⁷ : CommRing B
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : Algebra S B
inst✝² : IsScalarTower R A B
inst✝¹ : IsScalarTower R S B
inst✝ : SMulCommClass S A B
h : Function.Surjective ⇑(algebraMap A B)
this : Subsingleton (Ω[B⁄A])
⊢ Function.Surjective ⇑(mapBaseChange R A B)
state_after: R : Type u
S : Type v
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : Algebra R S
M : Type u_1
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : Module S M
inst✝⁹ : IsScalarTower R S M
A : Type u_2
B : Type u_3
inst✝⁸ : CommRing A
inst✝⁷ : CommRing B
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : Algebra S B
inst✝² : IsScalarTower R A B
inst✝¹ : IsScalarTower R S B
inst✝ : SMulCommClass S A B
h : Function.Surjective ⇑(algebraMap A B)
this : Subsingleton (Ω[B⁄A])
⊢ ⊤ ≤ LinearMap.ker (map R A B B)
tactic: rw [← LinearMap.range_eq_top, KaehlerDifferential.range_mapBaseChange, ← top_le_iff]
state_before: R : Type u
S : Type v
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : Algebra R S
M : Type u_1
inst✝¹² : AddCommGroup M
inst✝¹¹ : Module R M
inst✝¹⁰ : Module S M
inst✝⁹ : IsScalarTower R S M
A : Type u_2
B : Type u_3
inst✝⁸ : CommRing A
inst✝⁷ : CommRing B
inst✝⁶ : Algebra R A
inst✝⁵ : Algebra R B
inst✝⁴ : Algebra A B
inst✝³ : Algebra S B
inst✝² : IsScalarTower R A B
inst✝¹ : IsScalarTower R S B
inst✝ : SMulCommClass S A B
h : Function.Surjective ⇑(algebraMap A B)
this : Subsingleton (Ω[B⁄A])
⊢ ⊤ ≤ LinearMap.ker (map R A B B)
state_after: no goals
tactic: exact fun x _ ↦ Subsingleton.elim _ _
Theorem: Nat.cauchy_induction_mul
File: Mathlib/Order/Interval/Finset/Nat.lean

Proof steps:
state_before: a b c : ℕ
P : ℕ → Prop
h✝ h : ∀ (n : ℕ), P (n + 1) → P n
k seed : ℕ
hk : 1 < k
hs : P seed.succ
hm : ∀ (x : ℕ), seed < x → P x → P (k * x)
n : ℕ
⊢ ∀ (x : ℕ), seed.succ ≤ x → P x → x < (fun x => k * x) x
state_after: a b c : ℕ
P : ℕ → Prop
h✝ h : ∀ (n : ℕ), P (n + 1) → P n
k seed : ℕ
hk : 1 < k
hs : P seed.succ
hm : ∀ (x : ℕ), seed < x → P x → P (k * x)
n x✝ : ℕ
hl : seed.succ ≤ x✝
hP✝ : P x✝
⊢ x✝ < (fun x => k * x) x✝
tactic: intro _ hl _
state_before: a b c : ℕ
P : ℕ → Prop
h✝ h : ∀ (n : ℕ), P (n + 1) → P n
k seed : ℕ
hk : 1 < k
hs : P seed.succ
hm : ∀ (x : ℕ), seed < x → P x → P (k * x)
n x✝ : ℕ
hl : seed.succ ≤ x✝
hP✝ : P x✝
⊢ x✝ < (fun x => k * x) x✝
state_after: case h.e'_3
a b c : ℕ
P : ℕ → Prop
h✝ h : ∀ (n : ℕ), P (n + 1) → P n
k seed : ℕ
hk : 1 < k
hs : P seed.succ
hm : ∀ (x : ℕ), seed < x → P x → P (k * x)
n x✝ : ℕ
hl : seed.succ ≤ x✝
hP✝ : P x✝
⊢ x✝ = 1 * x✝
tactic: convert (Nat.mul_lt_mul_right <| seed.succ_pos.trans_le hl).2 hk
state_before: case h.e'_3
a b c : ℕ
P : ℕ → Prop
h✝ h : ∀ (n : ℕ), P (n + 1) → P n
k seed : ℕ
hk : 1 < k
hs : P seed.succ
hm : ∀ (x : ℕ), seed < x → P x → P (k * x)
n x✝ : ℕ
hl : seed.succ ≤ x✝
hP✝ : P x✝
⊢ x✝ = 1 * x✝
state_after: no goals
tactic: rw [one_mul]
Theorem: Set.coe_eq_image_val
File: Mathlib/Data/Set/Functor.lean

Proof steps:
state_before: α β : Type u
s : Set α
f : α → Set β
g : Set (α → β)
t : Set ↑s
⊢ Lean.Internal.coeM t = ↑t
state_after: α β : Type u
s : Set α
f : α → Set β
g : Set (α → β)
t : Set ↑s
⊢ ⋃ x ∈ t, {↑x} = ↑t
tactic: change ⋃ (x ∈ t), {x.1} = _
state_before: α β : Type u
s : Set α
f : α → Set β
g : Set (α → β)
t : Set ↑s
⊢ ⋃ x ∈ t, {↑x} = ↑t
state_after: case h
α β : Type u
s : Set α
f : α → Set β
g : Set (α → β)
t : Set ↑s
x✝ : α
⊢ x✝ ∈ ⋃ x ∈ t, {↑x} ↔ x✝ ∈ ↑t
tactic: ext
state_before: case h
α β : Type u
s : Set α
f : α → Set β
g : Set (α → β)
t : Set ↑s
x✝ : α
⊢ x✝ ∈ ⋃ x ∈ t, {↑x} ↔ x✝ ∈ ↑t
state_after: no goals
tactic: simp
Theorem: Nat.isZeckendorfRep_zeckendorf
File: Mathlib/Data/Nat/Fib/Zeckendorf.lean

Proof steps:
state_before: l : List ℕ
a m n : ℕ
⊢ (zeckendorf 0).IsZeckendorfRep
state_after: no goals
tactic: simp only [zeckendorf_zero, IsZeckendorfRep_nil]
state_before: l : List ℕ
a m n✝ n : ℕ
⊢ (n + 1).zeckendorf.IsZeckendorfRep
state_after: l : List ℕ
a m n✝ n : ℕ
⊢ Chain' (fun a b => b + 2 ≤ a) ((n + 1).greatestFib :: ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]))
tactic: rw [zeckendorf_succ, IsZeckendorfRep, List.cons_append]
state_before: l : List ℕ
a m n✝ n : ℕ
⊢ Chain' (fun a b => b + 2 ≤ a) ((n + 1).greatestFib :: ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]))
state_after: l : List ℕ
a✝ m n✝ n a : ℕ
ha : a ∈ ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]).head?
⊢ a + 2 ≤ (n + 1).greatestFib
tactic: refine (isZeckendorfRep_zeckendorf _).cons' (fun a ha ↦ ?_)
state_before: l : List ℕ
a✝ m n✝ n a : ℕ
ha : a ∈ ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]).head?
⊢ a + 2 ≤ (n + 1).greatestFib
state_after: case inl
l : List ℕ
a✝ m n✝ n a : ℕ
ha : a ∈ ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]).head?
h : n + 1 - fib (n + 1).greatestFib = 0
⊢ a + 2 ≤ (n + 1).greatestFib

case inr
l : List ℕ
a✝ m n✝ n a : ℕ
ha : a ∈ ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]).head?
h : n + 1 - fib (n + 1).greatestFib > 0
⊢ a + 2 ≤ (n + 1).greatestFib
tactic: obtain h | h := eq_zero_or_pos (n + 1 - fib (greatestFib (n + 1)))
state_before: case inr
l : List ℕ
a✝ m n✝ n a : ℕ
ha : a ∈ ((n + 1 - fib (n + 1).greatestFib).zeckendorf ++ [0]).head?
h : n + 1 - fib (n + 1).greatestFib > 0
⊢ a + 2 ≤ (n + 1).greatestFib
state_after: case inr
l : List ℕ
a✝ m n✝ n a : ℕ
ha : (n + 1 - fib (n + 1).greatestFib).greatestFib = a
h : n + 1 - fib (n + 1).greatestFib > 0
⊢ a + 2 ≤ (n + 1).greatestFib
tactic: rw [zeckendorf_of_pos h, cons_append, head?_cons, Option.mem_some_iff] at ha
state_before: case inr
l : List ℕ
a✝ m n✝ n a : ℕ
ha : (n + 1 - fib (n + 1).greatestFib).greatestFib = a
h : n + 1 - fib (n + 1).greatestFib > 0
⊢ a + 2 ≤ (n + 1).greatestFib
state_after: case inr
l : List ℕ
a m n✝ n : ℕ
h : n + 1 - fib (n + 1).greatestFib > 0
⊢ (n + 1 - fib (n + 1).greatestFib).greatestFib + 2 ≤ (n + 1).greatestFib
tactic: subst a
state_before: case inr
l : List ℕ
a m n✝ n : ℕ
h : n + 1 - fib (n + 1).greatestFib > 0
⊢ (n + 1 - fib (n + 1).greatestFib).greatestFib + 2 ≤ (n + 1).greatestFib
state_after: no goals
tactic: exact add_le_of_le_tsub_right_of_le (le_greatestFib.2 le_add_self)
      (greatestFib_sub_fib_greatestFib_le_greatestFib n.succ_ne_zero)
Theorem: EuclideanGeometry.eq_of_dist_eq_of_dist_eq_of_finrank_eq_two
File: Mathlib/Geometry/Euclidean/Basic.lean

Proof steps:
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
hd : finrank ℝ V = 2
c₁ c₂ p₁ p₂ p : P
r₁ r₂ : ℝ
hc : c₁ ≠ c₂
hp : p₁ ≠ p₂
hp₁c₁ : dist p₁ c₁ = r₁
hp₂c₁ : dist p₂ c₁ = r₁
hpc₁ : dist p c₁ = r₁
hp₁c₂ : dist p₁ c₂ = r₂
hp₂c₂ : dist p₂ c₂ = r₂
hpc₂ : dist p c₂ = r₂
⊢ finrank ℝ ↥⊤.direction = 2
state_after: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
hd : finrank ℝ V = 2
c₁ c₂ p₁ p₂ p : P
r₁ r₂ : ℝ
hc : c₁ ≠ c₂
hp : p₁ ≠ p₂
hp₁c₁ : dist p₁ c₁ = r₁
hp₂c₁ : dist p₂ c₁ = r₁
hpc₁ : dist p c₁ = r₁
hp₁c₂ : dist p₁ c₂ = r₂
hp₂c₂ : dist p₂ c₂ = r₂
hpc₂ : dist p c₂ = r₂
⊢ finrank ℝ V = 2
tactic: rw [direction_top, finrank_top]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
hd : finrank ℝ V = 2
c₁ c₂ p₁ p₂ p : P
r₁ r₂ : ℝ
hc : c₁ ≠ c₂
hp : p₁ ≠ p₂
hp₁c₁ : dist p₁ c₁ = r₁
hp₂c₁ : dist p₂ c₁ = r₁
hpc₁ : dist p c₁ = r₁
hp₁c₂ : dist p₁ c₂ = r₂
hp₂c₂ : dist p₂ c₂ = r₂
hpc₂ : dist p c₂ = r₂
⊢ finrank ℝ V = 2
state_after: no goals
tactic: exact hd
Theorem: IntermediateField.normalClosure_of_normal
File: Mathlib/FieldTheory/NormalClosure.lean

Proof steps:
state_before: F : Type u_1
K✝ : Type u_2
L : Type u_3
inst✝⁵ : Field F
inst✝⁴ : Field K✝
inst✝³ : Field L
inst✝² : Algebra F K✝
inst✝¹ : Algebra F L
K K' : IntermediateField F L
inst✝ : Normal F ↥K
⊢ normalClosure F (↥K) L = K
state_after: no goals
tactic: simp only [normalClosure_def, AlgHom.fieldRange_of_normal, iSup_const]
Theorem: WithTop.iSup_coe_eq_top
File: Mathlib/Order/ConditionallyCompleteLattice/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
⊢ ⨆ x, ↑(f x) = ⊤ ↔ ¬BddAbove (range f)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
⊢ (∀ b < ⊤, ∃ i, b < ↑(f i)) ↔ ∀ (x : α), ∃ y ∈ range f, x < y
tactic: rw [iSup_eq_top, not_bddAbove_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
⊢ (∀ b < ⊤, ∃ i, b < ↑(f i)) ↔ ∀ (x : α), ∃ y ∈ range f, x < y
state_after: case refine_1
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ b < ⊤, ∃ i, b < ↑(f i)
r : α
⊢ ∃ y ∈ range f, r < y

case refine_2
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
inst✝ : ConditionallyCompleteLinearOrderBot α
f : ι → α
hf : ∀ (x : α), ∃ y ∈ range f, x < y
a : WithTop α
ha : a < ⊤
⊢ ∃ i, a < ↑(f i)
tactic: refine ⟨fun hf r => ?_, fun hf a ha => ?_⟩
Theorem: WeierstrassCurve.Affine.evalEval_polynomial
File: Mathlib/AlgebraicGeometry/EllipticCurve/Affine.lean

Proof steps:
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ evalEval x y W.polynomial = y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ evalEval x y (Y ^ 2 + C (C W.a₁ * X + C W.a₃) * Y - C (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆)) =
    y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
tactic: simp only [polynomial]
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ evalEval x y (Y ^ 2 + C (C W.a₁ * X + C W.a₃) * Y - C (X ^ 3 + C W.a₂ * X ^ 2 + C W.a₄ * X + C W.a₆)) =
    y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
state_after: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ y ^ 2 + (W.a₁ * x + W.a₃) * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) =
    y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
tactic: eval_simp
state_before: R : Type u
inst✝ : CommRing R
W : Affine R
x y : R
⊢ y ^ 2 + (W.a₁ * x + W.a₃) * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) =
    y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
state_after: no goals
tactic: rw [add_mul, ← add_assoc]