Skip to content

Instantly share code, notes, and snippets.

@gallais
Last active September 15, 2018 11:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gallais/69057843194fe8a2bd279db9c04bdc11 to your computer and use it in GitHub Desktop.
Save gallais/69057843194fe8a2bd279db9c04bdc11 to your computer and use it in GitHub Desktop.
lists of size at least n
open import Data.Nat
module atleastn (n : ℕ) {a} (A : Set a) where
open import Data.List using (List; length)
open import Data.Vec
record SizedList : Set a where
field list : List A
size : length list ≥ n
data Vec' : ℕ → Set a where
mkVec′ : ∀ {m} → Vec A (m + n) → Vec' (m + n)
data WideVec : ∀ k → Vec A k → Set a where
mkWideVec : ∀ {m} (xs : Vec A m) (ys : Vec A n) → WideVec (m + n) (xs ++ ys)
data InlinedWideVec : ℕ → Set a where
rest : Vec A n → InlinedWideVec n
_∷_ : ∀ {k} → A → InlinedWideVec k → InlinedWideVec (suc k)
open import Relation.Nullary.Decidable
record AtLeastN (m : ℕ) : Set a where
field vec : Vec A m
prf : m ≥ n
mkAtLeastN : ∀ {m} {p : True (n ≤? m)} → Vec A m → AtLeastN m
mkAtLeastN {m} {p} xs = record { vec = xs ; prf = toWitness p }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment