جود ثيمز

السبت، 27 يوليو 2013

المنطق الرياضي

لماذا المنطق الرياضي ؟

للمنطق الرياضي أهمية كبيرة جداً في البرمجة بشكل عام فهو يعتبر المحرك الأساسي لجمل التحكم والتكرار التي تمكنك من بناء برامج تتفاعل مع المستخدم وتنفذ أوامر معينة في ظروف يحددها المبرمج كما تمكنك من بناء برامج أكثر ذكاء ومرونة , ولهذا كان لزاماً على المبرمج أن يكون ملماً جيداً بالمنطق الرياضي .
في هذا الدرس سنتناول بعض اساسيات المنطق الرياضي :

انواع الجمل :

الجمل التي نتبادلها يومياً تنقسم إلى نوعين أساسيين :
1- الجمل الانشائية :
وهي التي لا تحمل خبراً معيناً ولاتحتمل الصواب والخطأ , وقد تدل على استفهام مثل : "ما اسمك؟" , أو أمر مثل : "أحضر بعض الماء" , أو نهي مثل : "لا تقطف الأزهار" , أو تعجّب مثل : "ما أجمل السماء!" .
2- الجمل الخبرية : وهي التي تحمل خبراً معيناً للسامع وقد تحتمل الصواب والخطأ , مثل : "عمري عشرون سنة" , "الأرض أكبر من القمر" , ... وغيرها .
ملاحظة : كل جملة خبرية تحتمل الصواب والخطأ تسمى (قضية) أو (قضية منطقية) , والقضايا نوعين :
1- القضية البسيطة : وهي التي تكون على شكل تعبير (Expression) منطقي واحد , مثل : "لغة سي++ طورها بيارن ستروستروب" , وهي تكون إما صائبة True , أو خاطئة False . مثلاً القضية : "رمضان هو الشهر الخامس من الأشهر الهجرية" هي قضية خاطئة False .
2- القضية المركبة : وهي التي تتكون من قضيتين بسيطتين أو أكثر ويربط بينهما برابط منطقي (و 'AND' , أو 'OR' , ...) , مثل : "اسمي خالد و عمري عشرون سنة" , "5 أكبر من 3 أو 6 أصغر من 10" .
نفي القضية : نرمز للنفي بالرمز ( ' ) ويعني "ليس" أو "لا" (بالانجليزية NOT) , فلو رمزنا للقضية "الأرض أكبر من القمر" بالرمز p وهي قضية صائبة True , فسيكون نفيها "الأرض ليست أكبر من القمر" وسنرمز لها بالرمز 'p (ويقرأ not p) وهي قضية خاطئة
False , بشكل آخر :
p = "الأرض أكبر من القمر"   (True) .
p' = "الأرض ليست أكبر من القمر"   (False) .
اذن فكما تلاحظ فإن نفي القضية يقوم بتغيير حالة الصواب الخاصة بها , إما من خاطئة إلى صائبة أو من صائبة إلى خاطئة .

جدول الصواب Truth Table :

جدول الصواب هو عبارة عن جدول يوضح حالات الصواب والخطأ للقضية المنطقية سواء كانت بسيطة أو مركبة , وسنطبقه على العمليات المنطقية كالتالي :

أولاً : العملية "NOT"

ويرمز لها بالرمز ( ' ) وهي تعني "نفي القضية" , مثلاً لتكن لدينا القضية المنطقية p فإن نفيها سيكون 'p , وجدول الصواب لها كالتالي :

ثانياً : العملية "AND"

يرمز للرابط المنطقي "AND" بالرمز ( ^ )  وينطق (وَ - AND) وهو يربط بين قضيتين بسيطتين لتكوين قضية مركبة , مثلاً لدينا القضية التالية والتي رمزنا لها بالرمز A :
A = "4>2 and 5<10"
ستلاحظ أنها تتكون من قضيتين بسيطتين وسنرمز لهما بالرمز p و q :
p = "4>2"
q = "5<10"
وبما أنهما مربوطتان بالرابط AND فسنعيد كتابة القضية A كالتالي :
A = p ^ q
ملاحظة : القضية التي نستخدم فيها الرابط AND تكون صائبة في حالة واحدة فقط وهي إذا كانت جميع القضايا المكونة لها صائبة , ويوضح هذا جدول الصواب التالي :

ثالثاً : العملية "OR"

يرمز للرابط OR بالرمز ( v ) وينطق (أو - OR) , مثلاً لو كانت لدينا القضية A وهي :
A = "3<4 or 10>6"
فهي مكونة من قضيتين بسيطتين مربوطتان بالرابط OR , ولتكن p و q :
p = "3<4"
q = "10>6"
اذن القضية A ستكون كالتالي :
A = p v q
ملاحظة : القضية التي نستخدم فيها الرابط OR تكون خاطئة في حالة واحدة فقط وهي إذا كانت جميع القضايا المكونة لها خاطئة , وجدول الصواب يوضح ذلك :

رابعاً : العملية "XOR"

يرمز للرابط XOR بالرمز v , مثلاً لوكان لدينا القضيتين p و q كالتالي :
P = "x>5"
q = "x<12"
اذن ستكون القضية  A كما يلي :
A = p v q      
ملاحظة : القضية التي تحتوي على الرابط XOR تكون صائبة اذا كان أحد الطرفين صائب والآخر خاطئ , أما اذا كانا صائبين معاً أو خاطئين معاً فإن القضية تكون خاطئة , والجدول المنطقي لها كالتالي :

خامساً : العملية "if ... then"

وهي تعني "إذا كان ... فإن ..." ويرمز لها بالرمز "→" , مثلاً لدينا القضية التالية المكونة من القضيتين "p="x>3 و "q="x>1 :
A = "if x>3 then x>1"
وسنعيد كتابتها كالتالي :
A = p → q
وتقرأ (if p then q)
ملاحظة : هذه القضية تكون صائبة اذا كان الطرفان صائبان معاً أو خاطئان معاً , أما اذا كان احدهما صائب والآخر خاطئ فإنها تكون خاطئة , حسب جدول الصواب الخاص بها :