A non-volatile semiconductor memory device includes a memory cell array in
which electrically erasable and programmable memory cells are arrayed,
each of the memory cells storing therein a first logic state with a
threshold voltage lower than or equal to a first value or a second logic
state with a threshold voltage higher than or equal to a second value
that is higher than the first value, a data hold circuit for holding
program data and sensing data as read out of the memory cell array, and a
controller configured to control a program sequence, wherein the
controller has the control functions of: a program control function for
applying a program voltage to a selected memory cell of the memory cell
array to let the data shift from the first logic state to the second
logic state; a program verify control function for verifying that the
programmed data of the selected memory cell shifted to the second logic
state; an erratic program verify control function for checking that the
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; and an over-program verify control function for
checking that the 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.