I would be surprised if there is such a book, because every German book on logic very likely will assume that the reader knows how to construct sentences, and only explain how to express them in symbols. So the best you can hope for is that they use example sentences in natural language from which you can infer the construction. But I can explain to you how negation in German sentences work, if that is what you want to know.
The principle is that adverbs that can modify parts of the sentence (like nicht, but also auch and others) are put directly in front of the part of the sentence they modify. However, there are two problems:
In a main clause, the verb must be in second position, so you can't put nicht in front of it, and if there's no auxiliary, you have to find some other place where to put it. English solves this by introducing an extra auxiliary if necessary. In German, you either look for a different part of the sentence you can negate if it doesn't change the meaning too much, or you put it at the very end if you can't find such a part. This rule is somewhat vague, because "does not change too much" depends on experience what is acceptable and what is not.
The second problem is that sometimes expressions are perceived as a whole, so they are negated as a whole, and not just the verb. Again, this needs experience.
Your first examples don't really touch on these difficulties, because the logical propositions are in different sentences:
- Alice weiß, wer Bob ist.
- Alice weiß nicht, wer Bob ist.
- Alice weiß, wer Bob nicht ist.
- Alice weiß nicht, wer Bob nicht ist.
The last example is ambigous when phrased naturally ("Alice möchte nicht nach XYZ gehen"), so you can make it unambigous by using a sublause (which has the disadvantage that it sounds a bit unnatural):
- Alice möchte nicht, dass sie nach XYZ geht. = (Alice möchte nicht) nach XYZ gehen.
- Alice möchte, dass sie nicht nach XYZ geht. = Alice möchte (nicht nach XYZ gehen).
A third grouping ("Alice möchte (nicht nach XYZ) gehen" = It's not XYZ that Alice wants to go to) is also possible. In spoken German, you can distinguish the grouping.
In case you need to know as well, quantifiers are read "für alle/für jedes" (∀) and "es gibt" (∃), in combination "∀x.∃y" also "für alle/zu jedem x gibt es ein y", e.g.
∀x. ∀𝜀>0. ∃𝛿>0. ∀x'. |x'-x|<𝛿 => |f(x')-f(x)|<𝜀
Read as: "Für alle x gilt: Zu jedem Epsilon größer Null gibt es ein Delta größer Null, so dass für alle x Strich der Betrag der Differenz der Funktionswerte f von x Strich und f von x kleiner als Epsilon ist, wenn der Betrag der Differenz von x Strich und x kleiner als Delta ist."