2015-01-14 5 views
-1

부울 논리에 문제가있어서 3 가지 변수 각각에 부울 값을 할당해야하므로 각 수식이 서로 다르게 나타납니다. 내가 추측의 문제를 해결 노력 및 방법을 확인했습니다Java의 부울 논리

!b && (c || !d) != !(b || !c && d) 

,하지만 난 아직은 운이 없었어요 :

문제를 지정합니다. 문제를 대수적으로 풀 수있는 방법이 있습니까? 나는 자바에서 일하고있다.

+5

좋은 오래된 진리 표를 가져 오십시오. – Adam

+2

이 질문은 이론적이기 때문에 논제가 아닌 것처럼 보입니다. http://cstheory.stackexchange.com/ 또는 http://math.stackexchange.com/ –

+0

기본적으로 SAT가 아닌가요? – Crembo

답변

3

이것은 약간의 트릭 질문입니다. 이중 부정을 적용한 후, 왼쪽의 표현식에 드 모건의 법칙을 적용 생각해 두 논리적으로 동일하기 때문에 즉

!!(!b && (c || !d)) 
!(b || !(c || !d)) 
!(b || !c && d) 

는, 그러한 조합이 없습니다.

!(b || !c && d) = !b && !(!c && d) = !b && (c || !d) 
+0

나는 De Morgan의 법칙에 대해 언급하고있다. (+1) – NPE

+0

이것은 큰 도움이되었다. 고맙습니다! –

1

당신은 부울 논리의 몇 가지 규칙을 사용할 수 있습니다 가장 강력한 "가치"인 것 같습니다. 여기 나는 그것이 b라고 말할 것입니다. 예를 들어 b == trueb == false으로 진행해 보겠습니다. 하지만

첫째, 분명 그래서이 무엇인지 좀 더 괄호를 추가 할 것 :

!b && (c || !d) != !(b || !c && d) 
= (!b && (c || !d)) != !(b || (!c && d)) 

다음 b == true 경우 :

(!true && (c || !d)) != !(true || (!c && d)) 
=> (false && (c || !d)) != !(true || (!c && d)) 
=> false != !true 
=> false != false 
=> false 

그리고 b == false 경우 : 그래서

(!false && (c || !d)) != !(false || (!c && d)) 
=> (true && (c || !d)) != !(!c && d) 
=> (c || !d) != (c || !d) 
=> false 

이것은 결코 성취 될 수 없다.

2

이런 종류의 문제에 대한 매우 간단한 해결책은 종종 포뮬러을 확인 할 수 있습니다

!(a || b) = !a && !b 
!(a && b) = !a || !b 

가 오른쪽에 적용 :