pyDatalog: поиск отсутствующего элемента в наборе

У меня есть набор из семи номеров. Каждое число связано с одной из пяти букв (от A до E). Каждую букву необходимо представить хотя бы один раз в данном наборе. В наборе со всеми буквами, кроме одного, я хотел бы найти пропущенную букву.

Результатом следующей программы является "[]", означающее, что решение не найдено. Почему Datalog не может найти решение в этом случае?

from pyDatalog import pyDatalog

pyDatalog.create_terms('letter, is_member, all_members')
pyDatalog.create_terms('S0,S1,S2,S3,S4,S5,S6')
pyDatalog.create_terms('L')
pyDatalog.create_terms('X')

# Function to know if a given letter L is present in the set
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S0] == L)
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S1] == L)
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S2] == L)
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S3] == L)
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S4] == L)
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S5] == L)
is_member(L, S0, S1, S2, S3, S4, S5, S6, X) <= (letter[S6] == L)

# Function to know if a given function L is present in the set
all_members(S0, S1, S2, S3, S4, S5, S6, X) <= is_member('A', S0, S1, S2, S3, S4, S5, S6, X) & \
                                         is_member('B', S0, S1, S2, S3, S4, S5, S6, X) & \
                                         is_member('C', S0, S1, S2, S3, S4, S5, S6, X) & \
                                         is_member('D', S0, S1, S2, S3, S4, S5, S6, X) & \
                                         is_member('E', S0, S1, S2, S3, S4, S5, S6, X)

# Associate letter to all but 0 ('E' not present)
+(letter[1] == 'A')
+(letter[2] == 'B')
+(letter[3] == 'C')
+(letter[4] == 'C')
+(letter[5] == 'C')
+(letter[6] == 'D')

# Declare that all 5 letters are present in the set
+(all_members(0,1,2,3,4,5,6))

# What is the letter associated with 0 ? (expects 'E')
print(L == letter[0])

0 ответов

Другие вопросы по тегам