semantic algorithms