I assume package amsmath is loaded (e.g. needed for \iff).
\implies, \impliedby, and \iff adds a surrounding space of \;, that is space of
the amount \thickmuskip. Macro \HalfThickmuskip uses the half of \;.
\implies, \impliedby are composed of the arrow with the equals sign.
Macro \HalfRelbar uses the same equals sign, but the width is scaled by factor 0.5.
\joinrel fixes the side bearings (horizontal space surrounding the glyph shape) and is adjusted to the smaller side bearings of the scaled equals sign in macro \PartJoinrel.
The case of \iff is different, because it is composed by the two arrows that cannot be scaled without affecting the arrow tips. Here the half width of the equals sign is subtracted.
As assumed, package accsupp is used to get a better Unicode representation of the
glyph constructs.
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{graphics}
\usepackage{accsupp}
\makeatletter
\newcommand*{\HalfRelbar}{%
\mathrel{%
\mathpalette\MathResizeHalfWidth=%
}%
}
\newcommand*{\MathResizeHalfWidth}[2]{%
\scalebox{.5}[1]{$\m@th#1#2$}%
}
\newcommand*{\HalfThickmuskip}{%
\mskip.5\muexpr\thickmuskip\relax
}
\newcommand*{\NegHalfEquals}{%
\mathrel{%
\mathpalette\@NegHalfEquals=%
}%
}
\newcommand*{\@NegHalfEquals}[2]{%
\setbox0=\hbox{$\m@th#1#2$}%
\kern-.5\wd0 %
}
\newcommand*{\PartJoinrel}{%
\mathrel{\mkern-2.25mu}% -3mu/2 -1.5mu/2
}
\newcommand*{\Implies}{%
\DOTSB
\protect\HalfThickmuskip
\protect\BeginAccSupp{method=hex,unicode,ActualText=21D2}%
\protect\HalfRelbar
\protect\PartJoinrel
\protect\Rightarrow
\protect\EndAccSupp{}%
\protect\HalfThickmuskip
}
\newcommand*{\Impliedby}{%
\DOTSB
\protect\HalfThickmuskip
\protect\BeginAccSupp{method=hex,unicode,ActualText=21D0}%
\protect\Leftarrow
\protect\PartJoinrel
\protect\HalfRelbar
\protect\EndAccSupp{}%
\protect\HalfThickmuskip
}
\newcommand*{\Iff}{%
\DOTSB
\protect\HalfThickmuskip
\protect\BeginAccSupp{method=hex,unicode,ActualText=21D4}%
\protect\Leftarrow
\protect\joinrel
\protect\NegHalfEquals
\protect\Rightarrow
\protect\EndAccSupp{}%
\protect\HalfThickmuskip
}
\makeatother
\begin{document}
\begin{gather*}
a \implies b_{a \implies b} \\
a \Implies b_{a \Implies b} \\
a \Rightarrow b_{a \Rightarrow b} \\
c \impliedby d_{c \impliedby d} \\
c \Impliedby d_{c \Impliedby d} \\
c \Leftarrow d_{c \Leftarrow d} \\
e \iff f_{e \iff f}\\
e \Iff f_{e \Iff f} \\
e \Leftrightarrow f_{e \Leftrightarrow f} \\
\end{gather*}
\end{document}

\scalebox? Wouldn't it be better to use\NegHalfEqualsfor all the commands? One only sees it clearly if one zooms in, but of course it has to happen:\scaleboxmakes halfellipes out of the halfdiscs at the left and right ends of the=. – Hendrik Vogt Oct 16 '12 at 06:50\NegHalfEquals. – Hendrik Vogt Oct 16 '12 at 09:38\Implies) is at the beginning of a line, the spacing before it remains. Is there an easy way to have the spacing adjacent to the beginning or end of a line disappear? – Lover of Structure Oct 16 '12 at 12:23\hspace{...}could be used, but we are in math here. A symbol can be defined and used without the additional spacing for these situations. – Heiko Oberdiek Oct 16 '12 at 14:05\NegHalfThickmuskipby adding a minus sign; adding this command manually where needed is allright for my purposes. // Final question: Could you point me to an explanation of\DOTSB? (My searches always lead me to explanations of\dotsb.) – Lover of Structure Oct 17 '12 at 00:00\DOTSBis just an internal marker for the "dots" feature ofamsmath. It helps detecting binary operators or relational symbols for\dots. – Heiko Oberdiek Oct 17 '12 at 00:50