1. A method of creating a self-checking software program, the method comprising: (a) inserting multiple self-checking code sequences into the program, each self-checking code sequence being operable to calculate a function of a portion of the program; (b) inserting a plurality of correctors into the program; (c) assigning the self-checking code sequences to overlapping portions of the program, each portion containing at least one corrector; and (d) assigning values to the correctors, the value of the correctors being chosen such that the function calculated by the self-checking code sequence assigned to a given portion of the program results in a predefined value if the given portion has not been improperly modified.