A chain is simply a sequence of blocks.
Chain = List Block
The genesis block is just the start of any chain, so it’s simpler to consider any empty chain to consist of just the genesis block.
genesisChain = Chain ∋ [] instance HasEpoch-Chain = HasEpoch Chain ∋ λ where ._∙epoch → λ where [] → 0 (b ∷ _) → b .epoch
Not all chains are valid though: each subsequent block must reference the latest block by hash and cannot decrease the epoch number.
record _-connects-to-_ (b : Block) (ch : Chain) : Type where
  constructor connects∶
  field hashesMatch   : b .parentHash ≡ ch ♯
        epochAdvances : b .epoch > ch ∙epoch
data ValidChain : Chain → Type where
  [] :
      ───────────────────────
      ValidChain genesisChain
  _∷_⊣_ :
    ∀ b →
    ∙ ValidChain ch
    ∙ b -connects-to- ch
      ────────────────────
      ValidChain (b ∷ ch)