เป้าหมาย:
เขียนโปรแกรมหรือฟังก์ชั่นที่สมบูรณ์ซึ่งใช้สูตรในตรรกะเชิงประพจน์ (ต่อจากนี้ไปจะเรียกว่าการแสดงออกเชิงตรรกะหรือการแสดงออก ) และผลลัพธ์สูตรนั้นในรูปแบบปกติซึ่งเชื่อมต่อกัน มีสองคงอยู่⊤
และ⊥
เป็นตัวแทนของความจริงและเท็จผู้ประกอบการเอกภาค¬
เป็นตัวแทนของการปฏิเสธและผู้ประกอบการไบนารี⇒
, ⇔
, ∧
และ∨
ตัวแทนปริยายสมมูลร่วมและความร้าวฉานตามลำดับซึ่งเชื่อฟังทั้งหมดของตรรกะการดำเนินงานปกติ ( กฎหมาย DeMorgan ของ , คู่ปฏิเสธการกำจัดฯลฯ )
รูปแบบปกติร่วมกันกำหนดไว้ดังนี้
- นิพจน์อะตอมใด ๆ (รวมถึง
⊤
และ⊥
) อยู่ในรูปแบบปกติซึ่งเชื่อมต่อกัน - การปฏิเสธของการแสดงออกใด ๆ ที่สร้างไว้ก่อนหน้านี้อยู่ในรูปแบบปกติซึ่งเชื่อมต่อกัน
- ความแตกต่างของสองนิพจน์ที่สร้างไว้ก่อนหน้านี้อยู่ในรูปแบบปกติซึ่งเชื่อมต่อกัน
- การรวมกันของสองนิพจน์ที่สร้างไว้ก่อนหน้านี้อยู่ในรูปแบบปกติซึ่งเชื่อมต่อกัน
- การแสดงออกอื่น ๆ ไม่ได้อยู่ในรูปแบบปกติของการเชื่อมต่อ
นิพจน์แบบลอจิคัลใด ๆ สามารถแปลง (ไม่ใช่แบบไม่ซ้ำกัน) ให้เป็นนิพจน์ที่มีเหตุผลเชิงตรรกะในรูปแบบปกติแบบ conjunctive (ดูอัลกอริทึมนี้ ) คุณไม่จำเป็นต้องใช้อัลกอริทึมนั้น
การป้อนข้อมูล:
คุณสามารถป้อนข้อมูลในรูปแบบที่สะดวกใด ๆ เช่นการแสดงออกเชิงตรรกะสัญลักษณ์ (ถ้าภาษาของคุณรองรับ), สตริง, โครงสร้างข้อมูลอื่น ๆ คุณไม่จำเป็นต้องใช้สัญลักษณ์เดียวกันสำหรับตัวดำเนินการจริงเท็จและตัวดำเนินการทางตรรกะเช่นเดียวกับที่นี่ แต่ตัวเลือกของคุณควรสอดคล้องกันและคุณควรอธิบายตัวเลือกของคุณในคำตอบหากยังไม่ชัดเจน คุณไม่สามารถยอมรับอินพุตอื่นหรือเข้ารหัสข้อมูลเพิ่มเติมใด ๆ ในรูปแบบอินพุตของคุณ คุณควรมีวิธีแสดงจำนวนอะตอมนิพจน์จำนวนหนึ่งโดยพลการ เช่นจำนวนเต็มอักขระสตริง ฯลฯ
เอาท์พุท:
สูตรในรูปแบบปกติซึ่งเชื่อมต่ออีกครั้งในรูปแบบที่สะดวก ไม่จำเป็นต้องอยู่ในรูปแบบเดียวกับอินพุตของคุณ แต่คุณควรอธิบายหากมีความแตกต่างใด ๆ
กรณีทดสอบ:
P ∧ (P ⇒ R) -> P ∧ R
P ⇔ (¬ P) -> ⊥
(¬ P) ∨ (Q ⇔ (P ∧ R)) -> ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q ∨ (¬ R)))
หมายเหตุ:
- หากการแสดงออกของการป้อนข้อมูลเป็นซ้ำซาก
⊤
จะเป็นผลลัพธ์ที่ถูกต้อง ในทำนองเดียวกันถ้าการแสดงออกของการป้อนข้อมูลเป็นความขัดแย้ง⊥
จะเป็นผลลัพธ์ที่ถูกต้อง - ทั้งรูปแบบอินพุตและเอาต์พุตของคุณควรมีลำดับของการดำเนินการที่ชัดเจนซึ่งสามารถแสดงนิพจน์เชิงตรรกะที่เป็นไปได้ทั้งหมด คุณอาจต้องการวงเล็บในบางประเภท
- คุณสามารถใช้สัญกรณ์ของ infix, prefix หรือ postfix ที่กำหนดไว้อย่างดีสำหรับการดำเนินการทางตรรกะ หากตัวเลือกของคุณแตกต่างจากมาตรฐาน (การปฏิเสธคือส่วนนำหน้าส่วนที่เหลือเป็นมัด) โปรดอธิบายว่าในคำตอบของคุณ
- รูปแบบปกติของรอยต่อนั้นไม่ซ้ำกันโดยทั่วไป (แม้จะไม่เรียงลำดับใหม่) คุณต้องการเพียงเพื่อส่งออกฟอร์มที่ถูกต้องเท่านั้น
- อย่างไรก็ตามคุณเป็นตัวแทนของการแสดงออกของอะตอมพวกเขาจะต้องแตกต่างจากค่าคงที่ตรรกะผู้ประกอบการและสัญลักษณ์การจัดกลุ่ม (ถ้าคุณมีพวกเขา)
- บิวด์อินที่อนุญาตให้ใช้รูปแบบปกติที่เชื่อมต่อกันได้
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- นี่คือรหัสกอล์ฟ ; คำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
P
และ(P ∨ Q) ∧ (P ∨ (¬Q))
อยู่ในรูปแบบปกติซึ่งเชื่อมต่อกัน