Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(WIP) Partial work for ampleness of complements #10

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 94 additions & 4 deletions src/local/ample.lean
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import analysis.convex.basic
import topology.subset_properties
import linear_algebra.dimension
import analysis.normed_space.complemented

/-!
# Ample subsets of real vector spaces
Expand All @@ -13,9 +15,97 @@ vector spaces with their natural topology.

open set

variables {F : Type*} [add_comm_group F] [vector_space ℝ F] [topological_space F]
variables {E : Type*} [add_comm_group E] [vector_space ℝ E] [topological_space E]

/-- A subset of a topological real vector space is ample if the convex hull of each of its
/-- A subset of a topological real vector space is ample if the convex hull of each of its
connected components is the full space. -/
def ample_set (s : set F) :=
∀ x : s, convex_hull (subtype.val '' (connected_component x)) = univ
def ample_set (s : set E) :=
∀ x : s, convex_hull (subtype.val '' (connected_component x)) = univ

local notation ` I ` := interval (0 : ℝ) 1

def path_connected {E : Type*} [topological_space E] {F : set E} (x y : F) : Prop :=
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be path_connected_within?
In general, these declarations seem to make a lot of use of coercing sets to subtypes... not sure if that is a good idea.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I borrowed this idea from the given definition of ample at the top of the file, and the names from how I think connected was named - I'm happy to adjust though.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh actually I should have said is_path_connected, I'll amend in my next commit

∃ (f : I → F), continuous f ∧ f ⟨0, left_mem_interval⟩ = x ∧ f ⟨1, right_mem_interval⟩ = y

def path_connected_set {E : Type*} [topological_space E] (F : set E) : Prop :=
∀ (x y : F), path_connected x y

def flip_interval : I → I := λ x,
{ val := 1 - x.1,
property :=
begin
rcases x with ⟨_, _, _⟩,
norm_num at *,
split; linarith
end }

lemma continuous_flip : continuous flip_interval := sorry

lemma path_connected_equivalence {E : Type*} [topological_space E] (F : set E) :
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's better to separately prove the @[refl], @[symm] and @[trans] lemmas, because they will also be useful for tactics like symmetry and transitivity.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point, thanks!

equivalence (path_connected : F → F → Prop) :=
begin
classical,
refine ⟨_, _, _⟩,
{ intro x,
refine ⟨λ _, x, continuous_const, rfl, rfl⟩ },
{ rintro x y ⟨f, hf, rfl, rfl⟩,
refine ⟨f ∘ flip_interval, _, _, _⟩,
apply hf.comp continuous_flip,
dsimp [flip_interval], simp,
dsimp [flip_interval], simp },
sorry
end

open submodule

theorem codim_two_complement_is_pc (F : subspace ℝ E) (cd : 2 ≤ vector_space.dim ℝ F.quotient) :
path_connected_set (- (↑F : set E)) :=
begin
obtain ⟨F', compl⟩ := exists_is_compl F,
have : 2 ≤ vector_space.dim ℝ F',
rwa ← linear_equiv.dim_eq (quotient_equiv_of_is_compl _ _ compl),
intros x y,
let u := ((prod_equiv_of_is_compl _ _ compl).symm x).1,
let u' := ((prod_equiv_of_is_compl _ _ compl).symm x).2,
let v := ((prod_equiv_of_is_compl _ _ compl).symm y).1,
let v' := ((prod_equiv_of_is_compl _ _ compl).symm y).2,
have u'_ne_zero : u' ≠ 0,
intro z,
rw prod_equiv_of_is_compl_symm_apply_snd_eq_zero at z,
apply x.2,
apply z,
have v'_ne_zero : v' ≠ 0,
intro z,
rw prod_equiv_of_is_compl_symm_apply_snd_eq_zero at z,
apply y.2,
apply z,
have : disjoint (segment (x : E) (u' : E)) F,
rw disjoint_left,
rintros _ ⟨t₁, t₂, ht₁, ht₂, sum_eq_one, rfl⟩ memF,
have z := linear_proj_of_is_compl_apply_left compl ⟨_, memF⟩,
dsimp at z,
rw [linear_map.map_add, linear_map.map_smul, linear_map.map_smul,
linear_proj_of_is_compl_apply_right, smul_zero, add_zero] at z,
have : ↑u' ∉ F,
intro,
have : ↑u' ∈ ⊥ := compl.inf_le_bot ⟨a, u'.2⟩,
rw mem_bot at this,
apply u'_ne_zero, rwa coe_eq_zero at this,
rw le_iff_lt_or_eq at ht₁,

rcases ht₁ with ht₁ | rfl,
rw ← linear_map.map_smul at z,
let := linear_proj_of_is_compl F F' compl (t₁ • ↑x),
sorry,
sorry,
sorry,
-- simp only [add_zero, linear_proj_of_is_compl_apply_right, linear_map.map_smul, linear_map.map_add, smul_zero] at z,
end


/-- Lemma 2.13: The complement of a linear subspace of codimension at least 2 is ample. -/
theorem ample_codim_two (F : subspace ℝ E) (cd : 2 ≤ vector_space.dim ℝ F.quotient) :
ample_set (- F.carrier) :=
begin

end