Euclidean lattices: theory and applications