Logic programming Software and programming theory mathematics