```原です。

>さかいです。

>しれませんが、試しにちょっと書いてみました。とりあえずX(3)までの要素数
>を表示するだけです。

たいです。勉強になります。

はリストの計算は大得意なんだなあ。

data Poset a = Poset [a] (a -> a -> Bool)
instance Show a => Show (Poset a) where
show (Poset x _) = concat [(show v) ++ "\n" | v <- x]
type MonotonicFunction a b = [(a,b)]

power :: (Poset b) -> (Poset a) -> (Poset (MonotonicFunction a b))
power (Poset bx le_b) (Poset ax le_a) = Poset set le where
set = foldr extend [[]] ax
extend a funcs = [(a,b):func | func <- funcs, b <- bx, check a b func]
check a b func = and [not(le_a a c) || (le_b b d) | (c, d) <- func ]
le f1 f2 = and [le_b b d | ((_, b), (_, d)) <- zip f1 f2]

omega :: Poset Int
omega = Poset [0,1,2] (<=)

f :: Poset a -> Poset (MonotonicFunction a Int)
f x = power omega x

x0 = Poset [0] (<=)
x1 = f x0
x2 = f x1
x3 = f x2
x4 = f x3

main :: IO ()
main = do
printGraph x3
where
printGraph x = putStrLn ("digraph G {\nrankdir=TB;\n" ++
pointshow x ++ graphshow x ++ "}")
pointshow (Poset v _) = concat ["x" ++ show i ++ ";\n" |
(_, i) <- zip v [0..]]
graphshow (Poset u le) = concat ["x"++show i++" -> "++"x"++show j++";\n"
| pairs <- graph le (zip u [0..]), (i, j) <- pairs]
graph le ui = [[(snd fi, snd gj) | gj <- foldr (extend_graph le fi) [] ui]
| fi <- ui]
extend_graph le (f, i) (g, j) fs
| i == j = fs
| (or [le g h | (h, _) <- fs]) = fs
| (le g f) = (filter (\(h, _) -> not (le h g)) fs) ++ [(g, j)]
| True = fs

やはり x4 は無理みたいです。

--