diff --git a/src/foundation/equivalences-arrows.lagda.md b/src/foundation/equivalences-arrows.lagda.md
index 23e82b5948..de15f1eb08 100644
--- a/src/foundation/equivalences-arrows.lagda.md
+++ b/src/foundation/equivalences-arrows.lagda.md
@@ -87,8 +87,7 @@ module _
coherence-hom-arrow f g (map-equiv i) (map-equiv j)
equiv-arrow : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
- equiv-arrow =
- Σ (A ≃ X) (λ i → Σ (B ≃ Y) (coherence-equiv-arrow i))
+ equiv-arrow = Σ (A ≃ X) (λ i → Σ (B ≃ Y) (coherence-equiv-arrow i))
module _
(e : equiv-arrow)
@@ -100,6 +99,9 @@ module _
map-domain-equiv-arrow : A → X
map-domain-equiv-arrow = map-equiv equiv-domain-equiv-arrow
+ map-inv-domain-equiv-arrow : X → A
+ map-inv-domain-equiv-arrow = map-inv-equiv equiv-domain-equiv-arrow
+
is-equiv-map-domain-equiv-arrow : is-equiv map-domain-equiv-arrow
is-equiv-map-domain-equiv-arrow =
is-equiv-map-equiv equiv-domain-equiv-arrow
@@ -110,6 +112,9 @@ module _
map-codomain-equiv-arrow : B → Y
map-codomain-equiv-arrow = map-equiv equiv-codomain-equiv-arrow
+ map-inv-codomain-equiv-arrow : Y → B
+ map-inv-codomain-equiv-arrow = map-inv-equiv equiv-codomain-equiv-arrow
+
is-equiv-map-codomain-equiv-arrow : is-equiv map-codomain-equiv-arrow
is-equiv-map-codomain-equiv-arrow =
is-equiv-map-equiv equiv-codomain-equiv-arrow
diff --git a/src/foundation/morphisms-arrows.lagda.md b/src/foundation/morphisms-arrows.lagda.md
index b80513a416..7abfa99887 100644
--- a/src/foundation/morphisms-arrows.lagda.md
+++ b/src/foundation/morphisms-arrows.lagda.md
@@ -10,6 +10,8 @@ module foundation.morphisms-arrows where
open import foundation.cones-over-cospan-diagrams
open import foundation.dependent-pair-types
open import foundation.function-extensionality
+open import foundation.postcomposition-functions
+open import foundation.precomposition-functions
open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition
@@ -19,8 +21,6 @@ open import foundation-core.functoriality-dependent-function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies
open import foundation-core.identity-types
-open import foundation-core.postcomposition-functions
-open import foundation-core.precomposition-functions
```
@@ -309,19 +309,25 @@ A morphism of arrows `α : f → g` gives a morphism of precomposition arrows
```agda
module _
- {l1 l2 l3 l4 : Level}
+ {l1 l2 l3 l4 l : Level}
{A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
(f : A → B) (g : X → Y) (α : hom-arrow f g)
+ (S : UU l)
where
- precomp-hom-arrow :
- {l : Level} (S : UU l) → hom-arrow (precomp g S) (precomp f S)
- pr1 (precomp-hom-arrow S) =
- precomp (map-codomain-hom-arrow f g α) S
- pr1 (pr2 (precomp-hom-arrow S)) =
- precomp (map-domain-hom-arrow f g α) S
- pr2 (pr2 (precomp-hom-arrow S)) h =
- inv (eq-htpy (h ·l coh-hom-arrow f g α))
+ transpose-precomp-hom-arrow :
+ hom-arrow
+ ( precomp (map-codomain-hom-arrow f g α) S)
+ ( precomp (map-domain-hom-arrow f g α) S)
+ transpose-precomp-hom-arrow =
+ ( precomp g S , precomp f S , htpy-precomp (coh-hom-arrow f g α) S)
+
+ precomp-hom-arrow : hom-arrow (precomp g S) (precomp f S)
+ precomp-hom-arrow =
+ transpose-hom-arrow
+ ( precomp (map-codomain-hom-arrow f g α) S)
+ ( precomp (map-domain-hom-arrow f g α) S)
+ ( transpose-precomp-hom-arrow)
```
### Morphisms of arrows give morphisms of postcomposition arrows
@@ -338,12 +344,10 @@ module _
postcomp-hom-arrow :
{l : Level} (S : UU l) → hom-arrow (postcomp S f) (postcomp S g)
- pr1 (postcomp-hom-arrow S) =
- postcomp S (map-domain-hom-arrow f g α)
- pr1 (pr2 (postcomp-hom-arrow S)) =
- postcomp S (map-codomain-hom-arrow f g α)
- pr2 (pr2 (postcomp-hom-arrow S)) h =
- eq-htpy (coh-hom-arrow f g α ·r h)
+ postcomp-hom-arrow S =
+ ( postcomp S (map-domain-hom-arrow f g α) ,
+ postcomp S (map-codomain-hom-arrow f g α) ,
+ htpy-postcomp S (coh-hom-arrow f g α))
```
## See also
diff --git a/src/foundation/postcomposition-pullbacks.lagda.md b/src/foundation/postcomposition-pullbacks.lagda.md
index b24c28bb74..f2f61bf6b5 100644
--- a/src/foundation/postcomposition-pullbacks.lagda.md
+++ b/src/foundation/postcomposition-pullbacks.lagda.md
@@ -11,6 +11,7 @@ open import foundation.cones-over-cospan-diagrams
open import foundation.dependent-pair-types
open import foundation.function-extensionality
open import foundation.identity-types
+open import foundation.postcomposition-functions
open import foundation.standard-pullbacks
open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition
@@ -21,7 +22,6 @@ open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.homotopies
-open import foundation-core.postcomposition-functions
open import foundation-core.pullbacks
open import foundation-core.universal-property-pullbacks
```
@@ -68,9 +68,10 @@ postcomp-cone :
{A : UU l1} {B : UU l2} {C : UU l3} {X : UU l4} (T : UU l5)
(f : A → X) (g : B → X) (c : cone f g C) →
cone (postcomp T f) (postcomp T g) (T → C)
-pr1 (postcomp-cone T f g c) h = vertical-map-cone f g c ∘ h
-pr1 (pr2 (postcomp-cone T f g c)) h = horizontal-map-cone f g c ∘ h
-pr2 (pr2 (postcomp-cone T f g c)) h = eq-htpy (coherence-square-cone f g c ·r h)
+postcomp-cone T f g c =
+ ( postcomp T (vertical-map-cone f g c) ,
+ postcomp T (horizontal-map-cone f g c) ,
+ htpy-postcomp T (coherence-square-cone f g c))
```
## Properties
@@ -121,38 +122,33 @@ triangle-map-standard-pullback-postcomp T f g c h =
### Pullbacks are closed under postcomposition exponentiation
```agda
-abstract
- is-pullback-postcomp-is-pullback :
- {l1 l2 l3 l4 l5 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
- (f : A → X) (g : B → X) (c : cone f g C) → is-pullback f g c →
- (T : UU l5) →
- is-pullback (postcomp T f) (postcomp T g) (postcomp-cone T f g c)
- is-pullback-postcomp-is-pullback f g c is-pb-c T =
- is-equiv-top-map-triangle
- ( cone-map f g c)
- ( map-standard-pullback-postcomp f g T)
- ( gap (f ∘_) (g ∘_) (postcomp-cone T f g c))
- ( triangle-map-standard-pullback-postcomp T f g c)
- ( is-equiv-map-standard-pullback-postcomp f g T)
- ( universal-property-pullback-is-pullback f g c is-pb-c T)
-
-abstract
- is-pullback-is-pullback-postcomp :
- {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
- (f : A → X) (g : B → X) (c : cone f g C) →
- ( {l5 : Level} (T : UU l5) →
- is-pullback (postcomp T f) (postcomp T g) (postcomp-cone T f g c)) →
- is-pullback f g c
- is-pullback-is-pullback-postcomp f g c is-pb-postcomp =
- is-pullback-universal-property-pullback f g c
- ( λ T →
- is-equiv-left-map-triangle
- ( cone-map f g c)
- ( map-standard-pullback-postcomp f g T)
- ( gap (f ∘_) (g ∘_) (postcomp-cone T f g c))
- ( triangle-map-standard-pullback-postcomp T f g c)
- ( is-pb-postcomp T)
- ( is-equiv-map-standard-pullback-postcomp f g T))
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {C : UU l4}
+ (f : A → X) (g : B → X) (c : cone f g C)
+ where
+
+ abstract
+ is-pullback-postcomp-is-pullback :
+ is-pullback f g c → {l5 : Level} (T : UU l5) →
+ is-pullback (postcomp T f) (postcomp T g) (postcomp-cone T f g c)
+ is-pullback-postcomp-is-pullback is-pb-c T =
+ is-equiv-top-map-triangle _ _ _
+ ( triangle-map-standard-pullback-postcomp T f g c)
+ ( is-equiv-map-standard-pullback-postcomp f g T)
+ ( universal-property-pullback-is-pullback f g c is-pb-c T)
+
+ abstract
+ is-pullback-is-pullback-postcomp :
+ ( {l5 : Level} (T : UU l5) →
+ is-pullback (postcomp T f) (postcomp T g) (postcomp-cone T f g c)) →
+ is-pullback f g c
+ is-pullback-is-pullback-postcomp is-pb-postcomp =
+ is-pullback-universal-property-pullback f g c
+ ( λ T →
+ is-equiv-left-map-triangle _ _ _
+ ( triangle-map-standard-pullback-postcomp T f g c)
+ ( is-pb-postcomp T)
+ ( is-equiv-map-standard-pullback-postcomp f g T))
```
### Cones satisfying the universal property of pullbacks are closed under postcomposition exponentiation
diff --git a/src/foundation/type-arithmetic-standard-pullbacks.lagda.md b/src/foundation/type-arithmetic-standard-pullbacks.lagda.md
index 09335074fa..73a755edc1 100644
--- a/src/foundation/type-arithmetic-standard-pullbacks.lagda.md
+++ b/src/foundation/type-arithmetic-standard-pullbacks.lagda.md
@@ -243,7 +243,9 @@ module _
### Unit laws for standard pullbacks
-Pulling back along the identity map
+Pulling back along the identity map is the identity operation.
+
+#### Left unit law for standard pullbacks
```agda
module _
@@ -302,7 +304,7 @@ module _
### Unit laws for standard pullbacks
-Pulling back along the identity map is the identity operation.
+#### Right unit law for standard pullbacks
```agda
module _
diff --git a/src/orthogonal-factorization-systems.lagda.md b/src/orthogonal-factorization-systems.lagda.md
index a167d57d4a..e2a8bf7286 100644
--- a/src/orthogonal-factorization-systems.lagda.md
+++ b/src/orthogonal-factorization-systems.lagda.md
@@ -9,6 +9,7 @@
```agda
module orthogonal-factorization-systems where
+open import orthogonal-factorization-systems.anodyne-maps public
open import orthogonal-factorization-systems.cd-structures public
open import orthogonal-factorization-systems.cellular-maps public
open import orthogonal-factorization-systems.closed-modalities public
@@ -71,6 +72,7 @@ open import orthogonal-factorization-systems.types-local-at-maps public
open import orthogonal-factorization-systems.types-separated-at-maps public
open import orthogonal-factorization-systems.uniquely-eliminating-modalities public
open import orthogonal-factorization-systems.universal-property-localizations-at-global-subuniverses public
+open import orthogonal-factorization-systems.weakly-anodyne-maps public
open import orthogonal-factorization-systems.wide-function-classes public
open import orthogonal-factorization-systems.wide-global-function-classes public
open import orthogonal-factorization-systems.zero-modality public
diff --git a/src/orthogonal-factorization-systems/anodyne-maps.lagda.md b/src/orthogonal-factorization-systems/anodyne-maps.lagda.md
new file mode 100644
index 0000000000..8f86a1c09d
--- /dev/null
+++ b/src/orthogonal-factorization-systems/anodyne-maps.lagda.md
@@ -0,0 +1,179 @@
+# Anodyne maps
+
+```agda
+module orthogonal-factorization-systems.anodyne-maps where
+```
+
+Imports
+
+```agda
+open import foundation.equivalences-arrows
+open import foundation.function-types
+open import foundation.functoriality-cartesian-product-types
+open import foundation.functoriality-coproduct-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.homotopies
+open import foundation.universe-levels
+
+open import orthogonal-factorization-systems.orthogonal-maps
+
+open import synthetic-homotopy-theory.cocartesian-morphisms-arrows
+```
+
+
+
+## Idea
+
+A map $j : C → D$ is said to be
+{{#concept "anodyne" Disambiguation="map of types" Agda=is-anodyne-map}} with
+respect to a map $f : A → B$, or **$f$-anodyne**, if every map that is
+[orthogonal](orthogonal-factorization-systems.orthogonal-maps.md) to $f$ is also
+orthogonal to $j$.
+
+## Definitions
+
+### The predicate of being anodyne with respect to a map
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
+ (f : A → B) (j : C → D)
+ where
+
+ is-anodyne-map-Level :
+ (l5 l6 : Level) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ lsuc l5 ⊔ lsuc l6)
+ is-anodyne-map-Level l5 l6 =
+ {X : UU l5} {Y : UU l6} (g : X → Y) → is-orthogonal f g → is-orthogonal j g
+
+ is-anodyne-map : UUω
+ is-anodyne-map = {l5 l6 : Level} → is-anodyne-map-Level l5 l6
+```
+
+## Properties
+
+### Anodyne maps are closed under homotopies
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
+ (f : A → B) {j i : C → D}
+ where
+
+ is-anodyne-map-htpy : j ~ i → is-anodyne-map f j → is-anodyne-map f i
+ is-anodyne-map-htpy K J g H = is-orthogonal-htpy-left j g K (J g H)
+```
+
+### Anodyne maps are closed under equivalences of maps
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {C' : UU l5} {D' : UU l6}
+ (f : A → B) {j : C → D} {j' : C' → D'}
+ where
+
+ is-anodyne-map-equiv-arrow :
+ equiv-arrow j j' → is-anodyne-map f j → is-anodyne-map f j'
+ is-anodyne-map-equiv-arrow α J g H =
+ is-orthogonal-left-equiv-arrow α g (J g H)
+```
+
+### Anodyne maps are closed under retracts of maps
+
+> This remains to be formalized.
+
+### Anodyne maps compose
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {E : UU l5}
+ (f : A → B) (j : C → D) (i : D → E)
+ where
+
+ is-anodyne-map-comp :
+ is-anodyne-map f j → is-anodyne-map f i → is-anodyne-map f (i ∘ j)
+ is-anodyne-map-comp J I g H = is-orthogonal-left-comp j i g (J g H) (I g H)
+```
+
+### Cancellation property for anodyne maps
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {E : UU l5}
+ (f : A → B) (j : C → D) (i : D → E)
+ where
+
+ is-anodyne-map-left-factor :
+ is-anodyne-map f j → is-anodyne-map f (i ∘ j) → is-anodyne-map f i
+ is-anodyne-map-left-factor J IJ g H =
+ is-orthogonal-left-left-factor j i g (J g H) (IJ g H)
+```
+
+### Anodyne maps are closed under dependent sums
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 : Level}
+ {A : UU l1} {B : UU l2} {I : UU l3} {C : I → UU l4} {D : I → UU l5}
+ (f : A → B) (j : (i : I) → C i → D i)
+ where
+
+ is-anodyne-map-tot :
+ ((i : I) → is-anodyne-map f (j i)) → is-anodyne-map f (tot j)
+ is-anodyne-map-tot J g H = is-orthogonal-left-tot j g (λ i → J i g H)
+```
+
+### Anodyne maps are closed under products
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {E : UU l5} {F : UU l6}
+ (f : A → B) (j : C → D) (i : E → F)
+ where
+
+ is-anodyne-map-map-product :
+ is-anodyne-map f j → is-anodyne-map f i → is-anodyne-map f (map-product j i)
+ is-anodyne-map-map-product J I g H =
+ is-orthogonal-left-product j i g (J g H) (I g H)
+```
+
+### Anodyne maps are closed under coproducts
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {E : UU l5} {F : UU l6}
+ (f : A → B) (j : C → D) (i : E → F)
+ where
+
+ is-anodyne-map-map-coproduct :
+ is-anodyne-map f j →
+ is-anodyne-map f i →
+ is-anodyne-map f (map-coproduct j i)
+ is-anodyne-map-map-coproduct J I g H =
+ is-orthogonal-left-coproduct j i g (J g H) (I g H)
+```
+
+### Anodyne maps are closed under cobase change
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {E : UU l5} {F : UU l6}
+ (f : A → B) (j : C → D) (i : E → F)
+ where
+
+ is-anodyne-map-cobase-change :
+ cocartesian-hom-arrow j i → is-anodyne-map f j → is-anodyne-map f i
+ is-anodyne-map-cobase-change α J g H =
+ is-orthogonal-left-cobase-change j i g α (J g H)
+```
+
+### Anodyne maps are closed under pushout-products
+
+> This remains to be formalized.
diff --git a/src/orthogonal-factorization-systems/maps-local-at-maps.lagda.md b/src/orthogonal-factorization-systems/maps-local-at-maps.lagda.md
index ac69503101..921e0c45d7 100644
--- a/src/orthogonal-factorization-systems/maps-local-at-maps.lagda.md
+++ b/src/orthogonal-factorization-systems/maps-local-at-maps.lagda.md
@@ -147,6 +147,19 @@ module _
( G (map-codomain-inclusion-retract-map g' g R d))
```
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {E : UU l5} {F : UU l6}
+ {f : A → B} {g : C → D} {f' : E → F}
+ where
+
+ is-local-retract-map' :
+ is-local-map f g → f' retract-of-map f → is-local-map f' g
+ is-local-retract-map' F R d =
+ is-local-retract-map-is-local f' f R (fiber g d) (F d)
+```
+
## See also
- [Localizations with respect to maps](orthogonal-factorization-systems.localizations-at-maps.md)
diff --git a/src/orthogonal-factorization-systems/orthogonal-maps.lagda.md b/src/orthogonal-factorization-systems/orthogonal-maps.lagda.md
index a5b845c065..beee150e80 100644
--- a/src/orthogonal-factorization-systems/orthogonal-maps.lagda.md
+++ b/src/orthogonal-factorization-systems/orthogonal-maps.lagda.md
@@ -29,6 +29,7 @@ open import foundation.functoriality-coproduct-types
open import foundation.functoriality-dependent-pair-types
open import foundation.functoriality-fibers-of-maps
open import foundation.homotopies
+open import foundation.identity-types
open import foundation.morphisms-arrows
open import foundation.postcomposition-functions
open import foundation.postcomposition-pullbacks
@@ -37,6 +38,7 @@ open import foundation.precomposition-functions
open import foundation.products-pullbacks
open import foundation.propositions
open import foundation.pullbacks
+open import foundation.type-arithmetic-cartesian-product-types
open import foundation.type-arithmetic-dependent-function-types
open import foundation.type-theoretic-principle-of-choice
open import foundation.unit-type
@@ -51,6 +53,10 @@ open import foundation.whiskering-homotopies-composition
open import orthogonal-factorization-systems.lifting-structures-on-squares
open import orthogonal-factorization-systems.pullback-hom
open import orthogonal-factorization-systems.types-local-at-maps
+
+open import synthetic-homotopy-theory.cocartesian-morphisms-arrows
+open import synthetic-homotopy-theory.pullback-property-pushouts
+open import synthetic-homotopy-theory.pushouts
```
@@ -426,19 +432,40 @@ module _
( ( commutative-htpy-postcomp-htpy-precomp F G) ∙h
( inv-htpy-right-unit-htpy)))
- is-orthogonal-pullback-condition-htpy-left :
- {f' : A → B} → f ~ f' →
- is-orthogonal-pullback-condition f g →
- is-orthogonal-pullback-condition f' g
- is-orthogonal-pullback-condition-htpy-left F =
- is-orthogonal-pullback-condition-htpy F refl-htpy
-
- is-orthogonal-pullback-condition-htpy-right :
- {g' : X → Y} → g ~ g' →
- is-orthogonal-pullback-condition f g →
- is-orthogonal-pullback-condition f g'
- is-orthogonal-pullback-condition-htpy-right =
- is-orthogonal-pullback-condition-htpy refl-htpy
+ abstract
+ is-orthogonal-pullback-condition-htpy-left :
+ {f' : A → B} → f ~ f' →
+ is-orthogonal-pullback-condition f g →
+ is-orthogonal-pullback-condition f' g
+ is-orthogonal-pullback-condition-htpy-left F =
+ is-orthogonal-pullback-condition-htpy F refl-htpy
+
+ abstract
+ is-orthogonal-pullback-condition-htpy-right :
+ {g' : X → Y} → g ~ g' →
+ is-orthogonal-pullback-condition f g →
+ is-orthogonal-pullback-condition f g'
+ is-orthogonal-pullback-condition-htpy-right =
+ is-orthogonal-pullback-condition-htpy refl-htpy
+
+ abstract
+ is-orthogonal-htpy :
+ {f' : A → B} {g' : X → Y} → f ~ f' → g ~ g' →
+ is-orthogonal f g → is-orthogonal f' g'
+ is-orthogonal-htpy {f'} {g'} F G H =
+ is-orthogonal-is-orthogonal-pullback-condition f' g'
+ ( is-orthogonal-pullback-condition-htpy F G
+ ( is-orthogonal-pullback-condition-is-orthogonal f g H))
+
+ abstract
+ is-orthogonal-htpy-left :
+ {f' : A → B} → f ~ f' → is-orthogonal f g → is-orthogonal f' g
+ is-orthogonal-htpy-left F = is-orthogonal-htpy F refl-htpy
+
+ abstract
+ is-orthogonal-htpy-right :
+ {g' : X → Y} → g ~ g' → is-orthogonal f g → is-orthogonal f g'
+ is-orthogonal-htpy-right = is-orthogonal-htpy refl-htpy
```
### Equivalences are orthogonal to every map
@@ -698,6 +725,70 @@ module _
( is-orthogonal-pullback-condition-is-orthogonal (h ∘ f) g HF))
```
+### Orthogonality is preserved by equivalences of maps
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {A' : UU l3} {B' : UU l4} {X : UU l5} {Y : UU l6}
+ {f : A → B} {f' : A' → B'}
+ where
+
+ abstract
+ is-orthogonal-left-equiv-arrow :
+ equiv-arrow f f' → (g : X → Y) → is-orthogonal f g → is-orthogonal f' g
+ is-orthogonal-left-equiv-arrow α g F =
+ is-orthogonal-htpy-left
+ ( map-codomain-equiv-arrow f f' α ∘
+ f ∘
+ map-inv-domain-equiv-arrow f f' α)
+ ( g)
+ ( ( coh-equiv-arrow f f' α ·r map-inv-domain-equiv-arrow f f' α) ∙h
+ ( f' ·l is-section-map-inv-equiv (equiv-domain-equiv-arrow f f' α)))
+ ( is-orthogonal-left-comp
+ ( f ∘ map-inv-domain-equiv-arrow f f' α)
+ ( map-codomain-equiv-arrow f f' α)
+ ( g)
+ ( is-orthogonal-left-comp
+ ( map-inv-domain-equiv-arrow f f' α)
+ ( f)
+ ( g)
+ ( is-orthogonal-equiv-left (equiv-domain-inv-equiv-arrow f f' α) g)
+ ( F))
+ ( is-orthogonal-equiv-left (equiv-codomain-equiv-arrow f f' α) g))
+
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} {X' : UU l5} {Y' : UU l6}
+ (f : A → B) {g : X → Y} {g' : X' → Y'}
+ where
+
+ abstract
+ is-orthogonal-right-equiv-arrow :
+ equiv-arrow g g' → is-orthogonal f g → is-orthogonal f g'
+ is-orthogonal-right-equiv-arrow α G =
+ is-orthogonal-htpy-right
+ ( f)
+ ( map-codomain-equiv-arrow g g' α ∘
+ g ∘
+ map-inv-domain-equiv-arrow g g' α)
+ ( ( coh-equiv-arrow g g' α ·r map-inv-domain-equiv-arrow g g' α) ∙h
+ ( g' ·l is-section-map-inv-equiv (equiv-domain-equiv-arrow g g' α)))
+ ( is-orthogonal-right-comp
+ ( f)
+ ( g ∘ map-inv-domain-equiv-arrow g g' α)
+ ( map-codomain-equiv-arrow g g' α)
+ ( is-orthogonal-equiv-right f (equiv-codomain-equiv-arrow g g' α))
+ ( is-orthogonal-right-comp
+ ( f)
+ ( map-inv-domain-equiv-arrow g g' α)
+ ( g)
+ ( G)
+ ( is-orthogonal-equiv-right
+ ( f)
+ ( equiv-domain-inv-equiv-arrow g g' α))))
+```
+
### Right orthogonality is preserved by dependent products
If `f ⊥ gᵢ`, for each `i : I`, then `f ⊥ (map-Π g)`.
@@ -912,10 +1003,10 @@ module _
(f : (i : I) → A i → B i) (g : X → Y)
where
- is-orthogonal-pullback-condition-left-Σ :
+ is-orthogonal-pullback-condition-left-tot :
((i : I) → is-orthogonal-pullback-condition (f i) g) →
is-orthogonal-pullback-condition (tot f) g
- is-orthogonal-pullback-condition-left-Σ F =
+ is-orthogonal-pullback-condition-left-tot F =
is-pullback-top-is-pullback-bottom-cube-is-equiv
( map-Π (λ i → postcomp (B i) g))
( map-Π (λ i → precomp (f i) X))
@@ -951,14 +1042,56 @@ module _
( λ i → cone-pullback-hom (f i) g)
( F))
- is-orthogonal-left-Σ :
+ is-orthogonal-left-tot :
((i : I) → is-orthogonal (f i) g) → is-orthogonal (tot f) g
- is-orthogonal-left-Σ F =
+ is-orthogonal-left-tot F =
is-orthogonal-is-orthogonal-pullback-condition (tot f) g
- ( is-orthogonal-pullback-condition-left-Σ
+ ( is-orthogonal-pullback-condition-left-tot
( λ i → is-orthogonal-pullback-condition-is-orthogonal (f i) g (F i)))
```
+### Left orthogonality is preserved by products
+
+If `f ⊥ g` and `f' ⊥ g`, then `(f × f') ⊥ g`.
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
+ (f : A → B) (g : X → Y)
+ where
+
+ is-orthogonal-left-map-right-product :
+ {l5 : Level} (C : UU l5) →
+ is-orthogonal f g → is-orthogonal (map-product (id' C) f) g
+ is-orthogonal-left-map-right-product C F =
+ is-orthogonal-left-tot (λ _ → f) g (λ _ → F)
+
+ is-orthogonal-left-map-left-product :
+ {l5 : Level} (C : UU l5) →
+ is-orthogonal f g → is-orthogonal (map-product f (id' C)) g
+ is-orthogonal-left-map-left-product C F =
+ is-orthogonal-left-equiv-arrow
+ ( commutative-product , commutative-product , refl-htpy)
+ ( g)
+ ( is-orthogonal-left-map-right-product C F)
+
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {A' : UU l3} {B' : UU l4} {X : UU l5} {Y : UU l6}
+ (f : A → B) (f' : A' → B') (g : X → Y)
+ where
+
+ is-orthogonal-left-product :
+ is-orthogonal f g → is-orthogonal f' g → is-orthogonal (map-product f f') g
+ is-orthogonal-left-product F F' =
+ is-orthogonal-left-comp
+ ( map-product f id)
+ ( map-product id f')
+ ( g)
+ ( is-orthogonal-left-map-left-product f g A' F)
+ ( is-orthogonal-left-map-right-product f' g B F')
+```
+
### Left orthogonality is preserved by coproducts
If `f ⊥ g` and `f' ⊥ g`, then `(f + f') ⊥ g`.
@@ -966,7 +1099,7 @@ If `f ⊥ g` and `f' ⊥ g`, then `(f + f') ⊥ g`.
**Proof:** We need to show that the square
```text
- - ∘ (f + f')
+ - ∘ (f + f')
((B + B') → X) ---------------> ((A + A') → X)
| |
| |
@@ -1114,6 +1247,94 @@ module _
( is-orthogonal-pullback-condition-is-orthogonal f g G))
```
+### Left orthogonality is preserved under cobase change
+
+Given a pushout square
+
+```text
+ A ------> A'
+ | |
+ f'| | f'
+ ∨ ⌜ ∨
+ B ------> B',
+```
+
+if `f ⊥ g`, then `f' ⊥ g`.
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} {A' : UU l5} {B' : UU l6}
+ (f : A → B) (f' : A' → B') (g : X → Y) (α : cocartesian-hom-arrow f f')
+ where
+
+ abstract
+ is-orthogonal-pullback-condition-left-cobase-change :
+ is-orthogonal-pullback-condition f g →
+ is-orthogonal-pullback-condition f' g
+ is-orthogonal-pullback-condition-left-cobase-change F =
+ is-pullback-swap-cone
+ ( postcomp A' g)
+ ( precomp f' Y)
+ ( precomp f' X , postcomp B' g , refl-htpy)
+ ( is-pullback-back-left-is-pullback-back-right-cube
+ ( refl-htpy)
+ ( refl-htpy)
+ ( inv-htpy (htpy-precomp (coh-cocartesian-hom-arrow f f' α) X))
+ ( inv-htpy (htpy-precomp (coh-cocartesian-hom-arrow f f' α) Y))
+ ( refl-htpy)
+ ( refl-htpy)
+ ( right-unit-htpy ∙h
+ ( inv ·l
+ commutative-postcomp-htpy-precomp g
+ ( coh-cocartesian-hom-arrow f f' α)) ∙h
+ ( inv-htpy
+ ( left-whisker-inv-htpy
+ ( postcomp A g)
+ ( htpy-precomp (coh-cocartesian-hom-arrow f f' α) X))) ∙h
+ ( inv-htpy-right-unit-htpy))
+ ( is-pullback-swap-cone
+ ( precomp f Y)
+ ( precomp (map-domain-cocartesian-hom-arrow f f' α) Y)
+ ( cone-hom-arrow
+ ( precomp (map-codomain-cocartesian-hom-arrow f f' α) Y)
+ ( precomp (map-domain-cocartesian-hom-arrow f f' α) Y)
+ ( transpose-precomp-hom-arrow f f'
+ ( hom-arrow-cocartesian-hom-arrow f f' α)
+ ( Y)))
+ ( pullback-property-pushout-is-pushout
+ ( f)
+ ( map-domain-cocartesian-hom-arrow f f' α)
+ ( cocone-cocartesian-hom-arrow f f' α)
+ ( is-cocartesian-cocartesian-hom-arrow f f' α)
+ ( Y)))
+ ( is-pullback-swap-cone
+ ( precomp f Y)
+ ( postcomp A g)
+ ( cone-pullback-hom f g)
+ ( F))
+ ( is-pullback-swap-cone
+ ( precomp f X)
+ ( precomp (map-domain-cocartesian-hom-arrow f f' α) X)
+ ( cone-hom-arrow
+ ( precomp (map-codomain-cocartesian-hom-arrow f f' α) X)
+ ( precomp (map-domain-cocartesian-hom-arrow f f' α) X)
+ ( transpose-precomp-hom-arrow f f'
+ ( hom-arrow-cocartesian-hom-arrow f f' α)
+ ( X)))
+ ( pullback-property-pushout-is-pushout f
+ ( map-domain-cocartesian-hom-arrow f f' α)
+ ( cocone-cocartesian-hom-arrow f f' α)
+ ( is-cocartesian-cocartesian-hom-arrow f f' α) X)))
+
+ is-orthogonal-left-cobase-change :
+ is-orthogonal f g → is-orthogonal f' g
+ is-orthogonal-left-cobase-change F =
+ is-orthogonal-is-orthogonal-pullback-condition f' g
+ ( is-orthogonal-pullback-condition-left-cobase-change
+ ( is-orthogonal-pullback-condition-is-orthogonal f g F))
+```
+
### A type is `f`-local if and only if its terminal map is `f`-orthogonal
**Proof (forward direction):** If the terminal map is right orthogonal to `f`,
diff --git a/src/orthogonal-factorization-systems/weakly-anodyne-maps.lagda.md b/src/orthogonal-factorization-systems/weakly-anodyne-maps.lagda.md
new file mode 100644
index 0000000000..a2a1cdbe49
--- /dev/null
+++ b/src/orthogonal-factorization-systems/weakly-anodyne-maps.lagda.md
@@ -0,0 +1,90 @@
+# Weakly anodyne maps
+
+```agda
+module orthogonal-factorization-systems.weakly-anodyne-maps where
+```
+
+Imports
+
+```agda
+open import foundation.equivalences-arrows
+open import foundation.fibers-of-maps
+open import foundation.function-types
+open import foundation.functoriality-cartesian-product-types
+open import foundation.functoriality-coproduct-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.homotopies
+open import foundation.retracts-of-maps
+open import foundation.unit-type
+open import foundation.universe-levels
+
+open import orthogonal-factorization-systems.anodyne-maps
+open import orthogonal-factorization-systems.maps-local-at-maps
+open import orthogonal-factorization-systems.orthogonal-maps
+open import orthogonal-factorization-systems.types-local-at-maps
+
+open import synthetic-homotopy-theory.cocartesian-morphisms-arrows
+```
+
+
+
+## Idea
+
+A map $j : C → D$ is said to be
+{{#concept "weakly anodyne" Disambiguation="map of types" Agda=is-weakly-anodyne-map}}
+with respect to a map $f : A → B$, or **weakly $f$-anodyne**, if every map that
+is local at $f$ is also local at $j$.
+
+## Definitions
+
+### The predicate of being weakly anodyne with respect to a map
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
+ (f : A → B) (j : C → D)
+ where
+
+ is-weakly-anodyne-map-Level :
+ (l5 l6 : Level) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4 ⊔ lsuc l5 ⊔ lsuc l6)
+ is-weakly-anodyne-map-Level l5 l6 =
+ {X : UU l5} {Y : UU l6} (g : X → Y) → is-local-map f g → is-local-map j g
+
+ is-weakly-anodyne-map : UUω
+ is-weakly-anodyne-map = {l5 l6 : Level} → is-weakly-anodyne-map-Level l5 l6
+```
+
+## Properties
+
+### Anodyne maps are weakly anodyne
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4}
+ (f : A → B) {j : C → D}
+ where
+
+ is-weakly-anodyne-map-is-anodyne-map :
+ is-anodyne-map f j → is-weakly-anodyne-map f j
+ is-weakly-anodyne-map-is-anodyne-map J g G x =
+ is-local-is-orthogonal-terminal-map j
+ ( J ( terminal-map (fiber g x))
+ ( is-orthogonal-terminal-map-is-local f (G x)))
+```
+
+### Weakly anodyne maps are closed under retracts of maps
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ {A : UU l1} {B : UU l2} {C : UU l3} {D : UU l4} {C' : UU l5} {D' : UU l6}
+ (f : A → B) {j : C → D} {j' : C' → D'}
+ where
+
+ is-weakly-anodyne-map-retract-map :
+ retract-map j j' → is-weakly-anodyne-map f j → is-weakly-anodyne-map f j'
+ is-weakly-anodyne-map-retract-map α J g G x =
+ is-local-retract-map-is-local j' j α (fiber g x) (J g G x)
+```
diff --git a/src/synthetic-homotopy-theory/cocartesian-morphisms-arrows.lagda.md b/src/synthetic-homotopy-theory/cocartesian-morphisms-arrows.lagda.md
index 9e34713e9c..634145c719 100644
--- a/src/synthetic-homotopy-theory/cocartesian-morphisms-arrows.lagda.md
+++ b/src/synthetic-homotopy-theory/cocartesian-morphisms-arrows.lagda.md
@@ -7,13 +7,17 @@ module synthetic-homotopy-theory.cocartesian-morphisms-arrows where
Imports
```agda
+open import foundation.cartesian-morphisms-arrows
open import foundation.commuting-squares-of-maps
open import foundation.dependent-pair-types
open import foundation.morphisms-arrows
+open import foundation.precomposition-functions
open import foundation.propositions
+open import foundation.pullbacks
open import foundation.universe-levels
open import synthetic-homotopy-theory.cocones-under-spans
+open import synthetic-homotopy-theory.pullback-property-pushouts
open import synthetic-homotopy-theory.pushouts
open import synthetic-homotopy-theory.universal-property-pushouts
```
@@ -121,6 +125,47 @@ module _
( is-cocartesian-cocartesian-hom-arrow)
```
+### The cartesian morphism on precomposition maps
+
+```agda
+module _
+ {l1 l2 l3 l4 l : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4}
+ (f : A → B) (g : X → Y) (α : cocartesian-hom-arrow f g) (S : UU l)
+ where
+
+ precomp-cocartesian-hom-arrow : hom-arrow (precomp g S) (precomp f S)
+ precomp-cocartesian-hom-arrow =
+ precomp-hom-arrow f g (hom-arrow-cocartesian-hom-arrow f g α) S
+
+ abstract
+ is-cartesian-precomp-cocartesian-hom-arrow :
+ is-cartesian-hom-arrow
+ ( precomp g S)
+ ( precomp f S)
+ ( precomp-cocartesian-hom-arrow)
+ is-cartesian-precomp-cocartesian-hom-arrow =
+ is-pullback-swap-cone
+ ( precomp f S)
+ ( precomp (map-domain-cocartesian-hom-arrow f g α) S)
+ ( cone-hom-arrow
+ ( precomp (map-codomain-cocartesian-hom-arrow f g α) S)
+ ( precomp (map-domain-cocartesian-hom-arrow f g α) S)
+ ( transpose-precomp-hom-arrow f g
+ ( hom-arrow-cocartesian-hom-arrow f g α)
+ ( S)))
+ ( pullback-property-pushout-is-pushout
+ ( f)
+ ( map-domain-cocartesian-hom-arrow f g α)
+ ( cocone-cocartesian-hom-arrow f g α)
+ ( is-cocartesian-cocartesian-hom-arrow f g α) S)
+
+ precomp-cartesian-hom-arrow-cocartesian-hom-arrow :
+ cartesian-hom-arrow (precomp g S) (precomp f S)
+ precomp-cartesian-hom-arrow-cocartesian-hom-arrow =
+ ( precomp-cocartesian-hom-arrow ,
+ is-cartesian-precomp-cocartesian-hom-arrow)
+```
+
## See also
- [Cartesian morphisms of arrows](foundation.cartesian-morphisms-arrows.md) for
diff --git a/src/synthetic-homotopy-theory/pushouts.lagda.md b/src/synthetic-homotopy-theory/pushouts.lagda.md
index 8c280f7233..5242c08e65 100644
--- a/src/synthetic-homotopy-theory/pushouts.lagda.md
+++ b/src/synthetic-homotopy-theory/pushouts.lagda.md
@@ -33,6 +33,7 @@ open import synthetic-homotopy-theory.dependent-cocones-under-spans
open import synthetic-homotopy-theory.dependent-universal-property-pushouts
open import synthetic-homotopy-theory.flattening-lemma-pushouts
open import synthetic-homotopy-theory.induction-principle-pushouts
+open import synthetic-homotopy-theory.pullback-property-pushouts
open import synthetic-homotopy-theory.universal-property-pushouts
```
@@ -459,6 +460,29 @@ module _
( up-pushout f g)
```
+### Pushout cocones satisfy the pullback property of the pushout
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3}
+ (f : S → A) (g : S → B) {X : UU l4} (c : cocone f g X)
+ where
+
+ abstract
+ pullback-property-pushout-is-pushout :
+ is-pushout f g c → pullback-property-pushout f g c
+ pullback-property-pushout-is-pushout po =
+ pullback-property-pushout-universal-property-pushout f g c
+ ( universal-property-pushout-is-pushout f g c po)
+
+ abstract
+ is-pushout-pullback-property-pushout :
+ pullback-property-pushout f g c → is-pushout f g c
+ is-pushout-pullback-property-pushout pb =
+ is-pushout-universal-property-pushout f g c
+ ( universal-property-pushout-pullback-property-pushout f g c pb)
+```
+
### Fibers of the cogap map
We characterize the [fibers](foundation-core.fibers-of-maps.md) of the cogap map