All proofs
Project-declaredLean 4.32.0-rc1 · mathlib@e752928d

Relative inductive construction of loc

relative_inductive_construction_of_loc

Plain-language statement

We are given a suitably nice extended metric space X and three local constraints P₀,P₀' and P₁ on maps from X to some type Y. All maps entering the discussion are required to statisfy P₀ everywhere. The goal is to turn a map f₀ satisfying P₁ near a compact set K into one satisfying everywhere without changing f₀ near K. The assumpt...

Exact Lean statement

theorem relative_inductive_construction_of_loc {X Y : Type*} [EMetricSpace X]
    [LocallyCompactSpace X] [SecondCountableTopology X] (P₀ P₁ : ∀ x : X, Germ (𝓝 x) Y → Prop)
    {K : Set X} (hK : IsClosed K) {f₀ : X → Y} (hP₀f₀ : ∀ x, P₀ x f₀) (hP₁f₀ : ∀ᶠ x near K, P₁ x f₀)
    (loc : ∀ x, ∃ f : X → Y, (∀ x, P₀ x f) ∧ ∀ᶠ x' in 𝓝 x, P₁ x' f)
    (ind : ∀ {U₁ U₂ K₁ K₂ : Set X} {f₁ f₂ : X → Y},
      IsOpen U₁ → IsOpen U₂ → IsCompact K₁ → IsCompact K₂ → K₁ ⊆ U₁ → K₂ ⊆ U₂ →
      (∀ x, P₀ x f₁) → (∀ x, P₀ x f₂) → (∀ x ∈ U₁, P₁ x f₁) → (∀ x ∈ U₂, P₁ x f₂) →
      ∃ f : X → Y, (∀ x, P₀ x f) ∧ (∀ᶠ x near K₁ ∪ K₂, P₁ x f) ∧ ∀ᶠ x near K₁ ∪ U₂ᶜ, f x = f₁ x) :
    ∃ f : X → Y, (∀ x, P₀ x f ∧ P₁ x f) ∧ ∀ᶠ x near K, f x = f₀ x

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
theorem relative_inductive_construction_of_loc {X Y : Type*} [EMetricSpace X]    [LocallyCompactSpace X] [SecondCountableTopology X] (P₀ P₁ :  x : X, Germ (𝓝 x) Y  Prop)    {K : Set X} (hK : IsClosed K) {f₀ : X  Y} (hP₀f₀ :  x, P₀ x f₀) (hP₁f₀ : ᶠ x near K, P₁ x f₀)    (loc :  x,  f : X  Y, ( x, P₀ x f)  ᶠ x' in 𝓝 x, P₁ x' f)    (ind :  {U₁ U₂ K₁ K₂ : Set X} {f₁ f₂ : X  Y},      IsOpen U₁  IsOpen U₂  IsCompact K₁  IsCompact K₂  K₁  U₁  K₂  U₂       ( x, P₀ x f₁)  ( x, P₀ x f₂)  ( x  U₁, P₁ x f₁)  ( x  U₂, P₁ x f₂)        f : X  Y, ( x, P₀ x f)  (ᶠ x near K₁ ∪ K₂, P₁ x f)  ᶠ x near K₁ ∪ U₂ᶜ, f x = f₁ x) :     f : X  Y, ( x, P₀ x f  P₁ x f)  ᶠ x near K, f x = f₀ x := by  let P₀' :  x : X, Germ (𝓝 x) Y  Prop := RestrictGermPredicate (fun x φ  φ.value = f₀ x) K  have hf₀ :  x, P₀ x f₀  P₀' x f₀ := fun x     hP₀f₀ x, fun _  Eventually.of_forall fun x'  rfl  have ind' :  {U₁ U₂ K₁ K₂ : Set X} {f₁ f₂ : X  Y},      IsOpen U₁  IsOpen U₂  IsCompact K₁  IsCompact K₂  K₁  U₁  K₂  U₂       ( x, P₀ x f₁  P₀' x f₁)  ( x, P₀ x f₂)  ( x  U₁, P₁ x f₁)  ( x  U₂, P₁ x f₂)        f : X  Y, ( x, P₀ x f  P₀' x f)         (ᶠ x near K₁ ∪ K₂, P₁ x f)  ᶠ x near K₁ ∪ U₂ᶜ, f x = f₁ x := by    intro U₁ U₂ K₁ K₂ f₁ f₂ U₁_op U₂_op K₁_cpct K₂_cpct hK₁U₁ hK₂U₂ hf₁ hf₂ hf₁U₁ hf₂U₂    obtain h₀f₁, h₀'f₁ := forall_and.mp hf₁    rw [forall_restrictGermPredicate_iff] at h₀'f₁    rcases(hasBasis_nhdsSet K).mem_iff.mp (hP₁f₀.germ_congr_set h₀'f₁) with U,      U_op, hKU, hU :  {x}, x  U  P₁ x f₁    obtain K₁', K₂', U₁', U₂', U₁'_op, U₂'_op, K₁'_cpct, K₂'_cpct, hK₁K₁', hK₁'U₁', hK₂'U₂',        hK₁'K₂', hKU₂', hU₁'U, hU₂'U₂ :  (K₁' K₂' U₁' U₂' : Set X),        IsOpen U₁'  IsOpen U₂'  IsCompact K₁'  IsCompact K₂'         K₁  K₁'  K₁'  U₁'  K₂'  U₂'  K₁' ∪ K₂' = K₁ ∪ K₂  K  U₂'ᶜ         U₁'  U ∪ U₁  U₂'  U₂ := by      apply set_juggling <;> assumption    have hU₁'P₁ :  x  U₁', P₁ x ↑f₁ :=      fun x hx  (hU₁'U hx).casesOn (fun h _  hU h) (fun h _  hf₁U₁ x h) (hU₁'U hx)    rcases ind U₁'_op U₂'_op K₁'_cpct K₂'_cpct hK₁'U₁' hK₂'U₂' h₀f₁ hf₂ hU₁'P₁      (fun x hx  hf₂U₂ x (hU₂'U₂ hx)) with f, h₀f, hf, h'f    refine f, fun x  h₀f x, restrictGermPredicate_congr (hf₁ x).2 ?_, ?_, ?_    · exact h'f.filter_mono (nhdsSet_mono <| subset_union_of_subset_right hKU₂' K₁')    · rwa [hK₁'K₂'] at hf    · apply h'f.filter_mono; gcongr  rcases inductive_construction_of_loc P₀ P₀' P₁ hf₀ loc ind' with f, hf  simp only [forall_and, forall_restrictGermPredicate_iff, P₀'] at hf   exact f, hf.1, hf.2.2, hf.2.1
Project
Sphere eversion
License
Apache-2.0
Commit
ded8fda5e76b
Source
SphereEversion/InductiveConstructions.lean:195-233

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

Project-declaredLean 4.32.0-rc1

Continuous of Path

Continuous.ofPath

Plain-language statement

Loop.ofPath is continuous, general version.

topologydifferential geometryhomotopy

Source project: Sphere eversion

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0-rc1

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...

topologydifferential geometryhomotopy

Source project: Sphere eversion

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0-rc1

Extend loops

extend_loops

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 ≠...

topologydifferential geometryhomotopy

Source project: Sphere eversion

Person-level attribution pending.

View proof record