Énoncé

Étant donné une formule de logique contenant uniquement les opérateurs "ou", "et" et "non", et des propriétés \(p_1\) jusqu'à \(p_{40}\), vous devez dire s'il existe un jeu de valeurs pour les propriétés tel que la formule est vraie. Par exemple, la formule "\(p_1\) et \(p_2\)" est vraie pour \(p_1\) vraie et \(p_2\) vraie. La formule "\(p_1\) et (non \(p_1\))" est par contre toujours fausse.

Entrée

L'entrée du programme contient la version pré-fixée de la formule de logique.
Soyons plus clairs : chaque ligne est soit un entier entre 1 et 40, représentant \(p_1\) jusqu'à \(p_{40}\), soit un opérateur ("et", "ou" ou "non"). Le tout est suivi d'un retour à la ligne. Pour retrouver la formule, on procède comme suit : si on lit un opérateur, on l'applique aux deux prochains (ou au prochain si c'est un "non") éléments "complets" qu'on lira, si c'est un entier i, on considère l'élément pi qui lui correspond.
Par exemple: la formule "\(p_1\) et ((non \(p_2\)) ou (non \(p_1\)))" pourra être représentée par:

Ce qui se lit: "Je fais d'abord un "et". Le premier élément du "et" est \(p_1\). Le second est un "ou". Ce "ou" a pour premier élément une négation. C'est la négation de \(p_2\). Il a pour second élément une négation. C'est la négation de \(p_1\)." : son écriture infixe est donc "\(p_1\) et ((non \(p_2\)) ou (non \(p_1\)))".
La formule sera toujours bien formée.

Sortie

La sortie de votre programme doit indiquer "true" si la formule de l'entrée peut être rendue vraie et "false" sinon. La réponse devra être suivie d'un retour à la ligne.

Exemples

EntréeSortie

Squelette CamlLight et OCaml