Logic-based machine learning using a bounded hypothesis space: the lattice structure, refinement operators and a genetic algorithm approach