Modelling serendipity in a computational context