data RTList : Rel a -> Rel a
data SnocRTList : Rel a -> Rel a
Lin : SnocRTList r x x
(:<) : SnocRTList r x y -> r y z -> SnocRTList r x z
(<>>) : SnocRTList r x y -> RTList r y z -> RTList r x z
reflexive : (===) ~> RTList r
(++) : RTList r x y -> RTList r y z -> RTList r x z
concat : RTList (RTList r) ~> RTList r
gmap : (f : (a -> b)) -> p ~> (q `on` f) -> RTList p ~> (RTList q `on` f)
map : p ~> q -> RTList p ~> RTList q
reverseAcc : r ~> flip s -> flip (RTList s) x y -> RTList r y z -> flip (RTList s) x z
reverse : r ~> flip s -> RTList r ~> flip (RTList s)
deloop : (Ord a, DecEq a) => RTList r ~> RTList r
Deloop detects whenever a proof forms a loop, and removes it e.g.
x7 <-r- x6 <-r- x5
| ^
r r
v |
x1 -r-> x2 -r-> x3 -r-> x4 -r-> x8
becomes
x1 -r-> x2 -r-> x3 -r-> x4 -r-> x8