ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
Theorem: Submodule.dualAnnihilator_gc
File: Mathlib/LinearAlgebra/Dual.lean

Proof steps:
state_before: R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W : Submodule R M
⊢ GaloisConnection (⇑OrderDual.toDual ∘ dualAnnihilator) (dualCoannihilator ∘ ⇑OrderDual.ofDual)
state_after: R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
b : (Submodule R (Module.Dual R M))ᵒᵈ
⊢ (⇑OrderDual.toDual ∘ dualAnnihilator) a ≤ b ↔ a ≤ (dualCoannihilator ∘ ⇑OrderDual.ofDual) b
tactic: intro a b
state_before: R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
b : (Submodule R (Module.Dual R M))ᵒᵈ
⊢ (⇑OrderDual.toDual ∘ dualAnnihilator) a ≤ b ↔ a ≤ (dualCoannihilator ∘ ⇑OrderDual.ofDual) b
state_after: case h₂
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ (⇑OrderDual.toDual ∘ dualAnnihilator) a ≤ OrderDual.toDual a✝ ↔
    a ≤ (dualCoannihilator ∘ ⇑OrderDual.ofDual) (OrderDual.toDual a✝)
tactic: induction b using OrderDual.rec
state_before: case h₂
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ (⇑OrderDual.toDual ∘ dualAnnihilator) a ≤ OrderDual.toDual a✝ ↔
    a ≤ (dualCoannihilator ∘ ⇑OrderDual.ofDual) (OrderDual.toDual a✝)
state_after: case h₂
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
W a : Submodule R M
a✝ : Submodule R (Module.Dual R M)
⊢ a✝ ≤ a.dualAnnihilator ↔ a ≤ a✝.dualCoannihilator
tactic: simp only [Function.comp_apply, OrderDual.toDual_le_toDual, OrderDual.ofDual_toDual]
Theorem: Basis.equivFun_self
File: Mathlib/LinearAlgebra/Basis.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
R₂ : Type u_4
K : Type u_5
M : Type u_6
M' : Type u_7
M'' : Type u_8
V : Type u
V' : Type u_9
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : Module R M
inst✝³ : AddCommMonoid M'
inst✝² : Module R M'
inst✝¹ : Finite ι
inst✝ : DecidableEq ι
b : Basis ι R M
i j : ι
⊢ b.equivFun (b i) j = if i = j then 1 else 0
state_after: no goals
tactic: rw [b.equivFun_apply, b.repr_self_apply]
Theorem: MeasureTheory.measure_iUnion_le
File: Mathlib/MeasureTheory/OuterMeasure/Basic.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
F : Type u_3
inst✝² : FunLike F (Set α) ℝ≥0∞
inst✝¹ : OuterMeasureClass F α
μ : F
s✝ t✝ : Set α
inst✝ : Countable ι
s : ι → Set α
t : ℕ → Set α
⊢ (fun x x_1 => x ≤ x_1) (μ (⨆ i, t i)) (∑' (i : ℕ), μ (t i))
state_after: no goals
tactic: calc
    μ (⋃ i, t i) = μ (⋃ i, disjointed t i) := by rw [iUnion_disjointed]
    _ ≤ ∑' i, μ (disjointed t i) :=
      OuterMeasureClass.measure_iUnion_nat_le _ _ (disjoint_disjointed _)
    _ ≤ ∑' i, μ (t i) := by gcongr; apply disjointed_subset
Theorem: Sym2.out_snd_mem
File: Mathlib/Data/Sym/Sym2.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Sym2 α
⊢ e = s((Quot.out e).2, (Quot.out e).1)
state_after: no goals
tactic: rw [eq_swap, Sym2.mk, e.out_eq]
Theorem: CategoryTheory.Adjunction.homEquiv_naturality_right_square
File: Mathlib/CategoryTheory/Adjunction/Basic.lean

Proof steps:
state_before: C : Type u₁
inst✝¹ : Category.{v₁, u₁} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
X' X : C
Y Y' : D
f : X' ⟶ X
g : X ⟶ G.obj Y'
h : X' ⟶ G.obj Y
k : Y ⟶ Y'
w : f ≫ g = h ≫ G.map k
⊢ F.map f ≫ (adj.homEquiv X Y').symm g = (adj.homEquiv X' Y).symm h ≫ k
state_after: no goals
tactic: rw [← homEquiv_naturality_left_symm, ← homEquiv_naturality_right_symm, w]
Theorem: Set.piecewise_preimage
File: Mathlib/Data/Set/Function.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
π : α → Type u_5
δ : α → Sort u_6
s : Set α
f✝ g✝ : (i : α) → δ i
inst✝ : (j : α) → Decidable (j ∈ s)
f g : α → β
t : Set β
x : α
⊢ x ∈ s.piecewise f g ⁻¹' t ↔ x ∈ s.ite (f ⁻¹' t) (g ⁻¹' t)
state_after: no goals
tactic: by_cases x ∈ s <;> simp [*, Set.ite]
Theorem: geom_sum_one
File: Mathlib/Algebra/GeomSum.lean

Proof steps:
state_before: α : Type u
inst✝ : Semiring α
x : α
⊢ ∑ i ∈ range 1, x ^ i = 1
state_after: no goals
tactic: simp [geom_sum_succ']
Theorem: Multiset.map_surjective_of_surjective
File: Mathlib/Data/Multiset/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Surjective f
⊢ Surjective (map f)
state_after: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Surjective f
s : Multiset β
⊢ ∃ a, map f a = s
tactic: intro s
state_before: α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Surjective f
s : Multiset β
⊢ ∃ a, map f a = s
state_after: case empty
α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Surjective f
⊢ ∃ a, map f a = 0

case cons
α : Type u_1
β : Type v
γ : Type u_2
f : α → β
hf : Surjective f
x : β
s : Multiset β
ih : ∃ a, map f a = s
⊢ ∃ a, map f a = x ::ₘ s
tactic: induction' s using Multiset.induction_on with x s ih
Theorem: SetTheory.PGame.le_or_gf
File: Mathlib/SetTheory/Game/PGame.lean

Proof steps:
state_before: xl xr : Type u
x y : PGame
⊢ x ≤ y ∨ y ⧏ x
state_after: xl xr : Type u
x y : PGame
⊢ x ≤ y ∨ ¬x ≤ y
tactic: rw [← PGame.not_le]
state_before: xl xr : Type u
x y : PGame
⊢ x ≤ y ∨ ¬x ≤ y
state_after: no goals
tactic: apply em
Theorem: frontier_univ_prod_eq
File: Mathlib/Topology/Constructions.lean

Proof steps:
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : TopologicalSpace Z
inst✝² : TopologicalSpace W
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
s : Set Y
⊢ frontier (univ ×ˢ s) = univ ×ˢ frontier s
state_after: no goals
tactic: simp [frontier_prod_eq]
Theorem: MulAction.IsBlock.iInter
File: Mathlib/GroupTheory/GroupAction/Blocks.lean

Proof steps:
state_before: G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
⊢ IsBlock G (⋂ i, B i)
state_after: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : IsEmpty ι
⊢ IsBlock G (⋂ i, B i)

case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ IsBlock G (⋂ i, B i)
tactic: by_cases hι : (IsEmpty ι)
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ IsBlock G (⋂ i, B i)
state_after: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ ∀ (g : G), g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)
tactic: rw [IsBlock.def_one]
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
⊢ ∀ (g : G), g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)
state_after: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)
tactic: intro g
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ g • ⋂ i, B i = ⋂ i, B i ∨ Disjoint (g • ⋂ i, B i) (⋂ i, B i)
state_after: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)
tactic: rw [Set.smul_set_iInter]
state_before: case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)
state_after: case pos
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)

case neg
G : Type u_1
inst✝¹ : Group G
X : Type u_2
inst✝ : MulAction G X
ι : Type u_3
B : ι → Set X
hB : ∀ (i : ι), IsBlock G (B i)
hι : ¬IsEmpty ι
g : G
h : ¬∃ i, Disjoint (g • B i) (B i)
⊢ ⋂ i, g • B i = ⋂ i, B i ∨ Disjoint (⋂ i, g • B i) (⋂ i, B i)
tactic: by_cases h : ∃ i : ι, Disjoint (g • B i) (B i)
Theorem: Filter.comap_fst_neBot_iff
File: Mathlib/Order/Filter/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l f✝ f₁ f₂ : Filter α
g g₁ g₂ : Filter β
m : α → β
m' : β → γ
s : Set α
t : Set β
f : Filter α
⊢ (comap Prod.fst f).NeBot ↔ f.NeBot ∧ Nonempty β
state_after: case inl
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l f✝ f₁ f₂ : Filter α
g g₁ g₂ : Filter β
m : α → β
m' : β → γ
s : Set α
t : Set β
f : Filter α
h✝ : IsEmpty β
⊢ (comap Prod.fst f).NeBot ↔ f.NeBot ∧ Nonempty β

case inr
α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
l f✝ f₁ f₂ : Filter α
g g₁ g₂ : Filter β
m : α → β
m' : β → γ
s : Set α
t : Set β
f : Filter α
h✝ : Nonempty β
⊢ (comap Prod.fst f).NeBot ↔ f.NeBot ∧ Nonempty β
tactic: cases isEmpty_or_nonempty β
Theorem: pi_eq_generateFrom
File: Mathlib/Topology/Constructions.lean

Proof steps:
state_before: X : Type u
Y : Type v
Z : Type u_1
W : Type u_2
ε : Type u_3
ζ : Type u_4
ι : Type u_5
π : ι → Type u_6
κ : Type u_7
inst✝ : TopologicalSpace X
T : (i : ι) → TopologicalSpace (π i)
f : X → (i : ι) → π i
⊢ Pi.topologicalSpace = Pi.topologicalSpace
state_after: no goals
tactic: simp only [generateFrom_setOf_isOpen]
Theorem: MeasureTheory.AnalyticSet.measurablySeparable
File: Mathlib/MeasureTheory/Constructions/Polish/Basic.lean

Proof steps:
state_before: α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s t : Set α
hs : AnalyticSet s
ht : AnalyticSet t
h : Disjoint s t
⊢ MeasurablySeparable s t
state_after: α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s t : Set α
hs : s = ∅ ∨ ∃ f, Continuous f ∧ range f = s
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint s t
⊢ MeasurablySeparable s t
tactic: rw [AnalyticSet] at hs ht
state_before: α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
s t : Set α
hs : s = ∅ ∨ ∃ f, Continuous f ∧ range f = s
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint s t
⊢ MeasurablySeparable s t
state_after: case inl
α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
h : Disjoint ∅ t
⊢ MeasurablySeparable ∅ t

case inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) t
⊢ MeasurablySeparable (range f) t
tactic: rcases hs with (rfl | ⟨f, f_cont, rfl⟩)
state_before: case inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
t : Set α
ht : t = ∅ ∨ ∃ f, Continuous f ∧ range f = t
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) t
⊢ MeasurablySeparable (range f) t
state_after: case inr.intro.intro.inl
α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
h : Disjoint (range f) ∅
⊢ MeasurablySeparable (range f) ∅

case inr.intro.intro.inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
g : (ℕ → ℕ) → α
g_cont : Continuous g
h : Disjoint (range f) (range g)
⊢ MeasurablySeparable (range f) (range g)
tactic: rcases ht with (rfl | ⟨g, g_cont, rfl⟩)
state_before: case inr.intro.intro.inr.intro.intro
α : Type u_1
ι : Type u_2
inst✝³ : TopologicalSpace α
inst✝² : T2Space α
inst✝¹ : MeasurableSpace α
inst✝ : OpensMeasurableSpace α
f : (ℕ → ℕ) → α
f_cont : Continuous f
g : (ℕ → ℕ) → α
g_cont : Continuous g
h : Disjoint (range f) (range g)
⊢ MeasurablySeparable (range f) (range g)
state_after: no goals
tactic: exact measurablySeparable_range_of_disjoint f_cont g_cont h
Theorem: EMetric.uniformInducing_iff
File: Mathlib/Topology/EMetricSpace/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
X : Type u_1
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
f : α → β
⊢ (∀ (i' : ℝ≥0∞), 0 < i' → ∃ i, 0 < i ∧ Prod.map f f ⁻¹' {p | edist p.1 p.2 < i} ⊆ {p | edist p.1 p.2 < i'}) ↔
    ∀ δ > 0, ∃ ε > 0, ∀ {a b : α}, edist (f a) (f b) < ε → edist a b < δ
state_after: α : Type u
β : Type v
X : Type u_1
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
f : α → β
⊢ (∀ (i' : ℝ≥0∞),
      0 < i' →
        ∃ i,
          0 < i ∧ ∀ (a b : α), (a, b) ∈ Prod.map f f ⁻¹' {p | edist p.1 p.2 < i} → (a, b) ∈ {p | edist p.1 p.2 < i'}) ↔
    ∀ δ > 0, ∃ ε > 0, ∀ {a b : α}, edist (f a) (f b) < ε → edist a b < δ
tactic: simp only [subset_def, Prod.forall]
state_before: α : Type u
β : Type v
X : Type u_1
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
f : α → β
⊢ (∀ (i' : ℝ≥0∞),
      0 < i' →
        ∃ i,
          0 < i ∧ ∀ (a b : α), (a, b) ∈ Prod.map f f ⁻¹' {p | edist p.1 p.2 < i} → (a, b) ∈ {p | edist p.1 p.2 < i'}) ↔
    ∀ δ > 0, ∃ ε > 0, ∀ {a b : α}, edist (f a) (f b) < ε → edist a b < δ
state_after: no goals
tactic: rfl
Theorem: FormalMultilinearSeries.comp_coeff_zero''
File: Mathlib/Analysis/Analytic/Composition.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 E F
p : FormalMultilinearSeries 𝕜 E E
⊢ q.comp p 0 = q 0
state_after: case H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 E F
p : FormalMultilinearSeries 𝕜 E E
v : Fin 0 → E
⊢ (q.comp p 0) v = (q 0) v
tactic: ext v
state_before: case H
𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
H : Type u_5
inst✝¹⁵ : CommRing 𝕜
inst✝¹⁴ : AddCommGroup E
inst✝¹³ : AddCommGroup F
inst✝¹² : AddCommGroup G
inst✝¹¹ : Module 𝕜 E
inst✝¹⁰ : Module 𝕜 F
inst✝⁹ : Module 𝕜 G
inst✝⁸ : TopologicalSpace E
inst✝⁷ : TopologicalSpace F
inst✝⁶ : TopologicalSpace G
inst✝⁵ : TopologicalAddGroup E
inst✝⁴ : ContinuousConstSMul 𝕜 E
inst✝³ : TopologicalAddGroup F
inst✝² : ContinuousConstSMul 𝕜 F
inst✝¹ : TopologicalAddGroup G
inst✝ : ContinuousConstSMul 𝕜 G
q : FormalMultilinearSeries 𝕜 E F
p : FormalMultilinearSeries 𝕜 E E
v : Fin 0 → E
⊢ (q.comp p 0) v = (q 0) v
state_after: no goals
tactic: exact q.comp_coeff_zero p _ _
Theorem: frontier_subset_iff_isClosed
File: Mathlib/Topology/Basic.lean

Proof steps:
state_before: X : Type u
Y : Type v
ι : Sort w
α : Type u_1
β : Type u_2
x : X
s s₁ s₂ t : Set X
p p₁ p₂ : X → Prop
inst✝ : TopologicalSpace X
⊢ frontier s ⊆ s ↔ IsClosed s
state_after: no goals
tactic: rw [frontier, diff_subset_iff, union_eq_right.mpr interior_subset, closure_subset_iff_isClosed]
Theorem: Prod.image_mk_openSegment_left
File: Mathlib/Analysis/Convex/Segment.lean

Proof steps:
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
x₁ x₂ : E
y : F
⊢ (fun x => (x, y)) '' openSegment 𝕜 x₁ x₂ = openSegment 𝕜 (x₁, y) (x₂, y)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
x₁ x₂ : E
y : F
⊢ (fun x => (x.1 • x₁ + x.2 • x₂, y)) '' {p | 0 < p.1 ∧ 0 < p.2 ∧ p.1 + p.2 = 1} =
    (fun p => p.1 • (x₁, y) + p.2 • (x₂, y)) '' {p | 0 < p.1 ∧ 0 < p.2 ∧ p.1 + p.2 = 1}
tactic: rw [openSegment_eq_image₂, openSegment_eq_image₂, image_image]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
x₁ x₂ : E
y : F
⊢ (fun x => (x.1 • x₁ + x.2 • x₂, y)) '' {p | 0 < p.1 ∧ 0 < p.2 ∧ p.1 + p.2 = 1} =
    (fun p => p.1 • (x₁, y) + p.2 • (x₂, y)) '' {p | 0 < p.1 ∧ 0 < p.2 ∧ p.1 + p.2 = 1}
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
x₁ x₂ : E
y : F
a : 𝕜 × 𝕜
ha : a ∈ {p | 0 < p.1 ∧ 0 < p.2 ∧ p.1 + p.2 = 1}
⊢ (a.1 • x₁ + a.2 • x₂, y) = a.1 • (x₁, y) + a.2 • (x₂, y)
tactic: refine EqOn.image_eq fun a ha ↦ ?_
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
ι : Type u_5
π : ι → Type u_6
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
x₁ x₂ : E
y : F
a : 𝕜 × 𝕜
ha : a ∈ {p | 0 < p.1 ∧ 0 < p.2 ∧ p.1 + p.2 = 1}
⊢ (a.1 • x₁ + a.2 • x₂, y) = a.1 • (x₁, y) + a.2 • (x₂, y)
state_after: no goals
tactic: simp [Convex.combo_self ha.2.2]
Theorem: IsSubfield.pow_mem
File: Mathlib/Deprecated/Subfield.lean

Proof steps:
state_before: F : Type u_1
inst✝ : Field F
S : Set F
a : F
n : ℤ
s : Set F
hs : IsSubfield s
h : a ∈ s
⊢ a ^ n ∈ s
state_after: case ofNat
F : Type u_1
inst✝ : Field F
S : Set F
a : F
s : Set F
hs : IsSubfield s
h : a ∈ s
n : ℕ
⊢ a ^ Int.ofNat n ∈ s

case negSucc
F : Type u_1
inst✝ : Field F
S : Set F
a : F
s : Set F
hs : IsSubfield s
h : a ∈ s
n : ℕ
⊢ a ^ Int.negSucc n ∈ s
tactic: cases' n with n n
Theorem: CategoryTheory.OverPresheafAux.YonedaCollection.map₂_yonedaEquivFst
File: Mathlib/CategoryTheory/Comma/Presheaf.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
A : Cᵒᵖ ⥤ Type v
F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
X Y : C
f : X ⟶ Y
p : YonedaCollection F Y
⊢ (map₂ F f p).yonedaEquivFst = A.map f.op p.yonedaEquivFst
state_after: no goals
tactic: simp only [YonedaCollection.yonedaEquivFst_eq, map₂_fst, yonedaEquiv_naturality]
Theorem: Nat.dist_eq_sub_of_le
File: Mathlib/Data/Nat/Dist.lean

Proof steps:
state_before: n m : ℕ
h : n ≤ m
⊢ n.dist m = m - n
state_after: no goals
tactic: rw [dist, tsub_eq_zero_iff_le.mpr h, zero_add]
Theorem: Nat.card_pi
File: Mathlib/SetTheory/Cardinal/Finite.lean

Proof steps:
state_before: α : Type u_1
β✝ : Type u_2
β : α → Type u_3
inst✝ : Fintype α
⊢ Nat.card ((a : α) → β a) = ∏ a : α, Nat.card (β a)
state_after: no goals
tactic: simp_rw [Nat.card, mk_pi, prod_eq_of_fintype, toNat_lift, map_prod]
Theorem: DihedralGroup.orderOf_r
File: Mathlib/GroupTheory/SpecificGroups/Dihedral.lean

Proof steps:
state_before: n : ℕ
inst✝ : NeZero n
i : ZMod n
⊢ orderOf (r i) = n / n.gcd i.val
state_after: n : ℕ
inst✝ : NeZero n
i : ZMod n
⊢ orderOf (r ↑i.val) = n / n.gcd i.val
tactic: conv_lhs => rw [← ZMod.natCast_zmod_val i]
state_before: n : ℕ
inst✝ : NeZero n
i : ZMod n
⊢ orderOf (r ↑i.val) = n / n.gcd i.val
state_after: no goals
tactic: rw [← r_one_pow, orderOf_pow, orderOf_r_one]
Theorem: Polynomial.natTrailingDegree_le_natDegree
File: Mathlib/Algebra/Polynomial/Degree/TrailingDegree.lean

Proof steps:
state_before: R : Type u
S : Type v
a b : R
n m : ℕ
inst✝ : Semiring R
p✝ q r p : R[X]
⊢ p.natTrailingDegree ≤ p.natDegree
state_after: case pos
R : Type u
S : Type v
a b : R
n m : ℕ
inst✝ : Semiring R
p✝ q r p : R[X]
hp : p = 0
⊢ p.natTrailingDegree ≤ p.natDegree

case neg
R : Type u
S : Type v
a b : R
n m : ℕ
inst✝ : Semiring R
p✝ q r p : R[X]
hp : ¬p = 0
⊢ p.natTrailingDegree ≤ p.natDegree
tactic: by_cases hp : p = 0
Theorem: PrimeSpectrum.isClosed_range_comap_of_surjective
File: Mathlib/AlgebraicGeometry/PrimeSpectrum/Basic.lean

Proof steps:
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Surjective ⇑f
⊢ IsClosed (Set.range ⇑(comap f))
state_after: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Surjective ⇑f
⊢ IsClosed (zeroLocus ↑(ker f))
tactic: rw [range_comap_of_surjective _ f hf]
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Surjective ⇑f
⊢ IsClosed (zeroLocus ↑(ker f))
state_after: no goals
tactic: exact isClosed_zeroLocus _
Theorem: Subalgebra.bot_eq_top_iff_finrank_eq_one
File: Mathlib/LinearAlgebra/Dimension/FreeAndStrongRankCondition.lean

Proof steps:
state_before: F : Type u_1
E : Type u_2
inst✝⁵ : CommRing F
inst✝⁴ : StrongRankCondition F
inst✝³ : Ring E
inst✝² : Algebra F E
S : Subalgebra F E
inst✝¹ : Nontrivial E
inst✝ : Module.Free F E
⊢ ⊥ = ⊤ ↔ finrank F E = 1
state_after: F : Type u_1
E : Type u_2
inst✝⁵ : CommRing F
inst✝⁴ : StrongRankCondition F
inst✝³ : Ring E
inst✝² : Algebra F E
S : Subalgebra F E
inst✝¹ : Nontrivial E
inst✝ : Module.Free F E
this : Module.Free F ↥⊤
⊢ ⊥ = ⊤ ↔ finrank F E = 1
tactic: haveI := Module.Free.of_equiv (Subalgebra.topEquiv (R := F) (A := E)).toLinearEquiv.symm
state_before: F : Type u_1
E : Type u_2
inst✝⁵ : CommRing F
inst✝⁴ : StrongRankCondition F
inst✝³ : Ring E
inst✝² : Algebra F E
S : Subalgebra F E
inst✝¹ : Nontrivial E
inst✝ : Module.Free F E
this : Module.Free F ↥⊤
⊢ ⊥ = ⊤ ↔ finrank F E = 1
state_after: no goals
tactic: rw [← finrank_top, ← subalgebra_top_finrank_eq_submodule_top_finrank,
    Subalgebra.finrank_eq_one_iff, eq_comm]
Theorem: List.isRotated_iff_mod
File: Mathlib/Data/List/Rotate.lean

Proof steps:
state_before: α : Type u
l l' : List α
⊢ l ~r l' ↔ ∃ n ≤ l.length, l.rotate n = l'
state_after: α : Type u
l l' : List α
h : l ~r l'
⊢ ∃ n ≤ l.length, l.rotate n = l'
tactic: refine ⟨fun h => ?_, fun ⟨n, _, h⟩ => ⟨n, h⟩⟩
state_before: α : Type u
l l' : List α
h : l ~r l'
⊢ ∃ n ≤ l.length, l.rotate n = l'
state_after: case intro
α : Type u
l : List α
n : ℕ
⊢ ∃ n_1 ≤ l.length, l.rotate n_1 = l.rotate n
tactic: obtain ⟨n, rfl⟩ := h
state_before: case intro
α : Type u
l : List α
n : ℕ
⊢ ∃ n_1 ≤ l.length, l.rotate n_1 = l.rotate n
state_after: case intro.nil
α : Type u
n : ℕ
⊢ ∃ n_1 ≤ [].length, [].rotate n_1 = [].rotate n

case intro.cons
α : Type u
n : ℕ
hd : α
tl : List α
⊢ ∃ n_1 ≤ (hd :: tl).length, (hd :: tl).rotate n_1 = (hd :: tl).rotate n
tactic: cases' l with hd tl
Theorem: AlgebraicGeometry.pullbackRestrictIsoRestrict_inv_fst
File: Mathlib/AlgebraicGeometry/Restrict.lean

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
⊢ (pullbackRestrictIsoRestrict f U).inv ≫ pullback.fst f U.ι = (f ⁻¹ᵁ U).ι
state_after: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
⊢ (IsOpenImmersion.isoOfRangeEq (pullback.fst f U.ι) (f ⁻¹ᵁ U).ι ⋯).inv ≫ pullback.fst f U.ι = (f ⁻¹ᵁ U).ι
tactic: delta pullbackRestrictIsoRestrict
state_before: C : Type u₁
inst✝ : Category.{v, u₁} C
X Y : Scheme
f : X ⟶ Y
U : Y.Opens
⊢ (IsOpenImmersion.isoOfRangeEq (pullback.fst f U.ι) (f ⁻¹ᵁ U).ι ⋯).inv ≫ pullback.fst f U.ι = (f ⁻¹ᵁ U).ι
state_after: no goals
tactic: simp