Was du beschreibst, ist ein sehr häufiger und normal erscheinender Einwand. Wenn \(A\) falsch ist, wieso ist die Implikation \((A\implies B)\) dann wahr, egal was \(B\) ist?
Der springende Punkt ist: Es geht nicht darum, ob \(B\) wahr oder falsch ist, sondern ob \((A\implies B)\) wahr oder falsch ist. Dass zweiteres wahr ist, macht keine Rückschlüsse auf \(B\) möglich. Das ist wichtig, denn rein intuitiv sollte aus den beiden Informationen "Wenn A, dann B" und "Es gilt aber A gar nicht" nichts weiter über B herausfindbar sein, und das ist hier so.
Du könntest es dir vom anderen Blickwinkel anschauen: Wann soll \((A\implies B)\) denn falsch sein? Wenn du es dir ein bisschen von der Richtung überlegst, merkst du vielleicht irgendwann, dass der einzige Weg, wie \((A\implies B)\) falsch sein kann, daraus besteht, dass \(A\) wahr aber \(B\) falsch ist.
Vielleicht ganz konkret: Wenn ich behaupte "Wenn es regnet, wird die Straße nass", wie würdest du versuchen meine Behauptung zu widerlegen. Wenn es gerade nicht regnet, würdest du dann sagen "Aha, du liegst falsch!"? Nein, dein einziger Weg ist darauf zu warten, dass es regnet, und dann auf die Straße zu schauen. Dass du mich nicht beim lügen erwischen kannst, bis es regnet aber trotzdem die Straße trocken ist, ist genau der Zusammenhang, dass die Implikation wahr ist, bis die Präzedenz wahr und die behauptete Konsequenz falsch ist.
A ist doch falsch also wird die Straße auch nicht nass
Wieso bist du dir da so sicher? Es könnte ja auch nicht geregnet haben, aber ein joners läuft mit nem Gartenschlauch rum. Das macht die Behauptung "Wenns regnet, wird's nass" nicht falsch, oder? Du gewinnst also dadurch, dass es nicht regnet, keine neuen Informationen und das ist das wichtige.
Aus beiden Blickwinkeln ist die einzige sinnvolle Wahrheitstabelle:
| \(A\) | \(B\) | \((A\implies B)\) |
| f | f | w |
| f | w | w |
| w | f | f |
| w | w | w |
Wie du es genau in C implementieren würdest: Kommt auf den Datentyp der Inputs an. Wenn du z.B. chars hast (in den meisten Architekturen 1 byte, quasi ein unsigned short), die die Werte 0 und 1 haben, ist eine Möglichkeit:
char implikation(char a, char b) {
//a impliziert b
return 1-(a*b);
}