l3lab/ntp-mathlib huggingface dataset:
/-- The inclusion map of the Moore complex in the alternating face map complex -/
def inclusionOfMooreComplexMap (X : SimplicialObject A) :
    (normalizedMooreComplex A).obj X ⟶ (alternatingFaceMapComplex A).obj X := by
  dsimp only [normalizedMooreComplex, NormalizedMooreComplex.obj,
    alternatingFaceMapComplex, AlternatingFaceMapComplex.obj]
  apply ChainComplex.ofHom _ _ _ _ _ _ (fun n => (NormalizedMooreComplex.objX X n).arrow)
  /- we have to show the compatibility of the differentials on the alternating
           face map complex with those defined on the normalized Moore complex:
           we first get rid of the terms of the alternating sum that are obviously
           zero on the normalized_Moore_complex -/
  intro i
  simp only [AlternatingFaceMapComplex.objD, comp_sum]
  rw [Fin.sum_univ_succ, Fintype.sum_eq_zero]
  swap
  · intro j
    rw [NormalizedMooreComplex.objX, comp_zsmul,
      ← factorThru_arrow _ _ (finset_inf_arrow_factors Finset.univ _ _ (Finset.mem_univ j)),
      Category.assoc, kernelSubobject_arrow_comp, comp_zero, smul_zero]
  -- finally, we study the remaining term which is induced by X.δ 0
  rw [add_zero, Fin.val_zero, pow_zero, one_zsmul]
  dsimp [NormalizedMooreComplex.objD, NormalizedMooreComplex.objX]
  cases i <;> 

Proof state:
case succ
C : Type u_1
inst✝³ : Category.{?u.242416, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.242438, u_2} A
inst✝ : Abelian A
X : SimplicialObject A
n✝ : ℕ
⊢ arrow (Finset.inf Finset.univ fun k => kernelSubobject (SimplicialObject.δ X (Fin.succ k))) ≫ SimplicialObject.δ X 0 =
    (match Nat.succ n✝ with
      | 0 =>
        arrow (Finset.inf Finset.univ fun k => kernelSubobject (SimplicialObject.δ X (Fin.succ k))) ≫
          SimplicialObject.δ X 0 ≫ inv (arrow ⊤)
      | Nat.succ n =>
        factorThru (Finset.inf Finset.univ fun k => kernelSubobject (SimplicialObject.δ X (Fin.succ k)))
          (arrow (Finset.inf Finset.univ fun k => kernelSubobject (SimplicialObject.δ X (Fin.succ k))) ≫
            SimplicialObject.δ X 0)
          (_ :
            Factors (Finset.inf Finset.univ fun k => kernelSubobject (SimplicialObject.δ X (Fin.succ k)))
              (arrow (NormalizedMooreComplex.objX X (n + 1 + 1)) ≫ SimplicialObject.δ X 0))) ≫
      arrow
        (match Nat.succ n✝ with
        | 0 => ⊤
        | Nat.succ n => Finset.inf Finset.univ fun k => kernelSubobject (SimplicialObject.δ X (Fin.succ k)))

Next tactic:
simp
@[simp]
theorem inclusionOfMooreComplexMap_f (X : SimplicialObject A) (n : ℕ) :
    (inclusionOfMooreComplexMap X).f n = (NormalizedMooreComplex.objX X n).arrow := by
  

Proof state:
C : Type u_1
inst✝³ : Category.{?u.265107, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{u_3, u_2} A
inst✝ : Abelian A
X : SimplicialObject A
n : ℕ
⊢ HomologicalComplex.Hom.f (inclusionOfMooreComplexMap X) n = arrow (NormalizedMooreComplex.objX X n)

Next tactic:
dsimp only [inclusionOfMooreComplexMap]
@[simp]
theorem inclusionOfMooreComplexMap_f (X : SimplicialObject A) (n : ℕ) :
    (inclusionOfMooreComplexMap X).f n = (NormalizedMooreComplex.objX X n).arrow := by
  dsimp only [inclusionOfMooreComplexMap]
  

Proof state:
C : Type u_1
inst✝³ : Category.{?u.265107, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{u_3, u_2} A
inst✝ : Abelian A
X : SimplicialObject A
n : ℕ
⊢ HomologicalComplex.Hom.f
      (id
        (ChainComplex.ofHom (fun n => underlying.obj (NormalizedMooreComplex.objX X n)) (NormalizedMooreComplex.objD X)
          (_ : ∀ (n : ℕ), NormalizedMooreComplex.objD X (n + 1) ≫ NormalizedMooreComplex.objD X n = 0)
          (fun n => X.obj (op [n])) (AlternatingFaceMapComplex.objD X)
          (_ : ∀ (n : ℕ), AlternatingFaceMapComplex.objD X (n + 1) ≫ AlternatingFaceMapComplex.objD X n = 0)
          (fun n => arrow (NormalizedMooreComplex.objX X n))
          (_ :
            ∀ (i : ℕ),
              arrow (NormalizedMooreComplex.objX X (i + 1)) ≫ AlternatingFaceMapComplex.objD X i =
                NormalizedMooreComplex.objD X i ≫ arrow (NormalizedMooreComplex.objX X i))))
      n =
    arrow (NormalizedMooreComplex.objX X n)

Next tactic:
exact ChainComplex.ofHom_f _ _ _ _ _ _ _ _ n
theorem d_eq_unop_d (n : ℕ) :
    objD X n =
      (AlternatingFaceMapComplex.objD ((cosimplicialSimplicialEquiv C).functor.obj (op X))
          n).unop := by
  

Proof state:
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.300957, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
n : ℕ
⊢ objD X n = (AlternatingFaceMapComplex.objD ((cosimplicialSimplicialEquiv C).functor.obj (op X)) n).unop

Next tactic:
simp only [objD, AlternatingFaceMapComplex.objD, unop_sum, unop_zsmul]
theorem d_eq_unop_d (n : ℕ) :
    objD X n =
      (AlternatingFaceMapComplex.objD ((cosimplicialSimplicialEquiv C).functor.obj (op X))
          n).unop := by
  simp only [objD, AlternatingFaceMapComplex.objD, unop_sum, unop_zsmul]
  

Proof state:
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.300957, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
n : ℕ
⊢ ∑ i : Fin (n + 2), (-1) ^ ↑i • CosimplicialObject.δ X i =
    ∑ x : Fin (n + 2), (-1) ^ ↑x • (SimplicialObject.δ ((cosimplicialSimplicialEquiv C).functor.obj (op X)) x).unop

Next tactic:
rfl
theorem d_squared (n : ℕ) : objD X n ≫ objD X (n + 1) = 0 := by
  

Proof state:
C : Type u_1
inst✝³ : Category.{u_3, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.302375, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
n : ℕ
⊢ objD X n ≫ objD X (n + 1) = 0

Next tactic:
simp only [d_eq_unop_d, ← unop_comp, AlternatingFaceMapComplex.d_squared, unop_zero]
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    

Proof state:
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
⊢ (fun n => f.app [n]) n ≫ objD Y n = objD X n ≫ (fun n => f.app [n]) (n + 1)

Next tactic:
dsimp
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    dsimp
    

Proof state:
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
⊢ f.app [n] ≫ ∑ i : Fin (n + 2), (-1) ^ ↑i • CosimplicialObject.δ Y i =
    (∑ i : Fin (n + 2), (-1) ^ ↑i • CosimplicialObject.δ X i) ≫ f.app [n + 1]

Next tactic:
rw [comp_sum, sum_comp]
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    dsimp
    rw [comp_sum, sum_comp]
    

Proof state:
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
⊢ ∑ j : Fin (n + 2), f.app [n] ≫ ((-1) ^ ↑j • CosimplicialObject.δ Y j) =
    ∑ j : Fin (n + 2), ((-1) ^ ↑j • CosimplicialObject.δ X j) ≫ f.app [n + 1]

Next tactic:
refine' Finset.sum_congr rfl fun x _ => _
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    dsimp
    rw [comp_sum, sum_comp]
    refine' Finset.sum_congr rfl fun x _ => _
    

Proof state:
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
x : Fin (n + 2)
x✝ : x ∈ Finset.univ
⊢ f.app [n] ≫ ((-1) ^ ↑x • CosimplicialObject.δ Y x) = ((-1) ^ ↑x • CosimplicialObject.δ X x) ≫ f.app [n + 1]

Next tactic:
rw [comp_zsmul, zsmul_comp]
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    dsimp
    rw [comp_sum, sum_comp]
    refine' Finset.sum_congr rfl fun x _ => _
    rw [comp_zsmul, zsmul_comp]
    

Proof state:
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
x : Fin (n + 2)
x✝ : x ∈ Finset.univ
⊢ (-1) ^ ↑x • f.app [n] ≫ CosimplicialObject.δ Y x = (-1) ^ ↑x • CosimplicialObject.δ X x ≫ f.app [n + 1]

Next tactic:
congr 1
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    dsimp
    rw [comp_sum, sum_comp]
    refine' Finset.sum_congr rfl fun x _ => _
    rw [comp_zsmul, zsmul_comp]
    congr 1
    

Proof state:
case e_a
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
x : Fin (n + 2)
x✝ : x ∈ Finset.univ
⊢ f.app [n] ≫ CosimplicialObject.δ Y x = CosimplicialObject.δ X x ≫ f.app [n + 1]

Next tactic:
symm
/-- The alternating face map complex, on morphisms -/
@[simp]
def map (f : X ⟶ Y) : obj X ⟶ obj Y :=
  CochainComplex.ofHom _ _ _ _ _ _ (fun n => f.app [n]) fun n => by
    dsimp
    rw [comp_sum, sum_comp]
    refine' Finset.sum_congr rfl fun x _ => _
    rw [comp_zsmul, zsmul_comp]
    congr 1
    symm
    

Proof state:
case e_a
C : Type u_1
inst✝³ : Category.{?u.319454, u_1} C
inst✝² : Preadditive C
A : Type u_2
inst✝¹ : Category.{?u.319476, u_2} A
inst✝ : Abelian A
X Y : CosimplicialObject C
f : X ⟶ Y
n : ℕ
x : Fin (n + 2)
x✝ : x ∈ Finset.univ
⊢ CosimplicialObject.δ X x ≫ f.app [n + 1] = f.app [n] ≫ CosimplicialObject.δ Y x

Next tactic:
apply f.naturality
theorem _root_.Filter.HasBasis.isVonNBounded_basis_iff {q : ι → Prop} {s : ι → Set E} {A : Set E}
    (h : (𝓝 (0 : E)).HasBasis q s) : IsVonNBounded 𝕜 A ↔ ∀ i, q i → Absorbs 𝕜 (s i) A := by
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
inst✝³ : SeminormedRing 𝕜
inst✝² : SMul 𝕜 E
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
q : ι → Prop
s : ι → Set E
A : Set E
h : HasBasis (𝓝 0) q s
⊢ IsVonNBounded 𝕜 A ↔ ∀ (i : ι), q i → Absorbs 𝕜 (s i) A

Next tactic:
refine' ⟨fun hA i hi => hA (h.mem_of_mem hi), fun hA V hV => _⟩
theorem _root_.Filter.HasBasis.isVonNBounded_basis_iff {q : ι → Prop} {s : ι → Set E} {A : Set E}
    (h : (𝓝 (0 : E)).HasBasis q s) : IsVonNBounded 𝕜 A ↔ ∀ i, q i → Absorbs 𝕜 (s i) A := by
  refine' ⟨fun hA i hi => hA (h.mem_of_mem hi), fun hA V hV => _⟩
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
inst✝³ : SeminormedRing 𝕜
inst✝² : SMul 𝕜 E
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
q : ι → Prop
s : ι → Set E
A : Set E
h : HasBasis (𝓝 0) q s
hA : ∀ (i : ι), q i → Absorbs 𝕜 (s i) A
V : Set E
hV : V ∈ 𝓝 0
⊢ Absorbs 𝕜 V A

Next tactic:
rcases h.mem_iff.mp hV with ⟨i, hi, hV⟩
theorem _root_.Filter.HasBasis.isVonNBounded_basis_iff {q : ι → Prop} {s : ι → Set E} {A : Set E}
    (h : (𝓝 (0 : E)).HasBasis q s) : IsVonNBounded 𝕜 A ↔ ∀ i, q i → Absorbs 𝕜 (s i) A := by
  refine' ⟨fun hA i hi => hA (h.mem_of_mem hi), fun hA V hV => _⟩
  rcases h.mem_iff.mp hV with ⟨i, hi, hV⟩
  

Proof state:
case intro.intro
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
inst✝³ : SeminormedRing 𝕜
inst✝² : SMul 𝕜 E
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
q : ι → Prop
s : ι → Set E
A : Set E
h : HasBasis (𝓝 0) q s
hA : ∀ (i : ι), q i → Absorbs 𝕜 (s i) A
V : Set E
hV✝ : V ∈ 𝓝 0
i : ι
hi : q i
hV : s i ⊆ V
⊢ Absorbs 𝕜 V A

Next tactic:
exact (hA i hi).mono_left hV
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
⊢ IsVonNBounded 𝕜₂ (⇑f '' s)

Next tactic:
let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
⊢ IsVonNBounded 𝕜₂ (⇑f '' s)

Next tactic:
have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
⊢ IsVonNBounded 𝕜₂ (⇑f '' s)

Next tactic:
have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
⊢ IsVonNBounded 𝕜₂ (⇑f '' s)

Next tactic:
have f_tendsto_zero := f.continuous.tendsto 0
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  have f_tendsto_zero := f.continuous.tendsto 0
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
f_tendsto_zero : Tendsto (⇑f) (𝓝 0) (𝓝 (f 0))
⊢ IsVonNBounded 𝕜₂ (⇑f '' s)

Next tactic:
rw [map_zero] at f_tendsto_zero
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  have f_tendsto_zero := f.continuous.tendsto 0
  rw [map_zero] at f_tendsto_zero
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
f_tendsto_zero : Tendsto (⇑f) (𝓝 0) (𝓝 0)
⊢ IsVonNBounded 𝕜₂ (⇑f '' s)

Next tactic:
intro V hV
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  have f_tendsto_zero := f.continuous.tendsto 0
  rw [map_zero] at f_tendsto_zero
  intro V hV
  

Proof state:
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
f_tendsto_zero : Tendsto (⇑f) (𝓝 0) (𝓝 0)
V : Set F
hV : V ∈ 𝓝 0
⊢ Absorbs 𝕜₂ V (⇑f '' s)

Next tactic:
rcases hs (f_tendsto_zero hV) with ⟨r, hrpos, hr⟩
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  have f_tendsto_zero := f.continuous.tendsto 0
  rw [map_zero] at f_tendsto_zero
  intro V hV
  rcases hs (f_tendsto_zero hV) with ⟨r, hrpos, hr⟩
  

Proof state:
case intro.intro
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
f_tendsto_zero : Tendsto (⇑f) (𝓝 0) (𝓝 0)
V : Set F
hV : V ∈ 𝓝 0
r : ℝ
hrpos : 0 < r
hr : ∀ (a : 𝕜₁), r ≤ ‖a‖ → s ⊆ a • ⇑f ⁻¹' V
⊢ Absorbs 𝕜₂ V (⇑f '' s)

Next tactic:
refine' ⟨r, hrpos, fun a ha => _⟩
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  have f_tendsto_zero := f.continuous.tendsto 0
  rw [map_zero] at f_tendsto_zero
  intro V hV
  rcases hs (f_tendsto_zero hV) with ⟨r, hrpos, hr⟩
  refine' ⟨r, hrpos, fun a ha => _⟩
  

Proof state:
case intro.intro
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
f_tendsto_zero : Tendsto (⇑f) (𝓝 0) (𝓝 0)
V : Set F
hV : V ∈ 𝓝 0
r : ℝ
hrpos : 0 < r
hr : ∀ (a : 𝕜₁), r ≤ ‖a‖ → s ⊆ a • ⇑f ⁻¹' V
a : 𝕜₂
ha : r ≤ ‖a‖
⊢ ⇑f '' s ⊆ a • V

Next tactic:
rw [← σ'.apply_symm_apply a]
/-- A continuous linear image of a bounded set is bounded. -/
theorem IsVonNBounded.image {σ : 𝕜₁ →+* 𝕜₂} [RingHomSurjective σ] [RingHomIsometric σ] {s : Set E}
    (hs : IsVonNBounded 𝕜₁ s) (f : E →SL[σ] F) : IsVonNBounded 𝕜₂ (f '' s) := by
  let σ' := RingEquiv.ofBijective σ ⟨σ.injective, σ.surjective⟩
  have σ_iso : Isometry σ := AddMonoidHomClass.isometry_of_norm σ fun x => RingHomIsometric.is_iso
  have σ'_symm_iso : Isometry σ'.symm := σ_iso.right_inv σ'.right_inv
  have f_tendsto_zero := f.continuous.tendsto 0
  rw [map_zero] at f_tendsto_zero
  intro V hV
  rcases hs (f_tendsto_zero hV) with ⟨r, hrpos, hr⟩
  refine' ⟨r, hrpos, fun a ha => _⟩
  rw [← σ'.apply_symm_apply a]
  

Proof state:
case intro.intro
𝕜 : Type u_1
𝕜' : Type u_2
E : Type u_3
E' : Type u_4
F : Type u_5
ι : Type u_6
𝕜₁ : Type u_7
𝕜₂ : Type u_8
inst✝⁹ : NormedDivisionRing 𝕜₁
inst✝⁸ : NormedDivisionRing 𝕜₂
inst✝⁷ : AddCommGroup E
inst✝⁶ : Module 𝕜₁ E
inst✝⁵ : AddCommGroup F
inst✝⁴ : Module 𝕜₂ F
inst✝³ : TopologicalSpace E
inst✝² : TopologicalSpace F
σ : 𝕜₁ →+* 𝕜₂
inst✝¹ : RingHomSurjective σ
inst✝ : RingHomIsometric σ
s : Set E
hs : IsVonNBounded 𝕜₁ s
f : E →SL[σ] F
σ' : 𝕜₁ ≃+* 𝕜₂ := RingEquiv.ofBijective σ (_ : Function.Injective ⇑σ ∧ Function.Surjective ⇑σ)
σ_iso : Isometry ⇑σ
σ'_symm_iso : Isometry ⇑(RingEquiv.symm σ')
f_tendsto_zero : Tendsto (⇑f) (𝓝 0) (𝓝 0)
V : Set F
hV : V ∈ 𝓝 0
r : ℝ
hrpos : 0 < r
hr : ∀ (a : 𝕜₁), r ≤ ‖a‖ → s ⊆ a • ⇑f ⁻¹' V
a : 𝕜₂
ha : r ≤ ‖a‖
⊢ ⇑f '' s ⊆ σ' ((RingEquiv.symm σ') a) • V

Next tactic:
have hanz : a ≠ 0 := norm_pos_iff.mp (hrpos.trans_le ha)