The maximum of truncation levels
Content created by Fredrik Bakke.
Created on 2025-08-30.
Last modified on 2025-08-30.
module foundation.maximum-truncation-levels where
Imports
open import foundation.action-on-identifications-functions open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.identity-types open import foundation.inequality-truncation-levels open import foundation.unit-type open import foundation.universe-levels open import foundation-core.function-types open import foundation-core.truncated-types open import foundation-core.truncation-levels open import order-theory.least-upper-bounds-posets
Idea
Given two truncation levels and , the maximum¶ of and is the largest of the two.
Definitions
The maximum of two truncation levels
max-𝕋 : 𝕋 → 𝕋 → 𝕋 max-𝕋 neg-two-𝕋 r = r max-𝕋 (succ-𝕋 k) neg-two-𝕋 = succ-𝕋 k max-𝕋 (succ-𝕋 k) (succ-𝕋 r) = succ-𝕋 (max-𝕋 k r) infixl 35 _⊔𝕋_ _⊔𝕋_ : 𝕋 → 𝕋 → 𝕋 _⊔𝕋_ = max-𝕋 max-𝕋' : 𝕋 → 𝕋 → 𝕋 max-𝕋' k r = max-𝕋 r k
Properties
The unit laws for the maximum operation
left-unit-law-𝕋 : {k : 𝕋} → neg-two-𝕋 ⊔𝕋 k = k left-unit-law-𝕋 = refl right-unit-law-𝕋 : {k : 𝕋} → k ⊔𝕋 neg-two-𝕋 = k right-unit-law-𝕋 {neg-two-𝕋} = refl right-unit-law-𝕋 {succ-𝕋 k} = refl inv-right-unit-law-𝕋 : {k : 𝕋} → k = k ⊔𝕋 neg-two-𝕋 inv-right-unit-law-𝕋 {neg-two-𝕋} = refl inv-right-unit-law-𝕋 {succ-𝕋 k} = refl
The maximum is a least upper bound
leq-max-𝕋 : (k m n : 𝕋) → m ≤-𝕋 k → n ≤-𝕋 k → m ⊔𝕋 n ≤-𝕋 k leq-max-𝕋 neg-two-𝕋 neg-two-𝕋 neg-two-𝕋 H K = star leq-max-𝕋 (succ-𝕋 k) neg-two-𝕋 neg-two-𝕋 H K = star leq-max-𝕋 (succ-𝕋 k) neg-two-𝕋 (succ-𝕋 n) H K = K leq-max-𝕋 (succ-𝕋 k) (succ-𝕋 m) neg-two-𝕋 H K = H leq-max-𝕋 (succ-𝕋 k) (succ-𝕋 m) (succ-𝕋 n) H K = leq-max-𝕋 k m n H K leq-left-leq-max-𝕋 : (k m n : 𝕋) → m ⊔𝕋 n ≤-𝕋 k → m ≤-𝕋 k leq-left-leq-max-𝕋 k neg-two-𝕋 neg-two-𝕋 H = star leq-left-leq-max-𝕋 k neg-two-𝕋 (succ-𝕋 n) H = star leq-left-leq-max-𝕋 k (succ-𝕋 m) neg-two-𝕋 H = H leq-left-leq-max-𝕋 (succ-𝕋 k) (succ-𝕋 m) (succ-𝕋 n) H = leq-left-leq-max-𝕋 k m n H leq-right-leq-max-𝕋 : (k m n : 𝕋) → m ⊔𝕋 n ≤-𝕋 k → n ≤-𝕋 k leq-right-leq-max-𝕋 k neg-two-𝕋 neg-two-𝕋 H = star leq-right-leq-max-𝕋 k neg-two-𝕋 (succ-𝕋 n) H = H leq-right-leq-max-𝕋 k (succ-𝕋 m) neg-two-𝕋 H = star leq-right-leq-max-𝕋 (succ-𝕋 k) (succ-𝕋 m) (succ-𝕋 n) H = leq-right-leq-max-𝕋 k m n H left-leq-max-𝕋 : (m n : 𝕋) → m ≤-𝕋 m ⊔𝕋 n left-leq-max-𝕋 m n = leq-left-leq-max-𝕋 (m ⊔𝕋 n) m n (refl-leq-𝕋 (m ⊔𝕋 n)) right-leq-max-𝕋 : (m n : 𝕋) → n ≤-𝕋 m ⊔𝕋 n right-leq-max-𝕋 m n = leq-right-leq-max-𝕋 (m ⊔𝕋 n) m n (refl-leq-𝕋 (m ⊔𝕋 n)) is-least-upper-bound-max-𝕋 : (m n : 𝕋) → is-least-binary-upper-bound-Poset 𝕋-Poset m n (m ⊔𝕋 n) is-least-upper-bound-max-𝕋 m n = prove-is-least-binary-upper-bound-Poset ( 𝕋-Poset) { m} { n} { m ⊔𝕋 n} ( left-leq-max-𝕋 m n , right-leq-max-𝕋 m n) ( λ x (H , K) → leq-max-𝕋 x m n H K)
The maximum operation is associative
associative-max-𝕋 : (x y z : 𝕋) → (x ⊔𝕋 y) ⊔𝕋 z = x ⊔𝕋 (y ⊔𝕋 z) associative-max-𝕋 neg-two-𝕋 y z = refl associative-max-𝕋 (succ-𝕋 x) neg-two-𝕋 neg-two-𝕋 = refl associative-max-𝕋 (succ-𝕋 x) neg-two-𝕋 (succ-𝕋 z) = refl associative-max-𝕋 (succ-𝕋 x) (succ-𝕋 y) neg-two-𝕋 = refl associative-max-𝕋 (succ-𝕋 x) (succ-𝕋 y) (succ-𝕋 z) = ap succ-𝕋 (associative-max-𝕋 x y z)
The maximum operation is commutative
commutative-max-𝕋 : {k r : 𝕋} → k ⊔𝕋 r = r ⊔𝕋 k commutative-max-𝕋 {neg-two-𝕋} {r} = inv-right-unit-law-𝕋 commutative-max-𝕋 {succ-𝕋 k} {neg-two-𝕋} = refl commutative-max-𝕋 {succ-𝕋 k} {succ-𝕋 r} = ap succ-𝕋 (commutative-max-𝕋 {k} {r})
The maximum operation is idempotent
idempotent-max-𝕋 : (x : 𝕋) → x ⊔𝕋 x = x idempotent-max-𝕋 neg-two-𝕋 = refl idempotent-max-𝕋 (succ-𝕋 x) = ap succ-𝕋 (idempotent-max-𝕋 x)
Successor diagonal laws for the maximum operation
left-successor-diagonal-law-max-𝕋 : (x : 𝕋) → succ-𝕋 x ⊔𝕋 x = succ-𝕋 x left-successor-diagonal-law-max-𝕋 neg-two-𝕋 = refl left-successor-diagonal-law-max-𝕋 (succ-𝕋 x) = ap succ-𝕋 (left-successor-diagonal-law-max-𝕋 x) right-successor-diagonal-law-max-𝕋 : (x : 𝕋) → x ⊔𝕋 succ-𝕋 x = succ-𝕋 x right-successor-diagonal-law-max-𝕋 neg-two-𝕋 = refl right-successor-diagonal-law-max-𝕋 (succ-𝕋 x) = ap succ-𝕋 (right-successor-diagonal-law-max-𝕋 x)
If a type is k
-truncated and then it is k ⊔ r
-truncated for every r
is-trunc-left-max-𝕋 : (k r : 𝕋) → {l : Level} {A : UU l} → is-trunc k A → is-trunc (k ⊔𝕋 r) A is-trunc-left-max-𝕋 k neg-two-𝕋 = is-trunc-eq inv-right-unit-law-𝕋 is-trunc-left-max-𝕋 neg-two-𝕋 (succ-𝕋 r) H = is-trunc-is-contr (succ-𝕋 r) H is-trunc-left-max-𝕋 (succ-𝕋 k) (succ-𝕋 r) H x y = is-trunc-left-max-𝕋 k r (H x y) is-trunc-right-max-𝕋 : (k r : 𝕋) → {l : Level} {A : UU l} → is-trunc k A → is-trunc (r ⊔𝕋 k) A is-trunc-right-max-𝕋 k neg-two-𝕋 = id is-trunc-right-max-𝕋 neg-two-𝕋 (succ-𝕋 r) H = is-trunc-is-contr (succ-𝕋 r) H is-trunc-right-max-𝕋 (succ-𝕋 k) (succ-𝕋 r) H x y = is-trunc-right-max-𝕋 k r (H x y)
Recent changes
- 2025-08-30. Fredrik Bakke. Closure properties of π-finite types (#1311).