interface LMonoid : Type -> TypeThis interface is a witness that for a
type `a` the axioms of a monoid hold: `(<+>)` is associative
with `neutral` being the neutral element.
0 appendAssociative : x <+> (y <+> z) = (x <+> y) <+> z0 appendLeftNeutral : neutral <+> x = x0 appendRightNeutral : x <+> neutral = x0 appendAssociative : {auto __con : LMonoid a} -> x <+> (y <+> z) = (x <+> y) <+> z0 appendLeftNeutral : {auto __con : LMonoid a} -> neutral <+> x = x0 appendRightNeutral : {auto __con : LMonoid a} -> x <+> neutral = xinterface CommutativeMonoid : Type -> TypeThis interface is a witness that for a
type `a` the axioms of a commutative monoid hold:
`(<+>)` is commutative.
0 appendCommutative : x <+> y = y <+> x0 appendCommutative : {auto __con : CommutativeMonoid a} -> x <+> y = y <+> x