Oppure

Loading
02/01/12 20:53
Dice
Ok, ho capito che tabelle di verità non me le volete spiegare in dettaglio e non sono in grado di crearle.
Dato che non ho ben capito come si creano, mi chiedevo ...
...
esiste un metodo che permetta di verificare se esiste un assegnamento di verità che soddisfa una formula logica proposizionale, ma ...
...
senza e dico SENZA utilizzare le tabelle di verità ???

Grazie in anticipo dell'aiuto.
aaa
02/01/12 23:47
pierotofy
Non ho capito... puoi essere più specifico? Cosa intendi per "metodo che permetta di verificare ... logica proposizionale..."?
Il mio blog: piero.dev
03/01/12 7:55
HeDo
uno dei post più surreali che io abbia mai letto...
aaa
03/01/12 9:40
Il Totem
Come ti ho già detto, il problema dell'esistenza è in genere di difficile risoluzione.

Tuttavia, se la formula è in forma normale disgiuntiva, basta che una qualsiasi n-pla di letterali sia vera per rendere la formula vera.
aaa
03/01/12 12:23
Dice
ahahahahahahah

cercherò di essere un po' meno surreale, allora...
vi faccio un esempio per farvi capire cosa vuol dire verificare se esiste un assegnamento di verità che soddisfa una formula logica proposizionale:

a OR b AND c (questa è la formula logica proposizionale)

Bisogna creare la tabella di verità:
(senza usare la parentesi tonde bisogna usare la precedenza degli operatori logici)

a | b | c | b AND c | a OR b AND c |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |

Per vedere quali sono gli assegnamenti di verità che soddisfano la formula bisogna guardare l'ultima colonna, e prendere solo quando vale 1.
In questo esempio gli assegnamenti di verità che soddisfano la formula sono :
a = 0; b = 1; c = 1;
a = 1; b = 0; c = 0;
a = 1; b = 0; c = 1;
a = 1; b = 1; c = 0;
a = 1; b = 1; c = 1;

A me basta stamparne solo una di queste righe ( per esempio la prima: a = 0; b = 1; c = 1).
In parole povere: io devo riuscire a stampare i valori delle proposizioni atomiche (a , b, c) che portano tutta la formula a valere uno.

Io sto tutt'ora provando a riuscirci con le tabelle di verità, anche se non so se riuscirò, perhcè poi è una cosa abbastanza lunga.
Io volevo chiedervi se per caso esiste un metodo più facile e corto di riuscire a fare questo lavoro, possibilmente senza usare le tabelle di verità.
Se per caso non esiste, mi potreste rispiegare molto dettagliamente come riuscirci utilizzando le tabelle di verità ?


PS: spero di essere stato chiaro, ed aver eliminato la surrealità ihihihi
aaa
03/01/12 13:09
anthony015
se non ho capito male tu vuoi che il programma ti dia dei valori per i quali la proposizione logica sia vera, ad esempio nella proposizione logica a OR b AND c, ti ritorni dei valori di a, b, c per i quali a OR b AND c valga 1.
se è così potresti usare o un metodo brute-force, cioè tentare in sequenza con ogni valore assumibile da a,b,c finche a OR b AND c valga 1, oppure utilizzando algoritmi di backtracking
it.wikipedia.org/wiki/…
aaa
03/01/12 17:45
Dice
Si, hai capito bene, voglio proprio quello.
Ho visto il link che mi hai messo, ed è stato un po' utile.
Ho visto che c'è l'esempio, l'unico problema è che è in Python, che io non conosco.
Non è che per caso me lo tradurreste in linguaggio C per favore ?


def prop(x,y):
return (x and y)

vals = [False, True]
for x in vals:
print("x=", x)
for y in vals:
print("y=", y)
if prop(x,y):
print("\tSI";)
else:
print ("\tNO";)

Produce come risultato
x= False
y= False NO
y= True NO

x= True
y= False NO
y= True SI
aaa
04/01/12 11:05
Il Totem
Se trovassi un metodo più "semplice", probabilmente vincerei la medaglia Fields, il premio Turing e qualche milioncino in contanti, e sicuramente non lo verrei a dire a te :rotfl:
aaa