topology.sheaves.local_predicate
⟷
Mathlib.Topology.Sheaves.LocalPredicate
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
This reverts commit 13361559.
These are just too difficult to forward port as is because of the max u v =?= max u ?v
issue https://github.com/leanprover/lean4/issues/2297.
We have another candidate approach to this, using a new UnivLE
typeclass, and I would prefer if we investigated that without the pressure of the port at the same time.
This will delay @hrmacbeth's plans to define meromorphic functions, perhaps.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -38,12 +38,12 @@ to the types in the ambient type family.
We give conditions sufficient to show that this map is injective and/or surjective.
-/
-universes v w
+universe v
noncomputable theory
variables {X : Top.{v}}
-variables (T : X → Type w)
+variables (T : X → Type v)
open topological_space
open opposite
@@ -69,12 +69,12 @@ variables (X)
Continuity is a "prelocal" predicate on functions to a fixed topological space `T`.
-/
@[simps]
-def continuous_prelocal (T : Top.{w}) : prelocal_predicate (λ x : X, T) :=
+def continuous_prelocal (T : Top.{v}) : prelocal_predicate (λ x : X, T) :=
{ pred := λ U f, continuous f,
res := λ U V i f h, continuous.comp h (opens.open_embedding_of_le i.le).continuous, }
/-- Satisfying the inhabited linter. -/
-instance inhabited_prelocal_predicate (T : Top.{w}) : inhabited (prelocal_predicate (λ x : X, T)) :=
+instance inhabited_prelocal_predicate (T : Top.{v}) : inhabited (prelocal_predicate (λ x : X, T)) :=
⟨continuous_prelocal X T⟩
variables {X}
@@ -150,7 +150,7 @@ lemma prelocal_predicate.sheafify_of {T : X → Type v} {P : prelocal_predicate
The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
@[simps]
-def subpresheaf_to_Types (P : prelocal_predicate T) : presheaf (Type (max v w)) X :=
+def subpresheaf_to_Types (P : prelocal_predicate T) : presheaf (Type v) X :=
{ obj := λ U, { f : Π x : unop U, T x // P.pred f },
map := λ U V i f, ⟨λ x, f.1 (i.unop x), P.res i.unop f.1 f.2⟩ }.
@@ -211,27 +211,22 @@ end subpresheaf_to_Types
The subsheaf of the sheaf of all dependently typed functions satisfying the local predicate `P`.
-/
@[simps]
-def subsheaf_to_Types (P : local_predicate T) : sheaf (Type max v w) X :=
+def subsheaf_to_Types (P : local_predicate T) : sheaf (Type v) X :=
⟨subpresheaf_to_Types P.to_prelocal_predicate, subpresheaf_to_Types.is_sheaf P⟩
--- TODO There is further universe generalization to do here,
--- but it depends on more difficult universe generalization in `topology.sheaves.stalks`.
--- The aim is to replace `T'` with the more general `T` below.
-variables {T' : X → Type v}
-
/--
There is a canonical map from the stalk to the original fiber, given by evaluating sections.
-/
-def stalk_to_fiber (P : local_predicate T') (x : X) :
- (subsheaf_to_Types P).presheaf.stalk x ⟶ T' x :=
+def stalk_to_fiber (P : local_predicate T) (x : X) :
+ (subsheaf_to_Types P).presheaf.stalk x ⟶ T x :=
begin
refine colimit.desc _
- { X := T' x, ι := { app := λ U f, _, naturality' := _ } },
+ { X := T x, ι := { app := λ U f, _, naturality' := _ } },
{ exact f.1 ⟨x, (unop U).2⟩, },
{ tidy, }
end
-@[simp] lemma stalk_to_fiber_germ (P : local_predicate T') (U : opens X) (x : U) (f) :
+@[simp] lemma stalk_to_fiber_germ (P : local_predicate T) (U : opens X) (x : U) (f) :
stalk_to_fiber P x ((subsheaf_to_Types P).presheaf.germ x f) = f.1 x :=
begin
dsimp [presheaf.germ, stalk_to_fiber],
@@ -244,8 +239,8 @@ end
The `stalk_to_fiber` map is surjective at `x` if
every point in the fiber `T x` has an allowed section passing through it.
-/
-lemma stalk_to_fiber_surjective (P : local_predicate T') (x : X)
- (w : ∀ (t : T' x), ∃ (U : open_nhds x) (f : Π y : U.1, T' y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
+lemma stalk_to_fiber_surjective (P : local_predicate T) (x : X)
+ (w : ∀ (t : T x), ∃ (U : open_nhds x) (f : Π y : U.1, T y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
function.surjective (stalk_to_fiber P x) :=
λ t,
begin
@@ -259,16 +254,16 @@ end
The `stalk_to_fiber` map is injective at `x` if any two allowed sections which agree at `x`
agree on some neighborhood of `x`.
-/
-lemma stalk_to_fiber_injective (P : local_predicate T') (x : X)
- (w : ∀ (U V : open_nhds x) (fU : Π y : U.1, T' y) (hU : P.pred fU)
- (fV : Π y : V.1, T' y) (hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
+lemma stalk_to_fiber_injective (P : local_predicate T) (x : X)
+ (w : ∀ (U V : open_nhds x) (fU : Π y : U.1, T y) (hU : P.pred fU)
+ (fV : Π y : V.1, T y) (hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
∃ (W : open_nhds x) (iU : W ⟶ U) (iV : W ⟶ V), ∀ (w : W.1), fU (iU w : U.1) = fV (iV w : V.1)) :
function.injective (stalk_to_fiber P x) :=
λ tU tV h,
begin
-- We promise to provide all the ingredients of the proof later:
let Q :
- ∃ (W : (open_nhds x)ᵒᵖ) (s : Π w : (unop W).1, T' w) (hW : P.pred s),
+ ∃ (W : (open_nhds x)ᵒᵖ) (s : Π w : (unop W).1, T w) (hW : P.pred s),
tU = (subsheaf_to_Types P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
tV = (subsheaf_to_Types P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ := _,
{ choose W s hW e using Q,
@@ -288,9 +283,6 @@ begin
colimit_sound iV.op (subtype.eq (funext w).symm)⟩, },
end
--- TODO to continue generalizing universes here, we will need to deal with the issue noted
--- at `presheaf_to_Top` (universe generalization for the Yoneda embedding).
-
/--
Some repackaging:
the presheaf of functions satisfying `continuous_prelocal` is just the same thing as
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
Necessary but sadly insufficient for the request at https://leanprover.zulipchat.com/#narrow/stream/144837-PR-reviews/topic/.2319146.20sheaves.20on.20manifolds
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -38,12 +38,12 @@ to the types in the ambient type family.
We give conditions sufficient to show that this map is injective and/or surjective.
-/
-universe v
+universes v w
noncomputable theory
variables {X : Top.{v}}
-variables (T : X → Type v)
+variables (T : X → Type w)
open topological_space
open opposite
@@ -69,12 +69,12 @@ variables (X)
Continuity is a "prelocal" predicate on functions to a fixed topological space `T`.
-/
@[simps]
-def continuous_prelocal (T : Top.{v}) : prelocal_predicate (λ x : X, T) :=
+def continuous_prelocal (T : Top.{w}) : prelocal_predicate (λ x : X, T) :=
{ pred := λ U f, continuous f,
res := λ U V i f h, continuous.comp h (opens.open_embedding_of_le i.le).continuous, }
/-- Satisfying the inhabited linter. -/
-instance inhabited_prelocal_predicate (T : Top.{v}) : inhabited (prelocal_predicate (λ x : X, T)) :=
+instance inhabited_prelocal_predicate (T : Top.{w}) : inhabited (prelocal_predicate (λ x : X, T)) :=
⟨continuous_prelocal X T⟩
variables {X}
@@ -150,7 +150,7 @@ lemma prelocal_predicate.sheafify_of {T : X → Type v} {P : prelocal_predicate
The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
@[simps]
-def subpresheaf_to_Types (P : prelocal_predicate T) : presheaf (Type v) X :=
+def subpresheaf_to_Types (P : prelocal_predicate T) : presheaf (Type (max v w)) X :=
{ obj := λ U, { f : Π x : unop U, T x // P.pred f },
map := λ U V i f, ⟨λ x, f.1 (i.unop x), P.res i.unop f.1 f.2⟩ }.
@@ -211,22 +211,27 @@ end subpresheaf_to_Types
The subsheaf of the sheaf of all dependently typed functions satisfying the local predicate `P`.
-/
@[simps]
-def subsheaf_to_Types (P : local_predicate T) : sheaf (Type v) X :=
+def subsheaf_to_Types (P : local_predicate T) : sheaf (Type max v w) X :=
⟨subpresheaf_to_Types P.to_prelocal_predicate, subpresheaf_to_Types.is_sheaf P⟩
+-- TODO There is further universe generalization to do here,
+-- but it depends on more difficult universe generalization in `topology.sheaves.stalks`.
+-- The aim is to replace `T'` with the more general `T` below.
+variables {T' : X → Type v}
+
/--
There is a canonical map from the stalk to the original fiber, given by evaluating sections.
-/
-def stalk_to_fiber (P : local_predicate T) (x : X) :
- (subsheaf_to_Types P).presheaf.stalk x ⟶ T x :=
+def stalk_to_fiber (P : local_predicate T') (x : X) :
+ (subsheaf_to_Types P).presheaf.stalk x ⟶ T' x :=
begin
refine colimit.desc _
- { X := T x, ι := { app := λ U f, _, naturality' := _ } },
+ { X := T' x, ι := { app := λ U f, _, naturality' := _ } },
{ exact f.1 ⟨x, (unop U).2⟩, },
{ tidy, }
end
-@[simp] lemma stalk_to_fiber_germ (P : local_predicate T) (U : opens X) (x : U) (f) :
+@[simp] lemma stalk_to_fiber_germ (P : local_predicate T') (U : opens X) (x : U) (f) :
stalk_to_fiber P x ((subsheaf_to_Types P).presheaf.germ x f) = f.1 x :=
begin
dsimp [presheaf.germ, stalk_to_fiber],
@@ -239,8 +244,8 @@ end
The `stalk_to_fiber` map is surjective at `x` if
every point in the fiber `T x` has an allowed section passing through it.
-/
-lemma stalk_to_fiber_surjective (P : local_predicate T) (x : X)
- (w : ∀ (t : T x), ∃ (U : open_nhds x) (f : Π y : U.1, T y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
+lemma stalk_to_fiber_surjective (P : local_predicate T') (x : X)
+ (w : ∀ (t : T' x), ∃ (U : open_nhds x) (f : Π y : U.1, T' y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
function.surjective (stalk_to_fiber P x) :=
λ t,
begin
@@ -254,16 +259,16 @@ end
The `stalk_to_fiber` map is injective at `x` if any two allowed sections which agree at `x`
agree on some neighborhood of `x`.
-/
-lemma stalk_to_fiber_injective (P : local_predicate T) (x : X)
- (w : ∀ (U V : open_nhds x) (fU : Π y : U.1, T y) (hU : P.pred fU)
- (fV : Π y : V.1, T y) (hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
+lemma stalk_to_fiber_injective (P : local_predicate T') (x : X)
+ (w : ∀ (U V : open_nhds x) (fU : Π y : U.1, T' y) (hU : P.pred fU)
+ (fV : Π y : V.1, T' y) (hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
∃ (W : open_nhds x) (iU : W ⟶ U) (iV : W ⟶ V), ∀ (w : W.1), fU (iU w : U.1) = fV (iV w : V.1)) :
function.injective (stalk_to_fiber P x) :=
λ tU tV h,
begin
-- We promise to provide all the ingredients of the proof later:
let Q :
- ∃ (W : (open_nhds x)ᵒᵖ) (s : Π w : (unop W).1, T w) (hW : P.pred s),
+ ∃ (W : (open_nhds x)ᵒᵖ) (s : Π w : (unop W).1, T' w) (hW : P.pred s),
tU = (subsheaf_to_Types P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
tV = (subsheaf_to_Types P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ := _,
{ choose W s hW e using Q,
@@ -283,6 +288,9 @@ begin
colimit_sound iV.op (subtype.eq (funext w).symm)⟩, },
end
+-- TODO to continue generalizing universes here, we will need to deal with the issue noted
+-- at `presheaf_to_Top` (universe generalization for the Yoneda embedding).
+
/--
Some repackaging:
the presheaf of functions satisfying `continuous_prelocal` is just the same thing as
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,7 +5,7 @@ Authors: Johan Commelin, Scott Morrison, Adam Topaz
-/
import Topology.Sheaves.SheafOfFunctions
import Topology.Sheaves.Stalks
-import Topology.LocalHomeomorph
+import Topology.PartialHomeomorph
import Topology.Sheaves.SheafCondition.UniqueGluing
#align_import topology.sheaves.local_predicate from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -128,8 +128,8 @@ def continuousLocal (T : TopCat.{v}) : LocalPredicate fun x : X => T :=
intro x
specialize w x
rcases w with ⟨V, m, i, w⟩
- dsimp at w
- rw [continuous_iff_continuousAt] at w
+ dsimp at w
+ rw [continuous_iff_continuousAt] at w
specialize w ⟨x, m⟩
simpa using (opens.open_embedding_of_le i.le).continuousAt_iff.1 w }
#align Top.continuous_local TopCat.continuousLocal
@@ -315,7 +315,7 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
obtain ⟨V, ⟨fV, hV⟩, rfl⟩ := jointly_surjective'.{v, v} tV
· -- Decompose everything into its constituent parts:
dsimp
- simp only [stalk_to_fiber, types.colimit.ι_desc_apply'] at h
+ simp only [stalk_to_fiber, types.colimit.ι_desc_apply'] at h
specialize w (unop U) (unop V) fU hU fV hV h
rcases w with ⟨W, iU, iV, w⟩
-- and put it back together again in the correct order.
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
-/
-import Mathbin.Topology.Sheaves.SheafOfFunctions
-import Mathbin.Topology.Sheaves.Stalks
-import Mathbin.Topology.LocalHomeomorph
-import Mathbin.Topology.Sheaves.SheafCondition.UniqueGluing
+import Topology.Sheaves.SheafOfFunctions
+import Topology.Sheaves.Stalks
+import Topology.LocalHomeomorph
+import Topology.Sheaves.SheafCondition.UniqueGluing
#align_import topology.sheaves.local_predicate from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
-
-! This file was ported from Lean 3 source module topology.sheaves.local_predicate
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.Sheaves.SheafOfFunctions
import Mathbin.Topology.Sheaves.Stalks
import Mathbin.Topology.LocalHomeomorph
import Mathbin.Topology.Sheaves.SheafCondition.UniqueGluing
+#align_import topology.sheaves.local_predicate from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
+
/-!
# Functions satisfying a local predicate form a sheaf.
mathlib commit https://github.com/leanprover-community/mathlib/commit/5dc6092d09e5e489106865241986f7f2ad28d4c8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
! This file was ported from Lean 3 source module topology.sheaves.local_predicate
-! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -44,13 +44,13 @@ We give conditions sufficient to show that this map is injective and/or surjecti
-/
-universe v w
+universe v
noncomputable section
variable {X : TopCat.{v}}
-variable (T : X → Type w)
+variable (T : X → Type v)
open TopologicalSpace
@@ -64,6 +64,7 @@ open CategoryTheory.Limits.Types
namespace TopCat
+#print TopCat.PrelocalPredicate /-
/-- Given a topological space `X : Top` and a type family `T : X → Type`,
a `P : prelocal_predicate T` consists of:
* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
@@ -73,7 +74,8 @@ a `P : prelocal_predicate T` consists of:
structure PrelocalPredicate where
pred : ∀ {U : Opens X}, (∀ x : U, T x) → Prop
res : ∀ {U V : Opens X} (i : U ⟶ V) (f : ∀ x : V, T x) (h : pred f), pred fun x : U => f (i x)
-#align Top.prelocal_predicate TopCat.PrelocalPredicateₓ
+#align Top.prelocal_predicate TopCat.PrelocalPredicate
+-/
variable (X)
@@ -81,7 +83,7 @@ variable (X)
/-- Continuity is a "prelocal" predicate on functions to a fixed topological space `T`.
-/
@[simps]
-def continuousPrelocal (T : TopCat.{w}) : PrelocalPredicate fun x : X => T
+def continuousPrelocal (T : TopCat.{v}) : PrelocalPredicate fun x : X => T
where
pred U f := Continuous f
res U V i f h := Continuous.comp h (Opens.openEmbedding_of_le i.le).Continuous
@@ -90,7 +92,7 @@ def continuousPrelocal (T : TopCat.{w}) : PrelocalPredicate fun x : X => T
#print TopCat.inhabitedPrelocalPredicate /-
/-- Satisfying the inhabited linter. -/
-instance inhabitedPrelocalPredicate (T : TopCat.{w}) :
+instance inhabitedPrelocalPredicate (T : TopCat.{v}) :
Inhabited (PrelocalPredicate fun x : X => T) :=
⟨continuousPrelocal X T⟩
#align Top.inhabited_prelocal_predicate TopCat.inhabitedPrelocalPredicate
@@ -98,6 +100,7 @@ instance inhabitedPrelocalPredicate (T : TopCat.{w}) :
variable {X}
+#print TopCat.LocalPredicate /-
/-- Given a topological space `X : Top` and a type family `T : X → Type`,
a `P : local_predicate T` consists of:
* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
@@ -113,7 +116,8 @@ structure LocalPredicate extends PrelocalPredicate T where
∀ {U : Opens X} (f : ∀ x : U, T x)
(w : ∀ x : U, ∃ (V : Opens X) (m : x.1 ∈ V) (i : V ⟶ U), pred fun x : V => f (i x : U)),
pred f
-#align Top.local_predicate TopCat.LocalPredicateₓ
+#align Top.local_predicate TopCat.LocalPredicate
+-/
variable (X)
@@ -175,7 +179,7 @@ theorem PrelocalPredicate.sheafifyOf {T : X → Type v} {P : PrelocalPredicate T
/-- The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
@[simps]
-def subpresheafToTypes (P : PrelocalPredicate T) : Presheaf (Type max v w) X
+def subpresheafToTypes (P : PrelocalPredicate T) : Presheaf (Type v) X
where
obj U := { f : ∀ x : unop U, T x // P.pred f }
map U V i f := ⟨fun x => f.1 (i.unop x), P.res i.unop f.1 f.2⟩
@@ -241,24 +245,19 @@ end SubpresheafToTypes
/-- The subsheaf of the sheaf of all dependently typed functions satisfying the local predicate `P`.
-/
@[simps]
-def subsheafToTypes (P : LocalPredicate T) : Sheaf (Type max v w) X :=
+def subsheafToTypes (P : LocalPredicate T) : Sheaf (Type v) X :=
⟨subpresheafToTypes P.toPrelocalPredicate, subpresheafToTypes.isSheaf P⟩
#align Top.subsheaf_to_Types TopCat.subsheafToTypes
-/
--- TODO There is further universe generalization to do here,
--- but it depends on more difficult universe generalization in `topology.sheaves.stalks`.
--- The aim is to replace `T'` with the more general `T` below.
-variable {T' : X → Type v}
-
#print TopCat.stalkToFiber /-
/-- There is a canonical map from the stalk to the original fiber, given by evaluating sections.
-/
-def stalkToFiber (P : LocalPredicate T') (x : X) : (subsheafToTypes P).Presheaf.stalk x ⟶ T' x :=
+def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).Presheaf.stalk x ⟶ T x :=
by
refine'
colimit.desc _
- { pt := T' x
+ { pt := T x
ι :=
{ app := fun U f => _
naturality' := _ } }
@@ -269,7 +268,7 @@ def stalkToFiber (P : LocalPredicate T') (x : X) : (subsheafToTypes P).Presheaf.
#print TopCat.stalkToFiber_germ /-
@[simp]
-theorem stalkToFiber_germ (P : LocalPredicate T') (U : Opens X) (x : U) (f) :
+theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
stalkToFiber P x ((subsheafToTypes P).Presheaf.germ x f) = f.1 x :=
by
dsimp [presheaf.germ, stalk_to_fiber]
@@ -283,8 +282,8 @@ theorem stalkToFiber_germ (P : LocalPredicate T') (U : Opens X) (x : U) (f) :
/-- The `stalk_to_fiber` map is surjective at `x` if
every point in the fiber `T x` has an allowed section passing through it.
-/
-theorem stalkToFiber_surjective (P : LocalPredicate T') (x : X)
- (w : ∀ t : T' x, ∃ (U : OpenNhds x) (f : ∀ y : U.1, T' y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
+theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
+ (w : ∀ t : T x, ∃ (U : OpenNhds x) (f : ∀ y : U.1, T y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
Function.Surjective (stalkToFiber P x) := fun t =>
by
rcases w t with ⟨U, f, h, rfl⟩
@@ -298,9 +297,9 @@ theorem stalkToFiber_surjective (P : LocalPredicate T') (x : X)
/-- The `stalk_to_fiber` map is injective at `x` if any two allowed sections which agree at `x`
agree on some neighborhood of `x`.
-/
-theorem stalkToFiber_injective (P : LocalPredicate T') (x : X)
+theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
(w :
- ∀ (U V : OpenNhds x) (fU : ∀ y : U.1, T' y) (hU : P.pred fU) (fV : ∀ y : V.1, T' y)
+ ∀ (U V : OpenNhds x) (fU : ∀ y : U.1, T y) (hU : P.pred fU) (fV : ∀ y : V.1, T y)
(hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
∃ (W : OpenNhds x) (iU : W ⟶ U) (iV : W ⟶ V),
∀ w : W.1, fU (iU w : U.1) = fV (iV w : V.1)) :
@@ -308,7 +307,7 @@ theorem stalkToFiber_injective (P : LocalPredicate T') (x : X)
by
-- We promise to provide all the ingredients of the proof later:
let Q :
- ∃ (W : (open_nhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T' w) (hW : P.pred s),
+ ∃ (W : (open_nhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T w) (hW : P.pred s),
tU = (subsheaf_to_Types P).Presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
tV = (subsheaf_to_Types P).Presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ :=
_
@@ -330,8 +329,6 @@ theorem stalkToFiber_injective (P : LocalPredicate T') (x : X)
-/
#print TopCat.subpresheafContinuousPrelocalIsoPresheafToTop /-
--- TODO to continue generalizing universes here, we will need to deal with the issue noted
--- at `presheaf_to_Top` (universe generalization for the Yoneda embedding).
/-- Some repackaging:
the presheaf of functions satisfying `continuous_prelocal` is just the same thing as
the presheaf of continuous functions.
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -342,8 +342,8 @@ def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
(fun X =>
{ Hom := by rintro ⟨f, c⟩; exact ⟨f, c⟩
inv := by rintro ⟨f, c⟩; exact ⟨f, c⟩
- hom_inv_id' := by ext (⟨f, p⟩x); rfl
- inv_hom_id' := by ext (⟨f, p⟩x); rfl })
+ hom_inv_id' := by ext ⟨f, p⟩ x; rfl
+ inv_hom_id' := by ext ⟨f, p⟩ x; rfl })
(by tidy)
#align Top.subpresheaf_continuous_prelocal_iso_presheaf_to_Top TopCat.subpresheafContinuousPrelocalIsoPresheafToTop
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -77,6 +77,7 @@ structure PrelocalPredicate where
variable (X)
+#print TopCat.continuousPrelocal /-
/-- Continuity is a "prelocal" predicate on functions to a fixed topological space `T`.
-/
@[simps]
@@ -85,12 +86,15 @@ def continuousPrelocal (T : TopCat.{w}) : PrelocalPredicate fun x : X => T
pred U f := Continuous f
res U V i f h := Continuous.comp h (Opens.openEmbedding_of_le i.le).Continuous
#align Top.continuous_prelocal TopCat.continuousPrelocal
+-/
+#print TopCat.inhabitedPrelocalPredicate /-
/-- Satisfying the inhabited linter. -/
instance inhabitedPrelocalPredicate (T : TopCat.{w}) :
Inhabited (PrelocalPredicate fun x : X => T) :=
⟨continuousPrelocal X T⟩
#align Top.inhabited_prelocal_predicate TopCat.inhabitedPrelocalPredicate
+-/
variable {X}
@@ -167,6 +171,7 @@ theorem PrelocalPredicate.sheafifyOf {T : X → Type v} {P : PrelocalPredicate T
#align Top.prelocal_predicate.sheafify_of TopCat.PrelocalPredicate.sheafifyOf
-/
+#print TopCat.subpresheafToTypes /-
/-- The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
@[simps]
@@ -175,19 +180,23 @@ def subpresheafToTypes (P : PrelocalPredicate T) : Presheaf (Type max v w) X
obj U := { f : ∀ x : unop U, T x // P.pred f }
map U V i f := ⟨fun x => f.1 (i.unop x), P.res i.unop f.1 f.2⟩
#align Top.subpresheaf_to_Types TopCat.subpresheafToTypes
+-/
namespace SubpresheafToTypes
variable (P : PrelocalPredicate T)
+#print TopCat.subpresheafToTypes.subtype /-
/-- The natural transformation including the subpresheaf of functions satisfying a local predicate
into the presheaf of all functions.
-/
def subtype : subpresheafToTypes P ⟶ presheafToTypes X T where app U f := f.1
#align Top.subpresheaf_to_Types.subtype TopCat.subpresheafToTypes.subtype
+-/
open TopCat.Presheaf
+#print TopCat.subpresheafToTypes.isSheaf /-
/-- The functions satisfying a local predicate satisfy the sheaf condition.
-/
theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredicate).IsSheaf :=
@@ -224,15 +233,18 @@ theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredica
ext1
exact gl_uniq gl'.1 fun i => congr_arg Subtype.val (hgl' i)
#align Top.subpresheaf_to_Types.is_sheaf TopCat.subpresheafToTypes.isSheaf
+-/
end SubpresheafToTypes
+#print TopCat.subsheafToTypes /-
/-- The subsheaf of the sheaf of all dependently typed functions satisfying the local predicate `P`.
-/
@[simps]
def subsheafToTypes (P : LocalPredicate T) : Sheaf (Type max v w) X :=
⟨subpresheafToTypes P.toPrelocalPredicate, subpresheafToTypes.isSheaf P⟩
#align Top.subsheaf_to_Types TopCat.subsheafToTypes
+-/
-- TODO There is further universe generalization to do here,
-- but it depends on more difficult universe generalization in `topology.sheaves.stalks`.
@@ -317,6 +329,7 @@ theorem stalkToFiber_injective (P : LocalPredicate T') (x : X)
#align Top.stalk_to_fiber_injective TopCat.stalkToFiber_injective
-/
+#print TopCat.subpresheafContinuousPrelocalIsoPresheafToTop /-
-- TODO to continue generalizing universes here, we will need to deal with the issue noted
-- at `presheaf_to_Top` (universe generalization for the Yoneda embedding).
/-- Some repackaging:
@@ -333,6 +346,7 @@ def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
inv_hom_id' := by ext (⟨f, p⟩x); rfl })
(by tidy)
#align Top.subpresheaf_continuous_prelocal_iso_presheaf_to_Top TopCat.subpresheafContinuousPrelocalIsoPresheafToTop
+-/
#print TopCat.sheafToTop /-
/-- The sheaf of continuous functions on `X` with values in a space `T`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/13361559d66b84f80b6d5a1c4a26aa5054766725
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
! This file was ported from Lean 3 source module topology.sheaves.local_predicate
-! leanprover-community/mathlib commit 599fffe78f0e11eb6a034e834ec51882167b9688
+! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -44,13 +44,13 @@ We give conditions sufficient to show that this map is injective and/or surjecti
-/
-universe v
+universe v w
noncomputable section
variable {X : TopCat.{v}}
-variable (T : X → Type v)
+variable (T : X → Type w)
open TopologicalSpace
@@ -64,7 +64,6 @@ open CategoryTheory.Limits.Types
namespace TopCat
-#print TopCat.PrelocalPredicate /-
/-- Given a topological space `X : Top` and a type family `T : X → Type`,
a `P : prelocal_predicate T` consists of:
* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
@@ -74,33 +73,27 @@ a `P : prelocal_predicate T` consists of:
structure PrelocalPredicate where
pred : ∀ {U : Opens X}, (∀ x : U, T x) → Prop
res : ∀ {U V : Opens X} (i : U ⟶ V) (f : ∀ x : V, T x) (h : pred f), pred fun x : U => f (i x)
-#align Top.prelocal_predicate TopCat.PrelocalPredicate
--/
+#align Top.prelocal_predicate TopCat.PrelocalPredicateₓ
variable (X)
-#print TopCat.continuousPrelocal /-
/-- Continuity is a "prelocal" predicate on functions to a fixed topological space `T`.
-/
@[simps]
-def continuousPrelocal (T : TopCat.{v}) : PrelocalPredicate fun x : X => T
+def continuousPrelocal (T : TopCat.{w}) : PrelocalPredicate fun x : X => T
where
pred U f := Continuous f
res U V i f h := Continuous.comp h (Opens.openEmbedding_of_le i.le).Continuous
#align Top.continuous_prelocal TopCat.continuousPrelocal
--/
-#print TopCat.inhabitedPrelocalPredicate /-
/-- Satisfying the inhabited linter. -/
-instance inhabitedPrelocalPredicate (T : TopCat.{v}) :
+instance inhabitedPrelocalPredicate (T : TopCat.{w}) :
Inhabited (PrelocalPredicate fun x : X => T) :=
⟨continuousPrelocal X T⟩
#align Top.inhabited_prelocal_predicate TopCat.inhabitedPrelocalPredicate
--/
variable {X}
-#print TopCat.LocalPredicate /-
/-- Given a topological space `X : Top` and a type family `T : X → Type`,
a `P : local_predicate T` consists of:
* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
@@ -116,8 +109,7 @@ structure LocalPredicate extends PrelocalPredicate T where
∀ {U : Opens X} (f : ∀ x : U, T x)
(w : ∀ x : U, ∃ (V : Opens X) (m : x.1 ∈ V) (i : V ⟶ U), pred fun x : V => f (i x : U)),
pred f
-#align Top.local_predicate TopCat.LocalPredicate
--/
+#align Top.local_predicate TopCat.LocalPredicateₓ
variable (X)
@@ -175,16 +167,14 @@ theorem PrelocalPredicate.sheafifyOf {T : X → Type v} {P : PrelocalPredicate T
#align Top.prelocal_predicate.sheafify_of TopCat.PrelocalPredicate.sheafifyOf
-/
-#print TopCat.subpresheafToTypes /-
/-- The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
@[simps]
-def subpresheafToTypes (P : PrelocalPredicate T) : Presheaf (Type v) X
+def subpresheafToTypes (P : PrelocalPredicate T) : Presheaf (Type max v w) X
where
obj U := { f : ∀ x : unop U, T x // P.pred f }
map U V i f := ⟨fun x => f.1 (i.unop x), P.res i.unop f.1 f.2⟩
#align Top.subpresheaf_to_Types TopCat.subpresheafToTypes
--/
namespace SubpresheafToTypes
@@ -198,7 +188,6 @@ def subtype : subpresheafToTypes P ⟶ presheafToTypes X T where app U f := f.1
open TopCat.Presheaf
-#print TopCat.subpresheafToTypes.isSheaf /-
/-- The functions satisfying a local predicate satisfy the sheaf condition.
-/
theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredicate).IsSheaf :=
@@ -235,27 +224,29 @@ theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredica
ext1
exact gl_uniq gl'.1 fun i => congr_arg Subtype.val (hgl' i)
#align Top.subpresheaf_to_Types.is_sheaf TopCat.subpresheafToTypes.isSheaf
--/
end SubpresheafToTypes
-#print TopCat.subsheafToTypes /-
/-- The subsheaf of the sheaf of all dependently typed functions satisfying the local predicate `P`.
-/
@[simps]
-def subsheafToTypes (P : LocalPredicate T) : Sheaf (Type v) X :=
+def subsheafToTypes (P : LocalPredicate T) : Sheaf (Type max v w) X :=
⟨subpresheafToTypes P.toPrelocalPredicate, subpresheafToTypes.isSheaf P⟩
#align Top.subsheaf_to_Types TopCat.subsheafToTypes
--/
+
+-- TODO There is further universe generalization to do here,
+-- but it depends on more difficult universe generalization in `topology.sheaves.stalks`.
+-- The aim is to replace `T'` with the more general `T` below.
+variable {T' : X → Type v}
#print TopCat.stalkToFiber /-
/-- There is a canonical map from the stalk to the original fiber, given by evaluating sections.
-/
-def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).Presheaf.stalk x ⟶ T x :=
+def stalkToFiber (P : LocalPredicate T') (x : X) : (subsheafToTypes P).Presheaf.stalk x ⟶ T' x :=
by
refine'
colimit.desc _
- { pt := T x
+ { pt := T' x
ι :=
{ app := fun U f => _
naturality' := _ } }
@@ -264,8 +255,9 @@ def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).Presheaf.s
#align Top.stalk_to_fiber TopCat.stalkToFiber
-/
+#print TopCat.stalkToFiber_germ /-
@[simp]
-theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
+theorem stalkToFiber_germ (P : LocalPredicate T') (U : Opens X) (x : U) (f) :
stalkToFiber P x ((subsheafToTypes P).Presheaf.germ x f) = f.1 x :=
by
dsimp [presheaf.germ, stalk_to_fiber]
@@ -273,13 +265,14 @@ theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
simp
rfl
#align Top.stalk_to_fiber_germ TopCat.stalkToFiber_germ
+-/
#print TopCat.stalkToFiber_surjective /-
/-- The `stalk_to_fiber` map is surjective at `x` if
every point in the fiber `T x` has an allowed section passing through it.
-/
-theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
- (w : ∀ t : T x, ∃ (U : OpenNhds x) (f : ∀ y : U.1, T y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
+theorem stalkToFiber_surjective (P : LocalPredicate T') (x : X)
+ (w : ∀ t : T' x, ∃ (U : OpenNhds x) (f : ∀ y : U.1, T' y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
Function.Surjective (stalkToFiber P x) := fun t =>
by
rcases w t with ⟨U, f, h, rfl⟩
@@ -293,9 +286,9 @@ theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
/-- The `stalk_to_fiber` map is injective at `x` if any two allowed sections which agree at `x`
agree on some neighborhood of `x`.
-/
-theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
+theorem stalkToFiber_injective (P : LocalPredicate T') (x : X)
(w :
- ∀ (U V : OpenNhds x) (fU : ∀ y : U.1, T y) (hU : P.pred fU) (fV : ∀ y : V.1, T y)
+ ∀ (U V : OpenNhds x) (fU : ∀ y : U.1, T' y) (hU : P.pred fU) (fV : ∀ y : V.1, T' y)
(hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
∃ (W : OpenNhds x) (iU : W ⟶ U) (iV : W ⟶ V),
∀ w : W.1, fU (iU w : U.1) = fV (iV w : V.1)) :
@@ -303,7 +296,7 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
by
-- We promise to provide all the ingredients of the proof later:
let Q :
- ∃ (W : (open_nhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T w) (hW : P.pred s),
+ ∃ (W : (open_nhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T' w) (hW : P.pred s),
tU = (subsheaf_to_Types P).Presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
tV = (subsheaf_to_Types P).Presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ :=
_
@@ -324,6 +317,8 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
#align Top.stalk_to_fiber_injective TopCat.stalkToFiber_injective
-/
+-- TODO to continue generalizing universes here, we will need to deal with the issue noted
+-- at `presheaf_to_Top` (universe generalization for the Yoneda embedding).
/-- Some repackaging:
the presheaf of functions satisfying `continuous_prelocal` is just the same thing as
the presheaf of continuous functions.
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -223,7 +223,7 @@ theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredica
-- We claim that the predicate holds in `U i`
use U i, hi, opens.le_supr U i
-- This follows, since our original family `sf` satisfies the predicate
- convert(sf i).property
+ convert (sf i).property
exact gl_spec i
-- It remains to show that the chosen lift is really a gluing for the subsheaf and
-- that it is unique. Both of which follow immediately from the corresponding facts
mathlib commit https://github.com/leanprover-community/mathlib/commit/34ebaffc1d1e8e783fc05438ec2e70af87275ac9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
! This file was ported from Lean 3 source module topology.sheaves.local_predicate
-! leanprover-community/mathlib commit b8fb47c4f31648a8273c864e75f06c7b759e468c
+! leanprover-community/mathlib commit 599fffe78f0e11eb6a034e834ec51882167b9688
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.Topology.Sheaves.SheafCondition.UniqueGluing
/-!
# Functions satisfying a local predicate form a sheaf.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
At this stage, in `topology/sheaves/sheaf_of_functions.lean`
we've proved that not-necessarily-continuous functions from a topological space
into some type (or type family) form a sheaf.
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -111,7 +111,8 @@ a `P : local_predicate T` consists of:
structure LocalPredicate extends PrelocalPredicate T where
locality :
∀ {U : Opens X} (f : ∀ x : U, T x)
- (w : ∀ x : U, ∃ (V : Opens X)(m : x.1 ∈ V)(i : V ⟶ U), pred fun x : V => f (i x : U)), pred f
+ (w : ∀ x : U, ∃ (V : Opens X) (m : x.1 ∈ V) (i : V ⟶ U), pred fun x : V => f (i x : U)),
+ pred f
#align Top.local_predicate TopCat.LocalPredicate
-/
@@ -127,8 +128,8 @@ def continuousLocal (T : TopCat.{v}) : LocalPredicate fun x : X => T :=
intro x
specialize w x
rcases w with ⟨V, m, i, w⟩
- dsimp at w
- rw [continuous_iff_continuousAt] at w
+ dsimp at w
+ rw [continuous_iff_continuousAt] at w
specialize w ⟨x, m⟩
simpa using (opens.open_embedding_of_le i.le).continuousAt_iff.1 w }
#align Top.continuous_local TopCat.continuousLocal
@@ -149,7 +150,7 @@ by asking that the condition from `P` holds locally near every point.
-/
def PrelocalPredicate.sheafify {T : X → Type v} (P : PrelocalPredicate T) : LocalPredicate T
where
- pred U f := ∀ x : U, ∃ (V : Opens X)(m : x.1 ∈ V)(i : V ⟶ U), P.pred fun x : V => f (i x : U)
+ pred U f := ∀ x : U, ∃ (V : Opens X) (m : x.1 ∈ V) (i : V ⟶ U), P.pred fun x : V => f (i x : U)
res V U i f w x := by
specialize w (i x)
rcases w with ⟨V', m', i', p⟩
@@ -275,7 +276,7 @@ theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
every point in the fiber `T x` has an allowed section passing through it.
-/
theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
- (w : ∀ t : T x, ∃ (U : OpenNhds x)(f : ∀ y : U.1, T y)(h : P.pred f), f ⟨x, U.2⟩ = t) :
+ (w : ∀ t : T x, ∃ (U : OpenNhds x) (f : ∀ y : U.1, T y) (h : P.pred f), f ⟨x, U.2⟩ = t) :
Function.Surjective (stalkToFiber P x) := fun t =>
by
rcases w t with ⟨U, f, h, rfl⟩
@@ -293,12 +294,13 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
(w :
∀ (U V : OpenNhds x) (fU : ∀ y : U.1, T y) (hU : P.pred fU) (fV : ∀ y : V.1, T y)
(hV : P.pred fV) (e : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
- ∃ (W : OpenNhds x)(iU : W ⟶ U)(iV : W ⟶ V), ∀ w : W.1, fU (iU w : U.1) = fV (iV w : V.1)) :
+ ∃ (W : OpenNhds x) (iU : W ⟶ U) (iV : W ⟶ V),
+ ∀ w : W.1, fU (iU w : U.1) = fV (iV w : V.1)) :
Function.Injective (stalkToFiber P x) := fun tU tV h =>
by
-- We promise to provide all the ingredients of the proof later:
let Q :
- ∃ (W : (open_nhds x)ᵒᵖ)(s : ∀ w : (unop W).1, T w)(hW : P.pred s),
+ ∃ (W : (open_nhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T w) (hW : P.pred s),
tU = (subsheaf_to_Types P).Presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
tV = (subsheaf_to_Types P).Presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ :=
_
@@ -309,7 +311,7 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
obtain ⟨V, ⟨fV, hV⟩, rfl⟩ := jointly_surjective'.{v, v} tV
· -- Decompose everything into its constituent parts:
dsimp
- simp only [stalk_to_fiber, types.colimit.ι_desc_apply'] at h
+ simp only [stalk_to_fiber, types.colimit.ι_desc_apply'] at h
specialize w (unop U) (unop V) fU hU fV hV h
rcases w with ⟨W, iU, iV, w⟩
-- and put it back together again in the correct order.
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -61,6 +61,7 @@ open CategoryTheory.Limits.Types
namespace TopCat
+#print TopCat.PrelocalPredicate /-
/-- Given a topological space `X : Top` and a type family `T : X → Type`,
a `P : prelocal_predicate T` consists of:
* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
@@ -71,9 +72,11 @@ structure PrelocalPredicate where
pred : ∀ {U : Opens X}, (∀ x : U, T x) → Prop
res : ∀ {U V : Opens X} (i : U ⟶ V) (f : ∀ x : V, T x) (h : pred f), pred fun x : U => f (i x)
#align Top.prelocal_predicate TopCat.PrelocalPredicate
+-/
variable (X)
+#print TopCat.continuousPrelocal /-
/-- Continuity is a "prelocal" predicate on functions to a fixed topological space `T`.
-/
@[simps]
@@ -82,15 +85,19 @@ def continuousPrelocal (T : TopCat.{v}) : PrelocalPredicate fun x : X => T
pred U f := Continuous f
res U V i f h := Continuous.comp h (Opens.openEmbedding_of_le i.le).Continuous
#align Top.continuous_prelocal TopCat.continuousPrelocal
+-/
+#print TopCat.inhabitedPrelocalPredicate /-
/-- Satisfying the inhabited linter. -/
instance inhabitedPrelocalPredicate (T : TopCat.{v}) :
Inhabited (PrelocalPredicate fun x : X => T) :=
⟨continuousPrelocal X T⟩
#align Top.inhabited_prelocal_predicate TopCat.inhabitedPrelocalPredicate
+-/
variable {X}
+#print TopCat.LocalPredicate /-
/-- Given a topological space `X : Top` and a type family `T : X → Type`,
a `P : local_predicate T` consists of:
* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
@@ -106,9 +113,11 @@ structure LocalPredicate extends PrelocalPredicate T where
∀ {U : Opens X} (f : ∀ x : U, T x)
(w : ∀ x : U, ∃ (V : Opens X)(m : x.1 ∈ V)(i : V ⟶ U), pred fun x : V => f (i x : U)), pred f
#align Top.local_predicate TopCat.LocalPredicate
+-/
variable (X)
+#print TopCat.continuousLocal /-
/-- Continuity is a "local" predicate on functions to a fixed topological space `T`.
-/
def continuousLocal (T : TopCat.{v}) : LocalPredicate fun x : X => T :=
@@ -123,14 +132,18 @@ def continuousLocal (T : TopCat.{v}) : LocalPredicate fun x : X => T :=
specialize w ⟨x, m⟩
simpa using (opens.open_embedding_of_le i.le).continuousAt_iff.1 w }
#align Top.continuous_local TopCat.continuousLocal
+-/
+#print TopCat.inhabitedLocalPredicate /-
/-- Satisfying the inhabited linter. -/
instance inhabitedLocalPredicate (T : TopCat.{v}) : Inhabited (LocalPredicate _) :=
⟨continuousLocal X T⟩
#align Top.inhabited_local_predicate TopCat.inhabitedLocalPredicate
+-/
variable {X T}
+#print TopCat.PrelocalPredicate.sheafify /-
/-- Given a `P : prelocal_predicate`, we can always construct a `local_predicate`
by asking that the condition from `P` holds locally near every point.
-/
@@ -149,12 +162,16 @@ def PrelocalPredicate.sheafify {T : X → Type v} (P : PrelocalPredicate T) : Lo
rcases p with ⟨V', m', i', p'⟩
exact ⟨V', m', i' ≫ i, p'⟩
#align Top.prelocal_predicate.sheafify TopCat.PrelocalPredicate.sheafify
+-/
+#print TopCat.PrelocalPredicate.sheafifyOf /-
theorem PrelocalPredicate.sheafifyOf {T : X → Type v} {P : PrelocalPredicate T} {U : Opens X}
{f : ∀ x : U, T x} (h : P.pred f) : P.sheafify.pred f := fun x =>
⟨U, x.2, 𝟙 _, by convert h; ext ⟨y, w⟩; rfl⟩
#align Top.prelocal_predicate.sheafify_of TopCat.PrelocalPredicate.sheafifyOf
+-/
+#print TopCat.subpresheafToTypes /-
/-- The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
@[simps]
@@ -163,6 +180,7 @@ def subpresheafToTypes (P : PrelocalPredicate T) : Presheaf (Type v) X
obj U := { f : ∀ x : unop U, T x // P.pred f }
map U V i f := ⟨fun x => f.1 (i.unop x), P.res i.unop f.1 f.2⟩
#align Top.subpresheaf_to_Types TopCat.subpresheafToTypes
+-/
namespace SubpresheafToTypes
@@ -176,6 +194,7 @@ def subtype : subpresheafToTypes P ⟶ presheafToTypes X T where app U f := f.1
open TopCat.Presheaf
+#print TopCat.subpresheafToTypes.isSheaf /-
/-- The functions satisfying a local predicate satisfy the sheaf condition.
-/
theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredicate).IsSheaf :=
@@ -212,16 +231,20 @@ theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredica
ext1
exact gl_uniq gl'.1 fun i => congr_arg Subtype.val (hgl' i)
#align Top.subpresheaf_to_Types.is_sheaf TopCat.subpresheafToTypes.isSheaf
+-/
end SubpresheafToTypes
+#print TopCat.subsheafToTypes /-
/-- The subsheaf of the sheaf of all dependently typed functions satisfying the local predicate `P`.
-/
@[simps]
def subsheafToTypes (P : LocalPredicate T) : Sheaf (Type v) X :=
⟨subpresheafToTypes P.toPrelocalPredicate, subpresheafToTypes.isSheaf P⟩
#align Top.subsheaf_to_Types TopCat.subsheafToTypes
+-/
+#print TopCat.stalkToFiber /-
/-- There is a canonical map from the stalk to the original fiber, given by evaluating sections.
-/
def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).Presheaf.stalk x ⟶ T x :=
@@ -235,6 +258,7 @@ def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).Presheaf.s
· exact f.1 ⟨x, (unop U).2⟩
· tidy
#align Top.stalk_to_fiber TopCat.stalkToFiber
+-/
@[simp]
theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
@@ -246,6 +270,7 @@ theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
rfl
#align Top.stalk_to_fiber_germ TopCat.stalkToFiber_germ
+#print TopCat.stalkToFiber_surjective /-
/-- The `stalk_to_fiber` map is surjective at `x` if
every point in the fiber `T x` has an allowed section passing through it.
-/
@@ -258,7 +283,9 @@ theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
· exact (subsheaf_to_Types P).Presheaf.germ ⟨x, U.2⟩ ⟨f, h⟩
· exact stalk_to_fiber_germ _ U.1 ⟨x, U.2⟩ ⟨f, h⟩
#align Top.stalk_to_fiber_surjective TopCat.stalkToFiber_surjective
+-/
+#print TopCat.stalkToFiber_injective /-
/-- The `stalk_to_fiber` map is injective at `x` if any two allowed sections which agree at `x`
agree on some neighborhood of `x`.
-/
@@ -290,6 +317,7 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
rcases W with ⟨W, m⟩
exact ⟨colimit_sound iU.op (Subtype.eq rfl), colimit_sound iV.op (Subtype.eq (funext w).symm)⟩
#align Top.stalk_to_fiber_injective TopCat.stalkToFiber_injective
+-/
/-- Some repackaging:
the presheaf of functions satisfying `continuous_prelocal` is just the same thing as
@@ -306,6 +334,7 @@ def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
(by tidy)
#align Top.subpresheaf_continuous_prelocal_iso_presheaf_to_Top TopCat.subpresheafContinuousPrelocalIsoPresheafToTop
+#print TopCat.sheafToTop /-
/-- The sheaf of continuous functions on `X` with values in a space `T`.
-/
def sheafToTop (T : TopCat.{v}) : Sheaf (Type v) X :=
@@ -313,6 +342,7 @@ def sheafToTop (T : TopCat.{v}) : Sheaf (Type v) X :=
Presheaf.isSheaf_of_iso (subpresheafContinuousPrelocalIsoPresheafToTop T)
(subpresheafToTypes.isSheaf (continuousLocal X T))⟩
#align Top.sheaf_to_Top TopCat.sheafToTop
+-/
end TopCat
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -152,10 +152,7 @@ def PrelocalPredicate.sheafify {T : X → Type v} (P : PrelocalPredicate T) : Lo
theorem PrelocalPredicate.sheafifyOf {T : X → Type v} {P : PrelocalPredicate T} {U : Opens X}
{f : ∀ x : U, T x} (h : P.pred f) : P.sheafify.pred f := fun x =>
- ⟨U, x.2, 𝟙 _, by
- convert h
- ext ⟨y, w⟩
- rfl⟩
+ ⟨U, x.2, 𝟙 _, by convert h; ext ⟨y, w⟩; rfl⟩
#align Top.prelocal_predicate.sheafify_of TopCat.PrelocalPredicate.sheafifyOf
/-- The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
@@ -302,18 +299,10 @@ def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
subpresheafToTypes (continuousPrelocal X T) ≅ presheafToTop X T :=
NatIso.ofComponents
(fun X =>
- { Hom := by
- rintro ⟨f, c⟩
- exact ⟨f, c⟩
- inv := by
- rintro ⟨f, c⟩
- exact ⟨f, c⟩
- hom_inv_id' := by
- ext (⟨f, p⟩x)
- rfl
- inv_hom_id' := by
- ext (⟨f, p⟩x)
- rfl })
+ { Hom := by rintro ⟨f, c⟩; exact ⟨f, c⟩
+ inv := by rintro ⟨f, c⟩; exact ⟨f, c⟩
+ hom_inv_id' := by ext (⟨f, p⟩x); rfl
+ inv_hom_id' := by ext (⟨f, p⟩x); rfl })
(by tidy)
#align Top.subpresheaf_continuous_prelocal_iso_presheaf_to_Top TopCat.subpresheafContinuousPrelocalIsoPresheafToTop
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -150,13 +150,13 @@ def PrelocalPredicate.sheafify {T : X → Type v} (P : PrelocalPredicate T) : Lo
exact ⟨V', m', i' ≫ i, p'⟩
#align Top.prelocal_predicate.sheafify TopCat.PrelocalPredicate.sheafify
-theorem PrelocalPredicate.sheafify_of {T : X → Type v} {P : PrelocalPredicate T} {U : Opens X}
+theorem PrelocalPredicate.sheafifyOf {T : X → Type v} {P : PrelocalPredicate T} {U : Opens X}
{f : ∀ x : U, T x} (h : P.pred f) : P.sheafify.pred f := fun x =>
⟨U, x.2, 𝟙 _, by
convert h
ext ⟨y, w⟩
rfl⟩
-#align Top.prelocal_predicate.sheafify_of TopCat.PrelocalPredicate.sheafify_of
+#align Top.prelocal_predicate.sheafify_of TopCat.PrelocalPredicate.sheafifyOf
/-- The subpresheaf of dependent functions on `X` satisfying the "pre-local" predicate `P`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -203,7 +203,7 @@ theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredica
-- We claim that the predicate holds in `U i`
use U i, hi, opens.le_supr U i
-- This follows, since our original family `sf` satisfies the predicate
- convert (sf i).property
+ convert(sf i).property
exact gl_spec i
-- It remains to show that the chosen lift is really a gluing for the subsheaf and
-- that it is unique. Both of which follow immediately from the corresponding facts
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -231,7 +231,7 @@ def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).Presheaf.s
by
refine'
colimit.desc _
- { x := T x
+ { pt := T x
ι :=
{ app := fun U f => _
naturality' := _ } }
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -42,7 +42,6 @@ universe v
noncomputable section
variable {X : TopCat.{v}}
-
variable (T : X → Type v)
open TopologicalSpace
@@ -244,7 +244,8 @@ def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).presheaf.s
set_option linter.uppercaseLean3 false in
#align Top.stalk_to_fiber TopCat.stalkToFiber
--- Porting note: removed `simp` attribute, due to left hand side is not in simple normal form.
+-- Porting note (#11119): removed `simp` attribute,
+-- due to left hand side is not in simple normal form.
theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
stalkToFiber P x ((subsheafToTypes P).presheaf.germ x f) = f.1 x := by
dsimp [Presheaf.germ, stalkToFiber]
In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:
) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.
@@ -244,7 +244,7 @@ def stalkToFiber (P : LocalPredicate T) (x : X) : (subsheafToTypes P).presheaf.s
set_option linter.uppercaseLean3 false in
#align Top.stalk_to_fiber TopCat.stalkToFiber
--- Porting note : removed `simp` attribute, due to left hand side is not in simple normal form.
+-- Porting note: removed `simp` attribute, due to left hand side is not in simple normal form.
theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
stalkToFiber P x ((subsheafToTypes P).presheaf.germ x f) = f.1 x := by
dsimp [Presheaf.germ, stalkToFiber]
@@ -5,7 +5,6 @@ Authors: Johan Commelin, Scott Morrison, Adam Topaz
-/
import Mathlib.Topology.Sheaves.SheafOfFunctions
import Mathlib.Topology.Sheaves.Stalks
-import Mathlib.Topology.PartialHomeomorph
import Mathlib.Topology.Sheaves.SheafCondition.UniqueGluing
#align_import topology.sheaves.local_predicate from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
LocalHomeomorph
evokes a "local homeomorphism": this is not what this means.
Instead, this is a homeomorphism on an open set of the domain (extended to the whole space, by the junk value pattern). Hence, partial homeomorphism is more appropriate, and avoids confusion with IsLocallyHomeomorph
.
A future PR will rename LocalEquiv
to PartialEquiv
.
@@ -5,7 +5,7 @@ Authors: Johan Commelin, Scott Morrison, Adam Topaz
-/
import Mathlib.Topology.Sheaves.SheafOfFunctions
import Mathlib.Topology.Sheaves.Stalks
-import Mathlib.Topology.LocalHomeomorph
+import Mathlib.Topology.PartialHomeomorph
import Mathlib.Topology.Sheaves.SheafCondition.UniqueGluing
#align_import topology.sheaves.local_predicate from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
@@ -29,9 +29,9 @@ any collection of dependent functions on a topological space
satisfying a "local predicate".
As an application, we check that continuity is a local predicate in this sense, and provide
-* `Top.sheaf_to_Top`: continuous functions into a topological space form a sheaf
+* `TopCat.sheafToTop`: continuous functions into a topological space form a sheaf
-A sheaf constructed in this way has a natural map `stalk_to_fiber` from the stalks
+A sheaf constructed in this way has a natural map `stalkToFiber` from the stalks
to the types in the ambient type family.
We give conditions sufficient to show that this map is injective and/or surjective.
@@ -58,10 +58,10 @@ open CategoryTheory.Limits.Types
namespace TopCat
-/-- Given a topological space `X : Top` and a type family `T : X → Type`,
-a `P : prelocal_predicate T` consists of:
-* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
-* a proof that if `f : Π x : V, T x` satisfies the predicate on `V : opens X`, then
+/-- Given a topological space `X : TopCat` and a type family `T : X → Type`,
+a `P : PrelocalPredicate T` consists of:
+* a family of predicates `P.pred`, one for each `U : Opens X`, of the form `(Π x : U, T x) → Prop`
+* a proof that if `f : Π x : V, T x` satisfies the predicate on `V : Opens X`, then
the restriction of `f` to any open subset `U` also satisfies the predicate.
-/
structure PrelocalPredicate where
@@ -92,10 +92,10 @@ set_option linter.uppercaseLean3 false in
variable {X}
-/-- Given a topological space `X : Top` and a type family `T : X → Type`,
-a `P : local_predicate T` consists of:
-* a family of predicates `P.pred`, one for each `U : opens X`, of the form `(Π x : U, T x) → Prop`
-* a proof that if `f : Π x : V, T x` satisfies the predicate on `V : opens X`, then
+/-- Given a topological space `X : TopCat` and a type family `T : X → Type`,
+a `P : LocalPredicate T` consists of:
+* a family of predicates `P.pred`, one for each `U : Opens X`, of the form `(Π x : U, T x) → Prop`
+* a proof that if `f : Π x : V, T x` satisfies the predicate on `V : Opens X`, then
the restriction of `f` to any open subset `U` also satisfies the predicate, and
* a proof that given some `f : Π x : U, T x`,
if for every `x : U` we can find an open set `x ∈ V ≤ U`
@@ -138,7 +138,7 @@ set_option linter.uppercaseLean3 false in
variable {X T}
-/-- Given a `P : prelocal_predicate`, we can always construct a `local_predicate`
+/-- Given a `P : PrelocalPredicate`, we can always construct a `LocalPredicate`
by asking that the condition from `P` holds locally near every point.
-/
def PrelocalPredicate.sheafify {T : X → Type v} (P : PrelocalPredicate T) : LocalPredicate T where
@@ -254,7 +254,7 @@ theorem stalkToFiber_germ (P : LocalPredicate T) (U : Opens X) (x : U) (f) :
set_option linter.uppercaseLean3 false in
#align Top.stalk_to_fiber_germ TopCat.stalkToFiber_germ
-/-- The `stalk_to_fiber` map is surjective at `x` if
+/-- The `stalkToFiber` map is surjective at `x` if
every point in the fiber `T x` has an allowed section passing through it.
-/
theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
@@ -267,7 +267,7 @@ theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
set_option linter.uppercaseLean3 false in
#align Top.stalk_to_fiber_surjective TopCat.stalkToFiber_surjective
-/-- The `stalk_to_fiber` map is injective at `x` if any two allowed sections which agree at `x`
+/-- The `stalkToFiber` map is injective at `x` if any two allowed sections which agree at `x`
agree on some neighborhood of `x`.
-/
theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
@@ -302,7 +302,7 @@ set_option linter.uppercaseLean3 false in
#align Top.stalk_to_fiber_injective TopCat.stalkToFiber_injective
/-- Some repackaging:
-the presheaf of functions satisfying `continuous_prelocal` is just the same thing as
+the presheaf of functions satisfying `continuousPrelocal` is just the same thing as
the presheaf of continuous functions.
-/
def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
@@ -13,7 +13,7 @@ import Mathlib.Topology.Sheaves.SheafCondition.UniqueGluing
/-!
# Functions satisfying a local predicate form a sheaf.
-At this stage, in `topology/sheaves/sheaf_of_functions.lean`
+At this stage, in `Mathlib/Topology/Sheaves/SheafOfFunctions.lean`
we've proved that not-necessarily-continuous functions from a topological space
into some type (or type family) form a sheaf.
@@ -2,17 +2,14 @@
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
-
-! This file was ported from Lean 3 source module topology.sheaves.local_predicate
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.Sheaves.SheafOfFunctions
import Mathlib.Topology.Sheaves.Stalks
import Mathlib.Topology.LocalHomeomorph
import Mathlib.Topology.Sheaves.SheafCondition.UniqueGluing
+#align_import topology.sheaves.local_predicate from "leanprover-community/mathlib"@"5dc6092d09e5e489106865241986f7f2ad28d4c8"
+
/-!
# Functions satisfying a local predicate form a sheaf.
This is a test of the UnivLE
proposal. The UniqueGluing
file was one place where we couldn't forward port the universe generalisations made in mathlib3 in https://github.com/leanprover-community/mathlib/pull/19153.
Diff relative to #5724 is https://github.com/leanprover-community/mathlib4/compare/UnivLE_types...UnivLE_UniqueGluing.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Matthew Robert Ballard <matt@mrb.email> Co-authored-by: Bulhwi Cha <chabulhwi@semmalgil.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Oliver Nash <github@olivernash.org> Co-authored-by: Anatole Dedecker <anatolededecker@gmail.com> Co-authored-by: Tobias Grosser <tobias@grosser.es> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Moritz Firsching <moritz.firsching@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com>
@@ -191,7 +191,7 @@ open TopCat.Presheaf
/-- The functions satisfying a local predicate satisfy the sheaf condition.
-/
theorem isSheaf (P : LocalPredicate T) : (subpresheafToTypes P.toPrelocalPredicate).IsSheaf :=
- Presheaf.isSheaf_of_isSheafUniqueGluing_types _ fun ι U sf sf_comp => by
+ Presheaf.isSheaf_of_isSheafUniqueGluing_types.{v} _ fun ι U sf sf_comp => by
-- We show the sheaf condition in terms of unique gluing.
-- First we obtain a family of sections for the underlying sheaf of functions,
-- by forgetting that the predicate holds
This PR is the result of running
find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;
which firstly replaces .
focusing dots with ·
and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.
@@ -299,8 +299,8 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
-- and put it back together again in the correct order.
refine' ⟨op W, fun w => fU (iU w : (unop U).1), P.res _ _ hU, _⟩
rcases W with ⟨W, m⟩
- . exact iU
- . exact ⟨colimit_sound iU.op (Subtype.eq rfl), colimit_sound iV.op (Subtype.eq (funext w).symm)⟩
+ · exact iU
+ · exact ⟨colimit_sound iU.op (Subtype.eq rfl), colimit_sound iV.op (Subtype.eq (funext w).symm)⟩
set_option linter.uppercaseLean3 false in
#align Top.stalk_to_fiber_injective TopCat.stalkToFiber_injective
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Scott Morrison, Adam Topaz
! This file was ported from Lean 3 source module topology.sheaves.local_predicate
-! leanprover-community/mathlib commit b8fb47c4f31648a8273c864e75f06c7b759e468c
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -261,7 +261,7 @@ set_option linter.uppercaseLean3 false in
every point in the fiber `T x` has an allowed section passing through it.
-/
theorem stalkToFiber_surjective (P : LocalPredicate T) (x : X)
- (w : ∀ t : T x, ∃ (U : OpenNhds x)(f : ∀ y : U.1, T y) (_ : P.pred f), f ⟨x, U.2⟩ = t) :
+ (w : ∀ t : T x, ∃ (U : OpenNhds x) (f : ∀ y : U.1, T y) (_ : P.pred f), f ⟨x, U.2⟩ = t) :
Function.Surjective (stalkToFiber P x) := fun t => by
rcases w t with ⟨U, f, h, rfl⟩
fconstructor
@@ -277,11 +277,12 @@ theorem stalkToFiber_injective (P : LocalPredicate T) (x : X)
(w :
∀ (U V : OpenNhds x) (fU : ∀ y : U.1, T y) (_ : P.pred fU) (fV : ∀ y : V.1, T y)
(_ : P.pred fV) (_ : fU ⟨x, U.2⟩ = fV ⟨x, V.2⟩),
- ∃ (W : OpenNhds x)(iU : W ⟶ U)(iV : W ⟶ V), ∀ w : W.1, fU (iU w : U.1) = fV (iV w : V.1)) :
+ ∃ (W : OpenNhds x) (iU : W ⟶ U) (iV : W ⟶ V), ∀ w : W.1,
+ fU (iU w : U.1) = fV (iV w : V.1)) :
Function.Injective (stalkToFiber P x) := fun tU tV h => by
-- We promise to provide all the ingredients of the proof later:
let Q :
- ∃ (W : (OpenNhds x)ᵒᵖ)(s : ∀ w : (unop W).1, T w)(hW : P.pred s),
+ ∃ (W : (OpenNhds x)ᵒᵖ) (s : ∀ w : (unop W).1, T w) (hW : P.pred s),
tU = (subsheafToTypes P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ ∧
tV = (subsheafToTypes P).presheaf.germ ⟨x, (unop W).2⟩ ⟨s, hW⟩ :=
?_
@@ -309,13 +309,9 @@ the presheaf of continuous functions.
-/
def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
subpresheafToTypes (continuousPrelocal X T) ≅ presheafToTop X T :=
- NatIso.ofComponents
- (fun X =>
- { hom := by rintro ⟨f, c⟩; exact ⟨f, c⟩
- inv := by rintro ⟨f, c⟩; exact ⟨f, c⟩
- hom_inv_id := by ext ⟨f, p⟩; rfl
- inv_hom_id := by ext ⟨f, p⟩; rfl })
- (by aesop_cat)
+ NatIso.ofComponents fun X =>
+ { hom := by rintro ⟨f, c⟩; exact ⟨f, c⟩
+ inv := by rintro ⟨f, c⟩; exact ⟨f, c⟩ }
set_option linter.uppercaseLean3 false in
#align Top.subpresheaf_continuous_prelocal_iso_presheaf_to_Top TopCat.subpresheafContinuousPrelocalIsoPresheafToTop
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Alex J Best <alex.j.best@gmail.com>
@@ -313,8 +313,8 @@ def subpresheafContinuousPrelocalIsoPresheafToTop (T : TopCat.{v}) :
(fun X =>
{ hom := by rintro ⟨f, c⟩; exact ⟨f, c⟩
inv := by rintro ⟨f, c⟩; exact ⟨f, c⟩
- hom_inv_id := by ext (⟨f, p⟩x); rfl
- inv_hom_id := by ext (⟨f, p⟩x); rfl })
+ hom_inv_id := by ext ⟨f, p⟩; rfl
+ inv_hom_id := by ext ⟨f, p⟩; rfl })
(by aesop_cat)
set_option linter.uppercaseLean3 false in
#align Top.subpresheaf_continuous_prelocal_iso_presheaf_to_Top TopCat.subpresheafContinuousPrelocalIsoPresheafToTop
The unported dependencies are