Can some one explain what is the meaning ( in real life) of anti causal (precursor) part of the channel taps? The channel taps are classified into postcursor (causal) and the precursor (anti-causal) parts.

\begin{equation}y_{k}=\sum_{l=-L_{2}}^{l=L_{1}} h_{l} x_{k-l}+n_{k}\end{equation}

here $h_{l}$ is the $l^{t h}$ tap of the channel and $L_{1}$ and $L_{2}$ are the lengths of the causal and anti-causal part of the channel respectively and $L=L_{1}+L_{2}+1$ is the total length of the channel. In addition, $n_{k}$ represents an additive Gaussian white noise with zero mean and variance
$\sigma_{n}^{2} .$ Arranging the equation above into a matrix form we have

\begin{equation}\begin{aligned}
\mathbf{y}_{k} &amp;=\mathbf{H} \mathbf{x}_{k}+\mathbf{n}_{k} \\
\mathbf{y}_{k} &amp;=\left[y_{k-K_{1}} y_{k-K_{1}+1} \cdots y_{k+K_{2}}\right]^{T} \\
\mathbf{x}_{k} &amp;=\left[x_{k-K_{1}-L_{1}} x_{k-K_{1}-L_{1}+1} \cdots x_{k+K_{2}+L 2}\right]^{T} \\
\mathbf{n}_{k} &amp;=\left[n_{k-K_{1}} n_{k-K_{1}+1} \cdots n_{k+K_{2}}\right]^{T} \\
\mathbf{H} &amp;=\left[\begin{array}{cccccc}
h_{L_{1}} &amp; \cdots &amp; h_{-L_{2}} &amp; \cdots &amp; 0 \\
\vdots &amp; \ddots &amp; \ddots &amp; \ddots &amp; \vdots \\
0 &amp; \cdots &amp; h_{L_{1}} &amp; \cdots &amp; h_{-L_{2}}
\end{array}\right]
\end{aligned}\end{equation}
The anti causal part of the channel span means that at a time $k$, the output of the channel depends on previous symbols and future symbols ? 
how can this be ?
Actual channels are always causal (like everything else in the physical universe).

Actual (discrete-time) channels also sometimes have one tap that is considerably larger than the rest; an example impulse response would be h = [0.1, 1.5, 0.2]. Some authors prefer to define h[0] as the largest tap; in my example, we'd have h[-1] = 0.1, h[0] = 1.5, and h[1] = 0.2. Then, h[-1] would be "anticausal" since it occurs before the impulse is applied at n = 0.

As Marcus says, this is just a model. It has zero effects on the receiver, except on how you write the indices in your algorithms.

Personally, I never worry about this and always define the first tap as h[0] (or rather h[1], if implementing it in Matlab or Julia).