data RTList : Rel a -> Rel adata SnocRTList : Rel a -> Rel aLin : 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 zreflexive : (===) ~> RTList r(++) : RTList r x y -> RTList r y z -> RTList r x zconcat : RTList (RTList r) ~> RTList rgmap : (f : (a -> b)) -> p ~> (q `on` f) -> RTList p ~> (RTList q `on` f)map : p ~> q -> RTList p ~> RTList qreverseAcc : r ~> flip s -> flip (RTList s) x y -> RTList r y z -> flip (RTList s) x zreverse : r ~> flip s -> RTList r ~> flip (RTList s)deloop : (Ord a, DecEq a) => RTList r ~> RTList rDeloop 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