{-# OPTIONS --cubical --safe #-} module DepthComonads.Dec where open import DepthComonads.Level open import DepthComonads.Bool open import DepthComonads.Empty open import DepthComonads.Stable Reflects : Type a → Bool → Type a Reflects A true = A Reflects A false = ¬ A record Dec {a} (A : Type a) : Type a where constructor _because_ field does : Bool why : Reflects A does open Dec public pattern yes p = true because p pattern no ¬p = false because ¬p map-reflects : (A → B) → (¬ A → ¬ B) → ∀ {d} → Reflects A d → Reflects B d map-reflects {A = A} {B = B} to fro {d = d} = bool {P = λ d → Reflects A d → Reflects B d} fro to d map-dec : (A → B) → (¬ A → ¬ B) → Dec A → Dec B map-dec to fro dec .does = dec .does map-dec to fro dec .why = map-reflects to fro (dec .why) T? : (b : Bool) → Dec (T b) T? b .does = b T? false .why () T? true .why = _ Dec→Stable : Dec A → Stable A Dec→Stable (no ¬x) ¬¬x = ⊥-elim (¬¬x ¬x) Dec→Stable (yes x) ¬¬x = x