You need to use a double &&:

The reason is that the align and alignat environment both provide pairs of rl aligned equations. So if you want a left aligned point you need to skip over the right aligned point.
If you want to control the spacing in between the columns, then use the alignat in which case you need to manually add the space. Here I have added a \quad for the spacing spacing:

As requested in the comments, here is an alternate use of align which ensures that the start of the last two lines is aligned with the first = of the first line.

Notes:
- A
\phantom{{}={}} was used to ensure that the last two lines are aligned to the text to the right of the =. The additional {} in the \phantom is used to ensure proper spacing is applied around the =. We could also have use \hphantom{} instead, but both will yield identical result in this case.
rlap was used so that the right hand sides is not going to have an effect on the alignment of the subsequent rows.
Code:
\documentclass{article}
\usepackage{amsmath}
\newcommand*{\op}[1]{\operatorname{#1}}
\begin{document}
\noindent
Using \verb|align|:
\begin{align}
\noalign{$\quad \op{f} \op{r} = \op{c}{\op{f}\op{r}} (x_1,...,x_k) = (\op{f}(a_1,...,a_k), \op{r}(b_1,...,b_k))$}
&\text{if } x_i=(x^{\op{f}}_i,x^{\op{r}}_i), &&\text{then } a_i=x^{\op{f}}_i \in \mathcal{S}, b_i=x^{\op{r}}_i \in (\mathcal{A}^)^, &&1 \leq i \leq k\
&\text{if } x_i \in \mathcal{A}^, &&\text{then } a_i=b_i=x_i, &&1 \leq i \leq k
\end{align}
Using \verb|alignat|:
\begin{alignat}{3}
\noalign{$\quad \op{f} * \op{r} = \op{c}{\op{f}\op{r}} (x_1,...,x_k) = (\op{f}(a_1,...,a_k), \op{r}(b_1,...,b_k))$}
&\text{if } x_i=(x^{\op{f}}_i,x^{\op{r}}_i), &&\quad\text{then } a_i=x^{\op{f}}_i \in \mathcal{S}, b_i=x^{\op{r}}_i \in (\mathcal{A}^)^, &&\quad 1 \leq i \leq k\
&\text{if } x_i \in \mathcal{A}^, &&\quad\text{then } a_i=b_i=x_i, &&\quad 1 \leq i \leq k
\end{alignat}
\hrule\medskip\noindent
Alternate alignment with \verb|align|:
\begin{align}
\op{f} * \op{r} &= \op{c}_{\op{f}\op{r}} (x_1,...,x_k) \rlap{${}= (\op{f}(a_1,...,a_k), \op{r}(b_1,...,b_k))$}\
&\phantom{{}={}}\text{if } x_i=(x^{\op{f}}_i,x^{\op{r}}_i), &&\text{then } a_i=x^{\op{f}}_i \in \mathcal{S}, b_i=x^{\op{r}}_i \in (\mathcal{A}^)^, &&1 \leq i \leq k\
&\phantom{{}={}}\text{if } x_i \in \mathcal{A}^, &&\text{then } a_i=b_i=x_i, &&1 \leq i \leq k
\end{align*}
\end{document}
{alignat*}{3}and change&\text{then }to&&\text{then}– mythealias Nov 21 '12 at 11:47\opshould not expand to\operatorname, but rather to\mathrm. Why do you want function names to be upright? Also, never use theminimalclass for MWEs, preferarticle. – egreg Nov 21 '12 at 11:57\sinetc. If it's not like that, then what's the use having\operatorname? – letmaik Nov 21 '12 at 12:07\operatornameadds spacings that are usually not wanted for single letter function names. – egreg Nov 21 '12 at 12:32f \in F(where F is a set of functions) or in my case alsof * rasfandrare just arguments in this scope. – letmaik Nov 21 '12 at 13:47