[...]
A is an IPv6 host
B is an IPv4 server
T is a translator
X is a client app on A
Y is a server app on B
So X thinks it is running on an IPv4 host which has address
10.6.6.6 (or whatever well-known RFC 1918 address we want to use).
In reality, A is an IPv6 host with address 2001:db8:31::1. When X
wants to talk to Y, it looks up the relevant domain name and sees
address 64.0.0.64. So it opens a TCP connection to 64.0.0.64. A
then generates and IPv6 packet with source 2001:db8:31::1 and
destination <96 fixed bits>:64.0.0.64. T translates the IPv6 packet
into an IPv4 packet with source 10.6.6.6 and destination 64.0.0.64
and then proceeds to NAT, using 2001:db8:31::1 under the hood to
demultiplex rather than 10.6.6.6 because 10.6.6.6 is implicitly
used by ALL clients of T. X sees the <address of T>/64.0.0.64
packets and Y may or may not notice and subsequently may or may not
work around the "IPv4 NAT" in the path.