/-
Copyright 2026 The Formal Conjectures Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-/
module
public import Mathlib@[expose] public sectionnoncomputable def maxCosetDim (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] (A : Set V) : ℕ :=
sSup { Module.finrank K S.direction | (S : AffineSubspace K V) (_h : (S : Set V) ⊆ A) }open scoped PointwiseThe maximum coset dimension in the entire vector space $V$ is exactly the dimension of $V$.
All goals completed! 🐙The maximum coset dimension in the empty set $\emptyset$ is $0$.
theorem maxCosetDim_empty (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] : maxCosetDim K V (∅ : Set V) = 0 := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K V⊢ maxCosetDim K V ∅ = 0
dsimp [maxCosetDim] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K V⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
have h : {Module.finrank K S.direction | (S : AffineSubspace K V) (_h : (S : Set V) ⊆ ∅)} = {0} := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K V⊢ maxCosetDim K V ∅ = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
ext x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vx:ℕ⊢ x ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} ↔ x ∈ {0} K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
simp only [Set.mem_ofPred_eq, Set.subset_empty_iff, Set.mem_singleton_iff] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vx:ℕ⊢ (∃ S, ∃ (_ : ↑S = ∅), Module.finrank K ↥S.direction = x) ↔ x = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
constructor mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vx:ℕ⊢ (∃ S, ∃ (_ : ↑S = ∅), Module.finrank K ↥S.direction = x) → x = 0mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vx:ℕ⊢ x = 0 → ∃ S, ∃ (_ : ↑S = ∅), Module.finrank K ↥S.direction = x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
· mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vx:ℕ⊢ (∃ S, ∃ (_ : ↑S = ∅), Module.finrank K ↥S.direction = x) → x = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0 rintro ⟨S, hS, rfl⟩ mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
have hbot : S = ⊥ := SetLike.ext'_iff.mpr (by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅⊢ ↑S = ↑⊥ mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅hbot:S = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0 simp [hS] All goals completed! 🐙mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅hbot:S = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0)mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅hbot:S = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
rw [hbot, mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅hbot:S = ⊥⊢ Module.finrank K ↥⊥.direction = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0 AffineSubspace.direction_bot, mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅hbot:S = ⊥⊢ Module.finrank K ↥⊥ = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0 finrank_bot mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VhS:↑S = ∅hbot:S = ⊥⊢ 0 = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0] All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
· mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vx:ℕ⊢ x = 0 → ∃ S, ∃ (_ : ↑S = ∅), Module.finrank K ↥S.direction = x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0 rintro rfl mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K V⊢ ∃ S, ∃ (_ : ↑S = ∅), Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
use ⊥ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K V⊢ ∃ (_ : ↑⊥ = ∅), Module.finrank K ↥⊥.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
simp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = 0
rw [h, K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {0} = 0 All goals completed! 🐙 csSup_singleton K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ ∅), Module.finrank K ↥S.direction = x} = {0}⊢ 0 = 0 All goals completed! 🐙] All goals completed! 🐙If $A \subseteq B$, then the maximum coset dimension achievable in $A$ cannot exceed the maximum coset dimension achievable in $B$.
theorem maxCosetDim_mono (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] {A B : Set V} (h : A ⊆ B) :
maxCosetDim K V A ≤ maxCosetDim K V B := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ maxCosetDim K V A ≤ maxCosetDim K V B
dsimp [maxCosetDim] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x} ≤
sSup {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x}
-- We show that any dimension achievable in A is bounded by the supremum in B
apply csSup_le h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}.Nonemptyh₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ ∀ b ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x},
b ≤ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x}
· h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}.Nonempty use 0 h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ 0 ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
use ⊥ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ ∃ (_ : ↑⊥ ⊆ A), Module.finrank K ↥⊥.direction = 0
simp [Set.empty_subset] All goals completed! 🐙
· h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ B⊢ ∀ b ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x},
b ≤ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x} rintro d ⟨S, hS, rfl⟩ h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ Module.finrank K ↥S.direction ≤ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x}
apply le_csSup h₂.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ BddAbove {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x}h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x}
· h₂.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ BddAbove {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x} -- Prove the set of dimensions in B is bounded above
use Module.finrank K V h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ Module.finrank K V ∈ upperBounds {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x}
rintro _ ⟨S', _, rfl⟩ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ AS':AffineSubspace K Vw✝:↑S' ⊆ B⊢ Module.finrank K ↥S'.direction ≤ Module.finrank K V
exact Submodule.finrank_le S'.direction All goals completed! 🐙
· h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = x} -- The witness S in A is also a witness in B
use S h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VA:Set VB:Set Vh:A ⊆ BS:AffineSubspace K VhS:↑S ⊆ A⊢ ∃ (_ : ↑S ⊆ B), Module.finrank K ↥S.direction = Module.finrank K ↥S.direction
exact ⟨Set.Subset.trans hS h, rfl⟩ All goals completed! 🐙If the target set $A$ is already an affine subspace, the function returns exactly the rank of its direction.
theorem maxCosetDim_affineSubspace (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] (S : AffineSubspace K V) :
maxCosetDim K V (S : Set V) = Module.finrank K S.direction := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ maxCosetDim K V ↑S = Module.finrank K ↥S.direction
dsimp [maxCosetDim] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ sSup {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x} = Module.finrank K ↥S.direction
apply le_antisymm a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ sSup {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x} ≤ Module.finrank K ↥S.directiona K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ Module.finrank K ↥S.direction ≤ sSup {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}
· a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ sSup {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x} ≤ Module.finrank K ↥S.direction apply csSup_le a.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}.Nonemptyh₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ ∀ b ∈ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}, b ≤ Module.finrank K ↥S.direction
· a.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}.Nonempty use 0 h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ 0 ∈ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}
use ⊥ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ ∃ (_ : ↑⊥ ⊆ ↑S), Module.finrank K ↥⊥.direction = 0
simp [Set.empty_subset] All goals completed! 🐙
· h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ ∀ b ∈ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}, b ≤ Module.finrank K ↥S.direction rintro _ ⟨S', hS', rfl⟩ h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VS':AffineSubspace K VhS':↑S' ⊆ ↑S⊢ Module.finrank K ↥S'.direction ≤ Module.finrank K ↥S.direction
exact Submodule.finrank_mono (AffineSubspace.direction_le hS') All goals completed! 🐙
· a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ Module.finrank K ↥S.direction ≤ sSup {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x} apply le_csSup a.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ BddAbove {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}
· a.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ BddAbove {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x} use Module.finrank K V h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ Module.finrank K V ∈ upperBounds {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x}
rintro _ ⟨S', _, rfl⟩ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K VS':AffineSubspace K Vw✝:↑S' ⊆ ↑S⊢ Module.finrank K ↥S'.direction ≤ Module.finrank K V
exact Submodule.finrank_le S'.direction All goals completed! 🐙
· h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K VS:AffineSubspace K V⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S_1, ∃ (_ : ↑S_1 ⊆ ↑S), Module.finrank K ↥S_1.direction = x} use S All goals completed! 🐙Similar to the empty set, a set containing exactly one vector should yield a maximum dimension of 0.
theorem maxCosetDim_singleton (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] (v : V) : maxCosetDim K V ({v} : Set V) = 0 := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ maxCosetDim K V {v} = 0
dsimp [maxCosetDim] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
have h : {Module.finrank K S.direction | (S : AffineSubspace K V) (_h : (S : Set V) ⊆ {v})} = {0} := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ maxCosetDim K V {v} = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
ext x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vx:ℕ⊢ x ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} ↔ x ∈ {0} K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
simp only [Set.mem_ofPred_eq, Set.mem_singleton_iff] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vx:ℕ⊢ (∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x) ↔ x = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
constructor mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vx:ℕ⊢ (∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x) → x = 0mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vx:ℕ⊢ x = 0 → ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
· mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vx:ℕ⊢ (∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x) → x = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 rintro ⟨S, hS, rfl⟩ mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
obtain rfl | h_nonempty := eq_bot_or_bot_lt S mp.inl K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VhS:↑⊥ ⊆ {v}⊢ Module.finrank K ↥⊥.direction = 0mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < S⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
· mp.inl K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VhS:↑⊥ ⊆ {v}⊢ Module.finrank K ↥⊥.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 rw [AffineSubspace.direction_bot, mp.inl K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VhS:↑⊥ ⊆ {v}⊢ Module.finrank K ↥⊥ = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 finrank_bot mp.inl K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VhS:↑⊥ ⊆ {v}⊢ 0 = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0] All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
· mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < S⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 have h_dir : S.direction = ⊥ := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ maxCosetDim K V {v} = 0 mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
apply eq_bot_iff.mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < S⊢ S.direction ≤ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
rintro y hy K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.direction⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
have h_coe : (S : Set V) ≠ ∅ := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ maxCosetDim K V {v} = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
intro h_emp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_emp:↑S = ∅⊢ False K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
apply ne_of_gt h_nonempty K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_emp:↑S = ∅⊢ S = ⊥ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
exact (AffineSubspace.coe_eq_bot_iff S).mp h_emp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
obtain ⟨p, hp⟩ : (S : Set V).Nonempty := Set.nonempty_iff_ne_empty.mpr h_coe K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑S⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
have hpv : p = v := hS hp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = v⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
have hpy : y +ᵥ p ∈ S := AffineSubspace.vadd_mem_of_mem_direction hy hp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = vhpy:y +ᵥ p ∈ S⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
have hpyv : y +ᵥ p = v := hS hpy K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = vhpy:y +ᵥ p ∈ Shpyv:y +ᵥ p = v⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
rw [hpv K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = vhpy:y +ᵥ p ∈ Shpyv:y +ᵥ v = v⊢ y ∈ ⊥ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = vhpy:y +ᵥ p ∈ Shpyv:y +ᵥ v = v⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0] at hpyv K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = vhpy:y +ᵥ p ∈ Shpyv:y +ᵥ v = v⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
change y + v = v at hpyv K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sy:Vhy:y ∈ S.directionh_coe:↑S ≠ ∅p:Vhp:p ∈ ↑Shpv:p = vhpy:y +ᵥ p ∈ Shpyv:y + v = v⊢ y ∈ ⊥mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
simpa using hpyvmp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
rw [h_dir, mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ Module.finrank K ↥⊥ = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 finrank_bot mp.inr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VS:AffineSubspace K VhS:↑S ⊆ {v}h_nonempty:⊥ < Sh_dir:S.direction = ⊥⊢ 0 = 0 All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0] All goals completed! 🐙 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
· mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vx:ℕ⊢ x = 0 → ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 rintro rfl mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
use ⊥ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:V⊢ ∃ (_ : ↑⊥ ⊆ {v}), Module.finrank K ↥⊥.direction = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
simp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = 0
rw [h, K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ sSup {0} = 0 All goals completed! 🐙 csSup_singleton K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:Vh:{x | ∃ S, ∃ (_ : ↑S ⊆ {v}), Module.finrank K ↥S.direction = x} = {0}⊢ 0 = 0 All goals completed! 🐙] All goals completed! 🐙
lemma maxCosetDim_vadd_le (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] (v : V) (A : Set V) :
maxCosetDim K V (v +ᵥ A) ≤ maxCosetDim K V A := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V (v +ᵥ A) ≤ maxCosetDim K V A
dsimp [maxCosetDim] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ v +ᵥ A), Module.finrank K ↥S.direction = x} ≤
sSup {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
apply csSup_le h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ {x | ∃ S, ∃ (_ : ↑S ⊆ v +ᵥ A), Module.finrank K ↥S.direction = x}.Nonemptyh₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ ∀ b ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ v +ᵥ A), Module.finrank K ↥S.direction = x},
b ≤ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
· h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ {x | ∃ S, ∃ (_ : ↑S ⊆ v +ᵥ A), Module.finrank K ↥S.direction = x}.Nonempty use 0 h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ 0 ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ v +ᵥ A), Module.finrank K ↥S.direction = x}
use ⊥ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ ∃ (_ : ↑⊥ ⊆ v +ᵥ A), Module.finrank K ↥⊥.direction = 0
simp [Set.empty_subset] All goals completed! 🐙
· h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ ∀ b ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ v +ᵥ A), Module.finrank K ↥S.direction = x},
b ≤ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x} rintro d ⟨S, hS, rfl⟩ h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ A⊢ Module.finrank K ↥S.direction ≤ sSup {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
apply le_csSup h₂.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ A⊢ BddAbove {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ A⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
· h₂.h₁ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ A⊢ BddAbove {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x} use Module.finrank K V h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ A⊢ Module.finrank K V ∈ upperBounds {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
rintro _ ⟨S', _, rfl⟩ h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ AS':AffineSubspace K Vw✝:↑S' ⊆ A⊢ Module.finrank K ↥S'.direction ≤ Module.finrank K V
exact Submodule.finrank_le S'.direction All goals completed! 🐙
· h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ A⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x} let f : V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v) h₂ K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Module.finrank K ↥S.direction ∈ {x | ∃ S, ∃ (_ : ↑S ⊆ A), Module.finrank K ↥S.direction = x}
refine ⟨S.map (f : V →ᵃ[K] V), ?_, ?_⟩ h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ ↑(AffineSubspace.map (↑f) S) ⊆ Ah₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction
· h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ ↑(AffineSubspace.map (↑f) S) ⊆ A rw [AffineSubspace.coe_map h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ ⇑↑f '' ↑S ⊆ A h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ ⇑↑f '' ↑S ⊆ A] h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ ⇑↑f '' ↑S ⊆ A
rintro x ⟨y, hy, rfl⟩ h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)y:Vhy:y ∈ ↑S⊢ ↑f y ∈ A
have h_ya : y ∈ v +ᵥ A := hS hy h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)y:Vhy:y ∈ ↑Sh_ya:y ∈ v +ᵥ A⊢ ↑f y ∈ A
rcases h_ya with ⟨a, ha, rfl⟩ h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)a:Vha:a ∈ Ahy:(fun x ↦ v +ᵥ x) a ∈ ↑S⊢ ↑f ((fun x ↦ v +ᵥ x) a) ∈ A
change -v + (v + a) ∈ A h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)a:Vha:a ∈ Ahy:(fun x ↦ v +ᵥ x) a ∈ ↑S⊢ -v + (v + a) ∈ A
rw [neg_add_cancel_left h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)a:Vha:a ∈ Ahy:(fun x ↦ v +ᵥ x) a ∈ ↑S⊢ a ∈ A h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)a:Vha:a ∈ Ahy:(fun x ↦ v +ᵥ x) a ∈ ↑S⊢ a ∈ A]h₂.refine_1 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)a:Vha:a ∈ Ahy:(fun x ↦ v +ᵥ x) a ∈ ↑S⊢ a ∈ A
exact ha All goals completed! 🐙
· h₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction have hd : (S.map (f : V →ᵃ[K] V)).direction = S.direction := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V (v +ᵥ A) ≤ maxCosetDim K V A h₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction
rw [AffineSubspace.map_direction K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Submodule.map (↑f).linear S.direction = S.direction K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Submodule.map (↑f).linear S.direction = S.directionh₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction] K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Submodule.map (↑f).linear S.direction = S.directionh₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction
change Submodule.map LinearMap.id S.direction = S.direction K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)⊢ Submodule.map LinearMap.id S.direction = S.directionh₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction
exact Submodule.map_id S.directionh₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.directionh₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥(AffineSubspace.map (↑f) S).direction = Module.finrank K ↥S.direction
rw [hd h₂.refine_2 K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set VS:AffineSubspace K VhS:↑S ⊆ v +ᵥ Af:V ≃ᵃ[K] V := AffineEquiv.constVAdd K V (-v)hd:(AffineSubspace.map (↑f) S).direction = S.direction⊢ Module.finrank K ↥S.direction = Module.finrank K ↥S.direction All goals completed! 🐙] All goals completed! 🐙Translating a set by a vector does not change its maximum coset dimension.
theorem maxCosetDim_vadd (K V : Type*) [DivisionRing K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] (v : V) (A : Set V) :
maxCosetDim K V (v +ᵥ A) = maxCosetDim K V A := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V (v +ᵥ A) = maxCosetDim K V A
apply le_antisymm a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V (v +ᵥ A) ≤ maxCosetDim K V Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
· a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V (v +ᵥ A) ≤ maxCosetDim K V A exact maxCosetDim_vadd_le K V v A All goals completed! 🐙
· a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A) have h := maxCosetDim_vadd_le K V (-v) (v +ᵥ A) a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
have h_cancel : -v +ᵥ (v +ᵥ A) = A := by K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set V⊢ maxCosetDim K V (v +ᵥ A) = maxCosetDim K V A a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
ext x K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:V⊢ x ∈ -v +ᵥ v +ᵥ A ↔ x ∈ A a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
constructor mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:V⊢ x ∈ -v +ᵥ v +ᵥ A → x ∈ Ampr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:V⊢ x ∈ A → x ∈ -v +ᵥ v +ᵥ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
· mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:V⊢ x ∈ -v +ᵥ v +ᵥ A → x ∈ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A) rintro ⟨y, ⟨a, ha, rfl⟩, rfl⟩ mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)a:Vha:a ∈ A⊢ (fun x ↦ -v +ᵥ x) ((fun x ↦ v +ᵥ x) a) ∈ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
change -v + (v + a) ∈ A mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)a:Vha:a ∈ A⊢ -v + (v + a) ∈ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
rw [neg_add_cancel_left mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)a:Vha:a ∈ A⊢ a ∈ A mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)a:Vha:a ∈ A⊢ a ∈ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)]mp K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)a:Vha:a ∈ A⊢ a ∈ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
exact ha All goals completed! 🐙a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
· mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:V⊢ x ∈ A → x ∈ -v +ᵥ v +ᵥ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A) rintro hx mpr K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ x ∈ -v +ᵥ v +ᵥ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
use v + x h K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ v + x ∈ v +ᵥ A ∧ (fun x ↦ -v +ᵥ x) (v + x) = xa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
constructor h.left K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ v + x ∈ v +ᵥ Ah.right K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ (fun x ↦ -v +ᵥ x) (v + x) = xa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
· h.left K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ v + x ∈ v +ᵥ Aa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A) exact ⟨x, hx, rfl⟩ All goals completed! 🐙a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
· h.right K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ (fun x ↦ -v +ᵥ x) (v + x) = xa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A) change -v + (v + x) = x h.right K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ -v + (v + x) = xa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
rw [neg_add_cancel_left h.right K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)x:Vhx:x ∈ A⊢ x = xa K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)]a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V (-v +ᵥ v +ᵥ A) ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
rw [h_cancel a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A) a K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)] at ha K:Type u_1V:Type u_2inst✝³:DivisionRing Kinst✝²:AddCommGroup Vinst✝¹:Module K Vinst✝:FiniteDimensional K Vv:VA:Set Vh:maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)h_cancel:-v +ᵥ v +ᵥ A = A⊢ maxCosetDim K V A ≤ maxCosetDim K V (v +ᵥ A)
exact h All goals completed! 🐙