A non-volatile semiconductor memory device includes a memory cell array, a data
hold circuit, and a controller A program control function applies a program voltage
to a selected memory cell to let data shift from a first logic state to a second
logic state. A program verify control function verifies that a programmed data
of the selected memory cell shifted to the second logic state. An erratic program
verify control function checks that a threshold voltage of a memory cell to be
held in the first logic state does not exceed a third value set as an upper limit
value of a variation of the first logic state. An over-program verify control function
checks that a threshold voltage of the selected memory cell shifted to the second
logic state does not exceed a fourth value set as an upper limit thereof.