Write Once Memory Codes

A write once memory code (womcode) is a coding scheme that allows messages to be written up to $t$ times in a vector of size $n$ where, at each write the elements in the vector are not decreased. Traditionally, the vector of elements are binary digits $(0,1)$ but recently the model has been extended to include $q$-ary alphabets. Originally developed in the context of punch cards and optical discs, there has recently been renewed interest in womcodes in the context of flash memories where the objective is to reduce the number of program and erase cycles.

Motivation
The atomic unit of flash memory is the floating gate transistor. Data is represented by discrete voltage thresholds that are modified by the injection/removal of electrons from the floating gate. The addition of electric charge causes the cell to be in a programmed state while the removal of electrons corresponds to a cell in an erased state. The process of erasing is considerably costly since this process requires the placement of a high voltage on the silicon substrate. Typically this substrate is shared amongst thousands of cells so that the granularity of a single erase is a few thousand cells. Over time, these repeated erases cause the flash cell to experience wear out where the cell is unable to hold a charge.

Definitions
An $[n,M_1, \ldots, M_t, t]$ $t$-write binary WOM-code $\cal C_b$ is a coding scheme which consists of $n$ cells and $t$ pairs of encoding and decoding maps, denoted by $\cal E_i$ and $\cal D_i$ for $1 \leq i \leq t$. The $t$-write WOM-code $\cal C_b$ satisfies the following properties: 1) $\cal E_i : \{1,\ldots, M_1 \} \to \{0,1\}^n$,

Capacity
Capacity results for write-once memories have been studied in the context of several different models. In what follows, we assume the most popular model where the encoder knows the previous state of the memory but the decoder does not.