Theory of Solitons