長いブランクがありましたが(汗)、最近数理論理学の勉強を再開。(少しずつしかやってないけど・・・)
これまで読んでいた本は命題論理しか扱ってなかったのですが、今読んでる本は述語論理と集合論も取り扱ってるので初対面の彼らにやや苦戦中。理解力の乏しさに泣けてきます。



\forall x[ x\mid a \to (x=1  \vee x=a)] \wedge \neg (a=1)
a|bは数論(?)における「bはaで割り切れる」の意味ですが、最初内包的記法だと思い込んでて(Haskellのせいだと思う!)頭がバグりかけました。一般的に内包は{}ですよね・・・。
最近全然Haskell触ってなくてリハビリが必要だったのでハスケってみました。コンパイルが面倒だったのでghciで書いてたんですがグチャグチャに...

let prim = (\a -> (all (\x -> (not (a`mod`x == 0)) || (x==1 || x==a)) [1..a]) && (not $ a==1))

ということで結局エディタを立ち上げてコンパイラを呼んだ。。

prim :: Int -> Bool
prim a = (all p_imp_q [1..a]) && (not $ a==1)
    where
        p x = a`mod`x == 0
        q x = x==1 || x==a
        --p_imp_q x = if p x then q x else True
        p_imp_q x
            | p x = q x
            | otherwise = True

main = print $ filter prim [1..23]
--print $ [ (x,prim x) | x<-[1..23] ]

ならば(→)に相当する演算子ってないのかな?Haskellならあると思ってた。


メモ:otherwiseの値はTrue