Provides is for what the tag name suggests. Obsoletes is just for a smooth transaction because rpm silently deletes the listed packages. Conflicts is to prevent accident installation. But Obsoletes will do what it does in case a package is installed anyway. Does our package management confuse the meaning of those tags?