module A201605.AltArtemov.Library.O where open import A201605.AltArtemov.Library public data _≥_ : ℕ → ℕ → Set where base : zero ≥ zero weak : ∀ {g g′} → g′ ≥ g → suc g′ ≥ g lift : ∀ {g g′} → g′ ≥ g → suc g′ ≥ suc g ≥id : ∀ {g} → g ≥ g ≥id {zero} = base ≥id {suc g} = lift ≥id ≥to : ∀ {g} → g ≥ zero ≥to {zero} = base ≥to {suc g} = weak ≥to ≥wk : ∀ {g} → suc g ≥ g ≥wk = weak ≥id ≥str : ∀ {g g′} → g′ ≥ suc g → g′ ≥ g ≥str (weak h) = weak (≥str h) ≥str (lift h) = weak h ≥drop : ∀ {g g′} → suc g′ ≥ suc g → g′ ≥ g ≥drop (weak h) = ≥str h ≥drop (lift h) = h _○_ : ∀ {g g′ g″} → g″ ≥ g′ → g′ ≥ g → g″ ≥ g base ○ h = h weak h′ ○ h = weak (h′ ○ h) lift h′ ○ weak h = weak (h′ ○ h) lift h′ ○ lift h = lift (h′ ○ h) h○id : ∀ {g g′} (h : g′ ≥ g) → h ○ ≥id ≡ h h○id base = refl h○id (weak h) = cong weak (h○id h) h○id (lift h) = cong lift (h○id h) id○h : ∀ {g g′} (h : g′ ≥ g) → ≥id ○ h ≡ h id○h base = refl id○h (weak h) = cong weak (id○h h) id○h (lift h) = cong lift (id○h h)