docs: def background_knowledge(self):
          '''
          Emits the background knowledge in prolog form for Aleph.
          '''
          modeslist, getters = [self.mode(self.__target_predicate(), [('+', self.db.target_table)], head=True)], []
          determinations, types = [], []
          for (table, ref_table) in self.db.connected.keys():
              if ref_table == self.db.target_table:
                  continue  # Skip backward connections
              modeslist.append(
                  self.mode('%s_has_%s' % (table.lower(), ref_table), [('+', table), ('-', ref_table)], recall='*'))
              determinations.append(
                  ':- determination(%s/1, %s_has_%s/2).' % (self.__target_predicate(), table.lower(), ref_table))
              types.extend(self.concept_type_def(table))
              types.extend(self.concept_type_def(ref_table))
              getters.extend(self.connecting_clause(table, ref_table))
          for table, atts in self.db.cols.items():
              for att in atts:
                  if att == self.db.target_att and table == self.db.target_table or \
                                  att in self.db.fkeys[table] or att == self.db.pkeys[table]:
                      continue
                  modeslist.append(self.mode('%s_%s' % (table, att), [('+', table), ('#', att.lower())], recall='*'))
                  determinations.append(':- determination(%s/1, %s_%s/2).' % (self.__target_predicate(), table, att))
                  types.extend(self.constant_type_def(table, att))
                  getters.extend(self.attribute_clause(table, att))
          return '\n'.join(self.user_settings() + modeslist + determinations + types + getters + self.dump_tables())