簡體   English   中英

python中的命題演算

[英]Propositional calculus in python

我正在尋找一個在python中運行的命題演算模塊。

我的用戶需要在文本區域輸入公式,然后我必須檢查它是否正確。

我不能直接測試輸入文本是否等於正確的輸入文本,因為它沒有考慮排列或這些事情。

這樣的模塊存在嗎?

- 編輯 -

這是項目的屏幕截圖(設計不完整):

在此輸入圖像描述

我只是弄清楚了這個問題。 不知道是否需要回答,但我建議使用SymPy:

http://docs.sympy.org/dev/modules/logic.html

這不是太難。 您需要做的就是(a)找到或(b)編寫一個接受任意命題並生成真值表的實用程序。 然后,對於兩個命題,您需要做的就是生成兩個真值表並檢查所有行中的原子變量和最后一列是否匹配。

這是原子變量數量的O(2 ^ n),並假設每個命題包含相同數量的原子變量。 如果可能包含額外無用的原子變量(如OR(b或NOT b)等效於a),則需要填充更簡單命題的真值表以獲得相同數量的行。 如果允許使用不同的原子變量,那么這將變得更加困難。

假設P!= NP,你不能做得比O(2 ^ n)好,因為多項式解決方案可以解決命題演算的一般可滿足性問題。

要生成真值表,您需要(a)生成原子變量的真值的所有2 ^ n排列的列表(許多方法),以及(b)評估對真值的任意賦值的命題原子變量。 然后只需制作兩個表並進行比較。 瞧!

你呈現的例子中的A,B,C ......似乎是集合 ,而不是命題。 就我所見,它也可以推斷出這些類型的陳述,但不能作為命題邏輯。

在語義上比較這些語句,這是你想要的,需要更復雜的邏輯,但更簡單的方法可能是將所有語句重寫為可通過純文本比較的形式。 即通過忽略交換性,這種說法

 (A ⋃ B) ⋂ C

與本聲明相同

 C ⋂ (B ⋃ A)

即使這不是一個完美的設置,因為可能存在無法識別的等效語句,使用邏輯等價來解決這個問題的過程會更加困難。 使用重寫邏輯可以用很少的努力或多或少地做你想要的。 基本上你只需要指定哪些是可交換的二元運算符。 還添加了一些重寫等效語句的方程式,你可能需要添加更多......我在Maude中寫了一些東西http://maude.cs.uiuc.edu/

    mod VennDiagram is

    --- sorts
    sort Set .
    sort Statement .
    subsort Set < Statement .

    --- propositional formulas
    op a : -> Set .
    op b : -> Set .
    op c : -> Set .
    op d : -> Set .
    op e : -> Set .
    op f : -> Set .
    op g : -> Set .
    op h : -> Set .
    op i : -> Set .
    op j : -> Set .
    --- and so on ....

    --- connectives
    op ¬_  : Statement -> Statement .
    op _∁  : Statement -> Statement . --- complement
    op _∨_ : Statement Statement -> Statement [ comm ] .
    op _∧_ : Statement Statement -> Statement [ comm ] .
    op _↔_ : Statement Statement -> Statement [ comm ] .
    op _→_ : Statement Statement -> Statement .
    op _⋂_ : Statement Statement -> Statement [ comm ] .
    op _⋃_ : Statement Statement -> Statement [ comm ] .
    op _←_ : Statement Statement -> Statement .


    vars S1 S2 S3 S4 : Statement . --- variables

    --- simplify statemens through equivalence

    eq S1 → S2 = ¬ S1 ∨ S2 .
    eq S1 ↔ S2 = (S1 → S2) ∧ (S2 → S1) .
    eq ¬ ¬ S1 = S1 .
    eq S1 ← S2 = S2 → S1 .
    eq ¬ ( S1 ∧ S2 ) = (¬ S1) ∨ (¬ S2) .
    --- possibly other equivalences as well..

    endm

    --- check equality

    reduce a ↔ b == (b → a) ∧ (a → b) .
    reduce ¬ a ↔ ( a ∨ b ) ==  ¬ a ↔ ( b ∨ a ) .
    reduce (a ⋃ b) ⋂ c == c ⋂ (b ⋃ a) .

    --- what you need to do is to compare the right answer
    --- with a student answer through a simple comparison..
    --- reduce StudentAnswer == RightAnswer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM