tern_solver/Ternary/Universum.hs

23 lines
697 B
Haskell
Raw Normal View History

2025-01-10 20:51:21 +03:00
module Ternary.Universum (Universum(..), universum, aFromStatements) where
import Data.List (nub)
import Ternary.Term (Item (..), Term (..), Vee)
data Universum = Aristotle
| Empty
| Default
universum :: (Eq a) => Universum -> [Vee a] -> [Vee a]
universum Aristotle facts =
[Term True (Item [Term x v])
| v <- aFromStatements facts,
x <- [False, True]]
universum Empty _ = []
universum Default xs = xs
aFromStatements :: (Eq a) => [Vee a] -> [a]
aFromStatements = nub . concatMap (extract . getItem . getVee)
where
getItem (Item x) = x
getVee (Term _ i) = i
extract terms = [v | (Term _ v) <- terms]