\import Algebra.Monoid
\import Algebra.Monoid.Sub
\import Algebra.Semiring
\import Paths.Meta
\class SubSemiring \extends SubAddMonoid, SubMonoid {
\override S : Semiring
\func struct : Semiring \cowith
| AbMonoid => SubAddMonoid.abStruct \this
| Monoid => SubMonoid.struct
| ldistr => ext ldistr
| rdistr => ext rdistr
| zro_*-left => ext zro_*-left
| zro_*-right => ext zro_*-right
} \where {
\func cStruct {R : CSemiring} (S : SubSemiring R) : CSemiring \cowith
| Semiring => S.struct
| *-comm => ext *-comm
\func max {A : Semiring} : SubSemiring \cowith
| SubAddMonoid => SubAddMonoid.max {A}
| SubMonoid => SubMonoid.max
}