A formalisation of Sturm's theorem in Isabelle with an executable decision procedure