1. A computer implemented method comprising: accessing, from a memory, a trained probabilistic model of natural source code written in a programming language, the trained probabilistic model arranged to take into account source code analysis output of an analyzer operable with the programming language; operating the analyzer to obtain source code analysis of at least part of a sequence of source code elements, the source code analysis comprising a graph of syntactic structure of the sequence of source code elements; operating the analyzer to determine which variables are in scope at any point in the program, wherein: scope is represented as a set of feature vectors; at least one feature vector comprises a string identifier corresponding to a feature vector variable; the at least one feature vector further comprises a data related to at least one of: how recently the feature vector variable was declared, or how recently the feature vector variable was assigned; and the determination comprises determining whether a string identifier of a given variable is the same as a string identifier corresponding to a feature vector variable in the set of scope feature vector variables; and at a processor: calculating the trained probabilistic model and the source code analysis, one or more predictions of elements of the sequence of source code elements; identifying source code errors by comparing the one or more predicted elements with source code previously generated; and correcting the identified source code errors using the one or more predicted elements.