Project documentation
A more precise version of sfHomotopy_in. -/ theorem sfHomotopy_in' {ι} (h₀ : SurroundingFamily g b γ₀ U) (h₁ : SurroundingFamily g b γ₁ U) (τ : ι → ℝ) (x : ι → E) (i : ι) {V : Set E} (hx : x i ∈ V) {t : ℝ} (ht : t ∈ I) {s : ℝ} (h_in₀ : ∀ i, x i ∈ V → ∀ t ∈ I, ∀ (s : ℝ), τ i ≠ 1 → (x i, γ₀ (x i) t s) ∈ Ω) (h_in₁ : ∀ i, x i ∈ V → ∀ t ∈ I, ∀ (s : ℝ), τ i ≠...
Exact Lean statement
theorem extend_loops {U₀ U₁ K₀ K₁ : Set E} (hU₀ : IsOpen U₀) (hU₁ : IsOpen U₁) (hK₀ : IsClosed K₀)
(hK₁ : IsClosed K₁) (hKU₀ : K₀ ⊆ U₀) (hKU₁ : K₁ ⊆ U₁) {γ₀ γ₁ : E → ℝ → Loop F}
(h₀ : SurroundingFamilyIn g b γ₀ U₀ Ω) (h₁ : SurroundingFamilyIn g b γ₁ U₁ Ω) :
∃ U ∈ 𝓝ˢ (K₀ ∪ K₁),
∃ γ : E → ℝ → Loop F,
SurroundingFamilyIn g b γ U Ω ∧
(∀ᶠ x in 𝓝ˢ K₀, γ x = γ₀ x) ∧ ∀ᶠ x in 𝓝ˢ (U₁ᶜ), γ x = γ₀ xFormal artifact
Lean source
theorem extend_loops {U₀ U₁ K₀ K₁ : Set E} (hU₀ : IsOpen U₀) (hU₁ : IsOpen U₁) (hK₀ : IsClosed K₀) (hK₁ : IsClosed K₁) (hKU₀ : K₀ ⊆ U₀) (hKU₁ : K₁ ⊆ U₁) {γ₀ γ₁ : E → ℝ → Loop F} (h₀ : SurroundingFamilyIn g b γ₀ U₀ Ω) (h₁ : SurroundingFamilyIn g b γ₁ U₁ Ω) : ∃ U ∈ 𝓝ˢ (K₀ ∪ K₁), ∃ γ : E → ℝ → Loop F, SurroundingFamilyIn g b γ U Ω ∧ (∀ᶠ x in 𝓝ˢ K₀, γ x = γ₀ x) ∧ ∀ᶠ x in 𝓝ˢ (U₁ᶜ), γ x = γ₀ x := by obtain ⟨V₀, hV₀, hKV₀, hVU₀⟩ := normal_exists_closure_subset hK₀ hU₀ hKU₀ let L₁ := K₁ \ U₀ have hL₁ : IsClosed L₁ := hK₁.sdiff hU₀ have hV₀L₁ : Disjoint (closure V₀) L₁ := disjoint_sdiff_self_right.mono hVU₀ Subset.rfl obtain ⟨V₂, hV₂, hLV₂, h2V₂⟩ := normal_exists_closure_subset hL₁ (isClosed_closure.isOpen_compl.inter hU₁) (subset_inter (subset_compl_iff_disjoint_left.mpr hV₀L₁) <| sdiff_subset.trans hKU₁) obtain ⟨V₁, hV₁, hLV₁, hV₁₂⟩ := normal_exists_closure_subset hL₁ hV₂ hLV₂ rw [subset_inter_iff, subset_compl_iff_disjoint_left] at h2V₂ rcases h2V₂ with ⟨hV₀₂, hV₂U₁⟩ have hVU₁ : V₁ ⊆ U₁ := subset_closure.trans (hV₁₂.trans <| subset_closure.trans hV₂U₁) have hdisj : Disjoint (closure V₀ ∪ V₂ᶜ) (closure V₁) := by refine Disjoint.union_left (hV₀₂.mono_right (hV₁₂.trans subset_closure)) ?_ rw [← subset_compl_iff_disjoint_left, compl_compl]; exact hV₁₂ refine ⟨V₀ ∪ U₁ ∩ U₀ ∪ V₁, ((hV₀.union <| hU₁.inter hU₀).union hV₁).mem_nhdsSet.mpr ?_, ?_⟩ · refine union_subset (hKV₀.trans <| subset_union_left.trans <| subset_union_left) ?_ rw [← inter_union_sdiff K₁]; exact union_subset_union ((inter_subset_inter_left _ hKU₁).trans <| subset_union_right) hLV₁ obtain ⟨ρ, h0ρ, h1ρ, -⟩ := exists_continuous_zero_one_of_isClosed (isClosed_closure.union hV₂.isClosed_compl) isClosed_closure hdisj let h₀' : SurroundingFamilyIn g b γ₀ (U₁ ∩ U₀) Ω := h₀.mono inter_subset_right let h₁' : SurroundingFamilyIn g b γ₁ (U₁ ∩ U₀) Ω := h₁.mono inter_subset_left let γ := sfHomotopy h₀'.to_sf h₁'.to_sf have hγ : ∀ τ, SurroundingFamilyIn g b (γ τ) (U₁ ∩ U₀) Ω := surroundingFamilyIn_sfHomotopy h₀' h₁' have heq1 : ∀ x ∈ closure V₀ ∪ V₂ᶜ, γ (ρ x) x = γ₀ x := by intro x hx simp_rw [γ, h0ρ hx, Pi.zero_apply, sfHomotopy_zero] have heq2 : ∀ x ∈ V₀, γ (ρ x) x = γ₀ x := fun x hx ↦ heq1 x (subset_closure.trans subset_union_left hx) refine ⟨fun x t ↦ γ (ρ x) x t, ?_, ?_, ?_⟩ · refine ⟨⟨fun x ↦ (hγ <| ρ x).base x, fun x ↦ (hγ <| ρ x).t₀ x, fun x ↦ (hγ <| ρ x).projI x, ?_, ?_⟩, ?_⟩ · rintro x ((hx | hx) | hx) · simp_rw [heq2 x hx, h₀.surrounds x (hVU₀ <| subset_closure hx)] · simp_rw [γ] exact (hγ <| ρ x).surrounds x hx · simp_rw [γ, h1ρ (subset_closure hx), Pi.one_apply, sfHomotopy_one, h₁.surrounds x (hVU₁ hx)] · fun_prop · intro x hx t ht s _; refine sfHomotopy_in' _ _ _ id _ hx ht ?_ ?_ · intro x hx t _ht s hρx; refine h₀.val_in ?_; rcases hx with ((hx | ⟨-, hx⟩) | hx) · exact (subset_closure.trans hVU₀) hx · exact hx · exact (hρx <| h1ρ <| subset_closure hx).elim · intro x hx t _ht s hρx; refine h₁.val_in ?_; rcases hx with ((hx | ⟨hx, -⟩) | hx) · exact (hρx <| h0ρ <| subset_closure.trans subset_union_left hx).elim · exact hx · exact hVU₁ hx · exact eventually_of_mem (hV₀.mem_nhdsSet.mpr hKV₀) heq2 · exact eventually_of_mem (isClosed_closure.isOpen_compl.mem_nhdsSet.mpr <| compl_subset_compl.mpr hV₂U₁) fun x hx ↦ heq1 x <| mem_union_right _ <| compl_subset_compl.mpr subset_closure hx- Project
- Sphere eversion
- License
- Apache-2.0
- Commit
- ded8fda5e76b
- Source
- SphereEversion/Loops/Surrounding.lean:868-926
Reuse this declaration
Bring the exact result into your workflow
The import identifies the source module. Your project still needs the pinned package dependency shown on this page.
What this badge means
This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.
Continue in this project
Related declarations
Continuous of Path
Continuous.ofPath
Plain-language statement
Loop.ofPath is continuous, general version.
Source project: Sphere eversion
Person-level attribution pending.
Injective update iff
DualPair.injective_update_iff
Project documentation
Map a dual pair under a linear equivalence. -/ @[simps] def map (p : DualPair E) (L : E ≃L[ℝ] E') : DualPair E' := ⟨p.π ∘L ↑L.symm, L p.v, (congr_arg p.π <| L.symm_apply_apply p.v).trans p.pairing⟩ theorem update_comp_left (p : DualPair E) (ψ' : F →L[ℝ] G) (φ : E →L[ℝ] F) (w : F) : p.update (ψ' ∘L φ) (ψ' w) = ψ' ∘L p.update φ w := by ext1 u simp only [upd...
Source project: Sphere eversion
Person-level attribution pending.
Immersion antipodal sphere
immersion_antipodal_sphere
Plain-language statement
The antipodal map on 𝕊^n ⊆ ℝ^{n+1} is an immersion.
Source project: Sphere eversion
Person-level attribution pending.