27 lines
755 B
Idris
27 lines
755 B
Idris
|
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
|