Source code on Github
{-# OPTIONS --safe #-}
module Prelude.Validity where

open import Prelude.Init; open SetAsType
open import Prelude.Decidable

-- record DecValidable (A : Type ℓ) ⦃ _ : Validable A ⦄ : Type (lsuc ℓ) where
--   field Valid? : Decidable¹ Valid
-- open DecValidable ⦃...⦄ public

record Validable (A : Type ℓ) : Type (ℓ ⊔ₗ lsuc ℓ′) where
  field Valid : Pred A ℓ′

  Valid? : ⦃ Valid ⁇¹ ⦄ → Decidable¹ Valid
  Valid? _ = dec

open Validable ⦃...⦄ public

-- record DecValidable (A : Type ℓ) : Type (lsuc ℓ) where
--   field
--     overlap ⦃ super ⦄ : Validable A
--     Valid? : Decidable¹ Valid
-- open DecValidable ⦃...⦄ public

-- instance
--   DecValidable→Dec : ∀ {A : Type ℓ} ⦃ _ : DecValidable A ⦄ → {x : A} → (Valid x) ⁇
--   DecValidable→Dec .dec = Valid? _

𝕍 : (A : Type ℓ) → ⦃ Validable {ℓ′ = ℓ′} A ⦄ → Type _
𝕍 A = ∃ λ (a : A) → Valid a