This is the skeleton for the proof of $\exists x(P(x) \land \forall y(P(y) \to y=x)) \vdash \exists x \forall y(P(y) \leftrightarrow y=x)$ using Fitch-style natural deduction system.
$ \def\fitch#1#2{\quad\begin{array}{|l}#1\\\hline#2\end{array}} \def\Ae#1{\qquad\mathbf{\forall E} \: #1 \\} \def\Ai#1{\qquad\mathbf{\forall I} \: #1 \\} \def\Ee#1{\qquad\mathbf{\exists E} \: #1 \\} \def\Ei#1{\qquad\mathbf{\exists I} \: #1 \\} \def\R#1{\qquad\mathbf{R} \: #1 \\} \def\ci#1{\qquad\mathbf{\land I} \: #1 \\} \def\ce#1{\qquad\mathbf{\land E} \: #1 \\} \def\ii#1{\qquad\mathbf{\to I} \: #1 \\} \def\ie#1{\qquad\mathbf{\to E} \: #1 \\} \def\be#1{\qquad\mathbf{\leftrightarrow E} \: #1 \\} \def\bi#1{\qquad\mathbf{\leftrightarrow I} \: #1 \\} \def\qi#1{\qquad\mathbf{=I}\\} \def\qe#1{\qquad\mathbf{=E} \: #1 \\} \def\ne#1{\qquad\mathbf{\neg E} \: #1 \\} \def\ni#1{\qquad\mathbf{\neg I} \: #1 \\} \def\IP#1{\qquad\mathbf{IP} \: #1 \\} \def\x#1{\qquad\mathbf{X} \: #1 \\} \def\DNE#1{\qquad\mathbf{DNE} \: #1 \\} $ $ \fitch{1.\, \exists x(P(x) \land \forall y(P(y) \to y=x))}{ \fitch{2.\, P(a) \land \forall y(P(y) \to y=a)}{ 3.\, P(a) \ce{2} 4.\, \forall y(P(y) \to y=x) \ce{2} 5.\, P(b) \to b=a \Ae{4} \fitch{6.\, P(b)}{ b=a }\\ \fitch{7.\, b=a}{ \vdots\\ P(b) }\\ P(b) \leftrightarrow b=a\\ \vdots }\\ \exists x \forall y(P(y) \leftrightarrow y=x) } $
In order to use, $\mathbf{\leftrightarrow E}$, I need to show $P(b) \vdash b=a$ and $b=a \vdash P(b)$.
Is this the right approach? How can I justify $P(b)$ for the second subproof ?
EDIT:
Biconditional Introduction and Elimination Rules
$ \fitch{}{ \fitch{i.\, \mathcal{A}}{ j.\, \mathcal{B} }\\ \fitch{k.\, \mathcal{B}}{ l.\, \mathcal{A} }\\ \, \mathcal{A} \leftrightarrow \mathcal{B} \bi{i-j,k-l} } $
$ \fitch{}{ \mathcal{A} \leftrightarrow \mathcal{B}\\ \mathcal{A}\\ \mathcal{B} \be{m,n} } $
$ \fitch{}{ \mathcal{A} \leftrightarrow \mathcal{B}\\ \mathcal{B}\\ \mathcal{A} \be{m,n} } $
Identity elimination rules
$ \fitch{}{ \mathcal{a} = \mathcal{b}\\ \mathcal{A}(...\mathcal{a}...\mathcal{a}...)\\ \mathcal{A}(...\mathcal{b}...\mathcal{a}...) } \fitch{}{ \mathcal{a} = \mathcal{b}\\ \mathcal{A}(...\mathcal{b}...\mathcal{b}...)\\ \mathcal{A}(...\mathcal{a}...\mathcal{b}...) } $