Eh bien, je pense qu’il est temps que nous posions une autre question de golf d’épreuve .
Cette fois, nous allons prouver la vérité logique bien connue
Pour ce faire, nous utiliserons le troisième schéma d'iiukasiewicz , un ensemble incroyablement élégant de trois axiomes complets sur la logique propositionnelle .
Voici comment cela fonctionne:
Axiomes
Le système Łukasiewicz a trois axiomes. Elles sont:
Les axiomes sont des vérités universelles , peu importe ce que nous choisissons pour , et . À tout moment de la preuve, nous pouvons introduire l'un de ces axiomes. Lorsque nous introduisons un axiome remplacer chaque cas de , et , avec une « expression complexe ». Une expression complexe est une expression faite à partir Atomes, (représenté par les lettres - ), et les opérateurs implique ( ) et non ( ).
Par exemple, si je voulais introduire le premier axiome (LS1), je pourrais vous présenter
ou
Dans le premier cas, était et était , tandis que dans le second cas, les deux étaient des expressions plus impliquées. était et était .
Les substitutions que vous choisissez d'utiliser dépendront de ce dont vous avez besoin dans la preuve pour le moment.
Modus Ponens
Maintenant que nous pouvons introduire des déclarations, nous devons les relier pour en faire de nouvelles. La manière dont cela est fait dans le schéma de l'Axiom (LS) de Łukasiewicz est avec Modus Ponens. Modus Ponens nous permet de prendre deux déclarations de la forme
et instancier une nouvelle déclaration
Tout comme avec notre Axioms et peut se substituer à toute déclaration arbitraire.
Les deux déclarations peuvent figurer n'importe où dans la preuve, elles ne doivent pas nécessairement être côte à côte ou faire l'objet d'une commande spéciale.
Tâche
Votre tâche sera de prouver le droit des contrapositifs . Ceci est la déclaration
Maintenant, vous remarquerez peut-être que cela est assez familier, il s’agit d’une instanciation du revers de notre troisième axiome
Cependant, ce n'est pas un exploit trivial.
Notation
Marquer ce défi est assez simple, chaque fois que vous instanciez un axiome compte comme un point et chaque utilisation de modus ponens compte comme un point. C'est essentiellement le nombre de lignes de votre preuve. L'objectif devrait être de minimiser votre score (le rendre aussi bas que possible).
Exemple de preuve
Ok permet maintenant d’utiliser ceci pour construire une petite preuve. Nous prouverons .
Parfois, il est préférable de revenir en arrière, car nous savons où nous voulons être et nous pouvons imaginer comment nous pourrions y arriver. Dans ce cas, puisque nous voulons terminer par et que ce n’est pas l’un de nos axiomes, nous savons que la dernière étape doit être le modus ponens. Ainsi, la fin de notre preuve ressemblera à
φ
φ → (A → A)
A → A M.P.
Où est une expression dont nous ne connaissons pas encore la valeur. Nous allons maintenant nous concentrer sur . Ceci peut être introduit par modus ponens ou LS3. LS3 nous oblige à prouver ce qui semble aussi difficile que , nous allons donc utiliser le modus ponens. Alors maintenant, notre preuve ressemble à
φ
ψ
ψ → (φ → (A → A))
φ → (A → A) M.P.
A → A M.P.
Maintenant ressemble beaucoup à notre deuxième axiome LS2, nous allons donc le remplir en tant que LS2
A → χ
A → (χ → A)
(A → (χ → A)) → ((A → χ) → (A → A)) L.S.2
(A → χ) → (A → A) M.P.
A → A M.P.
Maintenant, notre deuxième déclaration peut être assez clairement construite à partir de LS1, nous allons donc la remplir en tant que telle.
A → χ
A → (χ → A) L.S.1
(A → (χ → A)) → ((A → χ) → (A → A)) L.S.2
(A → χ) → (A → A) M.P.
A → A M.P.
Maintenant, nous avons juste besoin de trouver un tel que nous puissions prouver . Cela peut très facilement être fait avec LS1, nous allons donc essayer
A → (ω → A) L.S.1
A → ((ω → A) → A) L.S.1
(A → ((ω → A) → A)) → ((A → (ω → A)) → (A → A)) L.S.2
(A → (ω → A)) → (A → A) M.P.
A → A M.P.
Maintenant , puisque tous nos pas notre justifiées , nous pouvons remplir , comme une déclaration que nous voulons et la preuve sera valable. Nous pourrions choisir , mais je vais choisir de sorte qu'il est clair qu'il n'a pas besoin d'être .
A → (B → A) L.S.1
A → ((B → A) → A) L.S.1
(A → ((B → A) → A)) → ((A → (B → A)) → (A → A)) L.S.2
(A → (B → A)) → (A → A) M.P.
A → A M.P.
Et c'est une preuve.
Ressources
Programme de vérification
Voici un programme Prolog que vous pouvez utiliser pour vérifier que votre preuve est bien valide. Chaque marche doit être placée sur sa propre ligne. ->
devrait être utilisé pour implique et-
doit être utilisé pour ne pas, les atomes peuvent être représentés par n’importe quelle chaîne de caractères alphabétiques.
Métamath
Metamath utilise le système Łukasiewicz pour ses preuves en calcul propositionnel, vous pouvez donc vous en occuper un peu. Ils ont aussi une preuve du théorème que ce défi demande qui peut être trouvé ici . Il y a une explication ici sur la façon de lire les preuves.
L'incroyable machine à épreuves
@ Antony m'a fait connaître l'existence d'un outil appelé The Incredible Proof Machine, qui vous permet de construire des épreuves dans un certain nombre de systèmes en utilisant un joli système d'épreuves graphiques. Si vous faites défiler l'écran vers le bas, vous constaterez qu'ils prennent en charge le système Łukasiewicz. Donc, si vous êtes une personne plus visuelle, vous pouvez travailler sur votre preuve là-bas. Votre score sera le nombre de blocs utilisés moins 1.
((P → Q) → R) → ((R → P) → (S → P))