논리합

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

논리합은 두 명제 중 적어도 하나가 참일 때 참이 되는 논리 연산으로, 기호 '∨'로 표기하며, 'OR'이라고도 한다. 논리합은 논리학, 컴퓨터 과학, 집합론, 자연어 처리 등 다양한 분야에서 활용되며, 참 또는 거짓의 진리값을 갖는 두 명제 P, Q에 대해 P ∨ Q는 P와 Q 중 적어도 하나가 참일 때 참이 된다. 프로그래밍 언어에서는 `|`, `||`, `or` 등으로 표현되며, 비트 연산, 조건문 등에 사용된다. 집합론에서는 합집합과 관련되며, 자연어에서는 '또는'으로 표현되지만, 문맥에 따라 배타적 논리합으로 해석될 수 있다.

논리합
📚 더 읽어볼만한 페이지
  • 수리논리학 - NAND 게이트
    NAND 게이트는 모든 입력이 1일 때 0을 출력하고 그 외에는 1을 출력하는 논리 게이트로서, 다양한 기호로 표현되며, AND 연산의 결과를 부정하는 연산을 수행하고, 여러 방식으로 구현될 수 있으며, 기능적으로 완전하여 디지털 회로 설계에 필수적이다.
  • 수리논리학 -
    셈은 대상의 개수를 파악하는 기본적인 행위로, 수학에서는 집합의 원소 개수를 파악하는 과정으로 정의되며, 셈의 방식에 따라 결과가 달라질 수 있고, 셈을 배우는 과정은 아동의 교육 및 발달에 중요한 역할을 한다.
  • 논리학 - 모순
    모순은 논리학, 철학, 과학 등 다양한 분야에서 사용되는 개념으로, 서로 상반되는 두 가지 주장이나 사실이 동시에 존재하는 상태를 의미하며, 특히 헤겔과 마르크스의 변증법적 유물론에서 사물의 내재적 대립으로서 역사 발전의 원동력으로 간주된다.
  • 논리학 - 특수
    특수는 철학에서는 개별적이고 구체적인 존재를, 언어학에서는 눈에 띄는 또는 예외적인 의미를 가지며, 사회적으로 특별함이 중요하게 여겨지기도 한다.
  • 수학 - 회귀 분석
    회귀 분석은 종속 변수와 하나 이상의 독립 변수 간의 관계를 모델링하고 분석하는 통계적 기법으로, 최소 제곱법 개발 이후 골턴의 연구로 '회귀' 용어가 도입되어 다양한 분야에서 예측 및 인과 관계 분석에 활용된다.
  • 수학 - 수학적 최적화
    수학적 최적화는 주어진 집합에서 실수 또는 정수 변수를 갖는 함수의 최댓값이나 최솟값을 찾는 문제로, 변수 종류, 제약 조건, 목적 함수 개수에 따라 다양한 분야로 나뉘며 여러 학문 분야에서 활용된다.

2. 정의 및 표기법

논리합은 두 명제 중 적어도 하나가 참일 때 참이 되는 논리 연산이다. 일상생활에서 사용하는 "또는"이라는 단어의 의미와 유사하다. 예를 들어, "내 키는 160cm 이상이다."와 "내 몸무게는 50kg 이상이다."라는 두 명제가 있을 때, 이 두 명제의 논리합은 "내 키는 160cm 이상이거나 내 몸무게는 50kg 이상이다."가 된다.

논리합은 '∨' 기호로 표기한다. 예를 들어, 명제 P와 Q의 논리합은 P ∨ Q와 같이 나타낸다. 이 외에도 전자공학에서는 '+' 기호를 사용하기도 하며, 여러 프로그래밍 언어에서는 `|` 또는 `||`를 사용하기도 한다. 얀 우카시에비치폴란드 표기법에서는 "alternatywa"(대안)의 약자인 'A'를 사용하기도 한다.

여러 요소의 논리합은 \bigvee (유니코드 ) 기호를 사용하여 나타낼 수 있다. 예를 들어, a1, a2, ..., an의 논리합은 다음과 같이 표현한다.

:
\bigvee_{i=1}^{n} a_i = a_1 \lor a_2 \lor \ldots a_{n-1} \lor a_{n}


영어에서는 "or"를 사용하며, 때로는 "and/or" 구문을 사용하여 두 명제가 모두 참인 경우를 명확히 하기도 한다.

2.1. 진리표

👆
좌우로 밀어서 보기
명제 P명제 QPQ
거짓
거짓
거짓거짓거짓

2.2. 다른 연산자와의 관계

PQ부정논리곱을 사용하여 ¬(¬P ∧ ¬Q)로 나타낼 수 있다. 따라서, 논리합은 부정과 논리곱으로 표현할 수 있다.

: PQ = ¬(¬P ∧ ¬Q)

반대로, 논리곱은 논리합과 부정으로 나타낼 수 있다.

: PQ = ¬(¬P ∨ ¬Q)

이 두 가지를 드 모르간의 법칙이라고 한다.

고전 논리 체계에서 논리합이 기본 연산자가 아닌 경우, 논리곱(∧)과 논리 부정(¬)을 사용하여 다음과 같이 정의할 수 있다.

: A ∨ B = ¬(¬A ∧ ¬B)

또는 함축(→)과 ¬을 사용하여 정의할 수도 있다.

: A ∨ B = (¬A) → B

또한 → 만을 사용하여 정의할 수도 있다.

: A ∨ B = (A → B) → B

3. 성질

* 결합 법칙
* 교환 법칙
* 분배 법칙
(a \land (b \lor c)) \equiv ((a \land b) \lor (a \land c))
(a \lor (b \land c)) \equiv ((a \lor b) \land (a \lor c))
* 멱등성
* 단조성
* 진리 보존: 모든 변수에 '참'의 진리값을 할당하는 해석은 논리합의 결과로 '참'의 진리값을 생성한다.
* 거짓 보존: 모든 변수에 '거짓'의 진리값을 할당하는 해석은 논리합의 결과로 '거짓'의 진리값을 생성한다.

3.1. 결합 법칙

결합 법칙: (P ∨ Q) ∨ R ≡ P ∨ (Q ∨ R)

3.2. 교환 법칙

교환 법칙: a \lor b \equiv b \lor a

3.3. 분배 법칙

P \land (Q \lor R) \equiv (P \land Q) \lor (P \land R)
P \lor (Q \land R) \equiv (P \lor Q) \land (P \lor R)

3.4. 멱등 법칙

멱등 법칙: a \lor a \equiv a

3.5. 단조성

논리합은 다음과 같은 성질을 가진다.

* 결합 법칙: a \lor (b \lor c) \equiv (a \lor b) \lor c
* 교환 법칙: a \lor b \equiv b \lor a
* 멱등성: a \lor a \equiv a
* 단조성: (a \rightarrow b) \rightarrow ((c \lor a) \rightarrow (c \lor b))
:(a \rightarrow b) \rightarrow ((a \lor c) \rightarrow (b \lor c))

4. 다양한 분야에서의 응용

프로그래밍 언어에서 논리합은 대부분 연산자로 표현되며, 비트 연산에 자주 활용된다. 예를 들면 다음과 같다.

* 0 또는 0 = 0
* 0 또는 1 = 1
* 1 또는 0 = 1
* 1 또는 1 = 1
* 1010 또는 1100 = 1110

`or` 연산자는 비트 필드에서 특정 비트를 1로 설정할 때 유용하다. 예를 들어 `x = x | 0b00000001`은 x의 마지막 비트를 1로 설정하고 나머지 비트는 그대로 유지한다.

C 계열 언어에서는 비트 단위 논리합 연산자로 단일 파이프(|)를, 논리합 연산자로 이중 파이프(||)를 사용한다. 논리합 연산은 단락 회로 평가를 따르므로, 첫 번째 피연산자가 `true`이면 두 번째 피연산자는 평가하지 않는다. 병렬 언어에서는 양쪽 피연산자를 병렬로 평가하여 하나라도 `true`이면 다른 쪽 평가를 중단하는 '병렬 or' 연산이 가능하다.

집합론에서 합집합원소 소속 여부는 논리합으로 정의된다. 즉, x ∈ A ∪ B는 (x ∈ A) ∨ (x ∈ B)와 같다.

자연어에서 '또는'은 배타적 논리합으로 해석될 수 있어 주의해야 한다. 예를 들어 "커피 또는 홍차가 제공됩니다"는 보통 둘 중 하나만 제공됨을 의미한다.

4.1. 컴퓨터 과학

대부분의 프로그래밍 언어에 논리합에 해당하는 연산자가 존재한다. 논리합은 종종 비트 연산에 사용된다. 예시는 다음과 같다.

* 0 또는 0 = 0
* 0 또는 1 = 1
* 1 또는 0 = 1
* 1 또는 1 = 1
* 1010 또는 1100 = 1110

`or` 연산자는 비트 필드의 비트를 1로 설정하는 데 사용될 수 있다. 비트를 1로 설정해야 하는 관련 비트가 있는 상수 필드와 `or` 연산을 수행하면 된다. 예를 들어, `x = x | 0b00000001`은 마지막 비트를 1로 만들고 다른 비트는 변경하지 않는다.

많은 언어는 비트 단위 논리합과 논리합을 구별하기 위해 두 개의 별개의 연산자를 제공한다. C를 따르는 언어에서, 비트 단위 논리합은 단일 파이프 연산자(|)로 수행되며, 논리합은 이중 파이프(||) 연산자로 수행된다.

논리합은 일반적으로 단락 회로 평가된다. 즉, 첫 번째(왼쪽) 피연산자가 `true`로 평가되면, 두 번째(오른쪽) 피연산자는 평가되지 않는다. 따라서 논리합 연산자는 일반적으로 시퀀스 포인트를 구성한다.

병렬(동시) 언어에서는 양쪽을 단락 회로 평가하는 것이 가능하다. 즉, 양쪽을 병렬로 평가하고, 하나가 true 값을 반환하면 다른 쪽이 중단된다. 따라서 이 연산자는 병렬 or이라고 불린다.

논리합 표현식의 유형은 대부분의 언어에서 부울(Boolean)이며(따라서 `true` 또는 `false` 값만 가질 수 있음), 일부 언어(예: 파이썬 및 자바스크립트)에서는 논리합 연산자가 피연산자 중 하나를 반환한다. 즉, 첫 번째 피연산자가 참 값으로 평가되면 첫 번째 피연산자를 반환하고, 그렇지 않으면 두 번째 피연산자를 반환한다. 이를 통해 엘비스 연산자의 역할을 수행할 수 있다.

C 언어 등에서는 단순한 논리합은 `||`, 비트 단위 논리합은 `|`로 표기하며, `z = x | y;`와 같이 사용된다. (주: `2|4`의 값은 `6`이지만, `2||4`의 값은 `1`이다.)

Perl에서도 단순한 논리합은 `||`, 비트 단위 논리합은 `|`로 표기하며, `$z = $x | $y;`와 같이 사용된다. (주: `2|4`의 값은 `6`이지만, `2||4`의 값은 C 언어의 경우와는 달리 `2`이다.)

VBScript에서는 " `Or` "로 표기하며, `z = x Or y`와 같이 사용된다.

각 프로그래밍 언어에서의 논리합 표기와 의미는 단락 회로 평가와 밀접한 관련이 있다.

OR 논리 게이트
OR 논리 게이트

4.2. 집합론

집합론에서 합집합 원소의 소속은 논리적 논리합의 관점에서 정의된다. x ∈ A ∪ B는 (x ∈ A) ∨ (x ∈ B)와 같다. 이 때문에 논리적 논리합은 결합 법칙, 교환 법칙, 분배 법칙, 드 모르간의 법칙과 같은 집합론적 합집합과 동일한 항등식을 많이 만족하며, 논리곱을 집합의 교집합과, 논리 부정을 여집합과 동일시한다.

4.3. 자연어 처리

자연어에서 '또는'은 배타적 논리합으로 해석될 수 있으므로, 문맥에 따라 주의해야 한다. 예를 들어, "커피 또는 홍차가 제공됩니다"라는 문장은 보통 커피와 홍차 중 하나만 제공된다는 의미로 해석되며, 둘 다 제공되는 경우는 포함하지 않는다.

영어에서는 'and/or'라는 구문을 사용하여 둘 다 참인 경우를 명시적으로 포함하기도 한다. 일상 대화에서 "또는"은 배타적 논리합을 의미하는 경우가 있지만, 통상적인 논리합은 "포괄적 논리합"(inclusive OR영어)이라고 부른다.

5. 기타

폴란드 표기법에서 논리합 연산자는 'A'로 표기된다. 유니코드에서 논리합 기호(∨)는 U+2228이다.