EAP Help


Η περίπτωση του Endless Loop  δεν είναι και τόσο απλή. Ένας υπολογιστής είναι ικανός να διεκπεραιώσει μια συγκεκριμένη εργασία, τότε μπορούμε να δείξουμε, με ποιο τρόπο η εργασία αυτή μπορεί να εκτελεσθεί. Όταν όμως λέμε ότι μια εργασία είναι πέρα από τις ικανότητες όλων των υπολογιστών, πώς ξέρουμε ότι αυτό δεν οφείλεται στις περιορισμένες γνώσεις μας ως προγραμματιστές;

Ίσως κάποιος άλλος να μπορεί να επινοήσει έναν τρόπο χρήσης του υπολογιστή, έτσι ώστε να εκτελέσει την εργασία αυτή ή ίσως ο υπολογιστής μας δεν είναι τόσο ισχυρός για την εργασία.
Ένας από τους εφιάλτες οποιουδήποτε φοιτητή της πληροφορικής είναι το να εισέλθει ένα πρόγραμμα σε έναν "Endless Loop" (ατέρμονα βρόχο) και να μην σταματά ποτέ. Έτσι, οι φοιτητές συχνά αναζητούν βοήθεια και αναθέτουν τον έλεγχο του προγράμματος σε άλλους, δίχως να σκεφτούν, αν υπάρχει η δυνατότητα το πρόγραμμα να σταματήσει κάποτε.

Ας υποθέσουμε ότι κάποιος γράφει ένα τέτοιο πρόγραμμα που θα έλεγχε το πρόγραμμα του φοιτητή.
Το πρόγραμμα αυτό M θα εξέταζε τα δεδομένα και θα ανακοίνωνε αν το πρόγραμμα θα σταματήσει κάποτε.

Συνεπώς τo πρόγραμμα M θα  εξετάζει ένα πρόγραμμα Ρ με τα δεδομένα D τα οποία επεξεργάζεται το P. Θα κάνει τη σωστή διάγνωση,θα τυπώνει το αντίστοιχο μήνυμα και μετά θα σταματά.
Έστω ότι μας έχει δοθεί το Μ. Κάνοντας μια μικρή τροποποίηση  δημιουργούμε ένα νέο πρόγραμμα που το ονομάζουμε Μ΄ . Η μόνη διαφορά μεταξύ των προγραμμάτων Μ και Μ΄ είναι ότι, αφού το Μ΄ διαγνώσει  ένα πρόγραμμα το οποίο εξετάζεται με ένα ορισμένο αριθμό δεδομένων, θα σταματήσει. Τότε το Μ΄ θα εισέλθει σε έναν "Endless Loop”. (Μια τέτοια μετατροπή είναι εύκολη, καθώς όλοι γνωρίζουμε πώς να προσθέτουμε έναν ατέρμονα βρόχο σε ένα πρόγραμμα!).
 Έτσι, κατασκευάζουμε ένα μικρό πρόγραμμα C ( που θα δημιουργεί ένα αντίγραφο του αρχικού προγράμματος, προκειμένου χρησιμοποιηθεί από το τελευταίο ως σύνολο δεδομένων.
Συρράπτοντας  τα προγράμματα C και Μ΄ δημιουργούμε ένα νέο πρόγραμμα που το ονομάζουμε
Q, 

 Μπορούμε να περιγράψουμε περιληπτικά τη συμπεριφορά του Q:

1. Tο πρόγραμμα Q δέχεται το πρόγραμμα P ως είσοδο.
2. Εάν το πρόγραμμα P, όταν χρησιμοποιεί τον εαυτό του ως δεδομένα εισόδου τελικά σταματά, τότε το Q θα εισέλθει σε "Endless Loop".
3. Αν το Ρ, χρησιμοποιεί τον εαυτό του ως δεδομένα εισόδου , εισέρχεται σε "Endless Loop" τότε το Q σταματά.

Αφού το Q είναι και αυτό πρόγραμμα τότε μπορούμε να επιτρέψουμε να είναι είσοδος στον εαυτό του δηλαδή στο Q.

Έτσι λοιπόν από την κατασκευή του Q που περιγράψαμε παραπάνω θα έχουμε τα συμπεράσματα:

1. Εάν το Q με δεδομένα εισόδου το Q τελικά σταματά, θα εισέρχεται σε "Endless Loop".
2. Εάν το Q με δεδομένα εισόδου το Q εισέρχεται σε "Endless Loop" τότε το Q θα σταματά.

Τα συμπεράσματα  όμως είναι αντιφατικά! Και αυτό γιατί υποθέσαμε ότι υπάρχει το πρόγραμμα Μ. Συνεπώς μπορούμε με απόλυτη σιγουριά να ενημερώσουμε τον φοιτητή μας ότι απλά χάνει τον χρόνο του προσπαθώντας να επινοήσει έναν τρόπο ώστε να βγάλει το πρόγραμμα του από τον "Endless Loop" που είναι, και εμείς να μη ντρεπόμαστε για τις προγραμματιστικές γνώσεις μας.


Ουσιαστικά το παραπάνω παράδειγμα απαντά στο ότι από την αρχή έχουμε ορίσει λάθος της ιδιότητες του προγράμματος. Δεν είναι δυνατό να καθορίσουμε τα στοιχεία ενός συνόλου, απλά καθορίζοντας τις ιδιότητές των στοιχείων του συνόλου. Σε μια μαθηματικοποιημένη απεικόνιση θα λέγαμε ότι ορίζουμε ένα σύνολο S και ένα σύνολο  K να είναι στοιχείο του S, τέτοιο ώστε το Κ δεν ανήκει στο Κ. Αυτή η παρατήρηση έγινε το 1911 από τον B. Russell και αναφέρεται ως "Το Παράδοξο του Russell".
B.Russell

Ας δώσουμε ένα πιο κατανοητό παράδειγμα.


Υπάρχει ένας κουρέας σε ένα χωριό, ο οποίος ξυρίζει οποιονδήποτε δεν ξυρίζεται μόνος του. Εδώ φαίνεται ότι έχουμε μια ακριβή περιγραφή ενός συγκεκριμένου κουρέα στο χωριό. Όμως, υποθέστε ότι τίθεται το ερώτημα κατά πόσον ο κουρέας ξυρίζεται μόνος του.
Εάν ο κουρέας ξυρίζεται μόνος του, τότε δεν θα έπρεπε να ξυρίζεται μόνος του (γιατί ξυρίζει μόνον όσους δεν ξυρίζονται μόνοι τους). Από την άλλη  εάν o κουρέας δεν ξυρίζεται μόνος του, τότε θα έπρεπε να ξυρίζεται μόνος (γιατί ξυρίζει όσους δεν ξυρίζονται μόνοι τους). Και στις δυο περιπτώσεις έχουμε αντίφαση.
Και πάλι, αυτό που είναι λάθος είναι ο τρόπος με οποίο καθορίζουμε τον κουρέα. 
Συνεπώς, καταλήγουμε ότι δεν είναι δυνατόν να υπάρχει τέτοιος κουρέας.