use CommutativeSemiring module
use SemiringSolver