골:
명제 논리 (이후 논리식 또는 식이 라고 함) 의 공식을 취해 그 공식을 결부 정규 형식으로 출력 하는 완전한 프로그램 또는 함수를 작성하십시오 . 두 가지 상수는, ⊤
및 ⊥
단항 연산자, 참과 거짓을 나타내는 ¬
부정을 나타내는 이진 연산자 ⇒
, ⇔
, ∧
, 그리고 ∨
의미, 동등한 결합 및 분리를 나타내는 각각 어떤 (일반적인 논리 연산의 모든 순종 드 모르 강의 법칙 , 이중 부정 제거 등).
결 합 일반 형식은 다음과 같이 정의됩니다.
- 모든 원자 표현 (
⊤
및 포함⊥
)은 결합 형 정규 형식입니다. - 이전에 생성 된 표현의 부정은 결합 된 정규 형식입니다.
- 이전에 생성 된 두 가지 표현의 결합은 결합적인 정규 형식입니다.
- 이전에 생성 된 두 표현식의 연결은 결사 정규 형식입니다.
- 다른 표현은 결합 된 정상적인 형태가 아닙니다.
임의의 논리식은 고유하지 않은 형태의 결합 된 정규 형식으로 논리적으로 동등한 식으로 변환 될 수 있습니다 ( 이 알고리즘 참조 ). 해당 특정 알고리즘을 사용할 필요는 없습니다.
입력:
편리한 형식으로 입력 할 수 있습니다. 예를 들어, 기호 논리 표현식 (언어가 지원하는 경우), 문자열, 기타 데이터 구조. 여기에서와 같이 true, false 및 논리 연산자에 동일한 기호를 사용할 필요는 없지만 선택은 일관성이 있어야하며 명확하지 않은 경우 선택에 대한 설명을 선택해야합니다. 다른 입력을 수락하거나 입력 형식으로 추가 정보를 인코딩 할 수 없습니다. 임의의 수의 원자 표현을 표현할 수있는 방법이 있어야합니다. 예를 들어 정수, 문자, 문자열 등
산출:
편리한 형식의 결 합 일반 형식의 수식입니다. 입력과 같은 형식 일 필요는 없지만 차이점이 있는지 설명해야합니다.
테스트 사례 :
P ∧ (P ⇒ R) -> P ∧ R
P ⇔ (¬ P) -> ⊥
(¬ P) ∨ (Q ⇔ (P ∧ R)) -> ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q ∨ (¬ R)))
노트:
- 입력 표현식이 타우 톨 로지이면
⊤
유효한 출력이됩니다. 마찬가지로 입력 표현식이 모순이면⊥
유효한 출력이됩니다. - 입력 및 출력 형식 모두 가능한 모든 논리식을 표현할 수있는 잘 정의 된 연산 순서를 가져야합니다. 어떤 종류의 괄호가 필요할 수 있습니다.
- 논리 연산에 대해 잘 정의 된 접두사, 접두사 또는 접미사 표기법을 선택할 수 있습니다. 선택 사항이 표준과 다를 경우 (음은 접두사이고 나머지는 접두사 임) 답에 설명하십시오.
- 결 합 일반 형태는 일반적으로 독특하지 않습니다 (재주문까지). 유효한 양식 만 출력 하면 됩니다.
- 그러나 원자 표현식을 나타내면 논리 상수, 연산자 및 그룹화 기호 (있는 경우)와 구별되어야합니다.
- 결합 형 정규 형식을 계산하는 내장이 허용됩니다.
- 표준 허점 은 금지되어 있습니다.
- 이것은 코드 골프입니다 . 최단 답변 (바이트)이 이깁니다.
P
이며 (P ∨ Q) ∧ (P ∨ (¬Q))
결합 된 정규 형식입니다.