module Quox.Thin.Cover import public Quox.Thin.Base import public Quox.Thin.List %default total ||| an OPE list is a cover if at least one of the OPEs has `Keep` as the head, ||| and the tails are also a cover ||| ||| in @egtbs it is a binary relation which is fine for ×ᵣ but i don't want to ||| write my AST in universe-of-syntaxes style. sorry public export data Cover : OPEList n -> Type ||| the "`Keep` in the head" condition of a cover public export data Cover1 : OPEList n -> Type data Cover where Nil : Cover opes {n = 0} (::) : Cover1 opes -> All2 IsTail opes tails => Cover tails -> Cover opes %name Cover cov data Cover1 where Here : Cover1 (Keep ope eq :: opes) There : Cover1 opes -> Cover1 (ope :: opes) %name Cover1 cov1 %builtin Natural Cover1