PropLogic を使う

CNF を自動計算するモジュールがほしかったのだけど,なかなか見つからなくて,ProcLogic にいきついた.ただProcLogic がバグだらけで理想どおりに使おうとすると苦労したんだけど,とりあえず以下のように書くととりあえず,できたので,メモ程度に残しておく.この内容はまたちゃんと書くとする.

-- toCNF.hs
import PropLogic
import qualified TextDisplay as D
--import TextDisplay -- なぜかTextDisplay が含まれていないので,ここに書く.
import System.IO
-- import Text.Regex.Posix
-- import Data.ByteString.Char8 (pack)

activateTask = "[[[a <-> [b * c]] * [b <-> [d * e]] * [d <-> [[f + g] * -[f * g]]] * [e <-> [[h + i] * -[h * i]]] * [c <-> [j * k]]]  * [j <-> [[l + m] * -[l * m]]] *  [k <-> [[n + o + p] * -[n * o]  * -[o * p]  * -[p * n]]] * -[g * e] * -[m * k]]"
at1 = spcnf activateTask
at2 = pcnf activateTask

x = "[-[rain * snow] * [wet <-> [rain + snow]] * [rain -> hot] * [snow -> -hot]]"
y = "[wet <-> snow]"
p = DJ [EJ [A "x", A "y"], N (A "z")]  ::  PropForm String

activateTaskCNF = pcnf' $ stringToProp activateTask

size1 = PropLogic.size 

hoge = pcnf' $ stringToProp x
fuga = spcnf' $ stringToProp x


--fuga1 = D.display $ spcnf' $ stringToProp x 

-- spcnf :: String -> IO ()
--spcnf = D.display . spcnf' . stringToProp

foo  = pcnf' $ stringToProp activateTask
boo  = spcnf' $ stringToProp activateTask

--stringToProp :: String -> PropForm String
x1 = stringToProp x 

--
toMiniSatStyle :: String -> String
toMiniSatStyle x = undefined

atomsList = irrAtoms $ stringToProp activateTask

aPair = (zip atomsList  (map show [1..])) ++ [("*", "\r")]