برنامه‌نویسی منطقی و محدودیت‌ها