defpred S1[ object , object ] means for Y being set st $1 = Y holds
$2 = f " Y;
A1: for y being object st y in bool (rng f) holds
ex x being object st S1[y,x]
proof
let y be object ; :: thesis: ( y in bool (rng f) implies ex x being object st S1[y,x] )
assume y in bool (rng f) ; :: thesis: ex x being object st S1[y,x]
reconsider y = y as set by TARSKI:1;
take f " y ; :: thesis: S1[y,f " y]
thus S1[y,f " y] ; :: thesis: verum
end;
A2: for y, x1, x2 being object st y in bool (rng f) & S1[y,x1] & S1[y,x2] holds
x1 = x2
proof
let y, x1, x2 be object ; :: thesis: ( y in bool (rng f) & S1[y,x1] & S1[y,x2] implies x1 = x2 )
assume that
y in bool (rng f) and
A3: for Y being set st y = Y holds
x1 = f " Y and
A4: for Y being set st y = Y holds
x2 = f " Y ; :: thesis: x1 = x2
reconsider y = y as set by TARSKI:1;
thus x1 = f " y by A3
.= x2 by A4 ; :: thesis: verum
end;
consider g being Function such that
A5: ( dom g = bool (rng f) & ( for y being object st y in bool (rng f) holds
S1[y,g . y] ) ) from FUNCT_1:sch 2(A2, A1);
take g ; :: thesis: ( dom g = bool (rng f) & ( for Y being set st Y c= rng f holds
g . Y = f " Y ) )

thus ( dom g = bool (rng f) & ( for Y being set st Y c= rng f holds
g . Y = f " Y ) ) by A5; :: thesis: verum