Skip to content

Commit

Permalink
Define relative completion
Browse files Browse the repository at this point in the history
  • Loading branch information
valis committed Oct 17, 2024
1 parent 63ebf21 commit 6093ec9
Show file tree
Hide file tree
Showing 6 changed files with 195 additions and 6 deletions.
35 changes: 33 additions & 2 deletions src/Analysis/Measure/OuterMeasureRing.ard
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@
\import Logic.Meta
\import Meta
\import Order.Biordered
\import Order.Lattice
\import Order.PartialOrder
\import Order.StrictOrder
\import Paths
\import Paths.Meta
\import Set.Filter
\import Set.Subset (^-1)
\import Set.Subset
\import Topology.CoverSpace.Complete
\import Topology.MetricSpace.ExtendedMetricSpace
\import Topology.MetricSpace.ValuedMetricSpace
Expand All @@ -32,14 +33,17 @@
\import Topology.UniformSpace.Complete
\import Topology.UniformSpace.InfReal

\class LowerPseudoNormedAbGroup \extends ValuedPseudoNormedAbGroup
| V => ExtendedPseudoMetricSpace.LowerRealMetricValueOrder

\class PseudoOuterPremeasureRing \extends BooleanPseudoRing, ValuedPseudoNormedAbGroup
| V => ExtendedPseudoMetricSpace.LowerRealMetricValueOrder
| norm-outer-measure {x y : E} : norm (x ∨ y) LowerRealAbMonoid.<= norm x LowerRealAbMonoid.+ norm y
| norm-outer-mono {x y : E} : x <= y -> norm x LowerRealAbMonoid.<= norm y
| norm_negative => pmap norm neative=id
| norm_+ => rewrite +_diff $ norm-outer-measure LowerRealAbMonoid.<=∘ LowerRealAbMonoid.<=_+ (norm-outer-mono diff_<=) (norm-outer-mono diff_<=)

\class ExtendedMeasure \noclassifying (R : PseudoOuterPremeasureRing) (M : PseudoPremeasureRing) (inc : AddGroupHom M R) (comp : \Pi (a : M) -> norm a LowerRealAbMonoid.<= norm (inc a)) {
\class ExtendedMeasure \noclassifying (R : LowerPseudoNormedAbGroup) (M : PseudoPremeasureRing) (inc : AddGroupHom M R) (comp : \Pi (a : M) -> norm a LowerRealAbMonoid.<= norm (inc a)) {
\func IsMeasurable (a : R) : \Prop
=> ∃ (F : ProperFilter M) (R.IsFilterLimit (SetFilter-map inc F) a)

Expand Down Expand Up @@ -88,4 +92,31 @@
| ProperFilter => ProperFilter-map norm F
| isCauchyFilter {C} => measurable-cauchy (filter-limit-cauchy al) {C}
} \in (CompleteCoverSpace.filter-point CF, inP (F, al, CompleteCoverSpace.filter-point-limit))

\lemma measurable-closed {a b c : R} (op : M -> M -> M) (am : IsMeasurable a) (bm : IsMeasurable b) : IsMeasurable c \elim am, bm
| inP (F,Fa), inP (G,Gb) =>
\let H : ProperFilter M => \new ProperFilter {
| F W => ∃ (U : Set M) (F U) (V : Set M) (G V) ∀ {x : U} {y : V} (W (op x y))
| filter-mono (inP (U,FU,V,GV,h)) p => inP (U, FU, V, GV, \lam Ux Vy => p (h Ux Vy))
| filter-top => inP (Bounded.top, filter-top, Bounded.top, filter-top, \lam _ _ => ())
| filter-meet (inP (U,FU,V,GV,h)) (inP (U',FU',V',GV',h')) => inP (U ∧ U', filter-meet FU FU', V ∧ V', filter-meet GV GV', \lam s t => (h s.1 t.1, h' s.2 t.2))
| isProper {W} (inP (U,FU,V,GV,h)) => \case isProper FU, isProper GV \with {
| inP (x,Ux), inP (y,Vy) => inP (op x y, h Ux Vy)
}
}
\in inP (H, \lam {W} Wo Wc => inP {?})

\lemma measurable-closed' {a b : R} (op : R -> R -> R) (am : IsMeasurable a) (bm : IsMeasurable b) : IsMeasurable (op a b) \elim am, bm
| inP (F,Fa), inP (G,Gb) =>
\let H : ProperFilter M => \new ProperFilter {
| F W => ∃ (U : Set M) (F U) (V : Set M) (G V) ∀ {x : U} {y : V} {z} (inc z = op (inc x) (inc y) -> W z)
| filter-mono (inP (U,FU,V,GV,h)) p => inP (U, FU, V, GV, \lam Ux Vy q => p (h Ux Vy q))
| filter-top => inP (Bounded.top, filter-top, Bounded.top, filter-top, \lam _ _ _ => ())
| filter-meet (inP (U,FU,V,GV,h)) (inP (U',FU',V',GV',h')) => inP (U ∧ U', filter-meet FU FU', V ∧ V', filter-meet GV GV', \lam s t q => (h s.1 t.1 q, h' s.2 t.2 q))
| isProper {W} (inP (U,FU,V,GV,h)) => \case isProper FU, isProper GV \with {
| inP (x,Ux), inP (y,Vy) => inP {?}
}
}
\in inP (H, \lam {W} Wo Wc => inP {?})

}
6 changes: 6 additions & 0 deletions src/Topology/CoverSpace.ard
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@

\lemma id-denseEmbedding {X : PrecoverSpace} : IsDenseEmbedding {id {X}}
=> (\lam {x} _ Ux => inP (x, inP (x, idp), Ux), \lam Cc => cauchy-subset Cc \lam {U} CU => inP $ later (U, CU, <=-refl))

\lemma embedding-left {X Y Z : PrecoverSpace} (f : PrecoverMap X Y) (g : PrecoverMap Y Z) (fg : IsEmbedding {g ∘ f}) : f.IsEmbedding
=> \lam Cc => cauchy-subset (g.func-cover $ fg Cc) \lam {_} (inP (V,r,idp)) => r
}

\type \infix 4 <=< {X : PrecoverSpace} (V U : Set X) : \Prop
Expand Down Expand Up @@ -299,6 +302,9 @@
\lemma PrecoverTransfer-char {X Y : PrecoverSpace} {f : PrecoverMap X Y} {C : Set (Set X)} (Dc : isCauchy {PrecoverTransfer f} C) : X.isCauchy C
=> cauchy-refine (f.func-cover Dc) \lam {_} (inP (V,r,idp)) => r

\lemma PrecoverTransfer-univ {X Z : PrecoverSpace} {Y : \Set} {f : X -> Y} {g : Y -> Z} (fg : PrecoverMap X Z \lam x => g (f x)) : PrecoverMap X (PrecoverTransfer g) f \cowith
| func-cover Dc => cauchy-refine (fg.func-cover Dc) \lam {_} (inP (V, inP (W,DW,q), idp)) => inP $ (_, inP (W, DW, idp), q __)

\func ClosurePrecoverSpace {X : \Set} (A : Set (Set X) -> \Prop) (CA : \Pi {C : Set (Set X)} -> A C -> \Pi (x : X) -> ∃ (U : C) (U x)) : PrecoverSpace X \cowith
| isCauchy => Closure A
| cauchy-cover CC x => closure-filter (pointFilter x) (\lam AC => CA AC x) CC
Expand Down
7 changes: 4 additions & 3 deletions src/Topology/CoverSpace/Category.ard
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
\import Logic
\import Paths
\import Topology.CoverSpace
\import Topology.CoverSpace.Complete

\instance PrecoverSpaceCat : Cat PrecoverSpace
| Hom => PrecoverMap
Expand All @@ -16,9 +17,9 @@
\lam Cc => cauchy-subset (func-cover {c} Cc) \lam (inP (V,CV,p)) => transportInv C p CV)

\instance CoverSpaceCat : Cat CoverSpace
| Hom => PrecoverMap
| id X => PrecoverMap.id
| o => PrecoverMap.∘
| Hom => CoverMap
| id X => CoverMap.id
| o => CoverMap.∘
| id-left => idp
| id-right => idp
| o-assoc => idp
Expand Down
15 changes: 15 additions & 0 deletions src/Topology/CoverSpace/Complete.ard
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@
\default func-cont Uo => cauchy-open.2 \lam {x} Ufx => \case isCauchyFilter {func-cauchy (pointCF x)} $ cauchy-open.1 Uo Ufx \with {
| inP (V,h,fx<=<V) => cauchy-subset (unfolds in fx<=<V) $ later \lam {W} g Wx {y} Wy => h (<=<_<= fx<=<V idp) $ g (x, (idp, Wx)) Wy
}

\lemma func-CF~ {F G : CauchyFilter Dom} (p : F CF~ G) : func-cauchy F CF~ func-cauchy G
=> isCauchyFilter {func-cauchy (CF~_meet p)} __
} \where {
\lemma fromContMap {X : CompleteCoverSpace} {Y : CoverSpace} (f : ContMap X Y) : CauchyMap X Y f \cowith
| func-cauchy F => \new CauchyFilter {
Expand Down Expand Up @@ -85,6 +88,18 @@
=> PrecoverMap.id-denseEmbedding
}

\lemma CoverTransfer-map {X : \Set} {Y : CoverSpace} (f : X -> Y) : CoverMap (CoverTransfer f) Y f \cowith
| func-cover => func-cover {PrecoverTransfer-map f}

\lemma CoverTransfer-univ {X Z : CoverSpace} {Y : \Set} (f : X -> Y) (g : Y -> Z) (fg : CoverMap X Z \lam x => g (f x)) : CoverMap X (CoverTransfer g) f \cowith
| func-cover => func-cover {PrecoverTransfer-univ fg}

\lemma CoverTransfer_<=< {X : \Set} {Y : CoverSpace} {f : X -> Y} {x : X} {U : Set X} (x<=<U : single x <=< {CoverTransfer f} U)
: ∃ (V : Set Y) (f ^-1 V ⊆ U) (single (f x) <=< V)
=> \case CoverSpace.interior {CoverTransfer f} {U} \with {
| inP (V,Vo,p) => inP (V, rewriteI p \lam s => <=<_<= s idp, PrecoverSpace.open-char.1 Vo (transport {Set X} (__ x) p x<=<U))
}

\instance CauchyFilterPoset (S : CoverSpace) : Poset (CauchyFilter S)
| <= F G => F ⊆ G
| <=-refl c => c
Expand Down
125 changes: 125 additions & 0 deletions src/Topology/CoverSpace/RelativelyComplete.ard
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
\import Category.Factorization
\import Equiv
\import Function.Meta
\import HLevel
\import Logic
\import Logic.Meta
\import Meta
\import Order.PartialOrder
\import Paths
\import Paths.Meta
\import Relation.Equivalence
\import Set.Filter
\import Set.Subset
\import Topology.CoverSpace
\import Topology.CoverSpace.Category
\import Topology.CoverSpace.Complete
\import Topology.CoverSpace.Product
\import Topology.RatherBelow
\import Topology.TopSpace

\func IsRelativelyComplete {X Y : CoverSpace} (p : X -> Y) : \Prop
=> \Pi (F : CauchyFilter X) {y : Y} -> pointCF y ⊆ SetFilter-map p F -> ∃ (x : X) (p x = y) (pointCF x ⊆ F)
\where {
\lemma dense-complete {X Y Z : CoverSpace} {f : CoverMap X Y} (fd : f.IsDenseEmbedding) (p : CauchyMap Y Z)
(q : \Pi (F : RegularCauchyFilter X) {z : Z} -> pointCF z ⊆ p.func-cauchy (f.func-cauchy F) -> ∃ (y : Y) (p y = z) (pointCF y ⊆ f.func-cauchy F)) : IsRelativelyComplete p
=> \lam F {z} z<=F => \case q (regCF $ dense-filter-lift f fd F) {z} $ RegularCauchyFilter.Reg_CF~_<= {_} {pointCF z} {p.func-cauchy $ f.func-cauchy $ regCF _} $ ~-transitive {_} {pointCF z} (CF~_<= {_} {_} {p.func-cauchy F} z<=F) $ p.func-CF~ $ CF~-sym $ ~-transitive (f.func-CF~ $ CF~_<= {_} {_} {dense-filter-lift f fd F} regCF_<=) (dense-filter-lift.map-equiv fd) \with {
| inP (y,py=z,c) => inP (y, py=z, RegularCauchyFilter.Reg_CF~_<= {_} {pointCF y} $ ~-transitive {_} {pointCF y} (CF~_<= {_} {pointCF y} $ c <=∘ func-cauchy_<= (regCF $ dense-filter-lift f fd F) (dense-filter-lift f fd F) \lam u => u <=-refl) $ dense-filter-lift.map-equiv fd)
}
}

\lemma relativelyCompleteAndSeparated {X Y : CoverSpace} (p : X -> Y) (pc : IsRelativelyComplete p) (ph : IsRelativelyHausdorff p)
(F : CauchyFilter X) {y : Y} (ys : pointCF y ⊆ SetFilter-map p F) : Contr (\Sigma (x : X) (p x = y) (pointCF x ⊆ F))
=> isProp'=>isContr (\lam s t => ext $ ph (SeparatedCoverSpace.separated-char 1 6 $ ~-transitive {CauchyFilterEquivalence X} (CF~_<= s.3) $ CF~-sym (CF~_<= t.3)) (s.2 *> inv t.2)) (pc F ys)
\where {
\lemma neighborhood (F : CauchyFilter X) {ys : pointCF y ⊆ SetFilter-map p F} {V U : Set X} (V<=<U : V <=< U) (FV : F V) : single (Contr.center {relativelyCompleteAndSeparated p pc ph F ys}).1 <=< U
=> \let | c => Contr.center {relativelyCompleteAndSeparated p pc ph F ys}
| G => pointCF c.1
\in CF~_<=< (CF~-sym $ CF~_<= {_} {G} $ c.3) V<=<U FV

\lemma filter-lift {X Y Z : CoverSpace} {i : CoverMap X Y} {f : CauchyMap X Z} (id : i.IsDenseEmbedding) {y : Y}
=> f.func-cauchy $ dense-filter-lift i id (pointCF y)

\func lift-contr {X Y Z T : CoverSpace} {p : Z -> T} (pc : IsRelativelyComplete p) (ph : IsRelativelyHausdorff p) {i : CoverMap X Y} {f : CauchyMap X Z} {g : ContMap Y T} (id : i.IsDenseEmbedding) (sq : \Pi (x : X) -> g (i x) = p (f x)) (y : Y) : \Sigma (z : Z) (p z = g y) (pointCF z ⊆ filter-lift id)
=> Contr.center {relativelyCompleteAndSeparated p pc ph (filter-lift id) {g y} \lam {V} gy<=<V => \case <=<-inter (<=<-cont gy<=<V) \with {
| inP (V',y<=<V',V'<=<V) => inP (V', g ^-1 V, transport V (sq _) __, V'<=<V, y<=<V')
}}
}

\open relativelyCompleteAndSeparated

\func dense-cauchy-relative-lift {X Y Z T : CoverSpace} (p : Z -> T) (pc : IsRelativelyComplete p) (ph : IsRelativelyHausdorff p) (i : CoverMap X Y) (f : CauchyMap X Z) (g : ContMap Y T) (id : i.IsDenseEmbedding) (sq : \Pi (x : X) -> g (i x) = p (f x)) : CauchyMap Y Z \cowith
| func y => (lift-contr pc ph id sq y).1
| func-cauchy F => \new CauchyFilter {
| isCauchyFilter Cc => \case isCauchyFilter {f.func-cauchy (dense-filter-lift i id F)} (isRegular Cc) \with {
| inP (U', inP (U,CU,U'<=<U), inP (V',V,q,V'<=<V,FV')) => inP (U, CU, filter-mono FV' \lam {y} V'y =>
<=<_<= (neighborhood (filter-lift id) U'<=<U \case <=<-inter $ <=<-right (single_<= V'y) V'<=<V \with {
| inP (V'',y<=<V'',V''<=<V) => inP $ later (V'', V, q, V''<=<V, y<=<V'')
}) idp)
}
}

\func dense-relative-lift {X Y Z T : CoverSpace} (p : Z -> T) (pc : IsRelativelyComplete p) (ph : IsRelativelyHausdorff p) (i : CoverMap X Y) (f : CoverMap X Z) (g : ContMap Y T) (id : i.IsDenseEmbedding) (sq : \Pi (x : X) -> g (i x) = p (f x)) : CoverMap Y Z \cowith
| func y => (lift-contr pc ph id sq y).1
| func-cover Dc => cauchy-refine (isRegular $ id.2 $ f.func-cover $ isRegular Dc) \lam {V'} (inP (V, inP (U, inP (W', inP (W, DW, W'<=<W), p), q), V'<=<V)) =>
inP (_, inP (W, DW, idp), \lam {y} V'y => <=<_<= (neighborhood (filter-lift id) W'<=<W \case <=<-inter (<=<-right (single_<= V'y) V'<=<V) \with {
| inP (V'',y<=<V'',V''<=<V) => inP $ later (V'', V, rewrite p in q, V''<=<V, y<=<V'')
}) idp)

\lemma dense-relative-lift-proj {X Y Z T : CoverSpace} {p : Z -> T} {pc : IsRelativelyComplete p} (ph : IsRelativelyHausdorff p) {i : CoverMap X Y} {f : CauchyMap X Z} {g : ContMap Y T} {id : i.IsDenseEmbedding} (sq : \Pi (x : X) -> g (i x) = p (f x)) {y : Y} : p (lift-contr pc ph id sq y).1 = g y
=> (lift-contr pc ph id sq y).2

\lemma dense-relative-lift-char {X Y Z T : CoverSpace} {p : Z -> T} {pc : IsRelativelyComplete p} {ph : IsRelativelyHausdorff p} {f : CauchyMap X Z} {i : CoverMap X Y} {g : ContMap Y T} {id : i.IsDenseEmbedding} (sq : \Pi (x : X) -> g (i x) = p (f x)) {x : X} : dense-cauchy-relative-lift p pc ph i f g id sq (i x) = f x
=> ph (SeparatedCoverSpace.separated-char 4 6 \lam d => \case (lift-contr pc ph id sq (i x)).3 d \with {
| inP (V',V,q,V'<=<V,ix<=<V') => q $ <=<_<= V'<=<V $ <=<_<= ix<=<V' idp
}) $ dense-relative-lift-proj ph sq *> sq x

\type RelativeCompletion {X Y : CoverSpace} (f : X -> Y)
=> \Sigma (F : RegularCauchyFilter X) (y : Y) (\property pointCF y ⊆ SetFilter-map f F)
\where {
\protected \func inc (s : RelativeCompletion f) : \Sigma (RegularCauchyFilter X) Y
=> (s.1,s.2)
}

\instance RelativeCompletionCoverSpace {X Y : CoverSpace} (f : X -> Y) : CoverSpace (RelativeCompletion f)
=> CoverTransfer RelativeCompletion.inc

\func relativeCompletion {X Y : CoverSpace} (f : CoverMap X Y) : CoverMap X (RelativeCompletionCoverSpace f)
=> CoverTransfer-univ (\lam x => later (pointCF x, f x, <=<-cont __)) RelativeCompletion.inc (ProductCoverSpace.tuple completion f)
\where {
\protected \func toCompletion {X Y : CoverSpace} {f : ContMap X Y} : CoverMap (RelativeCompletionCoverSpace f) (Completion X)
=> ProductCoverSpace.proj1 CoverMap.∘ CoverTransfer-map RelativeCompletion.inc

\lemma isDenseEmbedding : CoverMap.IsDenseEmbedding {relativeCompletion f}
=> (\lam {s} {W'} (inP (W,Wo,p)) W's => \case Wo (rewrite p in W's) \with {
| inP (U,Uo,Us,V,Vo,Vs,h) => \case isProper $ filter-meet (completion.dense-aux ((PrecoverSpace.open-char {Completion X}).1 Uo Us)) (s.3 (PrecoverSpace.open-char.1 Vo Vs)) \with {
| inP (x,(Ux,Vfx)) => inP (_, inP (x,idp), rewrite p $ h Ux Vfx)
}
}, PrecoverMap.embedding-left (relativeCompletion f) toCompletion completion.isDenseEmbedding.2)
}

\func relativeCompletion-proj {X Y : CoverSpace} (f : CoverMap X Y) : CoverMap (RelativeCompletionCoverSpace f) Y
=> ProductCoverSpace.proj2 CoverMap.∘ CoverTransfer-map RelativeCompletion.inc
\where {
\lemma isHausdorff : IsRelativelyHausdorff (relativeCompletion-proj f)
=> \lam c p => ext (RegularCauchyFilter.equality \lam Cc =>
\case SeparatedCoverSpace.separated-char 6 7 c $ func-cover {CoverTransfer-map RelativeCompletion.inc} $ ProductCoverSpace.prodCover {Completion X} (Completion.makeCover Cc) cauchy-top \with {
| inP (_, inP (_, inP (_, inP (U,CU,idp), V, V=top, idp), idp), ((xU,_),(x'U,_))) => inP (U, CU, (xU,x'U))
}, p)

\lemma isCompletion : IsRelativelyComplete (relativeCompletion-proj f)
=> IsRelativelyComplete.dense-complete relativeCompletion.isDenseEmbedding (relativeCompletion-proj f) \lam F {y} y<=F =>
inP ((F, y, y<=F), idp, \lam {W} Fy<=<W => \case CoverTransfer_<=< Fy<=<W \with {
| inP (W',W'<=W,Fy<=<W') => \case ProductCoverSpace.prod-neighborhood.1 Fy<=<W' \with {
| inP (U,V,F<=<U,y<=<V,h) => filter-mono (filter-meet (completion.dense-aux F<=<U) (y<=F y<=<V)) \lam s => W'<=W (h s.1 s.2)
}
})
}

\func CompletionOFS : OFS {CoverSpaceCat} \cowith
| L i => CoverMap.IsDenseEmbedding {i}
| R p => \Sigma (IsRelativelyHausdorff p) (IsRelativelyComplete p)
| factors h => (RelativeCompletionCoverSpace h, relativeCompletion h, relativeCompletion-proj h, idp, relativeCompletion.isDenseEmbedding, (relativeCompletion-proj.isHausdorff, relativeCompletion-proj.isCompletion))
| unique-lift {X} {Y} {Z} {T} f g fd gc => Equiv.fromInjSurj _ (\lam {l1} {l2} q => exts $ dense-relative-lift-unique g gc.1 f fd.1 l1 l2 (\lam x => pmap (__.1 x) q) \lam {y} => pmap (__.2 y) q) \lam r =>
\have sq x => inv $ pmap {CoverMap X T} (__ x) r.3
\in inP (dense-relative-lift g gc.2 gc.1 f r.1 r.2 fd sq, ext (exts \lam x => dense-relative-lift-char sq, exts \lam y => dense-relative-lift-proj gc.1 sq))
13 changes: 12 additions & 1 deletion src/Topology/TopSpace.ard
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,15 @@
=> TopSub-func ContMap.id $ later (p __)

\lemma TopSub-limit {X : TopSpace} {S : Set X} {I : DirectedSet} {f : I -> Set.Total S} {x : Set.Total S} (l : X.IsLimit (\lam n => (f n).1) x.1) : TopSpace.IsLimit {TopSub S} f x
=> \lam {_} (inP (V,Vo,idp)) => l Vo
=> \lam {_} (inP (V,Vo,idp)) => l Vo

\func IsRelativelyHausdorff {X Y : TopSpace} (f : X -> Y) : \Prop
=> \Pi {x x' : X} -> ∀ {U V : X.isOpen} (U x) (V x') ∃ (U ∧ V) -> f x = f x' -> x = x'

\lemma denseSet-relative-lift-unique {X Y Z : TopSpace} (p : Y -> Z) (ph : IsRelativelyHausdorff p) {S : Set X} (Sd : IsDenseSet S) (f g : ContMap X Y) (dp : \Pi {x : X} -> S x -> f x = g x) (dq : \Pi {x : X} -> p (f x) = p (g x)) {x : X} : f x = g x
=> ph (\lam {U} Uo Vo Ufx Vgx => \case Sd {x} (open-inter (f.func-cont Uo) (g.func-cont Vo)) (Ufx,Vgx) \with {
| inP (y,Sy,(Ufy,Vgy)) => inP (g y, (transport U (dp Sy) Ufy, Vgy))
}) dq

\lemma dense-relative-lift-unique {X Y Z W : TopSpace} (p : Z -> W) (ph : IsRelativelyHausdorff p) (f : ContMap X Y) (fd : f.IsDense) (g h : ContMap Y Z) (dp : \Pi (x : X) -> g (f x) = h (f x)) (dq : \Pi {y : Y} -> p (g y) = p (h y)) (y : Y) : g y = h y
=> denseSet-relative-lift-unique p ph fd g h (\lam (inP (y,q)) => rewriteI q (dp y)) dq

0 comments on commit 6093ec9

Please sign in to comment.