defpred S1[ object , Function] means ( dom $2 = proj2 ((dom f) /\ [:{$1},(proj2 (dom f)):]) & ( for y being object st y in dom $2 holds
$2 . y = f . ($1,y) ) );
defpred S2[ object , object ] means ex g being Function st
( $2 = g & S1[$1,g] );
A1:
for x, y, z being object st x in proj1 (dom f) & S2[x,y] & S2[x,z] holds
y = z
proof
let x,
y,
z be
object ;
( x in proj1 (dom f) & S2[x,y] & S2[x,z] implies y = z )
assume
x in proj1 (dom f)
;
( not S2[x,y] or not S2[x,z] or y = z )
given g1 being
Function such that A2:
y = g1
and A3:
S1[
x,
g1]
;
( not S2[x,z] or y = z )
given g2 being
Function such that A4:
z = g2
and A5:
S1[
x,
g2]
;
y = z
hence
y = z
by A2, A3, A4, A5, FUNCT_1:2;
verum
end;
A7:
for x being object st x in proj1 (dom f) holds
ex y being object st S2[x,y]
ex g being Function st
( dom g = proj1 (dom f) & ( for x being object st x in proj1 (dom f) holds
S2[x,g . x] ) )
from FUNCT_1:sch 2(A1, A7);
hence
ex b1 being Function st
( dom b1 = proj1 (dom f) & ( for x being object st x in proj1 (dom f) holds
ex g being Function st
( b1 . x = g & dom g = proj2 ((dom f) /\ [:{x},(proj2 (dom f)):]) & ( for y being object st y in dom g holds
g . y = f . (x,y) ) ) ) )
; verum