Ejemplo n.º 1
0
def transversal_yield_lv(Sets: List[PyList], Partial_Transversal: PyList, Complete_Transversal: Var):
  print(f'Sets/[{", ".join([str(S) for S in Sets])}]; Partial_Transversal/{Partial_Transversal}')
  if not Sets:
    yield from unify(Partial_Transversal, Complete_Transversal)
  else:
    (S, Ss) = (Sets[0], Sets[1:])
    Element = Var( )
    for _ in member(Element, S):
      for _ in fails(member)(Element, Partial_Transversal):
        yield from transversal_yield_lv(Ss, Partial_Transversal + PyList([Element]), Complete_Transversal)
Ejemplo n.º 2
0
 def clue_1(self, Houses: SuperSequence):
     """ 1. The English live in the red house.  """
     for _ in member(House(nationality='English', color='red'), Houses):
         yield from self.clue_2(Houses)
Ejemplo n.º 3
0
 def clue_13(self, Houses: SuperSequence):
     """ 13. The Japanese smoke Parliament. """
     for _ in member(House(nationality='Japanese', smoke='Parliament'),
                     Houses):
         yield from self.clue_14(Houses)
Ejemplo n.º 4
0
 def clue_12(self, Houses: SuperSequence):
     """ 12. The Lucky smokers drink juice. """
     for _ in member(House(drink='juice', smoke='Lucky'), Houses):
         yield from self.clue_13(Houses)
Ejemplo n.º 5
0
 def clue_7(self, Houses: SuperSequence):
     """ 7. They smoke Kool in the yellow house. """
     for _ in member(House(smoke='Kool', color='yellow'), Houses):
         yield from self.clue_8(Houses)
Ejemplo n.º 6
0
 def clue_6(self, Houses: SuperSequence):
     """ 6. The Old Gold smokers have snails. """
     for _ in member(House(smoke='Old Gold', pet='snails'), Houses):
         yield from self.clue_7(Houses)
Ejemplo n.º 7
0
 def clue_4(self, Houses: SuperSequence):
     """ 4. The Ukrainians drink tea. """
     for _ in member(House(nationality='Ukrainians', drink='tea'), Houses):
         yield from self.clue_5(Houses)
Ejemplo n.º 8
0
 def clue_3(self, Houses: SuperSequence):
     """ 3. They drink coffee in the green house. """
     for _ in member(House(drink='coffee', color='green'), Houses):
         yield from self.clue_4(Houses)
Ejemplo n.º 9
0
 def clue_2(self, Houses: SuperSequence):
     """ 2. The Spanish have a dog. """
     for _ in member(House(nationality='Spanish', pet='dog'), Houses):
         yield from self.clue_3(Houses)
Ejemplo n.º 10
0
def zebra_problem(Houses):
    for _ in forall([
            # 1. The English live in the red house.
            lambda: member(House(nationality='English', color='red'), Houses),
            # lambda: print_SF(f'After 1: {Houses}', 'Succeed'),

            # 2. The Spanish have a dog.
            lambda: member(House(nationality='Spanish', pet='dog'), Houses),
            # lambda: print_SF(f'After 2: {Houses}', 'Succeed'),

            # 3. They drink coffee in the green house.
            lambda: member(House(drink='coffee', color='green'), Houses),
            # lambda: print_SF(f'After 3: {Houses}', 'Succeed'),

            # 4. The Ukrainians drink tea.
            lambda: member(House(nationality='Ukrainians', drink='tea'), Houses
                           ),
            # lambda: print_SF(f'After 4: {Houses}', 'Succeed'),

            # 5. The green house is immediately to the right of the white house.
            lambda: is_contiguous_in(
                [House(color='white'),
                 House(color='green')], Houses),
            # lambda: print_SF(f'After 5: {Houses}', 'Succeed'),

            # 6. The Old Gold smokers have snails.
            lambda: member(House(smoke='Old Gold', pet='snails'), Houses),
            # lambda: print_SF(f'After 6: {Houses}', 'Succeed'),

            # 7. They smoke Kool in the yellow house.
            lambda: member(House(smoke='Kool', color='yellow'), Houses),
            # lambda: print_SF(f'After 7: {Houses}', 'Succeed'),

            # 8. They drink milk in the middle house.
            # Note the use of a slice. Houses[2] picks the middle house.
            lambda: unify(House(drink='milk'), Houses[2]),
            # lambda: print_SF(f'After 8: {Houses}', 'Succeed'),

            # 9. The Norwegians live in the first house on the left.
            lambda: unify(House(nationality='Norwegians'), Houses.head()),
            # lambda: print_SF(f'After 9: {Houses}', 'Succeed'),

            # 10. The Chesterfield smokers live next to the fox.
            lambda: next_to(House(smoke='Chesterfield'), House(pet='fox'),
                            Houses),
            # lambda: print_SF(f'After 10: {Houses}', 'Succeed'),

            # 11. They smoke Kool in the house next to the horse.
            lambda: next_to(House(smoke='Kool'), House(pet='horse'), Houses),
            # lambda: print_SF(f'After 11: {Houses}', 'Succeed'),

            # 12. The Lucky smokers drink juice.
            lambda: member(House(drink='juice', smoke='Lucky'), Houses),
            # lambda: print_SF(f'After 12: {Houses}', 'Succeed'),

            # 13. The Japanese smoke Parliament.
            lambda: member(House(nationality='Japanese', smoke='Parliament'),
                           Houses),
            # lambda: print_SF(f'After 13: {Houses}', 'Succeed'),

            # 14. The Norwegians live next to the blue house.
            lambda: next_to(House(nationality='Norwegians'), House(color='blue'
                                                                   ), Houses),
            # lambda: print_SF(f'After 14: {Houses}', 'Succeed'),

            # Fill in unmentioned properties.
            lambda: members([House(pet='zebra'),
                             House(drink='water')], Houses),
    ]):
        yield
Ejemplo n.º 11
0
 def clue_2(self, Students: SuperSequence):
     """ 2. Amy studies either Philosophy or English. """
     # Create Major as a local logic variable.
     Major = PyValue()
     for _ in member(Student(name='Amy', major=Major), Students):
         yield from member(Major, self.ListType(['Philosophy', 'English']))