Rewriting Logic and Its Applications