funct_1.miz



    begin

    reserve X,X1,X2,Y,Y1,Y2 for set,

p,x,x1,x2,y,y1,y2,z,z1,z2 for object;

    definition

      let X be set;

      :: FUNCT_1:def1

      attr X is Function-like means

      : Def1: for x, y1, y2 st [x, y1] in X & [x, y2] in X holds y1 = y2;

    end

    registration

      cluster empty -> Function-like for set;

      coherence ;

    end

    registration

      cluster Function-like for Relation;

      existence

      proof

        take {} ;

        thus thesis;

      end;

    end

    definition

      mode Function is Function-like Relation;

    end

    registration

      let a,b be object;

      cluster { [a, b]} -> Function-like;

      coherence

      proof

        set X = { [a, b]};

        

         A1: [: {a}, {b}:] = X by ZFMISC_1: 29;

        for x,y1,y2 be object st [x, y1] in X & [x, y2] in X holds y1 = y2

        proof

          let x,y1,y2 be object such that

           A2: [x, y1] in X and

           A3: [x, y2] in X;

          y1 = b by A1, A2, ZFMISC_1: 28;

          hence thesis by A1, A3, ZFMISC_1: 28;

        end;

        hence thesis;

      end;

    end

    reserve f,g,g1,g2,h for Function,

R,S for Relation;

    scheme :: FUNCT_1:sch1

    GraphFunc { A() -> set , P[ object, object] } :

ex f st for x,y be object holds [x, y] in f iff x in A() & P[x, y]

      provided

       A1: for x,y1,y2 be object st P[x, y1] & P[x, y2] holds y1 = y2;

      consider Y such that

       A2: for y be object holds y in Y iff ex x be object st x in A() & P[x, y] from TARSKI:sch 1( A1);

      defpred R[ object] means ex x, y st [x, y] = $1 & P[x, y];

      consider F be set such that

       A3: for p be object holds p in F iff p in [:A(), Y:] & R[p] from XBOOLE_0:sch 1;

      now

        thus for p be object holds p in F implies ex x,y be object st [x, y] = p

        proof

          let p be object;

          p in F implies ex x, y st [x, y] = p & P[x, y] by A3;

          hence thesis;

        end;

        let x, y1, y2;

        assume [x, y1] in F;

        then

        consider x1, z1 such that

         A4: [x1, z1] = [x, y1] and

         A5: P[x1, z1] by A3;

        

         A6: x = x1 & z1 = y1 by A4, XTUPLE_0: 1;

        assume [x, y2] in F;

        then

        consider x2, z2 such that

         A7: [x2, z2] = [x, y2] and

         A8: P[x2, z2] by A3;

        x = x2 & z2 = y2 by A7, XTUPLE_0: 1;

        hence y1 = y2 by A1, A5, A8, A6;

      end;

      then

      reconsider f = F as Function by Def1, RELAT_1:def 1;

      take f;

      let x,y be object;

      thus [x, y] in f implies x in A() & P[x, y]

      proof

        assume

         A9: [x, y] in f;

        then

        consider x1, y1 such that

         A10: [x1, y1] = [x, y] and

         A11: P[x1, y1] by A3;

         [x, y] in [:A(), Y:] by A3, A9;

        hence x in A() by ZFMISC_1: 87;

        x1 = x by A10, XTUPLE_0: 1;

        hence thesis by A10, A11, XTUPLE_0: 1;

      end;

      assume that

       A12: x in A() and

       A13: P[x, y];

      y in Y by A2, A12, A13;

      then [x, y] in [:A(), Y:] by A12, ZFMISC_1: 87;

      hence thesis by A3, A13;

    end;

    definition

      let f;

      let x be object;

      :: FUNCT_1:def2

      func f . x -> set means

      : Def2: [x, it ] in f if x in ( dom f)

      otherwise it = {} ;

      existence

      proof

        hereby

          assume x in ( dom f);

          then

          consider y be object such that

           A1: [x, y] in f by XTUPLE_0:def 12;

          reconsider y as set by TARSKI: 1;

          take y;

          thus [x, y] in f by A1;

        end;

        thus thesis;

      end;

      uniqueness by Def1;

      consistency ;

    end

    theorem :: FUNCT_1:1

    

     Th1: [x, y] in f iff x in ( dom f) & y = (f . x)

    proof

      thus [x, y] in f implies x in ( dom f) & y = (f . x)

      proof

        assume

         A1: [x, y] in f;

        hence

         A2: x in ( dom f) by XTUPLE_0:def 12;

        reconsider y as set by TARSKI: 1;

        y = (f . x) by A1, Def2, A2;

        hence thesis;

      end;

      thus thesis by Def2;

    end;

    theorem :: FUNCT_1:2

    

     Th2: ( dom f) = ( dom g) & (for x st x in ( dom f) holds (f . x) = (g . x)) implies f = g

    proof

      assume that

       A1: ( dom f) = ( dom g) and

       A2: for x st x in ( dom f) holds (f . x) = (g . x);

      let x,y be object;

      thus [x, y] in f implies [x, y] in g

      proof

        assume

         A3: [x, y] in f;

        then

         A4: x in ( dom f) by XTUPLE_0:def 12;

        reconsider y as set by TARSKI: 1;

        (f . x) = y by A3, Def2, A4;

        then (g . x) = y by A2, A4;

        hence thesis by A1, A4, Def2;

      end;

      assume

       A5: [x, y] in g;

      then

       A6: x in ( dom g) by XTUPLE_0:def 12;

      reconsider y as set by TARSKI: 1;

      (g . x) = y by A5, Def2, A6;

      then (f . x) = y by A1, A2, A6;

      hence thesis by A1, A6, Def2;

    end;

    definition

      let f;

      :: original: rng

      redefine

      :: FUNCT_1:def3

      func rng f means

      : Def3: for y be object holds y in it iff ex x be object st x in ( dom f) & y = (f . x);

      compatibility

      proof

        let Y;

        hereby

          assume

           A1: Y = ( rng f);

          let y be object;

          hereby

            assume y in Y;

            then

            consider x be object such that

             A2: [x, y] in f by A1, XTUPLE_0:def 13;

            take x;

            thus x in ( dom f) & y = (f . x) by A2, Th1;

          end;

          given x be object such that

           A3: x in ( dom f) & y = (f . x);

           [x, y] in f by A3, Def2;

          hence y in Y by A1, XTUPLE_0:def 13;

        end;

        assume

         A4: for y be object holds y in Y iff ex x be object st x in ( dom f) & y = (f . x);

        hereby

          let y be object;

          assume y in Y;

          then

          consider x be object such that

           A5: x in ( dom f) & y = (f . x) by A4;

           [x, y] in f by A5, Def2;

          hence y in ( rng f) by XTUPLE_0:def 13;

        end;

        let y be object;

        assume y in ( rng f);

        then

        consider x be object such that

         A6: [x, y] in f by XTUPLE_0:def 13;

        x in ( dom f) & y = (f . x) by A6, Th1;

        hence thesis by A4;

      end;

    end

    theorem :: FUNCT_1:3

    x in ( dom f) implies (f . x) in ( rng f) by Def3;

    theorem :: FUNCT_1:4

    

     Th4: ( dom f) = {x} implies ( rng f) = {(f . x)}

    proof

      assume

       A1: ( dom f) = {x};

      for y be object holds y in ( rng f) iff y in {(f . x)}

      proof

        let y be object;

        thus y in ( rng f) implies y in {(f . x)}

        proof

          assume y in ( rng f);

          then

          consider z be object such that

           A2: z in ( dom f) and

           A3: y = (f . z) by Def3;

          z = x by A1, A2, TARSKI:def 1;

          hence thesis by A3, TARSKI:def 1;

        end;

        assume y in {(f . x)};

        then

         A4: y = (f . x) by TARSKI:def 1;

        x in ( dom f) by A1, TARSKI:def 1;

        hence thesis by A4, Def3;

      end;

      hence thesis by TARSKI: 2;

    end;

    scheme :: FUNCT_1:sch2

    FuncEx { A() -> set , P[ object, object] } :

ex f st ( dom f) = A() & for x st x in A() holds P[x, (f . x)]

      provided

       A1: for x, y1, y2 st x in A() & P[x, y1] & P[x, y2] holds y1 = y2

       and

       A2: for x st x in A() holds ex y st P[x, y];

      defpred R[ object, object] means $1 in A() & P[$1, $2];

      

       A3: for x,y1,y2 be object st R[x, y1] & R[x, y2] holds y1 = y2 by A1;

      consider f be Function such that

       A4: for x,y be object holds [x, y] in f iff x in A() & R[x, y] from GraphFunc( A3);

      take f;

      for x be object holds x in ( dom f) iff x in A()

      proof

        let x be object;

        thus x in ( dom f) implies x in A()

        proof

          assume x in ( dom f);

          then ex y be object st [x, y] in f by XTUPLE_0:def 12;

          hence thesis by A4;

        end;

        assume

         A5: x in A();

        then

        consider y such that

         A6: P[x, y] by A2;

         [x, y] in f by A4, A5, A6;

        hence thesis by XTUPLE_0:def 12;

      end;

      hence

       A7: ( dom f) = A() by TARSKI: 2;

      let x;

      assume

       A8: x in A();

      then

      consider y such that

       A9: P[x, y] by A2;

      reconsider y as set by TARSKI: 1;

       [x, y] in f by A4, A8, A9;

      hence thesis by A7, A8, A9, Def2;

    end;

    scheme :: FUNCT_1:sch3

    Lambda { A() -> set , F( object) -> object } :

ex f be Function st ( dom f) = A() & for x st x in A() holds (f . x) = F(x);

      defpred P[ object, object] means $2 = F($1);

      

       A1: for x st x in A() holds ex y st P[x, y];

      

       A2: for x, y1, y2 st x in A() & P[x, y1] & P[x, y2] holds y1 = y2;

      thus ex f be Function st ( dom f) = A() & for x st x in A() holds P[x, (f . x)] from FuncEx( A2, A1);

    end;

    theorem :: FUNCT_1:5

    

     Th5: X <> {} implies for y holds ex f st ( dom f) = X & ( rng f) = {y}

    proof

      assume

       A1: X <> {} ;

      let y;

      deffunc F( object) = y;

      consider f such that

       A2: ( dom f) = X and

       A3: for x st x in X holds (f . x) = F(x) from Lambda;

      take f;

      thus ( dom f) = X by A2;

      for y1 be object holds y1 in ( rng f) iff y1 = y

      proof

        let y1 be object;

         A4:

        now

          set x = the Element of X;

          assume

           A5: y1 = y;

          (f . x) = y by A1, A3;

          hence y1 in ( rng f) by A1, A2, A5, Def3;

        end;

        now

          assume y1 in ( rng f);

          then ex x be object st x in ( dom f) & y1 = (f . x) by Def3;

          hence y1 = y by A2, A3;

        end;

        hence thesis by A4;

      end;

      hence thesis by TARSKI:def 1;

    end;

    theorem :: FUNCT_1:6

    (for f, g st ( dom f) = X & ( dom g) = X holds f = g) implies X = {}

    proof

      deffunc F( object) = {} ;

      assume

       A1: for f, g st ( dom f) = X & ( dom g) = X holds f = g;

      set x = the Element of X;

      consider f be Function such that

       A2: ( dom f) = X and

       A3: for x st x in X holds (f . x) = F(x) from Lambda;

      assume

       A4: not thesis;

      then

       A5: (f . x) = {} by A3;

      deffunc F( object) = { {} };

      consider g be Function such that

       A6: ( dom g) = X and

       A7: for x st x in X holds (g . x) = F(x) from Lambda;

      (g . x) = { {} } by A4, A7;

      hence contradiction by A1, A2, A6, A5;

    end;

    theorem :: FUNCT_1:7

    ( dom f) = ( dom g) & ( rng f) = {y} & ( rng g) = {y} implies f = g

    proof

      assume that

       A1: ( dom f) = ( dom g) and

       A2: ( rng f) = {y} and

       A3: ( rng g) = {y};

      x in ( dom f) implies (f . x) = (g . x)

      proof

        assume

         A4: x in ( dom f);

        then (f . x) in ( rng f) by Def3;

        then

         A5: (f . x) = y by A2, TARSKI:def 1;

        (g . x) in ( rng g) by A1, A4, Def3;

        hence thesis by A3, A5, TARSKI:def 1;

      end;

      hence thesis by A1, Th2;

    end;

    theorem :: FUNCT_1:8

    Y <> {} or X = {} implies ex f st X = ( dom f) & ( rng f) c= Y

    proof

      assume

       A1: Y <> {} or X = {} ;

       A2:

      now

        set y = the Element of Y;

        deffunc F( object) = y;

        consider f such that

         A3: ( dom f) = X and

         A4: for x st x in X holds (f . x) = F(x) from Lambda;

        assume X <> {} ;

        then

         A5: y in Y by A1;

        take f;

        thus ( dom f) = X by A3;

        for z be object holds z in ( rng f) implies z in Y

        proof

          let z be object;

          assume z in ( rng f);

          then ex x be object st x in ( dom f) & z = (f . x) by Def3;

          hence thesis by A5, A3, A4;

        end;

        hence ( rng f) c= Y;

      end;

      now

        assume

         A6: X = {} ;

        take f = {} ;

        thus ( dom f) = X by A6;

        thus ( rng f) c= Y;

      end;

      hence thesis by A2;

    end;

    theorem :: FUNCT_1:9

    (for y st y in Y holds ex x st x in ( dom f) & y = (f . x)) implies Y c= ( rng f)

    proof

      assume

       A1: for y st y in Y holds ex x st x in ( dom f) & y = (f . x);

      let y be object;

      assume y in Y;

      then ex x st x in ( dom f) & y = (f . x) by A1;

      hence thesis by Def3;

    end;

    notation

      let f, g;

      synonym g * f for f * g;

    end

    registration

      let f, g;

      cluster (g * f) -> Function-like;

      coherence

      proof

        let x, y1, y2;

        assume [x, y1] in (g * f);

        then

        consider z1 be object such that

         A1: [x, z1] in f and

         A2: [z1, y1] in g by RELAT_1:def 8;

        assume [x, y2] in (g * f);

        then

        consider z2 be object such that

         A3: [x, z2] in f and

         A4: [z2, y2] in g by RELAT_1:def 8;

        z1 = z2 by A1, A3, Def1;

        hence thesis by A2, A4, Def1;

      end;

    end

    theorem :: FUNCT_1:10

    for h st (for x holds x in ( dom h) iff x in ( dom f) & (f . x) in ( dom g)) & (for x st x in ( dom h) holds (h . x) = (g . (f . x))) holds h = (g * f)

    proof

      let h;

      assume that

       A1: for x holds x in ( dom h) iff x in ( dom f) & (f . x) in ( dom g) and

       A2: for x st x in ( dom h) holds (h . x) = (g . (f . x));

      now

        let x,y be object;

        hereby

          assume

           A3: [x, y] in h;

          then

           A4: x in ( dom h) by XTUPLE_0:def 12;

          then

           A5: (f . x) in ( dom g) by A1;

          reconsider y1 = (f . x) as object;

          take y1;

          x in ( dom f) by A1, A4;

          hence [x, y1] in f by Def2;

          reconsider yy = y as set by TARSKI: 1;

          yy = (h . x) by A3, A4, Def2

          .= (g . (f . x)) by A2, A4;

          hence [y1, y] in g by A5, Def2;

        end;

        given z be object such that

         A6: [x, z] in f and

         A7: [z, y] in g;

        

         A8: x in ( dom f) by A6, XTUPLE_0:def 12;

        reconsider z as set by TARSKI: 1;

        

         A9: z = (f . x) by A6, Def2, A8;

        

         A10: z in ( dom g) by A7, XTUPLE_0:def 12;

        then

         A11: x in ( dom h) by A1, A8, A9;

        reconsider yy = y as set by TARSKI: 1;

        yy = (g . z) by A7, A10, Def2;

        then y = (h . x) by A2, A9, A11;

        hence [x, y] in h by A11, Def2;

      end;

      hence thesis by RELAT_1:def 8;

    end;

    theorem :: FUNCT_1:11

    

     Th11: x in ( dom (g * f)) iff x in ( dom f) & (f . x) in ( dom g)

    proof

      set h = (g * f);

      hereby

        assume x in ( dom h);

        then

        consider y be object such that

         A1: [x, y] in h by XTUPLE_0:def 12;

        consider z be object such that

         A2: [x, z] in f and

         A3: [z, y] in g by A1, RELAT_1:def 8;

        reconsider z as set by TARSKI: 1;

        thus x in ( dom f) by A2, XTUPLE_0:def 12;

        then z = (f . x) by A2, Def2;

        hence (f . x) in ( dom g) by A3, XTUPLE_0:def 12;

      end;

      assume

       A4: x in ( dom f);

      then

      consider z be object such that

       A5: [x, z] in f by XTUPLE_0:def 12;

      assume (f . x) in ( dom g);

      then

      consider y be object such that

       A6: [(f . x), y] in g by XTUPLE_0:def 12;

      reconsider z as set by TARSKI: 1;

      z = (f . x) by A4, A5, Def2;

      then [x, y] in h by A5, A6, RELAT_1:def 8;

      hence thesis by XTUPLE_0:def 12;

    end;

    theorem :: FUNCT_1:12

    

     Th12: x in ( dom (g * f)) implies ((g * f) . x) = (g . (f . x))

    proof

      set h = (g * f);

      assume

       A1: x in ( dom h);

      then

      consider y be object such that

       A2: [x, y] in h by XTUPLE_0:def 12;

      consider z be object such that

       A3: [x, z] in f and

       A4: [z, y] in g by A2, RELAT_1:def 8;

      reconsider z, y as set by TARSKI: 1;

      x in ( dom f) by A3, XTUPLE_0:def 12;

      then

       A5: z = (f . x) by A3, Def2;

      then (f . x) in ( dom g) by A4, XTUPLE_0:def 12;

      then y = (g . (f . x)) by A4, A5, Def2;

      hence thesis by A1, A2, Def2;

    end;

    theorem :: FUNCT_1:13

    

     Th13: x in ( dom f) implies ((g * f) . x) = (g . (f . x))

    proof

      assume

       A1: x in ( dom f);

      per cases ;

        suppose (f . x) in ( dom g);

        then x in ( dom (g * f)) by A1, Th11;

        hence thesis by Th12;

      end;

        suppose

         A2: not (f . x) in ( dom g);

        then not x in ( dom (g * f)) by Th11;

        

        hence ((g * f) . x) = {} by Def2

        .= (g . (f . x)) by A2, Def2;

      end;

    end;

    theorem :: FUNCT_1:14

    z in ( rng (g * f)) implies z in ( rng g)

    proof

      assume z in ( rng (g * f));

      then

      consider x be object such that

       A1: x in ( dom (g * f)) and

       A2: z = ((g * f) . x) by Def3;

      (f . x) in ( dom g) & ((g * f) . x) = (g . (f . x)) by A1, Th11, Th12;

      hence thesis by A2, Def3;

    end;

    theorem :: FUNCT_1:15

    

     Th15: ( dom (g * f)) = ( dom f) implies ( rng f) c= ( dom g)

    proof

      assume

       A1: ( dom (g * f)) = ( dom f);

      let y be object;

      assume y in ( rng f);

      then ex x be object st x in ( dom f) & y = (f . x) by Def3;

      hence thesis by A1, Th11;

    end;

    theorem :: FUNCT_1:16

    ( rng f) c= Y & (for g, h st ( dom g) = Y & ( dom h) = Y & (g * f) = (h * f) holds g = h) implies Y = ( rng f)

    proof

      assume that

       A1: ( rng f) c= Y and

       A2: for g, h st ( dom g) = Y & ( dom h) = Y & (g * f) = (h * f) holds g = h;

      Y c= ( rng f)

      proof

        deffunc F( object) = {} ;

        let y be object;

        assume that

         A3: y in Y and

         A4: not y in ( rng f);

        defpred P[ object, object] means ($1 = y implies $2 = { {} }) & ($1 <> y implies $2 = {} );

        

         A5: x in Y implies ex y1 st P[x, y1]

        proof

          assume x in Y;

          x = y implies thesis;

          hence thesis;

        end;

        

         A6: for x, y1, y2 st x in Y & P[x, y1] & P[x, y2] holds y1 = y2;

        consider h be Function such that

         A7: ( dom h) = Y and

         A8: for x st x in Y holds P[x, (h . x)] from FuncEx( A6, A5);

        

         A9: ( dom (h * f)) = ( dom f) by A1, A7, RELAT_1: 27;

        consider g be Function such that

         A10: ( dom g) = Y and

         A11: x in Y implies (g . x) = F(x) from Lambda;

        

         A12: ( dom (g * f)) = ( dom f) by A1, A10, RELAT_1: 27;

        x in ( dom f) implies ((g * f) . x) = ((h * f) . x)

        proof

          assume

           A13: x in ( dom f);

          then (f . x) in ( rng f) by Def3;

          then

           A14: (g . (f . x)) = {} & (h . (f . x)) = {} by A1, A4, A11, A8;

          ((g * f) . x) = (g . (f . x)) by A12, A13, Th12;

          hence thesis by A9, A13, A14, Th12;

        end;

        then

         A15: g = h by A2, A10, A7, A12, A9, Th2;

        (g . y) = {} by A3, A11;

        hence contradiction by A3, A8, A15;

      end;

      hence thesis by A1;

    end;

    registration

      let X;

      cluster ( id X) -> Function-like;

      coherence

      proof

        let x, y1, y2;

        assume that

         A1: [x, y1] in ( id X) and

         A2: [x, y2] in ( id X);

        x = y1 by A1, RELAT_1:def 10;

        hence thesis by A2, RELAT_1:def 10;

      end;

    end

    theorem :: FUNCT_1:17

    

     Th17: f = ( id X) iff ( dom f) = X & for x st x in X holds (f . x) = x

    proof

      hereby

        assume

         A1: f = ( id X);

        hence

         A2: ( dom f) = X;

        let x;

        assume

         A3: x in X;

        then [x, x] in f by A1, RELAT_1:def 10;

        hence (f . x) = x by A2, A3, Def2;

      end;

      assume that

       A4: ( dom f) = X and

       A5: for x st x in X holds (f . x) = x;

      now

        let x,y be object;

        hereby

          assume

           A6: [x, y] in f;

          hence

           A7: x in X by A4, Th1;

          y = (f . x) by A6, Th1;

          hence x = y by A5, A7;

        end;

        assume

         A8: x in X;

        then (f . x) = x by A5;

        hence x = y implies [x, y] in f by A4, A8, Th1;

      end;

      hence thesis by RELAT_1:def 10;

    end;

    theorem :: FUNCT_1:18

    

     Th18: x in X implies (( id X) . x) = x by Th17;

    theorem :: FUNCT_1:19

    

     Th19: ( dom (f * ( id X))) = (( dom f) /\ X)

    proof

      for x be object holds x in ( dom (f * ( id X))) iff x in (( dom f) /\ X)

      proof

        let x be object;

        x in ( dom (f * ( id X))) iff x in ( dom f) & x in X

        proof

          thus x in ( dom (f * ( id X))) implies x in ( dom f) & x in X

          proof

            assume x in ( dom (f * ( id X)));

            then

             A1: x in ( dom ( id X)) & (( id X) . x) in ( dom f) by Th11;

            thus thesis by A1, Th17;

          end;

          assume

           A2: x in ( dom f);

          

           A3: ( dom ( id X)) = X;

          assume

           A4: x in X;

          then (( id X) . x) in ( dom f) by A2, Th17;

          hence thesis by A4, A3, Th11;

        end;

        hence thesis by XBOOLE_0:def 4;

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FUNCT_1:20

    x in (( dom f) /\ X) implies (f . x) = ((f * ( id X)) . x)

    proof

      assume x in (( dom f) /\ X);

      then x in X by XBOOLE_0:def 4;

      then (( id X) . x) = x & x in ( dom ( id X)) by Th17;

      hence thesis by Th13;

    end;

    theorem :: FUNCT_1:21

    x in ( dom (( id Y) * f)) iff x in ( dom f) & (f . x) in Y

    proof

      ( dom ( id Y)) = Y;

      hence thesis by Th11;

    end;

    theorem :: FUNCT_1:22

    (( id X) * ( id Y)) = ( id (X /\ Y))

    proof

      

       A1: ( dom (( id X) * ( id Y))) = (( dom ( id X)) /\ Y) by Th19

      .= (X /\ Y);

      

       A2: z in (X /\ Y) implies ((( id X) * ( id Y)) . z) = (( id (X /\ Y)) . z)

      proof

        assume

         A3: z in (X /\ Y);

        then

         A4: z in X by XBOOLE_0:def 4;

        

         A5: z in Y by A3, XBOOLE_0:def 4;

        

        thus ((( id X) * ( id Y)) . z) = (( id X) . (( id Y) . z)) by A1, A3, Th12

        .= (( id X) . z) by A5, Th17

        .= z by A4, Th17

        .= (( id (X /\ Y)) . z) by A3, Th17;

      end;

      (X /\ Y) = ( dom ( id (X /\ Y)));

      hence thesis by A1, A2, Th2;

    end;

    theorem :: FUNCT_1:23

    

     Th23: ( rng f) = ( dom g) & (g * f) = f implies g = ( id ( dom g))

    proof

      assume that

       A1: ( rng f) = ( dom g) and

       A2: (g * f) = f;

      set X = ( dom g);

      x in X implies (g . x) = x

      proof

        assume x in X;

        then ex y be object st y in ( dom f) & (f . y) = x by A1, Def3;

        hence thesis by A2, Th13;

      end;

      hence thesis by Th17;

    end;

    definition

      let f;

      :: FUNCT_1:def4

      attr f is one-to-one means

      : Def4: for x1, x2 st x1 in ( dom f) & x2 in ( dom f) & (f . x1) = (f . x2) holds x1 = x2;

    end

    theorem :: FUNCT_1:24

    

     Th24: f is one-to-one & g is one-to-one implies (g * f) is one-to-one

    proof

      assume that

       A1: f is one-to-one and

       A2: g is one-to-one;

      now

        let x1, x2;

        assume

         A3: x1 in ( dom (g * f)) & x2 in ( dom (g * f));

        then

         A4: ((g * f) . x1) = (g . (f . x1)) & ((g * f) . x2) = (g . (f . x2)) by Th12;

        

         A5: x1 in ( dom f) & x2 in ( dom f) by A3, Th11;

        assume

         A6: ((g * f) . x1) = ((g * f) . x2);

        (f . x1) in ( dom g) & (f . x2) in ( dom g) by A3, Th11;

        then (f . x1) = (f . x2) by A2, A4, A6;

        hence x1 = x2 by A1, A5;

      end;

      hence thesis;

    end;

    theorem :: FUNCT_1:25

    

     Th25: (g * f) is one-to-one & ( rng f) c= ( dom g) implies f is one-to-one

    proof

      assume that

       A1: (g * f) is one-to-one and

       A2: ( rng f) c= ( dom g);

      now

        let x1, x2;

        assume that

         A3: x1 in ( dom f) & x2 in ( dom f) and

         A4: (f . x1) = (f . x2);

        

         A5: x1 in ( dom (g * f)) & x2 in ( dom (g * f)) by A2, A3, RELAT_1: 27;

        ((g * f) . x1) = (g . (f . x1)) & ((g * f) . x2) = (g . (f . x2)) by A3, Th13;

        hence x1 = x2 by A1, A4, A5;

      end;

      hence thesis;

    end;

    theorem :: FUNCT_1:26

    (g * f) is one-to-one & ( rng f) = ( dom g) implies f is one-to-one & g is one-to-one

    proof

      assume that

       A1: (g * f) is one-to-one and

       A2: ( rng f) = ( dom g);

      

       A3: ( dom (g * f)) = ( dom f) by A2, RELAT_1: 27;

      thus f is one-to-one by A1, A2, Th25;

      assume not g is one-to-one;

      then

      consider y1, y2 such that

       A4: y1 in ( dom g) and

       A5: y2 in ( dom g) and

       A6: (g . y1) = (g . y2) & y1 <> y2;

      consider x2 be object such that

       A7: x2 in ( dom f) and

       A8: (f . x2) = y2 by A2, A5, Def3;

      

       A9: ((g * f) . x2) = (g . (f . x2)) by A7, Th13;

      consider x1 be object such that

       A10: x1 in ( dom f) and

       A11: (f . x1) = y1 by A2, A4, Def3;

      ((g * f) . x1) = (g . (f . x1)) by A10, Th13;

      hence contradiction by A1, A6, A10, A11, A7, A8, A3, A9;

    end;

    theorem :: FUNCT_1:27

    f is one-to-one iff for g, h st ( rng g) c= ( dom f) & ( rng h) c= ( dom f) & ( dom g) = ( dom h) & (f * g) = (f * h) holds g = h

    proof

      thus f is one-to-one implies for g, h st ( rng g) c= ( dom f) & ( rng h) c= ( dom f) & ( dom g) = ( dom h) & (f * g) = (f * h) holds g = h

      proof

        assume

         A1: f is one-to-one;

        let g, h such that

         A2: ( rng g) c= ( dom f) & ( rng h) c= ( dom f) and

         A3: ( dom g) = ( dom h) and

         A4: (f * g) = (f * h);

        x in ( dom g) implies (g . x) = (h . x)

        proof

          assume

           A5: x in ( dom g);

          then

           A6: (g . x) in ( rng g) & (h . x) in ( rng h) by A3, Def3;

          ((f * g) . x) = (f . (g . x)) & ((f * h) . x) = (f . (h . x)) by A3, A5, Th13;

          hence thesis by A1, A2, A4, A6;

        end;

        hence thesis by A3, Th2;

      end;

      assume

       A7: for g, h st ( rng g) c= ( dom f) & ( rng h) c= ( dom f) & ( dom g) = ( dom h) & (f * g) = (f * h) holds g = h;

      x1 in ( dom f) & x2 in ( dom f) & (f . x1) = (f . x2) implies x1 = x2

      proof

        assume that

         A8: x1 in ( dom f) and

         A9: x2 in ( dom f) and

         A10: (f . x1) = (f . x2);

        deffunc F( object) = x1;

        consider g be Function such that

         A11: ( dom g) = { {} } and

         A12: for x st x in { {} } holds (g . x) = F(x) from Lambda;

        

         A13: {} in { {} } by TARSKI:def 1;

        then

         A14: (g . {} ) = x1 by A12;

        then ( rng g) = {x1} by A11, Th4;

        then

         A15: ( rng g) c= ( dom f) by A8, ZFMISC_1: 31;

        then

         A16: ( dom (f * g)) = ( dom g) by RELAT_1: 27;

        deffunc F( object) = x2;

        consider h be Function such that

         A17: ( dom h) = { {} } and

         A18: for x st x in { {} } holds (h . x) = F(x) from Lambda;

        

         A19: (h . {} ) = x2 by A18, A13;

        then ( rng h) = {x2} by A17, Th4;

        then

         A20: ( rng h) c= ( dom f) by A9, ZFMISC_1: 31;

        then

         A21: ( dom (f * h)) = ( dom h) by RELAT_1: 27;

        x in ( dom (f * g)) implies ((f * g) . x) = ((f * h) . x)

        proof

          assume

           A22: x in ( dom (f * g));

          then

           A23: (g . x) = x1 by A11, A12, A16;

          ((f * g) . x) = (f . (g . x)) & ((f * h) . x) = (f . (h . x)) by A11, A17, A16, A21, A22, Th12;

          hence thesis by A10, A11, A18, A16, A22, A23;

        end;

        hence thesis by A7, A11, A17, A14, A19, A15, A20, A16, A21, Th2;

      end;

      hence thesis;

    end;

    theorem :: FUNCT_1:28

    ( dom f) = X & ( dom g) = X & ( rng g) c= X & f is one-to-one & (f * g) = f implies g = ( id X)

    proof

      assume that

       A1: ( dom f) = X and

       A2: ( dom g) = X and

       A3: ( rng g) c= X & f is one-to-one and

       A4: (f * g) = f;

      x in X implies (g . x) = x

      proof

        assume

         A5: x in X;

        then (g . x) in ( rng g) & (f . x) = (f . (g . x)) by A2, A4, Def3, Th13;

        hence thesis by A1, A3, A5;

      end;

      hence thesis by A2, Th17;

    end;

    theorem :: FUNCT_1:29

    ( rng (g * f)) = ( rng g) & g is one-to-one implies ( dom g) c= ( rng f)

    proof

      assume that

       A1: ( rng (g * f)) = ( rng g) and

       A2: g is one-to-one;

      let y be object;

      assume

       A3: y in ( dom g);

      then (g . y) in ( rng (g * f)) by A1, Def3;

      then

      consider x be object such that

       A4: x in ( dom (g * f)) and

       A5: (g . y) = ((g * f) . x) by Def3;

      ((g * f) . x) = (g . (f . x)) & (f . x) in ( dom g) by A4, Th11, Th12;

      then

       A6: y = (f . x) by A2, A3, A5;

      x in ( dom f) by A4, Th11;

      hence thesis by A6, Def3;

    end;

    registration

      let X be set;

      cluster ( id X) -> one-to-one;

      coherence

      proof

        let x1, x2;

        assume that

         A1: x1 in ( dom ( id X)) and

         A2: x2 in ( dom ( id X));

        x1 in X by A1;

        then

         A3: (( id X) . x1) = x1 by Th17;

        x2 in X by A2;

        hence thesis by A3, Th17;

      end;

    end

    ::$Canceled

    theorem :: FUNCT_1:31

    (ex g st (g * f) = ( id ( dom f))) implies f is one-to-one

    proof

      given g such that

       A1: (g * f) = ( id ( dom f));

      ( dom (g * f)) = ( dom f) by A1;

      then ( rng f) c= ( dom g) by Th15;

      hence thesis by A1, Th25;

    end;

    registration

      cluster empty -> one-to-one for Function;

      coherence ;

    end

    registration

      cluster one-to-one for Function;

      existence

      proof

        take {} ;

        thus thesis;

      end;

    end

    registration

      let f be one-to-one Function;

      cluster (f ~ ) -> Function-like;

      coherence

      proof

        let x, y1, y2;

        assume that

         A1: [x, y1] in (f ~ ) and

         A2: [x, y2] in (f ~ );

        

         A3: [y2, x] in f by A2, RELAT_1:def 7;

        then

         A4: y2 in ( dom f) by XTUPLE_0:def 12;

        reconsider x as set by TARSKI: 1;

        

         A5: x = (f . y2) by A3, Def2, A4;

        

         A6: [y1, x] in f by A1, RELAT_1:def 7;

        then

         A7: y1 in ( dom f) by XTUPLE_0:def 12;

        then x = (f . y1) by A6, Def2;

        hence thesis by A7, A4, A5, Def4;

      end;

    end

    definition

      let f;

      assume

       A1: f is one-to-one;

      :: FUNCT_1:def5

      func f " -> Function equals

      : Def5: (f ~ );

      coherence by A1;

    end

    theorem :: FUNCT_1:32

    

     Th31: f is one-to-one implies for g be Function holds g = (f " ) iff ( dom g) = ( rng f) & for y, x holds y in ( rng f) & x = (g . y) iff x in ( dom f) & y = (f . x)

    proof

      assume

       A1: f is one-to-one;

      let g be Function;

      thus g = (f " ) implies ( dom g) = ( rng f) & for y, x holds y in ( rng f) & x = (g . y) iff x in ( dom f) & y = (f . x)

      proof

        assume g = (f " );

        then

         A2: g = (f ~ ) by A1, Def5;

        hence ( dom g) = ( rng f) by RELAT_1: 20;

        let y, x;

        thus y in ( rng f) & x = (g . y) implies x in ( dom f) & y = (f . x)

        proof

          assume that

           A3: y in ( rng f) and

           A4: x = (g . y);

          reconsider y as set by TARSKI: 1;

          y in ( dom g) by A2, A3, RELAT_1: 20;

          then [y, x] in g by A4, Def2;

          then

           A5: [x, y] in f by A2, RELAT_1:def 7;

          hence x in ( dom f) by XTUPLE_0:def 12;

          hence thesis by A5, Def2;

        end;

        assume x in ( dom f) & y = (f . x);

        then

         A6: [x, y] in f by Def2;

        hence y in ( rng f) by XTUPLE_0:def 13;

        then

         A7: y in ( dom g) by A2, RELAT_1: 20;

        reconsider x as set by TARSKI: 1;

         [y, x] in g by A2, A6, RELAT_1:def 7;

        hence thesis by A7, Def2;

      end;

      assume that

       A8: ( dom g) = ( rng f) and

       A9: for y, x holds y in ( rng f) & x = (g . y) iff x in ( dom f) & y = (f . x);

      let a,b be object;

      thus [a, b] in g implies [a, b] in (f " )

      proof

        assume

         A10: [a, b] in g;

        reconsider b as set by TARSKI: 1;

        

         A11: a in ( dom g) by XTUPLE_0:def 12, A10;

        then b = (g . a) by A10, Def2;

        then b in ( dom f) & a = (f . b) by A8, A9, A11;

        then [b, a] in f by Def2;

        then [a, b] in (f ~ ) by RELAT_1:def 7;

        hence thesis by A1, Def5;

      end;

      assume [a, b] in (f " );

      then [a, b] in (f ~ ) by A1, Def5;

      then

       A12: [b, a] in f by RELAT_1:def 7;

      then

       A13: b in ( dom f) by XTUPLE_0:def 12;

      reconsider a as set by TARSKI: 1;

      a = (f . b) by A12, Def2, A13;

      then a in ( rng f) & b = (g . a) by A9, A13;

      hence thesis by A8, Def2;

    end;

    theorem :: FUNCT_1:33

    

     Th32: f is one-to-one implies ( rng f) = ( dom (f " )) & ( dom f) = ( rng (f " ))

    proof

      assume f is one-to-one;

      then (f " ) = (f ~ ) by Def5;

      hence thesis by RELAT_1: 20;

    end;

    theorem :: FUNCT_1:34

    

     Th33: f is one-to-one & x in ( dom f) implies x = ((f " ) . (f . x)) & x = (((f " ) * f) . x)

    proof

      assume

       A1: f is one-to-one;

      assume

       A2: x in ( dom f);

      hence x = ((f " ) . (f . x)) by A1, Th31;

      hence thesis by A2, Th13;

    end;

    theorem :: FUNCT_1:35

    

     Th34: f is one-to-one & y in ( rng f) implies y = (f . ((f " ) . y)) & y = ((f * (f " )) . y)

    proof

      assume

       A1: f is one-to-one;

      assume

       A2: y in ( rng f);

      hence

       A3: y = (f . ((f " ) . y)) by A1, Th31;

      ( rng f) = ( dom (f " )) by A1, Th32;

      hence thesis by A2, A3, Th13;

    end;

    theorem :: FUNCT_1:36

    

     Th35: f is one-to-one implies ( dom ((f " ) * f)) = ( dom f) & ( rng ((f " ) * f)) = ( dom f)

    proof

      assume

       A1: f is one-to-one;

      then

       A2: ( rng f) = ( dom (f " )) by Th32;

      then ( rng ((f " ) * f)) = ( rng (f " )) by RELAT_1: 28;

      hence thesis by A1, A2, Th32, RELAT_1: 27;

    end;

    theorem :: FUNCT_1:37

    

     Th36: f is one-to-one implies ( dom (f * (f " ))) = ( rng f) & ( rng (f * (f " ))) = ( rng f)

    proof

      assume

       A1: f is one-to-one;

      then

       A2: ( rng (f " )) = ( dom f) by Th32;

      then ( dom (f * (f " ))) = ( dom (f " )) by RELAT_1: 27;

      hence thesis by A1, A2, Th32, RELAT_1: 28;

    end;

    theorem :: FUNCT_1:38

    f is one-to-one & ( dom f) = ( rng g) & ( rng f) = ( dom g) & (for x, y st x in ( dom f) & y in ( dom g) holds (f . x) = y iff (g . y) = x) implies g = (f " )

    proof

      assume that

       A1: f is one-to-one and

       A2: ( dom f) = ( rng g) and

       A3: ( rng f) = ( dom g) and

       A4: for x, y st x in ( dom f) & y in ( dom g) holds (f . x) = y iff (g . y) = x;

      

       A5: y in ( dom g) implies (g . y) = ((f " ) . y)

      proof

        assume

         A6: y in ( dom g);

        then

         A7: (g . y) in ( dom f) by A2, Def3;

        then (f . (g . y)) = y by A4, A6;

        hence thesis by A1, A7, Th31;

      end;

      ( rng f) = ( dom (f " )) by A1, Th31;

      hence thesis by A3, A5, Th2;

    end;

    theorem :: FUNCT_1:39

    

     Th38: f is one-to-one implies ((f " ) * f) = ( id ( dom f)) & (f * (f " )) = ( id ( rng f))

    proof

      assume

       A1: f is one-to-one;

      

       A2: x in ( dom ((f " ) * f)) implies (((f " ) * f) . x) = x

      proof

        assume x in ( dom ((f " ) * f));

        then x in ( dom f) by A1, Th35;

        hence thesis by A1, Th33;

      end;

      

       A3: x in ( dom (f * (f " ))) implies ((f * (f " )) . x) = x

      proof

        assume x in ( dom (f * (f " )));

        then x in ( rng f) by A1, Th36;

        hence thesis by A1, Th34;

      end;

      ( dom ((f " ) * f)) = ( dom f) by A1, Th35;

      hence ((f " ) * f) = ( id ( dom f)) by A2, Th17;

      ( dom (f * (f " ))) = ( rng f) by A1, Th36;

      hence thesis by A3, Th17;

    end;

    theorem :: FUNCT_1:40

    

     Th39: f is one-to-one implies (f " ) is one-to-one

    proof

      assume

       A1: f is one-to-one;

      let y1, y2;

      assume that

       A2: y1 in ( dom (f " )) and

       A3: y2 in ( dom (f " ));

      y1 in ( rng f) by A1, A2, Th31;

      then

       A4: y1 = (f . ((f " ) . y1)) by A1, Th34;

      y2 in ( rng f) by A1, A3, Th31;

      hence thesis by A1, A4, Th34;

    end;

    registration

      let f be one-to-one Function;

      cluster (f " ) -> one-to-one;

      coherence by Th39;

      let g be one-to-one Function;

      cluster (g * f) -> one-to-one;

      coherence by Th24;

    end

    

     Lm1: ( rng g2) = X & (f * g2) = ( id ( dom g1)) & (g1 * f) = ( id X) implies g1 = g2

    proof

      

       A1: (g1 * (f * g2)) = ((g1 * f) * g2) & (g1 * ( id ( dom g1))) = g1 by RELAT_1: 36, RELAT_1: 51;

      assume ( rng g2) = X & (f * g2) = ( id ( dom g1)) & (g1 * f) = ( id X);

      hence thesis by A1, RELAT_1: 53;

    end;

    theorem :: FUNCT_1:41

    

     Th40: f is one-to-one & ( rng f) = ( dom g) & (g * f) = ( id ( dom f)) implies g = (f " )

    proof

      assume that

       A1: f is one-to-one and

       A2: ( rng f) = ( dom g) & (g * f) = ( id ( dom f));

      (f * (f " )) = ( id ( rng f)) & ( rng (f " )) = ( dom f) by A1, Th32, Th38;

      hence thesis by A2, Lm1;

    end;

    theorem :: FUNCT_1:42

    f is one-to-one & ( rng g) = ( dom f) & (f * g) = ( id ( rng f)) implies g = (f " )

    proof

      assume that

       A1: f is one-to-one and

       A2: ( rng g) = ( dom f) & (f * g) = ( id ( rng f));

      ((f " ) * f) = ( id ( dom f)) & ( dom (f " )) = ( rng f) by A1, Th32, Th38;

      hence thesis by A2, Lm1;

    end;

    theorem :: FUNCT_1:43

    f is one-to-one implies ((f " ) " ) = f

    proof

      assume

       A1: f is one-to-one;

      then ( rng f) = ( dom (f " )) by Th32;

      then

       A2: (f * (f " )) = ( id ( dom (f " ))) by A1, Th38;

      ( dom f) = ( rng (f " )) by A1, Th32;

      hence thesis by A1, A2, Th40;

    end;

    theorem :: FUNCT_1:44

    f is one-to-one & g is one-to-one implies ((g * f) " ) = ((f " ) * (g " ))

    proof

      assume that

       A1: f is one-to-one and

       A2: g is one-to-one;

      for y be object holds y in ( rng (g * f)) iff y in ( dom ((f " ) * (g " )))

      proof

        let y be object;

        thus y in ( rng (g * f)) implies y in ( dom ((f " ) * (g " )))

        proof

          assume y in ( rng (g * f));

          then

          consider x be object such that

           A3: x in ( dom (g * f)) and

           A4: y = ((g * f) . x) by Def3;

          

           A5: (f . x) in ( dom g) by A3, Th11;

          

           A6: y = (g . (f . x)) by A3, A4, Th12;

          then y in ( rng g) by A5, Def3;

          then

           A7: y in ( dom (g " )) by A2, Th31;

          

           A8: x in ( dom f) by A3, Th11;

          ((g " ) . (g . (f . x))) = (((g " ) * g) . (f . x)) by A5, Th13

          .= (( id ( dom g)) . (f . x)) by A2, Th38

          .= (f . x) by A5, Th17;

          then ((g " ) . y) in ( rng f) by A8, A6, Def3;

          then ((g " ) . y) in ( dom (f " )) by A1, Th31;

          hence thesis by A7, Th11;

        end;

        assume

         A9: y in ( dom ((f " ) * (g " )));

        then y in ( dom (g " )) by Th11;

        then y in ( rng g) by A2, Th31;

        then

        consider z be object such that

         A10: z in ( dom g) and

         A11: y = (g . z) by Def3;

        ((g " ) . y) in ( dom (f " )) by A9, Th11;

        then ((g " ) . (g . z)) in ( rng f) by A1, A11, Th31;

        then (((g " ) * g) . z) in ( rng f) by A10, Th13;

        then (( id ( dom g)) . z) in ( rng f) by A2, Th38;

        then z in ( rng f) by A10, Th17;

        then

        consider x be object such that

         A12: x in ( dom f) & z = (f . x) by Def3;

        x in ( dom (g * f)) & y = ((g * f) . x) by A10, A11, A12, Th11, Th13;

        hence thesis by Def3;

      end;

      then

       A13: ( rng (g * f)) = ( dom ((f " ) * (g " ))) by TARSKI: 2;

      for x be object holds x in ( dom (((f " ) * (g " )) * (g * f))) iff x in ( dom (g * f))

      proof

        let x be object;

        thus x in ( dom (((f " ) * (g " )) * (g * f))) implies x in ( dom (g * f)) by Th11;

        assume

         A14: x in ( dom (g * f));

        then ((g * f) . x) in ( rng (g * f)) by Def3;

        hence thesis by A13, A14, Th11;

      end;

      then

       A15: ( dom (((f " ) * (g " )) * (g * f))) = ( dom (g * f)) by TARSKI: 2;

      x in ( dom (g * f)) implies ((((f " ) * (g " )) * (g * f)) . x) = x

      proof

        assume

         A16: x in ( dom (g * f));

        then

         A17: (f . x) in ( dom g) by Th11;

        ((g * f) . x) in ( rng (g * f)) by A16, Def3;

        then

         A18: (g . (f . x)) in ( dom ((f " ) * (g " ))) by A13, A16, Th12;

        

         A19: x in ( dom f) by A16, Th11;

        

        thus ((((f " ) * (g " )) * (g * f)) . x) = (((f " ) * (g " )) . ((g * f) . x)) by A15, A16, Th12

        .= (((f " ) * (g " )) . (g . (f . x))) by A16, Th12

        .= ((f " ) . ((g " ) . (g . (f . x)))) by A18, Th12

        .= ((f " ) . (((g " ) * g) . (f . x))) by A17, Th13

        .= ((f " ) . (( id ( dom g)) . (f . x))) by A2, Th38

        .= ((f " ) . (f . x)) by A17, Th17

        .= x by A1, A19, Th33;

      end;

      then (((f " ) * (g " )) * (g * f)) = ( id ( dom (g * f))) by A15, Th17;

      hence thesis by A1, A2, A13, Th40;

    end;

    theorem :: FUNCT_1:45

    (( id X) " ) = ( id X)

    proof

      ( dom ( id X)) = X;

      then

       A1: ((( id X) " ) * ( id X)) = ( id X) by Th38;

      ( dom (( id X) " )) = ( rng ( id X)) & ( rng ( id X)) = X by Th32;

      hence thesis by A1, Th23;

    end;

    registration

      let f, X;

      cluster (f | X) -> Function-like;

      coherence

      proof

        let x, y1, y2;

        assume [x, y1] in (f | X) & [x, y2] in (f | X);

        then [x, y1] in f & [x, y2] in f by RELAT_1:def 11;

        hence thesis by Def1;

      end;

    end

    theorem :: FUNCT_1:46

    ( dom g) = (( dom f) /\ X) & (for x st x in ( dom g) holds (g . x) = (f . x)) implies g = (f | X)

    proof

      assume that

       A1: ( dom g) = (( dom f) /\ X) and

       A2: for x st x in ( dom g) holds (g . x) = (f . x);

      now

        let x,y be object;

        hereby

          assume

           A3: [x, y] in g;

          then

           A4: x in ( dom g) by XTUPLE_0:def 12;

          hence x in X by A1, XBOOLE_0:def 4;

          

           A5: x in ( dom f) by A1, A4, XBOOLE_0:def 4;

          reconsider yy = y as set by TARSKI: 1;

          yy = (g . x) by A3, A4, Def2

          .= (f . x) by A2, A4;

          hence [x, y] in f by A5, Def2;

        end;

        assume

         A6: x in X;

        assume

         A7: [x, y] in f;

        then

         A8: x in ( dom f) by XTUPLE_0:def 12;

        then

         A9: x in ( dom g) by A1, A6, XBOOLE_0:def 4;

        reconsider yy = y as set by TARSKI: 1;

        yy = (f . x) by A7, A8, Def2

        .= (g . x) by A2, A9;

        hence [x, y] in g by A9, Def2;

      end;

      hence thesis by RELAT_1:def 11;

    end;

    theorem :: FUNCT_1:47

    

     Th46: x in ( dom (f | X)) implies ((f | X) . x) = (f . x)

    proof

      set g = (f | X);

      assume

       A1: x in ( dom g);

      ( dom g) = (( dom f) /\ X) by RELAT_1: 61;

      then

       A2: x in ( dom f) by A1, XBOOLE_0:def 4;

      g c= f & [x, (g . x)] in g by A1, Def2, RELAT_1: 59;

      hence (g . x) = (f . x) by A2, Def2;

    end;

    theorem :: FUNCT_1:48

    

     Th47: x in (( dom f) /\ X) implies ((f | X) . x) = (f . x)

    proof

      assume x in (( dom f) /\ X);

      then x in ( dom (f | X)) by RELAT_1: 61;

      hence thesis by Th46;

    end;

    theorem :: FUNCT_1:49

    

     Th48: x in X implies ((f | X) . x) = (f . x)

    proof

      assume

       A1: x in X;

      per cases ;

        suppose x in ( dom f);

        then x in ( dom (f | X)) by A1, RELAT_1: 57;

        hence thesis by Th46;

      end;

        suppose

         A2: not x in ( dom f);

        then not x in ( dom (f | X)) by RELAT_1: 57;

        

        hence ((f | X) . x) = {} by Def2

        .= (f . x) by A2, Def2;

      end;

    end;

    theorem :: FUNCT_1:50

    x in ( dom f) & x in X implies (f . x) in ( rng (f | X))

    proof

      assume that

       A1: x in ( dom f) and

       A2: x in X;

      x in (( dom f) /\ X) by A1, A2, XBOOLE_0:def 4;

      then

       A3: x in ( dom (f | X)) by RELAT_1: 61;

      ((f | X) . x) = (f . x) by A2, Th48;

      hence thesis by A3, Def3;

    end;

    theorem :: FUNCT_1:51

    X c= Y implies ((f | X) | Y) = (f | X) & ((f | Y) | X) = (f | X) by RELAT_1: 73, RELAT_1: 74;

    theorem :: FUNCT_1:52

    f is one-to-one implies (f | X) is one-to-one

    proof

      assume

       A1: f is one-to-one;

      let x1, x2;

      assume that

       A2: x1 in ( dom (f | X)) and

       A3: x2 in ( dom (f | X));

      x1 in (( dom f) /\ X) by A2, RELAT_1: 61;

      then

       A4: x1 in ( dom f) by XBOOLE_0:def 4;

      x2 in (( dom f) /\ X) by A3, RELAT_1: 61;

      then

       A5: x2 in ( dom f) by XBOOLE_0:def 4;

      ((f | X) . x1) = (f . x1) & ((f | X) . x2) = (f . x2) by A2, A3, Th46;

      hence thesis by A1, A4, A5;

    end;

    registration

      let Y, f;

      cluster (Y |` f) -> Function-like;

      coherence

      proof

        let x, y1, y2;

        assume [x, y1] in (Y |` f) & [x, y2] in (Y |` f);

        then [x, y1] in f & [x, y2] in f by RELAT_1:def 12;

        hence thesis by Def1;

      end;

    end

    theorem :: FUNCT_1:53

    

     Th52: g = (Y |` f) iff (for x holds x in ( dom g) iff x in ( dom f) & (f . x) in Y) & for x st x in ( dom g) holds (g . x) = (f . x)

    proof

      hereby

        assume

         A1: g = (Y |` f);

        hereby

          let x;

          hereby

            assume x in ( dom g);

            then

             A2: [x, (g . x)] in g by Def2;

            then

             A3: [x, (g . x)] in f by A1, RELAT_1:def 12;

            hence x in ( dom f) by XTUPLE_0:def 12;

            then (f . x) = (g . x) by A3, Def2;

            hence (f . x) in Y by A1, A2, RELAT_1:def 12;

          end;

          assume x in ( dom f);

          then

           A4: [x, (f . x)] in f by Def2;

          assume (f . x) in Y;

          then [x, (f . x)] in g by A1, A4, RELAT_1:def 12;

          hence x in ( dom g) by XTUPLE_0:def 12;

        end;

        let x;

        assume x in ( dom g);

        then [x, (g . x)] in g by Def2;

        then

         A5: [x, (g . x)] in f by A1, RELAT_1:def 12;

        then x in ( dom f) by XTUPLE_0:def 12;

        hence (f . x) = (g . x) by A5, Def2;

      end;

      assume that

       A6: for x holds x in ( dom g) iff x in ( dom f) & (f . x) in Y and

       A7: for x st x in ( dom g) holds (g . x) = (f . x);

      now

        let x,y be object;

        hereby

          assume

           A8: [x, y] in g;

          then

           A9: x in ( dom g) by XTUPLE_0:def 12;

          reconsider yy = y as set by TARSKI: 1;

          

           A10: yy = (g . x) by A8, Def2, A9

          .= (f . x) by A7, A9;

          hence y in Y by A6, A9;

          x in ( dom f) by A6, A9;

          hence [x, y] in f by A10, Def2;

        end;

        assume

         A11: y in Y;

        assume

         A12: [x, y] in f;

        then

         A13: y = (f . x) by Th1;

        x in ( dom f) by A12, XTUPLE_0:def 12;

        then

         A14: x in ( dom g) by A6, A11, A13;

        then y = (g . x) by A7, A13;

        hence [x, y] in g by A14, Def2;

      end;

      hence thesis by RELAT_1:def 12;

    end;

    theorem :: FUNCT_1:54

    x in ( dom (Y |` f)) iff x in ( dom f) & (f . x) in Y by Th52;

    theorem :: FUNCT_1:55

    x in ( dom (Y |` f)) implies ((Y |` f) . x) = (f . x) by Th52;

    theorem :: FUNCT_1:56

    ( dom (Y |` f)) c= ( dom f) by Th52;

    theorem :: FUNCT_1:57

    X c= Y implies (Y |` (X |` f)) = (X |` f) & (X |` (Y |` f)) = (X |` f) by RELAT_1: 98, RELAT_1: 99;

    theorem :: FUNCT_1:58

    f is one-to-one implies (Y |` f) is one-to-one

    proof

      assume

       A1: f is one-to-one;

      let x1, x2 such that

       A2: x1 in ( dom (Y |` f)) & x2 in ( dom (Y |` f)) and

       A3: ((Y |` f) . x1) = ((Y |` f) . x2);

      

       A4: x1 in ( dom f) & x2 in ( dom f) by A2, Th52;

      ((Y |` f) . x1) = (f . x1) & ((Y |` f) . x2) = (f . x2) by A2, Th52;

      hence thesis by A1, A3, A4;

    end;

    definition

      let f, X;

      :: original: .:

      redefine

      :: FUNCT_1:def6

      func f .: X means

      : Def6: for y be object holds y in it iff ex x be object st x in ( dom f) & x in X & y = (f . x);

      compatibility

      proof

        let Y;

        hereby

          assume

           A1: Y = (f .: X);

          let y be object;

          hereby

            assume y in Y;

            then

            consider x be object such that

             A2: [x, y] in f and

             A3: x in X by A1, RELAT_1:def 13;

            reconsider x as object;

            take x;

            thus

             A4: x in ( dom f) by A2, XTUPLE_0:def 12;

            reconsider yy = y as set by TARSKI: 1;

            thus x in X by A3;

            yy = (f . x) by A2, A4, Def2;

            hence y = (f . x);

          end;

          given x be object such that

           A5: x in ( dom f) and

           A6: x in X and

           A7: y = (f . x);

           [x, y] in f by A5, A7, Def2;

          hence y in Y by A1, A6, RELAT_1:def 13;

        end;

        assume

         A8: for y be object holds y in Y iff ex x be object st x in ( dom f) & x in X & y = (f . x);

        now

          let y be object;

          hereby

            assume y in Y;

            then

            consider x be object such that

             A9: x in ( dom f) and

             A10: x in X and

             A11: y = (f . x) by A8;

            reconsider x as object;

            take x;

            thus [x, y] in f by A9, A11, Def2;

            thus x in X by A10;

          end;

          given x be object such that

           A12: [x, y] in f and

           A13: x in X;

          x in ( dom f) & y = (f . x) by A12, Th1;

          hence y in Y by A8, A13;

        end;

        hence thesis by RELAT_1:def 13;

      end;

    end

    theorem :: FUNCT_1:59

    

     Th58: x in ( dom f) implies ( Im (f,x)) = {(f . x)}

    proof

      assume

       A1: x in ( dom f);

      for y be object holds y in (f .: {x}) iff y in {(f . x)}

      proof

        let y be object;

        thus y in (f .: {x}) implies y in {(f . x)}

        proof

          assume y in (f .: {x});

          then

          consider z be object such that z in ( dom f) and

           A2: z in {x} and

           A3: y = (f . z) by Def6;

          z = x by A2, TARSKI:def 1;

          hence thesis by A3, TARSKI:def 1;

        end;

        assume y in {(f . x)};

        then

         A4: y = (f . x) by TARSKI:def 1;

        x in {x} by TARSKI:def 1;

        hence thesis by A1, A4, Def6;

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FUNCT_1:60

    x1 in ( dom f) & x2 in ( dom f) implies (f .: {x1, x2}) = {(f . x1), (f . x2)}

    proof

      assume

       A1: x1 in ( dom f) & x2 in ( dom f);

      for y be object holds y in (f .: {x1, x2}) iff y = (f . x1) or y = (f . x2)

      proof

        let y be object;

        

         A2: x1 in {x1, x2} & x2 in {x1, x2} by TARSKI:def 2;

        thus y in (f .: {x1, x2}) implies y = (f . x1) or y = (f . x2)

        proof

          assume y in (f .: {x1, x2});

          then ex x be object st x in ( dom f) & x in {x1, x2} & y = (f . x) by Def6;

          hence thesis by TARSKI:def 2;

        end;

        assume y = (f . x1) or y = (f . x2);

        hence thesis by A1, A2, Def6;

      end;

      hence thesis by TARSKI:def 2;

    end;

    theorem :: FUNCT_1:61

    ((Y |` f) .: X) c= (f .: X)

    proof

      let y be object;

      assume y in ((Y |` f) .: X);

      then

      consider x be object such that

       A1: x in ( dom (Y |` f)) and

       A2: x in X and

       A3: y = ((Y |` f) . x) by Def6;

      y = (f . x) & x in ( dom f) by A1, A3, Th52;

      hence thesis by A2, Def6;

    end;

    theorem :: FUNCT_1:62

    

     Th61: f is one-to-one implies (f .: (X1 /\ X2)) = ((f .: X1) /\ (f .: X2))

    proof

      assume

       A1: f is one-to-one;

      

       A2: ((f .: X1) /\ (f .: X2)) c= (f .: (X1 /\ X2))

      proof

        let y be object;

        assume

         A3: y in ((f .: X1) /\ (f .: X2));

        then y in (f .: X1) by XBOOLE_0:def 4;

        then

        consider x1 be object such that

         A4: x1 in ( dom f) and

         A5: x1 in X1 and

         A6: y = (f . x1) by Def6;

        y in (f .: X2) by A3, XBOOLE_0:def 4;

        then

        consider x2 be object such that

         A7: x2 in ( dom f) and

         A8: x2 in X2 and

         A9: y = (f . x2) by Def6;

        x1 = x2 by A1, A4, A6, A7, A9;

        then x1 in (X1 /\ X2) by A5, A8, XBOOLE_0:def 4;

        hence thesis by A4, A6, Def6;

      end;

      (f .: (X1 /\ X2)) c= ((f .: X1) /\ (f .: X2)) by RELAT_1: 121;

      hence thesis by A2;

    end;

    theorem :: FUNCT_1:63

    (for X1, X2 holds (f .: (X1 /\ X2)) = ((f .: X1) /\ (f .: X2))) implies f is one-to-one

    proof

      assume

       A1: for X1, X2 holds (f .: (X1 /\ X2)) = ((f .: X1) /\ (f .: X2));

      given x1, x2 such that

       A2: x1 in ( dom f) & x2 in ( dom f) and

       A3: (f . x1) = (f . x2) and

       A4: x1 <> x2;

      

       A5: (f .: ( {x1} /\ {x2})) = ((f .: {x1}) /\ (f .: {x2})) by A1;

       {x1} misses {x2} by A4, ZFMISC_1: 11;

      then

       A6: ( {x1} /\ {x2}) = {} ;

      ( Im (f,x1)) = {(f . x1)} & ( Im (f,x2)) = {(f . x2)} by A2, Th58;

      hence contradiction by A3, A6, A5;

    end;

    theorem :: FUNCT_1:64

    f is one-to-one implies (f .: (X1 \ X2)) = ((f .: X1) \ (f .: X2))

    proof

      assume

       A1: f is one-to-one;

      

       A2: (f .: (X1 \ X2)) c= ((f .: X1) \ (f .: X2))

      proof

        let y be object;

        assume y in (f .: (X1 \ X2));

        then

        consider x be object such that

         A3: x in ( dom f) and

         A4: x in (X1 \ X2) and

         A5: y = (f . x) by Def6;

        

         A6: not x in X2 by A4, XBOOLE_0:def 5;

         A7:

        now

          assume y in (f .: X2);

          then ex z be object st z in ( dom f) & z in X2 & y = (f . z) by Def6;

          hence contradiction by A1, A3, A5, A6;

        end;

        y in (f .: X1) by A3, A4, A5, Def6;

        hence thesis by A7, XBOOLE_0:def 5;

      end;

      ((f .: X1) \ (f .: X2)) c= (f .: (X1 \ X2)) by RELAT_1: 122;

      hence thesis by A2;

    end;

    theorem :: FUNCT_1:65

    (for X1, X2 holds (f .: (X1 \ X2)) = ((f .: X1) \ (f .: X2))) implies f is one-to-one

    proof

      assume

       A1: for X1, X2 holds (f .: (X1 \ X2)) = ((f .: X1) \ (f .: X2));

      given x1, x2 such that

       A2: x1 in ( dom f) & x2 in ( dom f) and

       A3: (f . x1) = (f . x2) and

       A4: x1 <> x2;

      

       A5: (f .: ( {x1} \ {x2})) = (f .: {x1}) by A4, ZFMISC_1: 14;

      

       A6: (f .: ( {x1} \ {x2})) = ((f .: {x1}) \ (f .: {x2})) by A1;

      ( Im (f,x1)) = {(f . x1)} & ( Im (f,x2)) = {(f . x2)} by A2, Th58;

      hence contradiction by A3, A5, A6, XBOOLE_1: 37;

    end;

    theorem :: FUNCT_1:66

    X misses Y & f is one-to-one implies (f .: X) misses (f .: Y)

    proof

      assume (X /\ Y) = {} & f is one-to-one;

      then (f .: (X /\ Y)) = {} & (f .: (X /\ Y)) = ((f .: X) /\ (f .: Y)) by Th61;

      hence thesis;

    end;

    theorem :: FUNCT_1:67

    ((Y |` f) .: X) = (Y /\ (f .: X))

    proof

      for y be object holds y in ((Y |` f) .: X) iff y in (Y /\ (f .: X))

      proof

        let y be object;

        thus y in ((Y |` f) .: X) implies y in (Y /\ (f .: X))

        proof

          assume y in ((Y |` f) .: X);

          then

          consider x be object such that

           A1: x in ( dom (Y |` f)) and

           A2: x in X and

           A3: y = ((Y |` f) . x) by Def6;

          

           A4: y = (f . x) by A1, A3, Th52;

          then

           A5: y in Y by A1, Th52;

          x in ( dom f) by A1, Th52;

          then y in (f .: X) by A2, A4, Def6;

          hence thesis by A5, XBOOLE_0:def 4;

        end;

        assume

         A6: y in (Y /\ (f .: X));

        then y in (f .: X) by XBOOLE_0:def 4;

        then

        consider x be object such that

         A7: x in ( dom f) and

         A8: x in X and

         A9: y = (f . x) by Def6;

        y in Y by A6, XBOOLE_0:def 4;

        then

         A10: x in ( dom (Y |` f)) by A7, A9, Th52;

        then ((Y |` f) . x) = (f . x) by Th52;

        hence thesis by A8, A9, A10, Def6;

      end;

      hence thesis by TARSKI: 2;

    end;

    definition

      let f, Y;

      :: original: "

      redefine

      :: FUNCT_1:def7

      func f " Y means

      : Def7: for x holds x in it iff x in ( dom f) & (f . x) in Y;

      compatibility

      proof

        let X;

        hereby

          assume

           A1: X = (f " Y);

          let x;

          hereby

            assume x in X;

            then

             A2: ex y be object st [x, y] in f & y in Y by A1, RELAT_1:def 14;

            hence x in ( dom f) by XTUPLE_0:def 12;

            thus (f . x) in Y by A2, Th1;

          end;

          assume that

           A3: x in ( dom f) and

           A4: (f . x) in Y;

           [x, (f . x)] in f by A3, Th1;

          hence x in X by A1, A4, RELAT_1:def 14;

        end;

        assume

         A5: for x holds x in X iff x in ( dom f) & (f . x) in Y;

        now

          let x be object;

          hereby

            assume

             A6: x in X;

            reconsider y = (f . x) as object;

            take y;

            x in ( dom f) by A5, A6;

            hence [x, y] in f by Def2;

            thus y in Y by A5, A6;

          end;

          given y be object such that

           A7: [x, y] in f and

           A8: y in Y;

          x in ( dom f) & y = (f . x) by A7, Th1;

          hence x in X by A5, A8;

        end;

        hence thesis by RELAT_1:def 14;

      end;

    end

    theorem :: FUNCT_1:68

    

     Th67: (f " (Y1 /\ Y2)) = ((f " Y1) /\ (f " Y2))

    proof

      for x be object holds x in (f " (Y1 /\ Y2)) iff x in ((f " Y1) /\ (f " Y2))

      proof

        let x be object;

        reconsider x as set by TARSKI: 1;

        

         A1: x in (f " Y2) iff (f . x) in Y2 & x in ( dom f) by Def7;

        

         A2: x in (f " (Y1 /\ Y2)) iff (f . x) in (Y1 /\ Y2) & x in ( dom f) by Def7;

        x in (f " Y1) iff (f . x) in Y1 & x in ( dom f) by Def7;

        then x in (f " (Y1 /\ Y2)) iff x in ((f " Y1) /\ (f " Y2)) by A1, A2, XBOOLE_0:def 4;

        hence thesis;

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FUNCT_1:69

    (f " (Y1 \ Y2)) = ((f " Y1) \ (f " Y2))

    proof

      for x be object holds x in (f " (Y1 \ Y2)) iff x in ((f " Y1) \ (f " Y2))

      proof

        let x be object;

        

         A1: x in (f " Y2) iff (f . x) in Y2 & x in ( dom f) by Def7;

        

         A2: x in (f " (Y1 \ Y2)) iff (f . x) in (Y1 \ Y2) & x in ( dom f) by Def7;

        x in (f " Y1) iff (f . x) in Y1 & x in ( dom f) by Def7;

        hence thesis by A1, A2, XBOOLE_0:def 5;

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FUNCT_1:70

    ((R | X) " Y) = (X /\ (R " Y))

    proof

      hereby

        let x be object;

        assume x in ((R | X) " Y);

        then

         A1: ex y be object st [x, y] in (R | X) & y in Y by RELAT_1:def 14;

        then

         A2: x in X by RELAT_1:def 11;

        (R | X) c= R by RELAT_1: 59;

        then x in (R " Y) by A1, RELAT_1:def 14;

        hence x in (X /\ (R " Y)) by A2, XBOOLE_0:def 4;

      end;

      let x be object;

      assume

       A3: x in (X /\ (R " Y));

      then x in (R " Y) by XBOOLE_0:def 4;

      then

      consider y be object such that

       A4: [x, y] in R and

       A5: y in Y by RELAT_1:def 14;

      x in X by A3, XBOOLE_0:def 4;

      then [x, y] in (R | X) by A4, RELAT_1:def 11;

      hence thesis by A5, RELAT_1:def 14;

    end;

    theorem :: FUNCT_1:71

    for f be Function, A,B be set st A misses B holds (f " A) misses (f " B)

    proof

      let f be Function, A,B be set;

      assume A misses B;

      then (A /\ B) = {} ;

      

      then {} = (f " (A /\ B))

      .= ((f " A) /\ (f " B)) by Th67;

      hence thesis;

    end;

    theorem :: FUNCT_1:72

    

     Th71: y in ( rng R) iff (R " {y}) <> {}

    proof

      thus y in ( rng R) implies (R " {y}) <> {}

      proof

        assume y in ( rng R);

        then

         A1: ex x be object st [x, y] in R by XTUPLE_0:def 13;

        y in {y} by TARSKI:def 1;

        hence thesis by A1, RELAT_1:def 14;

      end;

      assume (R " {y}) <> {} ;

      then

      consider x be object such that

       A2: x in (R " {y}) by XBOOLE_0:def 1;

      consider z be object such that

       A3: [x, z] in R and

       A4: z in {y} by A2, RELAT_1:def 14;

      z = y by A4, TARSKI:def 1;

      hence thesis by A3, XTUPLE_0:def 13;

    end;

    theorem :: FUNCT_1:73

    (for y st y in Y holds (R " {y}) <> {} ) implies Y c= ( rng R)

    proof

      assume

       A1: for y st y in Y holds (R " {y}) <> {} ;

      let y be object;

      assume y in Y;

      then (R " {y}) <> {} by A1;

      hence thesis by Th71;

    end;

    theorem :: FUNCT_1:74

    

     Th73: (for y st y in ( rng f) holds ex x st (f " {y}) = {x}) iff f is one-to-one

    proof

      thus (for y st y in ( rng f) holds ex x st (f " {y}) = {x}) implies f is one-to-one

      proof

        assume

         A1: for y st y in ( rng f) holds ex x st (f " {y}) = {x};

        let x1, x2;

        assume that

         A2: x1 in ( dom f) and

         A3: x2 in ( dom f);

        (f . x1) in ( rng f) by A2, Def3;

        then

        consider y1 such that

         A4: (f " {(f . x1)}) = {y1} by A1;

        (f . x2) in ( rng f) by A3, Def3;

        then

        consider y2 such that

         A5: (f " {(f . x2)}) = {y2} by A1;

        (f . x1) in {(f . x1)} by TARSKI:def 1;

        then x1 in {y1} by A2, A4, Def7;

        then

         A6: y1 = x1 by TARSKI:def 1;

        (f . x2) in {(f . x2)} by TARSKI:def 1;

        then x2 in {y2} by A3, A5, Def7;

        hence thesis by A4, A5, A6, TARSKI:def 1;

      end;

      assume

       A7: f is one-to-one;

      let y;

      assume y in ( rng f);

      then

      consider x be object such that

       A8: x in ( dom f) & y = (f . x) by Def3;

      take x;

      for z be object holds z in (f " {y}) iff z = x

      proof

        let z be object;

        thus z in (f " {y}) implies z = x

        proof

          assume

           A9: z in (f " {y});

          then (f . z) in {y} by Def7;

          then

           A10: (f . z) = y by TARSKI:def 1;

          z in ( dom f) by A9, Def7;

          hence thesis by A7, A8, A10;

        end;

        y in {y} by TARSKI:def 1;

        hence thesis by A8, Def7;

      end;

      hence thesis by TARSKI:def 1;

    end;

    theorem :: FUNCT_1:75

    

     Th74: (f .: (f " Y)) c= Y

    proof

      let y be object;

      assume y in (f .: (f " Y));

      then ex x be object st x in ( dom f) & x in (f " Y) & y = (f . x) by Def6;

      hence thesis by Def7;

    end;

    theorem :: FUNCT_1:76

    

     Th75: X c= ( dom R) implies X c= (R " (R .: X))

    proof

      assume

       A1: X c= ( dom R);

      let x be object;

      assume

       A2: x in X;

      then

      consider Rx be object such that

       A3: [x, Rx] in R by A1, XTUPLE_0:def 12;

      Rx in (R .: X) by A2, A3, RELAT_1:def 13;

      hence thesis by A3, RELAT_1:def 14;

    end;

    theorem :: FUNCT_1:77

    Y c= ( rng f) implies (f .: (f " Y)) = Y

    proof

      assume

       A1: Y c= ( rng f);

      thus (f .: (f " Y)) c= Y by Th74;

      let y be object;

      assume

       A2: y in Y;

      then

      consider x be object such that

       A3: x in ( dom f) & y = (f . x) by A1, Def3;

      x in (f " Y) by A2, A3, Def7;

      hence thesis by A3, Def6;

    end;

    theorem :: FUNCT_1:78

    (f .: (f " Y)) = (Y /\ (f .: ( dom f)))

    proof

      (f .: (f " Y)) c= Y & (f .: (f " Y)) c= (f .: ( dom f)) by Th74, RELAT_1: 114;

      hence (f .: (f " Y)) c= (Y /\ (f .: ( dom f))) by XBOOLE_1: 19;

      let y be object;

      assume

       A1: y in (Y /\ (f .: ( dom f)));

      then y in (f .: ( dom f)) by XBOOLE_0:def 4;

      then

      consider x be object such that

       A2: x in ( dom f) and x in ( dom f) and

       A3: y = (f . x) by Def6;

      y in Y by A1, XBOOLE_0:def 4;

      then x in (f " Y) by A2, A3, Def7;

      hence thesis by A2, A3, Def6;

    end;

    theorem :: FUNCT_1:79

    

     Th78: (f .: (X /\ (f " Y))) c= ((f .: X) /\ Y)

    proof

      let y be object;

      assume y in (f .: (X /\ (f " Y)));

      then

      consider x be object such that

       A1: x in ( dom f) and

       A2: x in (X /\ (f " Y)) and

       A3: y = (f . x) by Def6;

      x in (f " Y) by A2, XBOOLE_0:def 4;

      then

       A4: y in Y by A3, Def7;

      x in X by A2, XBOOLE_0:def 4;

      then y in (f .: X) by A1, A3, Def6;

      hence thesis by A4, XBOOLE_0:def 4;

    end;

    theorem :: FUNCT_1:80

    (f .: (X /\ (f " Y))) = ((f .: X) /\ Y)

    proof

      thus (f .: (X /\ (f " Y))) c= ((f .: X) /\ Y) by Th78;

      let y be object;

      assume

       A1: y in ((f .: X) /\ Y);

      then y in (f .: X) by XBOOLE_0:def 4;

      then

      consider x be object such that

       A2: x in ( dom f) and

       A3: x in X and

       A4: y = (f . x) by Def6;

      y in Y by A1, XBOOLE_0:def 4;

      then x in (f " Y) by A2, A4, Def7;

      then x in (X /\ (f " Y)) by A3, XBOOLE_0:def 4;

      hence thesis by A2, A4, Def6;

    end;

    theorem :: FUNCT_1:81

    (X /\ (R " Y)) c= (R " ((R .: X) /\ Y))

    proof

      let x be object;

      assume

       A1: x in (X /\ (R " Y));

      then x in (R " Y) by XBOOLE_0:def 4;

      then

      consider Rx be object such that

       A2: [x, Rx] in R and

       A3: Rx in Y by RELAT_1:def 14;

      x in X by A1, XBOOLE_0:def 4;

      then Rx in (R .: X) by A2, RELAT_1:def 13;

      then Rx in ((R .: X) /\ Y) by A3, XBOOLE_0:def 4;

      hence thesis by A2, RELAT_1:def 14;

    end;

    theorem :: FUNCT_1:82

    

     Th81: f is one-to-one implies (f " (f .: X)) c= X

    proof

      assume

       A1: f is one-to-one;

      let x be object;

      assume

       A2: x in (f " (f .: X));

      then (f . x) in (f .: X) by Def7;

      then

       A3: ex z be object st z in ( dom f) & z in X & (f . x) = (f . z) by Def6;

      x in ( dom f) by A2, Def7;

      hence thesis by A1, A3;

    end;

    theorem :: FUNCT_1:83

    (for X holds (f " (f .: X)) c= X) implies f is one-to-one

    proof

      assume

       A1: for X holds (f " (f .: X)) c= X;

      given x1, x2 such that

       A2: x1 in ( dom f) and

       A3: x2 in ( dom f) and

       A4: (f . x1) = (f . x2) & x1 <> x2;

      

       A5: (f " (f .: {x1})) c= {x1} by A1;

      

       A6: ( Im (f,x2)) = {(f . x2)} by A3, Th58;

      

       A7: ( Im (f,x1)) = {(f . x1)} by A2, Th58;

      (f . x1) in ( rng f) by A2, Def3;

      then (f " (f .: {x1})) <> {} by A7, Th71;

      then (f " (f .: {x1})) = {x1} by A5, ZFMISC_1: 33;

      hence contradiction by A1, A4, A7, A6, ZFMISC_1: 3;

    end;

    theorem :: FUNCT_1:84

    f is one-to-one implies (f .: X) = ((f " ) " X)

    proof

      assume

       A1: f is one-to-one;

      for y be object holds y in (f .: X) iff y in ((f " ) " X)

      proof

        let y be object;

        thus y in (f .: X) implies y in ((f " ) " X)

        proof

          assume y in (f .: X);

          then

          consider x be object such that

           A2: x in ( dom f) and

           A3: x in X and

           A4: y = (f . x) by Def6;

          y in ( rng f) by A2, A4, Def3;

          then

           A5: y in ( dom (f " )) by A1, Th31;

          ((f " ) . (f . x)) = x by A1, A2, Th31;

          hence thesis by A3, A4, A5, Def7;

        end;

        assume

         A6: y in ((f " ) " X);

        then

         A7: ((f " ) . y) in X by Def7;

        y in ( dom (f " )) by A6, Def7;

        then y in ( rng f) by A1, Th31;

        then

        consider x be object such that

         A8: x in ( dom f) & y = (f . x) by Def3;

        ((f " ) . y) = x by A1, A8, Th33;

        hence thesis by A7, A8, Def6;

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FUNCT_1:85

    f is one-to-one implies (f " Y) = ((f " ) .: Y)

    proof

      assume

       A1: f is one-to-one;

      for x be object holds x in (f " Y) iff x in ((f " ) .: Y)

      proof

        let x be object;

        thus x in (f " Y) implies x in ((f " ) .: Y)

        proof

          assume

           A2: x in (f " Y);

          then

           A3: (f . x) in Y by Def7;

          

           A4: x in ( dom f) by A2, Def7;

          then (f . x) in ( rng f) by Def3;

          then

           A5: (f . x) in ( dom (f " )) by A1, Th31;

          ((f " ) . (f . x)) = x by A1, A4, Th31;

          hence thesis by A3, A5, Def6;

        end;

        assume x in ((f " ) .: Y);

        then

        consider y be object such that

         A6: y in ( dom (f " )) and

         A7: y in Y and

         A8: x = ((f " ) . y) by Def6;

        ( dom (f " )) = ( rng f) by A1, Th31;

        then y = (f . x) & x in ( dom f) by A1, A6, A8, Th31;

        hence thesis by A7, Def7;

      end;

      hence thesis by TARSKI: 2;

    end;

    theorem :: FUNCT_1:86

    Y = ( rng f) & ( dom g) = Y & ( dom h) = Y & (g * f) = (h * f) implies g = h

    proof

      assume that

       A1: Y = ( rng f) and

       A2: ( dom g) = Y & ( dom h) = Y and

       A3: (g * f) = (h * f);

      y in Y implies (g . y) = (h . y)

      proof

        assume y in Y;

        then

        consider x be object such that

         A4: x in ( dom f) & y = (f . x) by A1, Def3;

        ((g * f) . x) = (g . y) by A4, Th13;

        hence thesis by A3, A4, Th13;

      end;

      hence thesis by A2, Th2;

    end;

    theorem :: FUNCT_1:87

    (f .: X1) c= (f .: X2) & X1 c= ( dom f) & f is one-to-one implies X1 c= X2

    proof

      assume that

       A1: (f .: X1) c= (f .: X2) and

       A2: X1 c= ( dom f) and

       A3: f is one-to-one;

      let x be object;

      assume

       A4: x in X1;

      then (f . x) in (f .: X1) by A2, Def6;

      then ex x2 be object st x2 in ( dom f) & x2 in X2 & (f . x) = (f . x2) by A1, Def6;

      hence thesis by A2, A3, A4;

    end;

    theorem :: FUNCT_1:88

    

     Th87: (f " Y1) c= (f " Y2) & Y1 c= ( rng f) implies Y1 c= Y2

    proof

      assume that

       A1: (f " Y1) c= (f " Y2) and

       A2: Y1 c= ( rng f);

      let y be object;

      assume

       A3: y in Y1;

      then

      consider x be object such that

       A4: x in ( dom f) and

       A5: y = (f . x) by A2, Def3;

      x in (f " Y1) by A3, A4, A5, Def7;

      hence thesis by A1, A5, Def7;

    end;

    theorem :: FUNCT_1:89

    f is one-to-one iff for y holds ex x st (f " {y}) c= {x}

    proof

      (for y holds ex x st (f " {y}) c= {x}) iff for y st y in ( rng f) holds ex x st (f " {y}) = {x}

      proof

        thus (for y holds ex x st (f " {y}) c= {x}) implies for y st y in ( rng f) holds ex x st (f " {y}) = {x}

        proof

          assume

           A1: for y holds ex x st (f " {y}) c= {x};

          let y;

          consider x such that

           A2: (f " {y}) c= {x} by A1;

          assume y in ( rng f);

          then

          consider x1 be object such that

           A3: x1 in ( dom f) and

           A4: y = (f . x1) by Def3;

          take x;

          (f . x1) in {y} by A4, TARSKI:def 1;

          then (f " {y}) <> {} by A3, Def7;

          hence thesis by A2, ZFMISC_1: 33;

        end;

        assume

         A5: for y st y in ( rng f) holds ex x st (f " {y}) = {x};

        let y;

         A6:

        now

          set x = the set;

          assume

           A7: not y in ( rng f);

          take x;

          ( rng f) misses {y} by A7, ZFMISC_1: 50;

          then (f " {y}) = {} by RELAT_1: 138;

          hence (f " {y}) c= {x};

        end;

        now

          assume y in ( rng f);

          then

          consider x such that

           A8: (f " {y}) = {x} by A5;

          take x;

          thus (f " {y}) c= {x} by A8;

        end;

        hence thesis by A6;

      end;

      hence thesis by Th73;

    end;

    theorem :: FUNCT_1:90

    ( rng R) c= ( dom S) implies (R " X) c= ((R * S) " (S .: X))

    proof

      assume

       A1: ( rng R) c= ( dom S);

      let x be object;

      assume x in (R " X);

      then

      consider Rx be object such that

       A2: [x, Rx] in R and

       A3: Rx in X by RELAT_1:def 14;

      Rx in ( rng R) by A2, XTUPLE_0:def 13;

      then

      consider SRx be object such that

       A4: [Rx, SRx] in S by A1, XTUPLE_0:def 12;

      SRx in (S .: X) & [x, SRx] in (R * S) by A2, A3, A4, RELAT_1:def 8, RELAT_1:def 13;

      hence thesis by RELAT_1:def 14;

    end;

    theorem :: FUNCT_1:91

    for f be Function st (f " X) = (f " Y) & X c= ( rng f) & Y c= ( rng f) holds X = Y by Th87;

    begin

    reserve e,u for object,

A for Subset of X;

    theorem :: FUNCT_1:92

    (( id X) .: A) = A

    proof

      now

        let e be object;

        thus e in A implies ex u be object st u in ( dom ( id X)) & u in A & e = (( id X) . u)

        proof

          assume

           A1: e in A;

          take e;

          thus e in ( dom ( id X)) by A1;

          thus e in A by A1;

          thus thesis by A1, Th17;

        end;

        assume ex u be object st u in ( dom ( id X)) & u in A & e = (( id X) . u);

        hence e in A by Th17;

      end;

      hence thesis by Def6;

    end;

    definition

      let f be Function;

      :: original: empty-yielding

      redefine

      :: FUNCT_1:def8

      attr f is empty-yielding means

      : Def8: for x st x in ( dom f) holds (f . x) is empty;

      compatibility

      proof

        hereby

          assume

           A1: f is empty-yielding;

          let x;

          assume x in ( dom f);

          then (f . x) in ( rng f) by Def3;

          hence (f . x) is empty by A1, RELAT_1: 149;

        end;

        assume

         A2: for x st x in ( dom f) holds (f . x) is empty;

        let s be object;

        assume s in ( rng f);

        then ex e be object st e in ( dom f) & s = (f . e) by Def3;

        then s = {} by A2;

        hence thesis by TARSKI:def 1;

      end;

    end

    definition

      let F be Function;

      :: original: non-empty

      redefine

      :: FUNCT_1:def9

      attr F is non-empty means

      : Def9: for n be object st n in ( dom F) holds (F . n) is non empty;

      compatibility

      proof

        thus F is non-empty implies for n be object st n in ( dom F) holds (F . n) is non empty by Def3;

        assume

         A1: for n be object st n in ( dom F) holds (F . n) is non empty;

        assume {} in ( rng F);

        then ex i be object st i in ( dom F) & (F . i) = {} by Def3;

        hence contradiction by A1;

      end;

    end

    registration

      cluster non-empty for Function;

      existence

      proof

        take {} ;

        let x be object;

        thus thesis;

      end;

    end

    scheme :: FUNCT_1:sch4

    LambdaB { D() -> non empty set , F( object) -> object } :

ex f be Function st ( dom f) = D() & for d be Element of D() holds (f . d) = F(d);

      consider f be Function such that

       A1: ( dom f) = D() & for d be object st d in D() holds (f . d) = F(d) from Lambda;

      take f;

      thus thesis by A1;

    end;

    registration

      let f be non-empty Function;

      cluster ( rng f) -> with_non-empty_elements;

      coherence

      proof

        assume {} in ( rng f);

        then ex x be object st x in ( dom f) & {} = (f . x) by Def3;

        hence thesis by Def9;

      end;

    end

    definition

      let f be Function;

      :: FUNCT_1:def10

      attr f is constant means

      : Def10: x in ( dom f) & y in ( dom f) implies (f . x) = (f . y);

    end

    theorem :: FUNCT_1:93

    for A,B be set, f be Function st A c= ( dom f) & (f .: A) c= B holds A c= (f " B)

    proof

      let A,B be set, f be Function;

      assume A c= ( dom f);

      then

       A1: A c= (f " (f .: A)) by Th75;

      assume (f .: A) c= B;

      then (f " (f .: A)) c= (f " B) by RELAT_1: 143;

      hence thesis by A1;

    end;

    theorem :: FUNCT_1:94

    for f be Function st X c= ( dom f) & f is one-to-one holds (f " (f .: X)) = X

    proof

      let f be Function such that

       A1: X c= ( dom f) and

       A2: f is one-to-one;

      thus (f " (f .: X)) c= X by A2, Th81;

      let x be object;

      assume

       A3: x in X;

      then (f . x) in (f .: X) by A1, Def6;

      hence thesis by A1, A3, Def7;

    end;

    definition

      let f, g;

      :: original: =

      redefine

      :: FUNCT_1:def11

      pred f = g means ( dom f) = ( dom g) & for x st x in ( dom f) holds (f . x) = (g . x);

      compatibility by Th2;

    end

    registration

      cluster non-empty non empty for Function;

      existence

      proof

        consider f such that

         A1: ( dom f) = { {} } and

         A2: ( rng f) = { { {} }} by Th5;

        take f;

         not {} in ( rng f) by A2, TARSKI:def 1;

        hence f is non-empty;

        thus thesis by A1;

      end;

    end

    registration

      let a be non-empty non empty Function;

      let i be Element of ( dom a);

      cluster (a . i) -> non empty;

      coherence

      proof

        (a . i) in ( rng a) by Def3;

        hence thesis by RELAT_1:def 9;

      end;

    end

    registration

      let f be Function;

      cluster -> Function-like for Subset of f;

      coherence by Def1;

    end

    theorem :: FUNCT_1:95

    for f,g be Function, D be set st D c= ( dom f) & D c= ( dom g) holds (f | D) = (g | D) iff for x be set st x in D holds (f . x) = (g . x)

    proof

      let f,g be Function;

      let D be set;

      assume that

       A1: D c= ( dom f) and

       A2: D c= ( dom g);

      

       A3: ( dom (g | D)) = (( dom g) /\ D) by RELAT_1: 61

      .= D by A2, XBOOLE_1: 28;

      hereby

        assume

         A4: (f | D) = (g | D);

        hereby

          let x be set;

          assume

           A5: x in D;

          

          hence (f . x) = ((g | D) . x) by A4, Th48

          .= (g . x) by A5, Th48;

        end;

      end;

      assume

       A6: for x be set st x in D holds (f . x) = (g . x);

       A7:

      now

        let x be object;

        assume

         A8: x in D;

        

        hence ((f | D) . x) = (f . x) by Th48

        .= (g . x) by A6, A8

        .= ((g | D) . x) by A8, Th48;

      end;

      ( dom (f | D)) = (( dom f) /\ D) by RELAT_1: 61

      .= D by A1, XBOOLE_1: 28;

      hence thesis by A3, A7;

    end;

    theorem :: FUNCT_1:96

    for f,g be Function, X be set st ( dom f) = ( dom g) & (for x be set st x in X holds (f . x) = (g . x)) holds (f | X) = (g | X)

    proof

      let f,g be Function, X be set such that

       A1: ( dom f) = ( dom g) and

       A2: for x be set st x in X holds (f . x) = (g . x);

      

       A3: ( dom (f | X)) = (( dom f) /\ X) by RELAT_1: 61;

      then

       A4: ( dom (f | X)) = ( dom (g | X)) by A1, RELAT_1: 61;

      now

        let x be object;

        assume

         A5: x in ( dom (f | X));

        then

         A6: x in X by A3, XBOOLE_0:def 4;

        ((f | X) . x) = (f . x) & ((g | X) . x) = (g . x) by A4, A5, Th46;

        hence ((f | X) . x) = ((g | X) . x) by A2, A6;

      end;

      hence thesis by A4;

    end;

    theorem :: FUNCT_1:97

    

     Th96: ( rng (f | {X})) c= {(f . X)}

    proof

      let x be object;

      assume x in ( rng (f | {X}));

      then

      consider y be object such that

       A1: y in ( dom (f | {X})) and

       A2: x = ((f | {X}) . y) by Def3;

      ( dom (f | {X})) c= {X} by RELAT_1: 58;

      then y = X by A1, TARSKI:def 1;

      then x = (f . X) by A1, A2, Th46;

      hence thesis by TARSKI:def 1;

    end;

    theorem :: FUNCT_1:98

    X in ( dom f) implies ( rng (f | {X})) = {(f . X)}

    proof

      

       A1: X in {X} by TARSKI:def 1;

      assume X in ( dom f);

      then

       A2: X in ( dom (f | {X})) by A1, RELAT_1: 57;

      thus ( rng (f | {X})) c= {(f . X)} by Th96;

      let x be object;

      assume x in {(f . X)};

      then x = (f . X) by TARSKI:def 1;

      then x = ((f | {X}) . X) by A2, Th46;

      hence thesis by A2, Def3;

    end;

    registration

      cluster empty -> constant for Function;

      coherence ;

    end

    registration

      let f be constant Function;

      cluster ( rng f) -> trivial;

      coherence

      proof

        per cases ;

          suppose f is empty;

          then

          reconsider g = f as empty Function;

          ( rng g) is empty;

          hence thesis;

        end;

          suppose f <> {} ;

          then

          consider x be object such that

           A1: x in ( dom f) by XBOOLE_0:def 1;

          for y be object holds y in {(f . x)} iff ex z be object st z in ( dom f) & y = (f . z)

          proof

            let y be object;

            hereby

              assume

               A2: y in {(f . x)};

              reconsider x as object;

              take x;

              thus x in ( dom f) & y = (f . x) by A1, A2, TARSKI:def 1;

            end;

            given z be object such that

             A3: z in ( dom f) & y = (f . z);

            y = (f . x) by A1, A3, Def10;

            hence thesis by TARSKI:def 1;

          end;

          hence thesis by Def3;

        end;

      end;

    end

    registration

      cluster non constant for Function;

      existence

      proof

        set f = { [ {} , {} ], [ { {} }, { {} }]};

        f is Function-like

        proof

          let x,y,z be object;

          assume that

           A1: [x, y] in f and

           A2: [x, z] in f;

           [x, y] = [ {} , {} ] or [x, y] = [ { {} }, { {} }] by A1, TARSKI:def 2;

          then

           A3: x = {} & y = {} or x = { {} } & y = { {} } by XTUPLE_0: 1;

           [x, z] = [ {} , {} ] or [x, z] = [ { {} }, { {} }] by A2, TARSKI:def 2;

          hence thesis by A3, XTUPLE_0: 1;

        end;

        then

        reconsider f as Function;

        take f, {} , { {} };

        

         A4: [ { {} }, { {} }] in f by TARSKI:def 2;

        

         A5: [ {} , {} ] in f by TARSKI:def 2;

        hence

         A6: {} in ( dom f) & { {} } in ( dom f) by A4, XTUPLE_0:def 12;

        then (f . {} ) = {} by A5, Def2;

        hence thesis by A4, A6, Def2;

      end;

    end

    registration

      let f be non constant Function;

      cluster ( rng f) -> non trivial;

      coherence

      proof

        assume

         A1: ( rng f) is trivial;

        per cases ;

          suppose ( rng f) is empty;

          then

          reconsider f as empty Function;

          f is trivial;

          hence thesis;

        end;

          suppose ( rng f) is non empty;

          then

          consider x be object such that

           A2: x in ( rng f);

          f is constant

          proof

            let y,z be object;

            assume that

             A3: y in ( dom f) and

             A4: z in ( dom f);

            

             A5: (f . z) in ( rng f) by A4, Def3;

            (f . y) in ( rng f) by A3, Def3;

            

            hence (f . y) = x by A1, A2

            .= (f . z) by A1, A2, A5;

          end;

          hence thesis;

        end;

      end;

    end

    registration

      cluster non constant -> non trivial for Function;

      coherence

      proof

        let f be Function;

        assume f is non constant;

        then

        consider n1,n2 be object such that

         A1: n1 in ( dom f) and

         A2: n2 in ( dom f) and

         A3: (f . n1) <> (f . n2);

        reconsider f as non empty Function by A1;

        f is non trivial

        proof

          reconsider x = [n1, (f . n1)], y = [n2, (f . n2)] as Element of f by A1, A2, Th1;

          take x, y;

          thus x in f & y in f;

          thus thesis by A3, XTUPLE_0: 1;

        end;

        hence thesis;

      end;

    end

    registration

      cluster trivial -> constant for Function;

      coherence ;

    end

    theorem :: FUNCT_1:99

    for F,G be Function, X holds ((G | (F .: X)) * (F | X)) = ((G * F) | X)

    proof

      let F,G be Function, X;

      set Y = ( dom ((G * F) | X));

      now

        let x be object;

        thus x in ( dom ((G | (F .: X)) * (F | X))) implies x in Y

        proof

          assume

           A1: x in ( dom ((G | (F .: X)) * (F | X)));

          then

           A2: x in ( dom (F | X)) by Th11;

          then

           A3: x in (( dom F) /\ X) by RELAT_1: 61;

          then

           A4: x in X by XBOOLE_0:def 4;

          ((F | X) . x) in ( dom (G | (F .: X))) by A1, Th11;

          then (F . x) in ( dom (G | (F .: X))) by A2, Th46;

          then (F . x) in (( dom G) /\ (F .: X)) by RELAT_1: 61;

          then

           A5: (F . x) in ( dom G) by XBOOLE_0:def 4;

          x in ( dom F) by A3, XBOOLE_0:def 4;

          then x in ( dom (G * F)) by A5, Th11;

          then x in (( dom (G * F)) /\ X) by A4, XBOOLE_0:def 4;

          hence thesis by RELAT_1: 61;

        end;

        assume x in Y;

        then

         A6: x in (( dom (G * F)) /\ X) by RELAT_1: 61;

        then

         A7: x in ( dom (G * F)) by XBOOLE_0:def 4;

        then

         A8: (F . x) in ( dom G) by Th11;

        

         A9: x in X by A6, XBOOLE_0:def 4;

        x in ( dom F) by A7, Th11;

        then x in (( dom F) /\ X) by A9, XBOOLE_0:def 4;

        then

         A10: x in ( dom (F | X)) by RELAT_1: 61;

        x in ( dom F) by A7, Th11;

        then (F . x) in (F .: X) by A9, Def6;

        then (F . x) in (( dom G) /\ (F .: X)) by A8, XBOOLE_0:def 4;

        then (F . x) in ( dom (G | (F .: X))) by RELAT_1: 61;

        then ((F | X) . x) in ( dom (G | (F .: X))) by A10, Th46;

        hence x in ( dom ((G | (F .: X)) * (F | X))) by A10, Th11;

      end;

      then

       A11: Y = ( dom ((G | (F .: X)) * (F | X))) by TARSKI: 2;

      now

        let x;

        assume

         A12: x in Y;

        then

         A13: x in (( dom (G * F)) /\ X) by RELAT_1: 61;

        then x in ( dom (G * F)) by XBOOLE_0:def 4;

        then

         A14: x in ( dom F) by Th11;

        

         A15: x in X by A13, XBOOLE_0:def 4;

        then

         A16: (F . x) in (F .: X) by A14, Def6;

        

        thus (((G | (F .: X)) * (F | X)) . x) = ((G | (F .: X)) . ((F | X) . x)) by A11, A12, Th12

        .= ((G | (F .: X)) . (F . x)) by A15, Th48

        .= (G . (F . x)) by A16, Th48

        .= ((G * F) . x) by A14, Th13

        .= (((G * F) | X) . x) by A13, Th47;

      end;

      hence thesis by A11;

    end;

    theorem :: FUNCT_1:100

    for F,G be Function, X, X1 holds ((G | X1) * (F | X)) = ((G * F) | (X /\ (F " X1)))

    proof

      let F,G be Function, X, X1;

      set Y = ( dom ((G | X1) * (F | X)));

      now

        let x be object;

        thus x in ( dom ((G * F) | (X /\ (F " X1)))) implies x in Y

        proof

          assume x in ( dom ((G * F) | (X /\ (F " X1))));

          then

           A1: x in (( dom (G * F)) /\ (X /\ (F " X1))) by RELAT_1: 61;

          then

           A2: x in ( dom (G * F)) by XBOOLE_0:def 4;

          

           A3: x in (X /\ (F " X1)) by A1, XBOOLE_0:def 4;

          then

           A4: x in X by XBOOLE_0:def 4;

          x in ( dom F) by A2, Th11;

          then x in (( dom F) /\ X) by A4, XBOOLE_0:def 4;

          then

           A5: x in ( dom (F | X)) by RELAT_1: 61;

          x in (F " X1) by A3, XBOOLE_0:def 4;

          then

           A6: (F . x) in X1 by Def7;

          (F . x) in ( dom G) by A2, Th11;

          then (F . x) in (( dom G) /\ X1) by A6, XBOOLE_0:def 4;

          then (F . x) in ( dom (G | X1)) by RELAT_1: 61;

          then ((F | X) . x) in ( dom (G | X1)) by A5, Th46;

          hence thesis by A5, Th11;

        end;

        assume

         A7: x in Y;

        then

         A8: x in ( dom (F | X)) by Th11;

        then

         A9: x in (( dom F) /\ X) by RELAT_1: 61;

        then

         A10: x in ( dom F) by XBOOLE_0:def 4;

        

         A11: x in X by A9, XBOOLE_0:def 4;

        ((F | X) . x) in ( dom (G | X1)) by A7, Th11;

        then (F . x) in ( dom (G | X1)) by A8, Th46;

        then

         A12: (F . x) in (( dom G) /\ X1) by RELAT_1: 61;

        then (F . x) in X1 by XBOOLE_0:def 4;

        then x in (F " X1) by A10, Def7;

        then

         A13: x in (X /\ (F " X1)) by A11, XBOOLE_0:def 4;

        (F . x) in ( dom G) by A12, XBOOLE_0:def 4;

        then x in ( dom (G * F)) by A10, Th11;

        then x in (( dom (G * F)) /\ (X /\ (F " X1))) by A13, XBOOLE_0:def 4;

        hence x in ( dom ((G * F) | (X /\ (F " X1)))) by RELAT_1: 61;

      end;

      then

       A14: Y = ( dom ((G * F) | (X /\ (F " X1)))) by TARSKI: 2;

      now

        let x;

        assume

         A15: x in Y;

        then

         A16: x in ( dom (F | X)) by Th11;

        then

         A17: x in (( dom F) /\ X) by RELAT_1: 61;

        then

         A18: x in ( dom F) by XBOOLE_0:def 4;

        

         A19: ((F | X) . x) in ( dom (G | X1)) by A15, Th11;

        then

         A20: (F . x) in ( dom (G | X1)) by A16, Th46;

        

         A21: x in X by A17, XBOOLE_0:def 4;

        (F . x) in ( dom (G | X1)) by A16, A19, Th46;

        then (F . x) in (( dom G) /\ X1) by RELAT_1: 61;

        then (F . x) in X1 by XBOOLE_0:def 4;

        then x in (F " X1) by A18, Def7;

        then

         A22: x in (X /\ (F " X1)) by A21, XBOOLE_0:def 4;

        

        thus (((G | X1) * (F | X)) . x) = ((G | X1) . ((F | X) . x)) by A15, Th12

        .= ((G | X1) . (F . x)) by A16, Th46

        .= (G . (F . x)) by A20, Th46

        .= ((G * F) . x) by A18, Th13

        .= (((G * F) | (X /\ (F " X1))) . x) by A22, Th48;

      end;

      hence thesis by A14;

    end;

    theorem :: FUNCT_1:101

    for F,G be Function, X holds X c= ( dom (G * F)) iff X c= ( dom F) & (F .: X) c= ( dom G)

    proof

      let F,G be Function, X;

      thus X c= ( dom (G * F)) implies X c= ( dom F) & (F .: X) c= ( dom G)

      proof

        assume

         A1: X c= ( dom (G * F));

        then for x be object st x in X holds x in ( dom F) by Th11;

        hence X c= ( dom F);

        let x be object;

        assume x in (F .: X);

        then ex y be object st y in ( dom F) & y in X & x = (F . y) by Def6;

        hence thesis by A1, Th11;

      end;

      assume that

       A2: X c= ( dom F) and

       A3: (F .: X) c= ( dom G);

      let x be object;

      assume

       A4: x in X;

      then (F . x) in (F .: X) by A2, Def6;

      hence thesis by A2, A3, A4, Th11;

    end;

    definition

      let f be Function;

      assume

       A1: f is non empty constant;

      :: FUNCT_1:def12

      func the_value_of f -> object means ex x be set st x in ( dom f) & it = (f . x);

      existence

      proof

        consider x1 be object such that

         A2: x1 in ( dom f) by A1, XBOOLE_0:def 1;

        take (f . x1);

        thus thesis by A2;

      end;

      uniqueness by A1;

    end

    registration

      let X, Y;

      cluster X -definedY -valued for Function;

      existence

      proof

        take {} ;

        thus ( dom {} ) c= X & ( rng {} ) c= Y;

      end;

    end

    theorem :: FUNCT_1:102

    for X be set, f be X -valued Function holds for x be set st x in ( dom f) holds (f . x) in X

    proof

      let X be set, f be X -valued Function;

      let x be set;

      assume x in ( dom f);

      then

       A1: (f . x) in ( rng f) by Def3;

      ( rng f) c= X by RELAT_1:def 19;

      hence thesis by A1;

    end;

    definition

      let IT be set;

      :: FUNCT_1:def13

      attr IT is functional means

      : Def13: for x be object st x in IT holds x is Function;

    end

    registration

      cluster empty -> functional for set;

      coherence ;

      let f be Function;

      cluster {f} -> functional;

      coherence by TARSKI:def 1;

      let g be Function;

      cluster {f, g} -> functional;

      coherence by TARSKI:def 2;

    end

    registration

      cluster non empty functional for set;

      existence

      proof

        take { {} };

        thus thesis;

      end;

    end

    registration

      let P be functional set;

      cluster -> Function-like Relation-like for Element of P;

      coherence

      proof

        let x be Element of P;

        per cases ;

          suppose P is empty;

          hence thesis by SUBSET_1:def 1;

        end;

          suppose P is non empty;

          hence thesis by Def13;

        end;

      end;

    end

    registration

      let A be functional set;

      cluster -> functional for Subset of A;

      coherence ;

    end

    definition

      let g,f be Function;

      :: FUNCT_1:def14

      attr f is g -compatible means

      : Def14: x in ( dom f) implies (f . x) in (g . x);

    end

    theorem :: FUNCT_1:103

    f is g -compatible & ( dom f) = ( dom g) implies g is non-empty;

    theorem :: FUNCT_1:104

     {} is f -compatible;

    registration

      let I be set, f be Function;

      cluster emptyI -definedf -compatible for Function;

      existence

      proof

        take {} ;

        thus thesis by RELAT_1: 171;

      end;

    end

    registration

      let X be set;

      let f be Function, g be f -compatible Function;

      cluster (g | X) -> f -compatible;

      coherence

      proof

        let x;

        

         A1: ( dom (g | X)) c= ( dom g) by RELAT_1: 60;

        assume

         A2: x in ( dom (g | X));

        then (g . x) in (f . x) by A1, Def14;

        hence ((g | X) . x) in (f . x) by A2, Th46;

      end;

    end

    registration

      let I be set;

      cluster non-emptyI -defined for Function;

      existence

      proof

        take {} ;

        thus {} is non-empty;

        thus ( dom {} ) c= I;

      end;

    end

    theorem :: FUNCT_1:105

    

     Th104: for g be f -compatible Function holds ( dom g) c= ( dom f)

    proof

      let g be f -compatible Function;

      let x be object;

      assume x in ( dom g);

      then (g . x) in (f . x) by Def14;

      hence x in ( dom f) by Def2;

    end;

    registration

      let X;

      let f be X -defined Function;

      cluster f -compatible -> X -defined for Function;

      coherence

      proof

        let g be Function;

        assume g is f -compatible;

        then

         A1: ( dom g) c= ( dom f) by Th104;

        ( dom f) c= X by RELAT_1:def 18;

        hence ( dom g) c= X by A1;

      end;

    end

    theorem :: FUNCT_1:106

    for f be X -valued Function st x in ( dom f) holds (f . x) is Element of X

    proof

      let f be X -valued Function;

      assume x in ( dom f);

      then

       A1: (f . x) in ( rng f) by Def3;

      ( rng f) c= X by RELAT_1:def 19;

      hence (f . x) is Element of X by A1;

    end;

    theorem :: FUNCT_1:107

    for f be Function, A be set st f is one-to-one & A c= ( dom f) holds ((f " ) .: (f .: A)) = A

    proof

      let f be Function, A be set;

      set B = (f .: A);

      assume that

       A1: f is one-to-one and

       A2: A c= ( dom f);

      

       A3: ((f " ) .: B) c= A

      proof

        let y be object;

        assume y in ((f " ) .: B);

        then

        consider x be object such that x in ( dom (f " )) and

         A4: x in B and

         A5: y = ((f " ) . x) by Def6;

        ex y2 be object st (y2 in ( dom f)) & (y2 in A) & (x = (f . y2)) by A4, Def6;

        hence thesis by A1, A5, Th31;

      end;

      A c= ((f " ) .: B)

      proof

        let x be object;

        assume

         A6: x in A;

        set y0 = (f . x);

        

         A7: ((f " ) . y0) = x by A1, A2, A6, Th33;

        y0 in ( rng f) by A2, A6, Def3;

        then

         A8: y0 in ( dom (f " )) by A1, Th32;

        y0 in B by A2, A6, Def6;

        hence thesis by A7, A8, Def6;

      end;

      hence thesis by A3;

    end;

    registration

      let A be functional set, x be object;

      let F be A -valued Function;

      cluster (F . x) -> Function-like Relation-like;

      coherence

      proof

        per cases ;

          suppose x in ( dom F);

          then

           A1: (F . x) in ( rng F) by Def3;

          ( rng F) c= A by RELAT_1:def 19;

          hence thesis by A1;

        end;

          suppose not x in ( dom F);

          hence thesis by Def2;

        end;

      end;

    end

    theorem :: FUNCT_1:108

    

     Th107: x in X & x in ( dom f) implies (f . x) in (f .: X)

    proof

      assume that

       A1: x in X and

       A2: x in ( dom f);

      x in (X /\ ( dom f)) by A1, A2, XBOOLE_0:def 4;

      then x in ( dom (f | X)) by RELAT_1: 61;

      then

       A3: ((f | X) . x) in ( rng (f | X)) by Def3;

      ((f | X) . x) = (f . x) by A1, Th48;

      hence (f . x) in (f .: X) by A3, RELAT_1: 115;

    end;

    theorem :: FUNCT_1:109

    X <> {} & X c= ( dom f) implies (f .: X) <> {}

    proof

      assume X <> {} ;

      then ex x be object st x in X by XBOOLE_0:def 1;

      hence thesis by Th107;

    end;

    registration

      let f be non trivial Function;

      cluster ( dom f) -> non trivial;

      coherence

      proof

        consider u,w be object such that

         A1: u in f and

         A2: w in f and

         A3: u <> w by ZFMISC_1:def 10;

        consider u1,u2 be object such that

         A4: u = [u1, u2] by A1, RELAT_1:def 1;

        consider w1,w2 be object such that

         A5: w = [w1, w2] by A2, RELAT_1:def 1;

        take u1, w1;

        thus u1 in ( dom f) & w1 in ( dom f) by A4, A5, A1, A2, XTUPLE_0:def 12;

        thus u1 <> w1 by A1, A2, A3, A4, A5, Def1;

      end;

    end

    theorem :: FUNCT_1:110

    for B be non empty functional set, f be Function st f = ( union B) holds ( dom f) = ( union the set of all ( dom g) where g be Element of B) & ( rng f) = ( union the set of all ( rng g) where g be Element of B)

    proof

      let B be non empty functional set, f be Function such that

       A1: f = ( union B);

      set X = the set of all ( dom g) where g be Element of B;

      now

        let x be object;

        hereby

          assume x in ( dom f);

          then [x, (f . x)] in f by Th1;

          then

          consider g be set such that

           A2: [x, (f . x)] in g and

           A3: g in B by A1, TARSKI:def 4;

          reconsider g as Function by A3;

          take Z = ( dom g);

          thus x in Z & Z in X by A2, A3, Th1;

        end;

        given Z be set such that

         A4: x in Z and

         A5: Z in X;

        consider g be Element of B such that

         A6: Z = ( dom g) by A5;

         [x, (g . x)] in g by A4, A6, Th1;

        then [x, (g . x)] in f by A1, TARSKI:def 4;

        hence x in ( dom f) by Th1;

      end;

      hence ( dom f) = ( union X) by TARSKI:def 4;

      set X = the set of all ( rng g) where g be Element of B;

      now

        let y be object;

        hereby

          assume y in ( rng f);

          then

          consider x be object such that

           A7: x in ( dom f) & y = (f . x) by Def3;

           [x, y] in f by A7, Th1;

          then

          consider g be set such that

           A8: [x, y] in g and

           A9: g in B by A1, TARSKI:def 4;

          reconsider g as Function by A9;

          take Z = ( rng g);

          x in ( dom g) & y = (g . x) by A8, Th1;

          hence y in Z & Z in X by A9, Def3;

        end;

        given Z be set such that

         A10: y in Z and

         A11: Z in X;

        consider g be Element of B such that

         A12: Z = ( rng g) by A11;

        consider x be object such that

         A13: x in ( dom g) & y = (g . x) by A10, A12, Def3;

         [x, y] in g by A13, Th1;

        then [x, y] in f by A1, TARSKI:def 4;

        hence y in ( rng f) by XTUPLE_0:def 13;

      end;

      hence thesis by TARSKI:def 4;

    end;

    scheme :: FUNCT_1:sch5

    LambdaS { A() -> set , F( object) -> object } :

ex f be Function st ( dom f) = A() & for X st X in A() holds (f . X) = F(X);

      defpred P[ object, object] means $2 = F($1);

      

       A1: for x st x in A() holds ex y st P[x, y];

      

       A2: for x, y1, y2 st x in A() & P[x, y1] & P[x, y2] holds y1 = y2;

      consider f be Function such that

       A3: ( dom f) = A() and

       A4: for x st x in A() holds P[x, (f . x)] from FuncEx( A2, A1);

      take f;

      thus ( dom f) = A() by A3;

      thus thesis by A4;

    end;

    theorem :: FUNCT_1:111

    

     Th110: for M be set st for X st X in M holds X <> {} holds ex f be Function st ( dom f) = M & for X st X in M holds (f . X) in X

    proof

      let M be set;

      assume

       A1: for X st X in M holds X <> {} ;

      deffunc F( set) = the Element of $1;

      consider f be Function such that

       A2: ( dom f) = M and

       A3: for X st X in M holds (f . X) = F(X) from LambdaS;

      take f;

      thus ( dom f) = M by A2;

      let X;

      assume

       A4: X in M;

      then

       A5: (f . X) = the Element of X by A3;

      X <> {} by A1, A4;

      hence (f . X) in X by A5;

    end;

    scheme :: FUNCT_1:sch6

    NonUniqBoundFuncEx { X() -> set , Y() -> set , P[ object, object] } :

ex f be Function st ( dom f) = X() & ( rng f) c= Y() & for x be object st x in X() holds P[x, (f . x)]

      provided

       A1: for x be object st x in X() holds ex y be object st y in Y() & P[x, y];

      per cases ;

        suppose

         A2: X() = {} ;

        take {} ;

        thus thesis by A2;

      end;

        suppose

         A3: X() <> {} ;

        defpred Q[ object, object] means ex D2 be set st D2 = $2 & for y holds y in D2 iff y in Y() & P[$1, y];

        

         A4: for e,u1,u2 be object st e in X() & Q[e, u1] & Q[e, u2] holds u1 = u2

        proof

          let e,u1,u2 be object such that e in X();

          given U1 be set such that

           A5: U1 = u1 and

           A6: for y holds y in U1 iff y in Y() & P[e, y];

          defpred A[ object] means $1 in Y() & P[e, $1];

          

           A7: for x be object holds x in U1 iff A[x] by A6;

          given U2 be set such that

           A8: U2 = u2 and

           A9: for y holds y in U2 iff y in Y() & P[e, y];

          

           A10: for x be object holds x in U2 iff A[x] by A9;

          U1 = U2 from XBOOLE_0:sch 2( A7, A10);

          hence thesis by A5, A8;

        end;

        

         A11: for x st x in X() holds ex y st Q[x, y]

        proof

          let x such that x in X();

          defpred R[ object] means P[x, $1];

          consider X such that

           A12: for y be object holds y in X iff y in Y() & R[y] from XBOOLE_0:sch 1;

          take X;

          thus thesis by A12;

        end;

        consider G be Function such that

         A13: ( dom G) = X() & for x st x in X() holds Q[x, (G . x)] from FuncEx( A4, A11);

        reconsider D = ( rng G) as non empty set by A13, A3, RELAT_1: 42;

        now

          let X;

          assume X in D;

          then

          consider x be object such that

           A14: x in ( dom G) & X = (G . x) by Def3;

          consider y be object such that

           A15: y in Y() & P[x, y] by A1, A13, A14;

           Q[x, (G . x)] by A13, A14;

          then y in X by A15, A14;

          hence X <> {} ;

        end;

        then

        consider F be Function such that

         A16: ( dom F) = D and

         A17: for X st X in D holds (F . X) in X by Th110;

        

         A18: ( dom (F * G)) = X() by A13, A16, RELAT_1: 27;

        take f = (F * G);

        thus ( dom f) = X() by A13, A16, RELAT_1: 27;

        ( rng F) c= Y()

        proof

          let x be object;

          assume x in ( rng F);

          then

          consider y be object such that

           A19: y in ( dom F) and

           A20: x = (F . y) by Def3;

          consider z be object such that

           A21: z in ( dom G) & y = (G . z) by A16, A19, Def3;

          reconsider y as set by TARSKI: 1;

          

           A22: x in y by A16, A17, A19, A20;

           Q[z, (G . z)] by A13, A21;

          hence thesis by A21, A22;

        end;

        hence ( rng f) c= Y() by A16, RELAT_1: 28;

        let x be object;

        assume

         A23: x in X();

        then (f . x) = (F . (G . x)) & (G . x) in D by A13, A18, Th12, Def3;

        then

         A24: (f . x) in (G . x) by A17;

         Q[x, (G . x)] by A13, A23;

        hence thesis by A24;

      end;

    end;

    registration

      let f be empty-yielding Function;

      let x;

      cluster (f . x) -> empty;

      coherence

      proof

        x in ( dom f) or not x in ( dom f);

        hence thesis by Def2, Def8;

      end;

    end

    theorem :: FUNCT_1:112

    for f,g,h be Function st f c= h & g c= h & f misses g holds ( dom f) misses ( dom g)

    proof

      let f,g,h be Function such that

       A1: f c= h and

       A2: g c= h and

       A3: f misses g;

      for x be object st x in ( dom f) holds not x in ( dom g)

      proof

        let x be object;

        assume x in ( dom f);

        then

         A4: [x, (f . x)] in f by Def2;

        now

          assume x in ( dom g);

          then

           A5: [x, (g . x)] in g by Def2;

          then (f . x) = (g . x) by A1, A2, A4, Def1;

          hence contradiction by A3, A4, A5, XBOOLE_0: 3;

        end;

        hence thesis;

      end;

      hence thesis by XBOOLE_0: 3;

    end;

    theorem :: FUNCT_1:113

    for Y be set, f be Function holds (Y |` f) = (f | (f " Y))

    proof

      let Y be set, f be Function;

      

       A1: (Y |` f) c= (f | (f " Y)) by RELAT_1: 188;

      (f | (f " Y)) c= (Y |` f)

      proof

        let x,y be object;

        assume

         A2: [x, y] in (f | (f " Y));

        then

         A3: x in (f " Y) by RELAT_1:def 11;

        

         A4: [x, y] in f by A2, RELAT_1:def 11;

        (f . x) in Y by A3, Def7;

        then y in Y by A4, Th1;

        hence thesis by A4, RELAT_1:def 12;

      end;

      hence thesis by A1;

    end;

    registration

      let X be set;

      let x be Element of X;

      reduce (( id X) . x) to x;

      reducibility

      proof

        per cases ;

          suppose

           A1: X is empty;

          then x is empty by SUBSET_1:def 1;

          hence thesis by A1;

        end;

          suppose X is non empty;

          hence thesis by Th18;

        end;

      end;

    end

    theorem :: FUNCT_1:114

    ( rng f) c= ( rng g) implies for x be object st x in ( dom f) holds ex y be object st y in ( dom g) & (f . x) = (g . y)

    proof

      assume that

       A1: ( rng f) c= ( rng g);

      let x be object;

      assume x in ( dom f);

      then (f . x) in ( rng f) by Def3;

      then

       A2: (f . x) in ( rng g) by A1;

      ex y be object st y in ( dom g) & (f . x) = (g . y) by Def3, A2;

      hence thesis;

    end;