Documentation

Orbifolds.Diffeology.Constructions

Constructions of diffeological spaces #

This file gives some concrete constructions like products and coproducts of diffeological spaces. General limits and colimits are found in Orbifolds.Diffeology.DiffSp.

Mostly based on Mathlib.Topology.Constructions.

TODO #

instance Pi.diffeologicalSpace {ι : Type u_1} {Y : ιType u_2} [D : (i : ι) → DiffeologicalSpace (Y i)] :
DiffeologicalSpace ((i : ι) → Y i)
Equations

Additive, Multiplicative #

The diffeology on those type synonyms is inherited without change.

Order dual #

The diffeology on this type synonym is inherited without change.

theorem IsDInducing.of_codRestrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} {t : Set Y} (ht : ∀ (x : X), f x t) (hf : IsDInducing (Set.codRestrict f t ht)) :
theorem IsInduction.of_codRestrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} {t : Set Y} (ht : ∀ (x : X), f x t) (hf : IsInduction (Set.codRestrict f t ht)) :
theorem DSmooth.subtype_val {X : Type u_1} [DiffeologicalSpace X] {p : XProp} {Y : Type u_2} [DiffeologicalSpace Y] {f : YSubtype p} (hf : DSmooth f) :
DSmooth fun (x : Y) => (f x)
theorem DSmooth.subtype_mk {X : Type u_1} [DiffeologicalSpace X] {p : XProp} {Y : Type u_2} [DiffeologicalSpace Y] {f : YX} (hf : DSmooth f) (hp : ∀ (x : Y), p (f x)) :
DSmooth fun (x : Y) => f x,
theorem DSmooth.subtype_map {X : Type u_1} [DiffeologicalSpace X] {p : XProp} {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (h : DSmooth f) {q : YProp} (hpq : ∀ (x : X), p xq (f x)) :
theorem isDInducing_inclusion {X : Type u_1} [DiffeologicalSpace X] {s t : Set X} (h : s t) :
theorem isInduction_inclusion {X : Type u_1} [DiffeologicalSpace X] {s t : Set X} (h : s t) :
theorem dsmooth_inclusion {X : Type u_1} [DiffeologicalSpace X] {s t : Set X} (h : s t) :
theorem DSmooth.codRestrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} {s : Set Y} (hf : DSmooth f) (hs : ∀ (a : X), f a s) :
theorem DSmooth.restrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} {s : Set X} {t : Set Y} (h1 : Set.MapsTo f s t) (h2 : DSmooth f) :
theorem DSmooth.restrictPreimage {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} {s : Set Y} (h : DSmooth f) :
theorem IsDInducing.codRestrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsDInducing f) {s : Set Y} (hs : ∀ (x : X), f x s) :
theorem IsInduction.codRestrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsInduction f) {s : Set Y} (hs : ∀ (x : X), f x s) :
theorem IsOpenInduction.codRestrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsOpenInduction f) {s : Set Y} (hs : ∀ (x : X), f x s) :
theorem IsDInducing.restrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsDInducing f) {s : Set X} {t : Set Y} (hf' : Set.MapsTo f s t) :
theorem IsInduction.restrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsInduction f) {s : Set X} {t : Set Y} (hf' : Set.MapsTo f s t) :
theorem IsOpenInduction.restrict {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsOpenInduction f) {s : Set X} {t : Set Y} (hs : IsOpen s) (hf' : Set.MapsTo f s t) :
theorem IsOpenInduction.restrict' {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] [TopologicalSpace X] [DTopCompatible X] {f : XY} (hf : IsOpenInduction f) {s : Set X} {t : Set Y} (hs : IsOpen s) (hf' : Set.MapsTo f s t) :

On an open subset, a function is smooth in the usual sense iff it is smooth diffeologically.

theorem IsOpenMap.subtype_mk {X : Type u_3} {Y : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] {s : Set X} {f : YX} (hf : IsOpenMap f) (hfs : ∀ (x : Y), f x s) :
IsOpenMap fun (x : Y) => f x,
theorem IsOpen.isOpenMap_subtype_map {X : Type u_3} {Y : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] {s : Set X} {t : Set Y} {f : XY} (hs : IsOpen s) (hf : IsOpenMap f) (hst : ∀ (x : X), s xt (f x)) :
theorem IsOpen.isOpenMap_inclusion {X : Type u_3} [TopologicalSpace X] {s t : Set X} (hs : IsOpen s) (h : s t) :
theorem IsOpenMap.codRestrict {X : Type u_3} {Y : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {s : Set Y} (hf : IsOpenMap f) (hs : ∀ (a : X), f a s) :
theorem isOpen_iff_preimages_plots' {X : Type u_1} [DiffeologicalSpace X] {s : Set X} :
IsOpen s ∀ (n : ) (u : Set (Eucl n)) (p : uX), IsOpen uDSmooth pIsOpen (p ⁻¹' s)

The D-topology is also characterised by the smooth maps u → X for open u.

On open subsets, the D-topology and subspace topology agree.

theorem dsmooth_iff' {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} :
DSmooth f ∀ (n : ) (u : Set (Eucl n)) (p : uX), IsOpen uDSmooth pDSmooth (f p)

Smoothness can also be characterised as preserving smooth maps u → X for open u.

theorem isPlot_iff_locally_dsmooth {X : Type u_1} [DiffeologicalSpace X] {n : } {p : Eucl nX} :
IsPlot p ∀ (x : Eucl n), ∃ (u : Set (Eucl n)), IsOpen u x u DSmooth (u.restrict p)

The locality axiom of diffeologies. Restated here in terms of subspace diffeologies.

theorem dsmooth_iff_locally_dsmooth {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} :
DSmooth f ∀ (x : X), ∃ (u : Set X), IsOpen u x u DSmooth (u.restrict f)
theorem IsLocallyConstant.dsmooth {X : Type u_1} [DiffeologicalSpace X] {Y : Type u_2} [DiffeologicalSpace Y] {f : XY} (hf : IsLocallyConstant f) :

Any D-locally constant map is smooth.

theorem DiffeologicalSpace.eq_top_iff {X : Type u_1} {dX : DiffeologicalSpace X} :
dX = ∀ (n : ) (p : Eucl nX), IsPlot p

The indiscrete diffeology is the one for which every map is a plot.

theorem DiffeologicalSpace.eq_bot_iff {X : Type u_1} {dX : DiffeologicalSpace X} :
dX = ∀ (n : ) (p : Eucl nX), IsPlot p∃ (x : X), p = fun (x_1 : Eucl n) => x

The discrete diffeology is the one with only the constant maps as plots.

theorem dTop_top {X : Type u_1} :

The D-topology of the indiscrete diffeology is indiscrete.

theorem dTop_bot {X : Type u_1} :

The D-topology of the discrete diffeology is discrete.

theorem dTop_eq_bot_iff {X : Type u_1} {dX : DiffeologicalSpace X} :

The discrete diffeologoy is the only diffeology whose D-topology is discrete. Note that the corresponding statement for indiscrete spaces is false.

A map from an indiscrete space is smooth iff its range is indiscrete. Note that this can't be characterised purely topologically, since it might be the case that all involved D-topologies are indiscrete but the diffeologies are not.

theorem dsmooth_bot_iff_isLocallyConstant {X : Type u_1} {Y : Type u_2} {dX : DiffeologicalSpace X} {f : XY} :

A map to an discrete space is smooth iff it is D-locally constant.

theorem isPlot_coinduced_iff {X : Type u_1} {Y : Type u_2} {dX : DiffeologicalSpace X} {f : XY} {n : } {p : Eucl nY} :
IsPlot p (∃ (y : Y), p = fun (x : Eucl n) => y) ∀ (x : Eucl n), ∃ (u : Set (Eucl n)), IsOpen u x u ∃ (p' : uX), DSmooth p' p Subtype.val = f p'

A map is a plot in the coinduced diffeology iff it is constant or lifts locally.

theorem Function.Surjective.isPlot_coinduced_iff {X : Type u_1} {Y : Type u_2} {dX : DiffeologicalSpace X} {f : XY} (hf : Surjective f) {n : } {p : Eucl nY} :
IsPlot p ∀ (x : Eucl n), ∃ (u : Set (Eucl n)), IsOpen u x u ∃ (p' : uX), DSmooth p' p Subtype.val = f p'

For surjective functions, the plots of the coinduced diffeology are precicely those that locally lift.

The D-topology is coinduced by all plots.

theorem coinduced_sigma {ι Y : Type u} {X : ιType v} [tX : (i : ι) → TopologicalSpace (X i)] (f : (i : ι) → X iY) :
TopologicalSpace.coinduced (fun (x : (i : ι) × X i) => f x.fst x.snd) inferInstance = ⨆ (i : ι), TopologicalSpace.coinduced (f i) inferInstance

The topology coinduced by a map out of a sigma type is the surpremum of the topologies coinduced by its components. Maybe should go into mathlib? A similar induced_to_pi is already there.

theorem dTop_eq_coinduced {X : Type u_1} [dX : DiffeologicalSpace X] :
DTop = TopologicalSpace.coinduced (fun (x : (p : (n : ) × (DiffeologicalSpace.plots n)) × Eucl p.fst) => x.fst.snd x.snd) inferInstance

The D-topology is coinduced by the sum of all plots.

The D-topology is always delta-generated.

Diffeological spaces are always delta-generated when equipped with the D-topology.

theorem isDCoinducing_quot_mk {X : Type u_1} [DiffeologicalSpace X] {r : XXProp} :
theorem isSubduction_quot_mk {X : Type u_1} [DiffeologicalSpace X] {r : XXProp} :
theorem dsmooth_quot_mk {X : Type u_1} [DiffeologicalSpace X] {r : XXProp} :
theorem dsmooth_quot_lift {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {r : XXProp} {f : XY} (hr : ∀ (a b : X), r a bf a = f b) (h : DSmooth f) :
theorem DSmooth.quotient_lift {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {s : Setoid X} {f : XY} (h : DSmooth f) (hs : ∀ (a b : X), a bf a = f b) :
theorem DSmooth.quotient_liftOn' {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {s : Setoid X} {f : XY} (h : DSmooth f) (hs : ∀ (a b : X), s a bf a = f b) :
DSmooth fun (x : Quotient s) => x.liftOn' f hs
theorem DSmooth.quotient_map' {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {s : Setoid X} {t : Setoid Y} {f : XY} (hf : DSmooth f) (H : Relator.LiftFun (⇑s) (⇑t) f f) :
theorem isPlot_quot_iff {X : Type u_1} [DiffeologicalSpace X] {r : XXProp} {n : } {p : Eucl nQuot r} :
IsPlot p ∀ (x : Eucl n), ∃ (u : Set (Eucl n)), IsOpen u x u ∃ (p' : uX), DSmooth p' p Subtype.val = Quot.mk r p'

The plots of the quotient diffeology are precicely those that locally lift to plots.

theorem isPlot_quotient_iff {X : Type u_1} [DiffeologicalSpace X] {s : Setoid X} {n : } {p : Eucl nQuotient s} :
IsPlot p ∀ (x : Eucl n), ∃ (u : Set (Eucl n)), IsOpen u x u ∃ (p' : uX), DSmooth p' p Subtype.val = Quotient.mk s p'

The plots of the quotient diffeology are precicely those that locally lift to plots.

@[simp]
theorem dsmooth_prod_mk {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XY} {g : XZ} :
(DSmooth fun (x : X) => (f x, g x)) DSmooth f DSmooth g
theorem DSmooth.fst {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XY × Z} (hf : DSmooth f) :
DSmooth fun (x : X) => (f x).1
theorem DSmooth.fst' {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XZ} (hf : DSmooth f) :
DSmooth fun (x : X × Y) => f x.1
theorem DSmooth.snd {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XY × Z} (hf : DSmooth f) :
DSmooth fun (x : X) => (f x).2
theorem DSmooth.snd' {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : YZ} (hf : DSmooth f) :
DSmooth fun (x : X × Y) => f x.2
theorem DSmooth.prod_mk {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : ZX} {g : ZY} (hf : DSmooth f) (hg : DSmooth g) :
DSmooth fun (x : Z) => (f x, g x)
theorem DSmooth.Prod.mk {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] (x : X) :
DSmooth fun (y : Y) => (x, y)
theorem DSmooth.Prod.mk_left {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] (y : Y) :
DSmooth fun (x : X) => (x, y)
theorem DSmooth.comp₂ {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] {g : X × YZ} (hg : DSmooth g) {e : WX} (he : DSmooth e) {f : WY} (hf : DSmooth f) :
DSmooth fun (w : W) => g (e w, f w)
theorem DSmooth.comp₃ {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} {ε : Type u_5} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] [DiffeologicalSpace ε] {g : X × Y × Zε} (hg : DSmooth g) {e : WX} (he : DSmooth e) {f : WY} (hf : DSmooth f) {k : WZ} (hk : DSmooth k) :
DSmooth fun (w : W) => g (e w, f w, k w)
theorem DSmooth.comp₄ {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} {ε : Type u_5} {ζ : Type u_6} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] [DiffeologicalSpace ε] [DiffeologicalSpace ζ] {g : X × Y × Z × ζε} (hg : DSmooth g) {e : WX} (he : DSmooth e) {f : WY} (hf : DSmooth f) {k : WZ} (hk : DSmooth k) {l : Wζ} (hl : DSmooth l) :
DSmooth fun (w : W) => g (e w, f w, k w, l w)
theorem DSmooth.prod_map {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] {f : ZX} {g : WY} (hf : DSmooth f) (hg : DSmooth g) :
DSmooth fun (p : Z × W) => (f p.1, g p.2)
theorem dsmooth_inf_dom_left₂ {X : Type u_7} {Y : Type u_8} {Z : Type u_9} {f : XYZ} {dX dX' : DiffeologicalSpace X} {dY dY' : DiffeologicalSpace Y} {dZ : DiffeologicalSpace Z} (h : DSmooth fun (p : X × Y) => f p.1 p.2) :
DSmooth fun (p : X × Y) => f p.1 p.2

A version of dsmooth_inf_dom_left for binary functions

theorem dsmooth_inf_dom_right₂ {X : Type u_7} {Y : Type u_8} {Z : Type u_9} {f : XYZ} {dX dX' : DiffeologicalSpace X} {dY dY' : DiffeologicalSpace Y} {dZ : DiffeologicalSpace Z} (h : DSmooth fun (p : X × Y) => f p.1 p.2) :
DSmooth fun (p : X × Y) => f p.1 p.2

A version of dsmooth_inf_dom_right for binary functions

theorem dsmooth_sInf_dom₂ {X : Type u_7} {Y : Type u_8} {Z : Type u_9} {f : XYZ} {DX : Set (DiffeologicalSpace X)} {DY : Set (DiffeologicalSpace Y)} {tX : DiffeologicalSpace X} {tY : DiffeologicalSpace Y} {tc : DiffeologicalSpace Z} (hX : tX DX) (hY : tY DY) (hf : DSmooth fun (p : X × Y) => f p.1 p.2) :
DSmooth fun (p : X × Y) => f p.1 p.2

A version of dsmooth_sInf_dom for binary functions

theorem DSmooth.uncurry_left {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XYZ} (x : X) (h : DSmooth (Function.uncurry f)) :
DSmooth (f x)
theorem DSmooth.uncurry_right {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XYZ} (y : Y) (h : DSmooth (Function.uncurry f)) :
DSmooth fun (a : X) => f a y
theorem dsmooth_curry {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {g : X × YZ} (x : X) (h : DSmooth g) :
theorem DSmooth.curry_left {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : X × YZ} (hf : DSmooth f) {y : Y} :
DSmooth fun (x : X) => f (x, y)

Smooth functions on products are smooth in their first argument

theorem DSmooth.along_fst {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : X × YZ} (hf : DSmooth f) {y : Y} :
DSmooth fun (x : X) => f (x, y)

Alias of DSmooth.curry_left.


Smooth functions on products are smooth in their first argument

theorem DSmooth.curry_right {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : X × YZ} (hf : DSmooth f) {x : X} :
DSmooth fun (y : Y) => f (x, y)

Smooth functions on products are smooth in their second argument

theorem DSmooth.along_snd {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : X × YZ} (hf : DSmooth f) {x : X} :
DSmooth fun (y : Y) => f (x, y)

Alias of DSmooth.curry_right.


Smooth functions on products are smooth in their second argument

theorem IsPlot.prod {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {n : } {p : Eucl nX} {p' : Eucl nY} (hp : IsPlot p) (hp' : IsPlot p') :
IsPlot fun (x : Eucl n) => (p x, p' x)
theorem isPlot_prod_iff {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {n : } {p : Eucl nX × Y} :
IsPlot p (IsPlot fun (x : Eucl n) => (p x).1) IsPlot fun (x : Eucl n) => (p x).2

The first projection in a product of diffeological spaces is a subduction.

The second projection in a product of diffeological spaces is a subduction.

theorem DiffeologicalSpace.prod_induced_induced {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [DiffeologicalSpace Y] [DiffeologicalSpace W] (f : XY) (g : ZW) :

A product of induced diffeologies is induced by the product map.

theorem DiffeologicalSpace.coinduced_prod_le {X : Type u_7} {Y : Type u_8} {Z : Type u_9} {W : Type u_10} [dX : DiffeologicalSpace X] [dZ : DiffeologicalSpace Z] (f : XY) (g : ZW) :

The diffeology coinduced by a product map is at least as fine as the product of the coinduced diffelogies. Note that equality only holds when both maps are surjective.

theorem DiffeologicalSpace.prod_coinduced_coinduced {X : Type u_7} {Y : Type u_8} {Z : Type u_9} {W : Type u_10} [dX : DiffeologicalSpace X] [dZ : DiffeologicalSpace Z] {f : XY} {g : ZW} (hf : Function.Surjective f) (hg : Function.Surjective g) :

A product of coinduced diffeologies is coinduced by the product map, if both maps are surjective.

theorem IsDInducing.prod_map {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] {f : XY} {g : ZW} (hf : IsDInducing f) (hg : IsDInducing g) :
theorem IsInduction.prod_map {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] {f : XY} {g : ZW} (hf : IsInduction f) (hg : IsInduction g) :
theorem IsSubduction.prod_map {X : Type u_1} {Y : Type u_2} {Z : Type u_3} {W : Type u_4} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] [DiffeologicalSpace W] {f : XY} {g : ZW} (hf : IsSubduction f) (hg : IsSubduction g) :
@[simp]
theorem isDInducing_const_prod {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {x : X} {f : YZ} :
(IsDInducing fun (y : Y) => (x, f y)) IsDInducing f
@[simp]
theorem isInduction_const_prod {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {x : X} {f : YZ} :
(IsInduction fun (y : Y) => (x, f y)) IsInduction f
@[simp]
theorem isDInducing_prod_const {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {y : Y} {f : XZ} :
(IsDInducing fun (x : X) => (f x, y)) IsDInducing f
@[simp]
theorem isInduction_prod_const {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {y : Y} {f : XZ} :
(IsInduction fun (x : X) => (f x, y)) IsInduction f
theorem isInduction_graph {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {f : XY} (hf : DSmooth f) :
IsInduction fun (x : X) => (x, f x)
theorem isInduction_prod_mk_left {X : Type u_1} [DiffeologicalSpace X] (y : X) :
IsInduction fun (x : X) => (x, y)

Products of reflexive diffeological spaces are reflexive.

Products of normed spaces are compatible with the product diffeology.

The D-topology of the product diffeology is at least as fine as the product of the D-topologies.

For locally compact spaces X, the product functor X × - takes quotient maps to quotient maps. Note that surjectivity is actually required here - coinducing maps do not necessarily get taken to coinducing maps. Adapted from https://dantopology.wordpress.com/2023/04/21/the-product-of-the-identity-map-and-a-quotient-map/. TODO: give an explicit description of the coinduced topology without assuming surjectivity TODO: give an explicit description even without local compactness, using deltaGenerated TODO: maybe move to mathlib?

Analogous to QuotientMap.id_prod.

theorem Topology.IsQuotientMap.sigma_map {ι : Type u_7} {ι' : Type u_8} {X : ιType u_9} {Y : ι'Type u_10} [(i : ι) → TopologicalSpace (X i)] [(i : ι') → TopologicalSpace (Y i)] {f₁ : ιι'} {f₂ : (i : ι) → X iY (f₁ i)} (h₁ : Function.Surjective f₁) (h₂ : ∀ (i : ι), IsQuotientMap (f₂ i)) :

Equivalent of Function.Surjective.sigma_map for quotient maps. TODO: move to mathlib.

theorem coinduced_sigma' {ι : Type u_7} {Y : Type u_8} {X : ιType v} [tX : (i : ι) → TopologicalSpace (X i)] (f : (i : ι) × X iY) :

For locally compact diffeological spaces, the D-topology commutes with products. This is not true in general, because the product topology might not be delta-generated; however, according to a remark in https://arxiv.org/abs/1302.2935 it should be always true if one takes the product in the category of delta-generated spaces instead of in Top. TODO: work this all out more generally

Version of dTop_prod_eq_prod_dTop_of_locallyCompact_left where the second factor is assumed to be locally compact instead of the first one.

theorem dsmooth_pi_iff {ι : Type u_1} {Y : ιType u_2} [(i : ι) → DiffeologicalSpace (Y i)] {X : Type u_3} [DiffeologicalSpace X] {f : X(i : ι) → Y i} :
DSmooth f ∀ (i : ι), DSmooth fun (x : X) => f x i
theorem dsmooth_pi {ι : Type u_1} {Y : ιType u_2} [(i : ι) → DiffeologicalSpace (Y i)] {X : Type u_3} [DiffeologicalSpace X] {f : X(i : ι) → Y i} (h : ∀ (i : ι), DSmooth fun (a : X) => f a i) :
theorem dsmooth_apply {ι : Type u_1} {Y : ιType u_2} [(i : ι) → DiffeologicalSpace (Y i)] (i : ι) :
DSmooth fun (p : (i : ι) → Y i) => p i
theorem isPlot_pi_iff {ι : Type u_1} {Y : ιType u_2} [(i : ι) → DiffeologicalSpace (Y i)] {n : } {p : Eucl n(i : ι) → Y i} :
IsPlot p ∀ (i : ι), IsPlot fun (x : Eucl n) => p x i
instance instDTopCompatibleForallOfFintypeOfLocallyCompactSpace {ι : Type u_1} {Y : ιType u_2} [(i : ι) → DiffeologicalSpace (Y i)] [Fintype ι] [(i : ι) → TopologicalSpace (Y i)] [∀ (i : ι), LocallyCompactSpace (Y i)] [∀ (i : ι), DTopCompatible (Y i)] :
DTopCompatible ((i : ι) → Y i)
instance instContDiffCompatibleForall {ι : Type u_4} [Fintype ι] {Y : ιType u_5} [(i : ι) → NormedAddCommGroup (Y i)] [(i : ι) → NormedSpace (Y i)] [(i : ι) → DiffeologicalSpace (Y i)] [∀ (i : ι), ContDiffCompatible (Y i)] :
ContDiffCompatible ((i : ι) → Y i)

The functional diffeology on the space DSmoothMap X Y of smooth maps X → Y.

Equations
  • One or more equations did not get rendered due to their size.
theorem DSmoothMap.isPlot_iff {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {n : } {p : Eucl nDSmoothMap X Y} :
IsPlot p DSmooth (Function.uncurry fun (x : Eucl n) (y : X) => (p x) y)
theorem DSmoothMap.dsmooth_iff {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XDSmoothMap Y Z} :
DSmooth f DSmooth (Function.uncurry fun (x : X) (y : Y) => (f x) y)

A map f : X → DSmoothMap Y Z is smooth iff the corresponding map X × Y → Z is.

theorem DSmoothMap.dsmooth_eval {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] :
DSmooth fun (p : DSmoothMap X Y × X) => p.1 p.2

The evaluation map DSmoothMap X Y × X → Y is smooth.

theorem DSmoothMap.dsmooth_comp {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] :
DSmooth fun (x : DSmoothMap Y Z × DSmoothMap X Y) => x.1.comp x.2

The composition map DSmoothMap Y Z × DSmoothMap X Y → DSmoothMap X Z is smooth.

def DSmoothMap.coev {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] (y : Y) :
DSmoothMap X (Y × X)

The coevaluation map Y → DSmoothMap X (Y × X).

Equations
Instances For

    The coevaluation map is smooth.

    def DSmoothMap.curry {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] (f : DSmoothMap (X × Y) Z) :

    The currying map DSmoothMap (X × Y) Z → DSmoothMap X (DSmoothMap Y Z)

    Equations
    • f.curry = { toFun := fun (x : X) => { toFun := Function.curry (⇑f) x, dsmooth := }, dsmooth := }
    Instances For

      The currying map is smooth.

      def DSmoothMap.uncurry {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] (f : DSmoothMap X (DSmoothMap Y Z)) :
      DSmoothMap (X × Y) Z

      The uncurrying map DSmoothMap X (DSmoothMap Y Z) → DSmoothMap (X × Y) Z.

      Equations
      • f.uncurry = { toFun := fun (x : X × Y) => (f x.1) x.2, dsmooth := }
      Instances For

        The uncurrying map is smooth.

        def DSmoothMap.fst {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] :
        DSmoothMap (X × Y) X

        The projection X × Y → X as a DSmoothMap.

        Equations
        Instances For
          def DSmoothMap.snd {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] :
          DSmoothMap (X × Y) Y

          The projection X × Y → Y as a DSmoothMap.

          Equations
          Instances For
            def DSmoothMap.prodMk {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] (f : DSmoothMap X Y) (g : DSmoothMap X Z) :
            DSmoothMap X (Y × Z)

            The continuous map X → Y × Z corresponding to two maps X → Y, X → Z.

            Equations
            Instances For

              The equivalence between smooth functions X → Y and plain functions when X is discrete. TODO: replace the topological assumptions with [DiscreteDiffeology X] once that is defined.

              Equations
              Instances For

                The equivalence between smooth functions X → Y and Y when X is discrete. TODO: remove topological assumptions. TODO: DDiffeomorph variants of these two constructions.

                Equations
                Instances For