funcop_1.miz



    begin

    reserve f,g,h for Function,

A for set;

    theorem :: FUNCOP_1:1

    

     Th1: ( delta A) = <:( id A), ( id A):>

    proof

      

      thus ( delta A) = (( id [:A, A:]) * ( delta A)) by FUNCT_2: 17

      .= ( [:( id A), ( id A):] * ( delta A)) by FUNCT_3: 69

      .= <:( id A), ( id A):> by FUNCT_3: 78;

    end;

    reserve F for Function,

B,x,y,y1,y2,z for set;

    definition

      let f;

      :: FUNCOP_1:def1

      func f ~ -> Function means

      : Def1: ( dom it ) = ( dom f) & for x be object st x in ( dom f) holds (for y,z be object st (f . x) = [y, z] holds (it . x) = [z, y]) & ((f . x) = (it . x) or ex y,z be object st (f . x) = [y, z]);

      existence

      proof

        defpred P[ object, object] means (for y,z be object st (f . $1) = [y, z] holds $2 = [z, y]) & ((f . $1) = $2 or ex y,z be object st (f . $1) = [y, z]);

         A1:

        now

          let x be object such that x in ( dom f);

          now

            per cases ;

              case

               A2: ex y,z be object st (f . x) = [y, z];

              then

              consider y,z be object such that

               A3: (f . x) = [y, z];

              take y1 = [z, y];

              thus for y,z be object st (f . x) = [y, z] holds y1 = [z, y]

              proof

                let y9,z9 be object;

                assume

                 A4: (f . x) = [y9, z9];

                then z = z9 by A3, XTUPLE_0: 1;

                hence thesis by A3, A4, XTUPLE_0: 1;

              end;

              thus (f . x) = y1 or ex y,z be object st (f . x) = [y, z] by A2;

            end;

              case

               A5: not ex y,z be object st (f . x) = [y, z];

              reconsider y1 = (f . x) as set;

              take y1;

              thus (for y,z be object st (f . x) = [y, z] holds y1 = [z, y]) & ((f . x) = y1 or ex y,z be object st (f . x) = [y, z]) by A5;

            end;

          end;

          hence ex y be object st P[x, y];

        end;

         A6:

        now

          let x,y1,y2 be object such that x in ( dom f);

          assume that

           A7: P[x, y1] and

           A8: P[x, y2];

          now

            per cases ;

              suppose ex y,z be object st (f . x) = [y, z];

              then

              consider y,z be object such that

               A9: (f . x) = [y, z];

              y1 = [z, y] by A7, A9;

              hence y1 = y2 by A8, A9;

            end;

              suppose not ex y,z be object st (f . x) = [y, z];

              hence y1 = y2 by A7, A8;

            end;

          end;

          hence y1 = y2;

        end;

        thus ex g st ( dom g) = ( dom f) & for x be object st x in ( dom f) holds P[x, (g . x)] from FUNCT_1:sch 2( A6, A1);

      end;

      uniqueness

      proof

        defpred P[ Function] means for x be object st x in ( dom f) holds (for y,z be object st (f . x) = [y, z] holds ($1 . x) = [z, y]) & ((f . x) = ($1 . x) or ex y,z be object st (f . x) = [y, z]);

        let g1,g2 be Function such that

         A10: ( dom g1) = ( dom f) and

         A11: P[g1] and

         A12: ( dom g2) = ( dom f) and

         A13: P[g2];

        now

          let x be object;

          assume

           A14: x in ( dom f);

          now

            per cases ;

              suppose ex y,z be object st (f . x) = [y, z];

              then

              consider y,z be object such that

               A15: (f . x) = [y, z];

              (g1 . x) = [z, y] by A11, A14, A15;

              hence (g1 . x) = (g2 . x) by A13, A14, A15;

            end;

              suppose

               A16: not ex y,z be object st (f . x) = [y, z];

              then (g1 . x) = (f . x) by A11, A14;

              hence (g1 . x) = (g2 . x) by A13, A14, A16;

            end;

          end;

          hence (g1 . x) = (g2 . x);

        end;

        hence thesis by A10, A12;

      end;

      involutiveness

      proof

        let g,f be Function;

        assume that

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

         A18: for x be object st x in ( dom f) holds (for y,z be object st (f . x) = [y, z] holds (g . x) = [z, y]) & ((f . x) = (g . x) or ex y,z be object st (f . x) = [y, z]);

        thus ( dom f) = ( dom g) by A17;

        let x be object;

        assume

         A19: x in ( dom g);

        thus for y,z be object st (g . x) = [y, z] holds (f . x) = [z, y]

        proof

          let y,z be object such that

           A20: (g . x) = [y, z];

          per cases ;

            suppose ex z,y be object st (f . x) = [z, y];

            then

            consider y1,y2 be object such that

             A21: (f . x) = [y1, y2];

            

             A22: (g . x) = [y2, y1] by A17, A18, A19, A21;

            then y = y2 by A20, XTUPLE_0: 1;

            hence thesis by A20, A21, A22, XTUPLE_0: 1;

          end;

            suppose not ex z,y be object st (f . x) = [z, y];

            then (f . x) = (g . x) by A17, A18, A19;

            hence thesis by A17, A18, A19, A20;

          end;

        end;

        assume (g . x) <> (f . x);

        then

        consider y,z be object such that

         A23: (f . x) = [y, z] by A17, A18, A19;

        take z, y;

        thus thesis by A17, A18, A19, A23;

      end;

    end

    theorem :: FUNCOP_1:2

    

     Th2: <:f, g:> = ( <:g, f:> ~ )

    proof

      

       A1: ( dom <:f, g:>) = (( dom g) /\ ( dom f)) by FUNCT_3:def 7

      .= ( dom <:g, f:>) by FUNCT_3:def 7;

       A2:

      now

        let x be object;

        assume

         A3: x in ( dom <:f, g:>);

        then

         A4: ( <:g, f:> . x) = [(g . x), (f . x)] by A1, FUNCT_3:def 7;

        

        thus ( <:f, g:> . x) = [(f . x), (g . x)] by A3, FUNCT_3:def 7

        .= (( <:g, f:> ~ ) . x) by A1, A3, A4, Def1;

      end;

      ( dom <:f, g:>) = ( dom ( <:g, f:> ~ )) by A1, Def1;

      hence thesis by A2;

    end;

    theorem :: FUNCOP_1:3

    

     Th3: ((f | A) ~ ) = ((f ~ ) | A)

    proof

      

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

      .= (( dom (f ~ )) /\ A) by Def1

      .= ( dom ((f ~ ) | A)) by RELAT_1: 61;

       A2:

      now

        let x be object such that

         A3: x in ( dom ((f ~ ) | A));

        

         A4: ( dom (f | A)) c= ( dom f) by RELAT_1: 60;

        now

          per cases ;

            suppose ex y,z be object st ((f | A) . x) = [y, z];

            then

            consider y,z be object such that

             A5: ((f | A) . x) = [y, z];

            

             A6: (f . x) = [y, z] by A1, A3, A5, FUNCT_1: 47;

            

            thus (((f | A) ~ ) . x) = [z, y] by A1, A3, A5, Def1

            .= ((f ~ ) . x) by A1, A3, A4, A6, Def1

            .= (((f ~ ) | A) . x) by A3, FUNCT_1: 47;

          end;

            suppose

             A7: not ex y,z be object st ((f | A) . x) = [y, z];

            

             A8: ((f | A) . x) = (f . x) by A1, A3, FUNCT_1: 47;

            (((f | A) ~ ) . x) = ((f | A) . x) by A1, A3, A7, Def1;

            

            hence (((f | A) ~ ) . x) = ((f ~ ) . x) by A1, A3, A4, A7, A8, Def1

            .= (((f ~ ) | A) . x) by A3, FUNCT_1: 47;

          end;

        end;

        hence (((f | A) ~ ) . x) = (((f ~ ) | A) . x);

      end;

      ( dom ((f | A) ~ )) = ( dom (f | A)) by Def1;

      hence thesis by A1, A2;

    end;

    theorem :: FUNCOP_1:4

    (( delta A) ~ ) = ( delta A)

    proof

      

      thus (( delta A) ~ ) = ( <:( id A), ( id A):> ~ ) by Th1

      .= <:( id A), ( id A):> by Th2

      .= ( delta A) by Th1;

    end;

    theorem :: FUNCOP_1:5

    

     Th5: ( <:f, g:> | A) = <:(f | A), g:>

    proof

      

       A1: ( dom ( <:f, g:> | A)) = (( dom <:f, g:>) /\ A) by RELAT_1: 61

      .= ((( dom f) /\ ( dom g)) /\ A) by FUNCT_3:def 7

      .= ((( dom f) /\ A) /\ ( dom g)) by XBOOLE_1: 16

      .= (( dom (f | A)) /\ ( dom g)) by RELAT_1: 61;

      now

        

         A2: ( dom ( <:f, g:> | A)) c= ( dom <:f, g:>) by RELAT_1: 60;

        let x be object such that

         A3: x in ( dom ( <:f, g:> | A));

        

         A4: x in ( dom (f | A)) by A1, A3, XBOOLE_0:def 4;

        

        thus (( <:f, g:> | A) . x) = ( <:f, g:> . x) by A3, FUNCT_1: 47

        .= [(f . x), (g . x)] by A3, A2, FUNCT_3:def 7

        .= [((f | A) . x), (g . x)] by A4, FUNCT_1: 47;

      end;

      hence thesis by A1, FUNCT_3:def 7;

    end;

    theorem :: FUNCOP_1:6

    

     Th6: ( <:f, g:> | A) = <:f, (g | A):>

    proof

      

      thus ( <:f, g:> | A) = (( <:g, f:> ~ ) | A) by Th2

      .= (( <:g, f:> | A) ~ ) by Th3

      .= ( <:(g | A), f:> ~ ) by Th5

      .= <:f, (g | A):> by Th2;

    end;

    definition

      let A be set, z be object;

      :: FUNCOP_1:def2

      func A --> z -> set equals [:A, {z}:];

      coherence ;

    end

    registration

      let A be set, z be object;

      cluster (A --> z) -> Function-like Relation-like;

      coherence

      proof

        thus (A --> z) is Function-like

        proof

          let x,y1,y2 be object;

          assume that

           A1: [x, y1] in (A --> z) and

           A2: [x, y2] in (A --> z);

          y1 in {z} by A1, ZFMISC_1: 87;

          then

           A3: y1 = z by TARSKI:def 1;

          y2 in {z} by A2, ZFMISC_1: 87;

          hence thesis by A3, TARSKI:def 1;

        end;

        thus for x be object st x in (A --> z) holds ex y1,y2 be object st [y1, y2] = x by RELAT_1:def 1;

      end;

    end

    reserve x,z for object;

    theorem :: FUNCOP_1:7

    

     Th7: x in A implies ((A --> z) . x) = z

    proof

      assume

       A1: x in A;

      z in {z} by TARSKI:def 1;

      then [x, z] in (A --> z) by A1, ZFMISC_1: 87;

      hence thesis by FUNCT_1: 1;

    end;

    registration

      let A be non empty set, x be object, a be Element of A;

      reduce ((A --> x) . a) to x;

      reducibility by Th7;

    end

    theorem :: FUNCOP_1:8

    A <> {} implies ( rng (A --> x)) = {x} by RELAT_1: 160;

    theorem :: FUNCOP_1:9

    

     Th9: ( rng f) = {x} implies f = (( dom f) --> x)

    proof

      assume

       A1: ( rng f) = {x};

      then ( dom f) <> {} by RELAT_1: 42;

      then ( dom (( dom f) --> x)) = ( dom f) & ( rng (( dom f) --> x)) = {x} by RELAT_1: 160;

      hence thesis by A1, FUNCT_1: 7;

    end;

    registration

      let x be object;

      cluster ( {} --> x) -> empty;

      coherence by ZFMISC_1: 90;

    end

    registration

      let x be object;

      let A be empty set;

      cluster (A --> x) -> empty;

      coherence ;

    end

    registration

      let x be object;

      let A be non empty set;

      cluster (A --> x) -> non empty;

      coherence ;

    end

    theorem :: FUNCOP_1:10

    ( dom ( {} --> x)) = {} & ( rng ( {} --> x)) = {} ;

    theorem :: FUNCOP_1:11

    

     Th11: (for z st z in ( dom f) holds (f . z) = x) implies f = (( dom f) --> x)

    proof

      assume

       A1: for z st z in ( dom f) holds (f . z) = x;

      now

        per cases ;

          suppose

           A2: ( dom f) = {} ;

          thus thesis by A2;

        end;

          suppose

           A3: ( dom f) <> {} ;

          set z = the Element of ( dom f);

          now

            let y be object;

            thus y in {x} implies ex y1 be object st y1 in ( dom f) & y = (f . y1)

            proof

              assume y in {x};

              then y = x by TARSKI:def 1;

              then (f . z) = y by A1, A3;

              hence thesis by A3;

            end;

            assume ex y1 be object st y1 in ( dom f) & y = (f . y1);

            then y = x by A1;

            hence y in {x} by TARSKI:def 1;

          end;

          then ( rng f) = {x} by FUNCT_1:def 3;

          hence thesis by Th9;

        end;

      end;

      hence thesis;

    end;

    theorem :: FUNCOP_1:12

    

     Th12: ((A --> x) | B) = ((A /\ B) --> x)

    proof

      

       A1: A = {} or A <> {} ;

      

       A2: (A /\ B) = {} or (A /\ B) <> {} ;

      

       A3: ( dom ((A --> x) | B)) = (( dom (A --> x)) /\ B) by RELAT_1: 61

      .= (A /\ B) by A1, RELAT_1: 160

      .= ( dom ((A /\ B) --> x)) by A2, RELAT_1: 160;

      now

        let z be object such that

         A4: z in ( dom ((A /\ B) --> x));

        (A /\ B) = {} or (A /\ B) <> {} ;

        then

         A5: z in (A /\ B) by A4, RELAT_1: 160;

        then

         A6: z in A by XBOOLE_0:def 4;

        

        thus (((A --> x) | B) . z) = ((A --> x) . z) by A3, A4, FUNCT_1: 47

        .= x by A6, Th7

        .= (((A /\ B) --> x) . z) by A5, Th7;

      end;

      hence thesis by A3;

    end;

    theorem :: FUNCOP_1:13

    

     Th13: ( dom (A --> x)) = A & ( rng (A --> x)) c= {x}

    proof

      now

        per cases ;

          suppose

           A1: A = {} ;

          thus thesis by A1;

        end;

          suppose A <> {} ;

          hence thesis by RELAT_1: 160;

        end;

      end;

      hence thesis;

    end;

    registration

      let X be set, a be object;

      reduce ( dom (X --> a)) to X;

      reducibility by Th13;

    end

    registration

      let D be set;

      cluster (D --> {} ) -> empty-yielding;

      coherence by Th13;

    end

    theorem :: FUNCOP_1:14

    

     Th14: x in B implies ((A --> x) " B) = A

    proof

      assume

       A1: x in B;

      now

        per cases ;

          suppose

           A2: A = {} ;

          thus thesis by A2;

        end;

          suppose A <> {} ;

          then

           A3: ( rng (A --> x)) = {x} by RELAT_1: 160;

           {x} c= B by A1, ZFMISC_1: 31;

          then ( {x} /\ B) = {x} by XBOOLE_1: 28;

          

          hence ((A --> x) " B) = ((A --> x) " {x}) by A3, RELAT_1: 133

          .= ( dom (A --> x)) by A3, RELAT_1: 134

          .= A;

        end;

      end;

      hence thesis;

    end;

    theorem :: FUNCOP_1:15

    ((A --> x) " {x}) = A

    proof

      x in {x} by TARSKI:def 1;

      hence thesis by Th14;

    end;

    theorem :: FUNCOP_1:16

     not x in B implies ((A --> x) " B) = {}

    proof

      assume

       A1: not x in B;

      ( rng (A --> x)) c= {x} by Th13;

      then ( rng (A --> x)) misses B by A1, XBOOLE_1: 63, ZFMISC_1: 50;

      hence thesis by RELAT_1: 138;

    end;

    theorem :: FUNCOP_1:17

    x in ( dom h) implies (h * (A --> x)) = (A --> (h . x))

    proof

      assume

       A1: x in ( dom h);

       A2:

      now

        let z be object;

        assume

         A3: z in ( dom (h * (A --> x)));

        then z in ( dom (A --> x)) by FUNCT_1: 11;

        then

         A4: z in A;

        

        thus ((h * (A --> x)) . z) = (h . ((A --> x) . z)) by A3, FUNCT_1: 12

        .= (h . x) by A4, Th7

        .= ((A --> (h . x)) . z) by A4, Th7;

      end;

      ( dom (h * (A --> x))) = ((A --> x) " ( dom h)) by RELAT_1: 147

      .= A by A1, Th14

      .= ( dom (A --> (h . x)));

      hence thesis by A2;

    end;

    theorem :: FUNCOP_1:18

    A <> {} & x in ( dom h) implies ( dom (h * (A --> x))) <> {}

    proof

      assume that

       A1: A <> {} and

       A2: x in ( dom h);

      set y = the Element of A;

      

       A3: y in ( dom (A --> x)) by A1;

      ((A --> x) . y) = x by A1, Th7;

      hence thesis by A2, A3, FUNCT_1: 11;

    end;

    theorem :: FUNCOP_1:19

    ((A --> x) * h) = ((h " A) --> x)

    proof

      

       A1: ( dom ((A --> x) * h)) = (h " ( dom (A --> x))) by RELAT_1: 147

      .= (h " A);

      now

        let z be object;

        assume

         A3: z in ( dom ((A --> x) * h));

        then (h . z) in ( dom (A --> x)) by FUNCT_1: 11;

        then

         A4: (h . z) in A;

        

        thus (((A --> x) * h) . z) = ((A --> x) . (h . z)) by A3, FUNCT_1: 12

        .= x by A4, Th7

        .= (((h " A) --> x) . z) by A1, A3, Th7;

      end;

      hence thesis by A1;

    end;

    theorem :: FUNCOP_1:20

    ((A --> [x, y]) ~ ) = (A --> [y, x])

    proof

      

       A1: ( dom ((A --> [x, y]) ~ )) = ( dom (A --> [x, y])) by Def1;

      then

       A2: ( dom ((A --> [x, y]) ~ )) = A;

      now

        let z be object;

        assume

         A4: z in ( dom ((A --> [x, y]) ~ ));

        then ((A --> [x, y]) . z) = [x, y] by A2, Th7;

        

        hence (((A --> [x, y]) ~ ) . z) = [y, x] by A1, A4, Def1

        .= ((A --> [y, x]) . z) by A2, A4, Th7;

      end;

      hence thesis by A2;

    end;

    definition

      let F, f, g;

      :: FUNCOP_1:def3

      func F .: (f,g) -> set equals (F * <:f, g:>);

      correctness ;

    end

    registration

      let F, f, g;

      cluster (F .: (f,g)) -> Function-like Relation-like;

      coherence ;

    end

    

     Lm1: x in ( dom (F * <:f, g:>)) implies ((F * <:f, g:>) . x) = (F . ((f . x),(g . x)))

    proof

      assume

       A1: x in ( dom (F * <:f, g:>));

      then

       A2: x in ( dom <:f, g:>) by FUNCT_1: 11;

      

      thus ((F * <:f, g:>) . x) = (F . ( <:f, g:> . x)) by A1, FUNCT_1: 12

      .= (F . ((f . x),(g . x))) by A2, FUNCT_3:def 7;

    end;

    theorem :: FUNCOP_1:21

    for h st ( dom h) = ( dom (F .: (f,g))) & for z be set st z in ( dom (F .: (f,g))) holds (h . z) = (F . ((f . z),(g . z))) holds h = (F .: (f,g))

    proof

      let h;

      assume that

       A1: ( dom h) = ( dom (F .: (f,g))) and

       A2: for z be set st z in ( dom (F .: (f,g))) holds (h . z) = (F . ((f . z),(g . z)));

      now

        let z be object;

        assume

         A3: z in ( dom (F .: (f,g)));

        

        hence (h . z) = (F . ((f . z),(g . z))) by A2

        .= ((F .: (f,g)) . z) by A3, Lm1;

      end;

      hence thesis by A1;

    end;

    theorem :: FUNCOP_1:22

    x in ( dom (F .: (f,g))) implies ((F .: (f,g)) . x) = (F . ((f . x),(g . x))) by Lm1;

    theorem :: FUNCOP_1:23

    

     Th23: (f | A) = (g | A) implies ((F .: (f,h)) | A) = ((F .: (g,h)) | A)

    proof

      assume

       A1: (f | A) = (g | A);

      

      thus ((F .: (f,h)) | A) = (F * ( <:f, h:> | A)) by RELAT_1: 83

      .= (F * <:(f | A), h:>) by Th5

      .= (F * ( <:g, h:> | A)) by A1, Th5

      .= ((F .: (g,h)) | A) by RELAT_1: 83;

    end;

    theorem :: FUNCOP_1:24

    

     Th24: (f | A) = (g | A) implies ((F .: (h,f)) | A) = ((F .: (h,g)) | A)

    proof

      assume

       A1: (f | A) = (g | A);

      

      thus ((F .: (h,f)) | A) = (F * ( <:h, f:> | A)) by RELAT_1: 83

      .= (F * <:h, (f | A):>) by Th6

      .= (F * ( <:h, g:> | A)) by A1, Th6

      .= ((F .: (h,g)) | A) by RELAT_1: 83;

    end;

    theorem :: FUNCOP_1:25

    

     Th25: ((F .: (f,g)) * h) = (F .: ((f * h),(g * h)))

    proof

      

      thus ((F .: (f,g)) * h) = (F * ( <:f, g:> * h)) by RELAT_1: 36

      .= (F .: ((f * h),(g * h))) by FUNCT_3: 55;

    end;

    definition

      let F, f, x;

      :: FUNCOP_1:def4

      func F [:] (f,x) -> set equals (F * <:f, (( dom f) --> x):>);

      correctness ;

    end

    registration

      let F, f, x;

      cluster (F [:] (f,x)) -> Function-like Relation-like;

      coherence ;

    end

    theorem :: FUNCOP_1:26

    (F [:] (f,x)) = (F .: (f,(( dom f) --> x)));

    theorem :: FUNCOP_1:27

    

     Th27: x in ( dom (F [:] (f,z))) implies ((F [:] (f,z)) . x) = (F . ((f . x),z))

    proof

      

       A1: ( dom <:f, (( dom f) --> z):>) = (( dom f) /\ ( dom (( dom f) --> z))) by FUNCT_3:def 7;

      assume

       A2: x in ( dom (F [:] (f,z)));

      then x in ( dom <:f, (( dom f) --> z):>) by FUNCT_1: 11;

      then

       A3: x in ( dom f) by A1;

      

      thus ((F [:] (f,z)) . x) = (F . ((f . x),((( dom f) --> z) . x))) by A2, Lm1

      .= (F . ((f . x),z)) by A3, Th7;

    end;

    theorem :: FUNCOP_1:28

    (f | A) = (g | A) implies ((F [:] (f,x)) | A) = ((F [:] (g,x)) | A)

    proof

      assume

       A1: (f | A) = (g | A);

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

      .= (( dom g) /\ A) by A1, RELAT_1: 61;

      

      then

       A2: ((( dom f) --> x) | A) = ((( dom g) /\ A) --> x) by Th12

      .= ((( dom g) --> x) | A) by Th12;

      

      thus ((F [:] (f,x)) | A) = ((F .: (f,(( dom f) --> x))) | A)

      .= ((F .: (g,(( dom f) --> x))) | A) by A1, Th23

      .= ((F .: (g,(( dom g) --> x))) | A) by A2, Th24

      .= ((F [:] (g,x)) | A);

    end;

    theorem :: FUNCOP_1:29

    

     Th29: ((F [:] (f,x)) * h) = (F [:] ((f * h),x))

    proof

      ( dom (( dom f) --> x)) = ( dom f);

      then

       A2: ( dom ((( dom f) --> x) * h)) = ( dom (f * h)) by RELAT_1: 163;

       A3:

      now

        let z;

        assume

         A4: z in ( dom ((( dom f) --> x) * h));

        then

         A5: (h . z) in ( dom (( dom f) --> x)) by FUNCT_1: 11;

        

        thus (((( dom f) --> x) * h) . z) = ((( dom f) --> x) . (h . z)) by A4, FUNCT_1: 12

        .= x by A5, Th7;

      end;

      

      thus ((F [:] (f,x)) * h) = ((F .: (f,(( dom f) --> x))) * h)

      .= (F .: ((f * h),((( dom f) --> x) * h))) by Th25

      .= (F [:] ((f * h),x)) by A2, A3, Th11;

    end;

    theorem :: FUNCOP_1:30

    ((F [:] (f,x)) * ( id A)) = (F [:] ((f | A),x))

    proof

      

      thus ((F [:] (f,x)) * ( id A)) = (F [:] ((f * ( id A)),x)) by Th29

      .= (F [:] ((f | A),x)) by RELAT_1: 65;

    end;

    definition

      let F, x, g;

      :: FUNCOP_1:def5

      func F [;] (x,g) -> set equals (F * <:(( dom g) --> x), g:>);

      correctness ;

    end

    registration

      let F, x, g;

      cluster (F [;] (x,g)) -> Function-like Relation-like;

      coherence ;

    end

    theorem :: FUNCOP_1:31

    (F [;] (x,g)) = (F .: ((( dom g) --> x),g));

    theorem :: FUNCOP_1:32

    

     Th32: x in ( dom (F [;] (z,f))) implies ((F [;] (z,f)) . x) = (F . (z,(f . x)))

    proof

      

       A1: ( dom <:(( dom f) --> z), f:>) = (( dom (( dom f) --> z)) /\ ( dom f)) by FUNCT_3:def 7;

      assume

       A2: x in ( dom (F [;] (z,f)));

      then x in ( dom <:(( dom f) --> z), f:>) by FUNCT_1: 11;

      then

       A3: x in ( dom f) by A1;

      

      thus ((F [;] (z,f)) . x) = (F . (((( dom f) --> z) . x),(f . x))) by A2, Lm1

      .= (F . (z,(f . x))) by A3, Th7;

    end;

    theorem :: FUNCOP_1:33

    (f | A) = (g | A) implies ((F [;] (x,f)) | A) = ((F [;] (x,g)) | A)

    proof

      assume

       A1: (f | A) = (g | A);

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

      .= (( dom g) /\ A) by A1, RELAT_1: 61;

      

      then

       A2: ((( dom f) --> x) | A) = ((( dom g) /\ A) --> x) by Th12

      .= ((( dom g) --> x) | A) by Th12;

      

      thus ((F [;] (x,f)) | A) = ((F .: ((( dom f) --> x),f)) | A)

      .= ((F .: ((( dom f) --> x),g)) | A) by A1, Th24

      .= ((F .: ((( dom g) --> x),g)) | A) by A2, Th23

      .= ((F [;] (x,g)) | A);

    end;

    theorem :: FUNCOP_1:34

    

     Th34: ((F [;] (x,f)) * h) = (F [;] (x,(f * h)))

    proof

      ( dom (( dom f) --> x)) = ( dom f);

      then

       A2: ( dom ((( dom f) --> x) * h)) = ( dom (f * h)) by RELAT_1: 163;

       A3:

      now

        let z;

        assume

         A4: z in ( dom ((( dom f) --> x) * h));

        then

         A5: (h . z) in ( dom (( dom f) --> x)) by FUNCT_1: 11;

        

        thus (((( dom f) --> x) * h) . z) = ((( dom f) --> x) . (h . z)) by A4, FUNCT_1: 12

        .= x by A5, Th7;

      end;

      

      thus ((F [;] (x,f)) * h) = ((F .: ((( dom f) --> x),f)) * h)

      .= (F .: (((( dom f) --> x) * h),(f * h))) by Th25

      .= (F [;] (x,(f * h))) by A2, A3, Th11;

    end;

    theorem :: FUNCOP_1:35

    ((F [;] (x,f)) * ( id A)) = (F [;] (x,(f | A)))

    proof

      

      thus ((F [;] (x,f)) * ( id A)) = (F [;] (x,(f * ( id A)))) by Th34

      .= (F [;] (x,(f | A))) by RELAT_1: 65;

    end;

    reserve X for non empty set,

Y for set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:36

    

     Th36: (F .: (f,g)) is Function of Y, X

    proof

      (F * <:f, g:>) is Function of Y, X;

      hence thesis;

    end;

    definition

      let X be non empty set, Z be set;

      let F be BinOp of X, f,g be Function of Z, X;

      :: original: .:

      redefine

      func F .: (f,g) -> Function of Z, X ;

      coherence by Th36;

    end

    reserve Y for non empty set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:37

    

     Th37: for z be Element of Y holds ((F .: (f,g)) . z) = (F . ((f . z),(g . z)))

    proof

      let z be Element of Y;

      ( dom (F .: (f,g))) = Y by FUNCT_2:def 1;

      hence thesis by Lm1;

    end;

    theorem :: FUNCOP_1:38

    

     Th38: for h be Function of Y, X holds (for z be Element of Y holds (h . z) = (F . ((f . z),(g . z)))) implies h = (F .: (f,g))

    proof

      let h be Function of Y, X;

      assume

       A1: for z be Element of Y holds (h . z) = (F . ((f . z),(g . z)));

      now

        let z be Element of Y;

        

        thus (h . z) = (F . ((f . z),(g . z))) by A1

        .= ((F .: (f,g)) . z) by Th37;

      end;

      hence thesis by FUNCT_2: 63;

    end;

    theorem :: FUNCOP_1:39

    for g be Function of X, X holds ((F .: (( id X),g)) * f) = (F .: (f,(g * f)))

    proof

      let g be Function of X, X;

      

      thus ((F .: (( id X),g)) * f) = (F .: ((( id X) * f),(g * f))) by Th25

      .= (F .: (f,(g * f))) by FUNCT_2: 17;

    end;

    theorem :: FUNCOP_1:40

    for g be Function of X, X holds ((F .: (g,( id X))) * f) = (F .: ((g * f),f))

    proof

      let g be Function of X, X;

      

      thus ((F .: (g,( id X))) * f) = (F .: ((g * f),(( id X) * f))) by Th25

      .= (F .: ((g * f),f)) by FUNCT_2: 17;

    end;

    theorem :: FUNCOP_1:41

    ((F .: (( id X),( id X))) * f) = (F .: (f,f))

    proof

      

      thus ((F .: (( id X),( id X))) * f) = (F .: ((( id X) * f),(( id X) * f))) by Th25

      .= (F .: ((( id X) * f),f)) by FUNCT_2: 17

      .= (F .: (f,f)) by FUNCT_2: 17;

    end;

    theorem :: FUNCOP_1:42

    for g be Function of X, X holds ((F .: (( id X),g)) . x) = (F . (x,(g . x)))

    proof

      let g be Function of X, X;

      

      thus ((F .: (( id X),g)) . x) = (F . ((( id X) . x),(g . x))) by Th37

      .= (F . (x,(g . x)));

    end;

    theorem :: FUNCOP_1:43

    for g be Function of X, X holds ((F .: (g,( id X))) . x) = (F . ((g . x),x))

    proof

      let g be Function of X, X;

      

      thus ((F .: (g,( id X))) . x) = (F . ((g . x),(( id X) . x))) by Th37

      .= (F . ((g . x),x));

    end;

    theorem :: FUNCOP_1:44

    ((F .: (( id X),( id X))) . x) = (F . (x,x))

    proof

      

      thus ((F .: (( id X),( id X))) . x) = (F . ((( id X) . x),(( id X) . x))) by Th37

      .= (F . ((( id X) . x),x))

      .= (F . (x,x));

    end;

    theorem :: FUNCOP_1:45

    

     Th45: x in B implies (A --> x) is Function of A, B

    proof

      

       A1: ( rng (A --> x)) c= {x} by Th13;

      

       A2: ( dom (A --> x)) = A;

      assume

       A3: x in B;

      then {x} c= B by ZFMISC_1: 31;

      then ( rng (A --> x)) c= B by A1;

      hence thesis by A3, A2, FUNCT_2:def 1, RELSET_1: 4;

    end;

    definition

      let I be set, i be object;

      :: original: -->

      redefine

      func I --> i -> Function of I, {i} ;

      coherence

      proof

        ( dom (I --> i)) = I & ( rng (I --> i)) c= {i} by Th13;

        hence thesis by FUNCT_2:def 1, RELSET_1: 4;

      end;

    end

    definition

      let B be non empty set, A be set, b be Element of B;

      :: original: -->

      redefine

      func A --> b -> Function of A, B ;

      coherence by Th45;

    end

    theorem :: FUNCOP_1:46

    (A --> x) is Function of A, X;

    reserve Y for set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:47

    

     Th47: (F [:] (f,x)) is Function of Y, X

    proof

      ( dom f) = Y by FUNCT_2:def 1;

      then

      reconsider g = (( dom f) --> x) as Function of Y, X;

      (F * <:f, g:>) is Function of Y, X;

      hence thesis;

    end;

    definition

      let X be non empty set, Z be set;

      let F be BinOp of X, f be Function of Z, X, x be Element of X;

      :: original: [:]

      redefine

      func F [:] (f,x) -> Function of Z, X ;

      coherence by Th47;

    end

    reserve Y for non empty set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:48

    

     Th48: for y be Element of Y holds ((F [:] (f,x)) . y) = (F . ((f . y),x))

    proof

      let y be Element of Y;

      ( dom (F [:] (f,x))) = Y by FUNCT_2:def 1;

      hence thesis by Th27;

    end;

    theorem :: FUNCOP_1:49

    

     Th49: (for y be Element of Y holds (g . y) = (F . ((f . y),x))) implies g = (F [:] (f,x))

    proof

      assume

       A1: for y be Element of Y holds (g . y) = (F . ((f . y),x));

      now

        let y be Element of Y;

        

        thus (g . y) = (F . ((f . y),x)) by A1

        .= ((F [:] (f,x)) . y) by Th48;

      end;

      hence thesis by FUNCT_2: 63;

    end;

    theorem :: FUNCOP_1:50

    ((F [:] (( id X),x)) * f) = (F [:] (f,x))

    proof

      

      thus ((F [:] (( id X),x)) * f) = (F [:] ((( id X) * f),x)) by Th29

      .= (F [:] (f,x)) by FUNCT_2: 17;

    end;

    theorem :: FUNCOP_1:51

    ((F [:] (( id X),x)) . x) = (F . (x,x))

    proof

      

      thus ((F [:] (( id X),x)) . x) = (F . ((( id X) . x),x)) by Th48

      .= (F . (x,x));

    end;

    reserve Y for set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:52

    

     Th52: (F [;] (x,g)) is Function of Y, X

    proof

      ( dom g) = Y by FUNCT_2:def 1;

      then

      reconsider f = (( dom g) --> x) as Function of Y, X;

      (F * <:f, g:>) is Function of Y, X;

      hence thesis;

    end;

    definition

      let X be non empty set, Z be set;

      let F be BinOp of X, x be Element of X;

      let g be Function of Z, X;

      :: original: [;]

      redefine

      func F [;] (x,g) -> Function of Z, X ;

      coherence by Th52;

    end

    reserve Y for non empty set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:53

    

     Th53: for y be Element of Y holds ((F [;] (x,f)) . y) = (F . (x,(f . y)))

    proof

      let y be Element of Y;

      ( dom (F [;] (x,f))) = Y by FUNCT_2:def 1;

      hence thesis by Th32;

    end;

    theorem :: FUNCOP_1:54

    

     Th54: (for y be Element of Y holds (g . y) = (F . (x,(f . y)))) implies g = (F [;] (x,f))

    proof

      assume

       A1: for y be Element of Y holds (g . y) = (F . (x,(f . y)));

      now

        let y be Element of Y;

        

        thus (g . y) = (F . (x,(f . y))) by A1

        .= ((F [;] (x,f)) . y) by Th53;

      end;

      hence thesis by FUNCT_2: 63;

    end;

    reserve Y for set,

F for BinOp of X,

f,g,h for Function of Y, X,

x,x1,x2 for Element of X;

    theorem :: FUNCOP_1:55

    ((F [;] (x,( id X))) * f) = (F [;] (x,f))

    proof

      

      thus ((F [;] (x,( id X))) * f) = (F [;] (x,(( id X) * f))) by Th34

      .= (F [;] (x,f)) by FUNCT_2: 17;

    end;

    theorem :: FUNCOP_1:56

    ((F [;] (x,( id X))) . x) = (F . (x,x))

    proof

      

      thus ((F [;] (x,( id X))) . x) = (F . (x,(( id X) . x))) by Th53

      .= (F . (x,x));

    end;

    theorem :: FUNCOP_1:57

    for X,Y,Z be non empty set holds for f be Function of X, [:Y, Z:] holds for x be Element of X holds ((f ~ ) . x) = [((f . x) `2 ), ((f . x) `1 )]

    proof

      let X,Y,Z be non empty set;

      let f be Function of X, [:Y, Z:];

      let x be Element of X;

      x in X;

      then

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

      (f . x) = [((f . x) `1 ), ((f . x) `2 )] by MCART_1: 22;

      hence thesis by A1, Def1;

    end;

    definition

      let X,Y,Z be non empty set;

      let f be Function of X, [:Y, Z:];

      :: original: rng

      redefine

      func rng f -> Relation of Y, Z ;

      coherence by RELAT_1:def 19;

    end

    definition

      let X,Y,Z be non empty set;

      let f be Function of X, [:Y, Z:];

      :: original: ~

      redefine

      func f ~ -> Function of X, [:Z, Y:] ;

      coherence

      proof

        

         A1: ( rng (f ~ )) c= [:Z, Y:]

        proof

          let x be object;

          assume x in ( rng (f ~ ));

          then

          consider y be object such that

           A2: y in ( dom (f ~ )) and

           A3: x = ((f ~ ) . y) by FUNCT_1:def 3;

          

           A4: y in ( dom f) by A2, Def1;

          then

          reconsider y as Element of X;

          

           A5: (f . y) = [((f . y) `1 ), ((f . y) `2 )] by MCART_1: 21;

          then ((f ~ ) . y) = [((f . y) `2 ), ((f . y) `1 )] by A4, Def1;

          hence thesis by A3, A5, ZFMISC_1: 88;

        end;

        X = ( dom f) by FUNCT_2:def 1

        .= ( dom (f ~ )) by Def1;

        hence thesis by A1, FUNCT_2:def 1, RELSET_1: 4;

      end;

    end

    theorem :: FUNCOP_1:58

    for X,Y,Z be non empty set holds for f be Function of X, [:Y, Z:] holds ( rng (f ~ )) = (( rng f) ~ )

    proof

      let X,Y,Z be non empty set;

      let f be Function of X, [:Y, Z:];

      let x,y be object;

      thus [x, y] in ( rng (f ~ )) implies [x, y] in (( rng f) ~ )

      proof

        assume [x, y] in ( rng (f ~ ));

        then

        consider z be object such that

         A1: z in ( dom (f ~ )) and

         A2: [x, y] = ((f ~ ) . z) by FUNCT_1:def 3;

        

         A3: z in ( dom f) by A1, Def1;

        (f . z) = (((f ~ ) ~ ) . z)

        .= [y, x] by A1, A2, Def1;

        then [y, x] in ( rng f) by A3, FUNCT_1:def 3;

        hence thesis by RELAT_1:def 7;

      end;

      assume [x, y] in (( rng f) ~ );

      then [y, x] in ( rng f) by RELAT_1:def 7;

      then

      consider z be object such that

       A4: z in ( dom f) & [y, x] = (f . z) by FUNCT_1:def 3;

      z in ( dom (f ~ )) & ((f ~ ) . z) = [x, y] by A4, Def1;

      hence thesis by FUNCT_1:def 3;

    end;

    reserve y for Element of Y;

    theorem :: FUNCOP_1:59

    F is associative implies (F [:] ((F [;] (x1,f)),x2)) = (F [;] (x1,(F [:] (f,x2))))

    proof

      assume

       A1: F is associative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x3 = (f . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F [:] ((F [;] (x1,f)),x2)) . y) = (F . (((F [;] (x1,f)) . y),x2)) by A2, Th48

          .= (F . ((F . (x1,x3)),x2)) by A2, Th53

          .= (F . (x1,(F . (x3,x2)))) by A1

          .= (F . (x1,((F [:] (f,x2)) . y))) by A2, Th48;

        end;

        hence thesis by A2, Th54;

      end;

    end;

    theorem :: FUNCOP_1:60

    F is associative implies (F .: ((F [:] (f,x)),g)) = (F .: (f,(F [;] (x,g))))

    proof

      assume

       A1: F is associative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x1 = (f . y), x2 = (g . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F .: ((F [:] (f,x)),g)) . y) = (F . (((F [:] (f,x)) . y),(g . y))) by A2, Th37

          .= (F . ((F . (x1,x)),x2)) by A2, Th48

          .= (F . (x1,(F . (x,x2)))) by A1

          .= (F . ((f . y),((F [;] (x,g)) . y))) by A2, Th53;

        end;

        hence thesis by A2, Th38;

      end;

    end;

    theorem :: FUNCOP_1:61

    F is associative implies (F .: ((F .: (f,g)),h)) = (F .: (f,(F .: (g,h))))

    proof

      assume

       A1: F is associative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x1 = (f . y), x2 = (g . y), x3 = (h . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F .: ((F .: (f,g)),h)) . y) = (F . (((F .: (f,g)) . y),(h . y))) by A2, Th37

          .= (F . ((F . ((f . y),(g . y))),(h . y))) by A2, Th37

          .= (F . (x1,(F . (x2,x3)))) by A1

          .= (F . ((f . y),((F .: (g,h)) . y))) by A2, Th37;

        end;

        hence thesis by A2, Th38;

      end;

    end;

    theorem :: FUNCOP_1:62

    F is associative implies (F [;] ((F . (x1,x2)),f)) = (F [;] (x1,(F [;] (x2,f))))

    proof

      assume

       A1: F is associative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x3 = (f . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F [;] ((F . (x1,x2)),f)) . y) = (F . ((F . (x1,x2)),(f . y))) by A2, Th53

          .= (F . (x1,(F . (x2,x3)))) by A1

          .= (F . (x1,((F [;] (x2,f)) . y))) by A2, Th53;

        end;

        hence thesis by A2, Th54;

      end;

    end;

    theorem :: FUNCOP_1:63

    F is associative implies (F [:] (f,(F . (x1,x2)))) = (F [:] ((F [:] (f,x1)),x2))

    proof

      assume

       A1: F is associative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x3 = (f . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F [:] (f,(F . (x1,x2)))) . y) = (F . ((f . y),(F . (x1,x2)))) by A2, Th48

          .= (F . ((F . (x3,x1)),x2)) by A1

          .= (F . (((F [:] (f,x1)) . y),x2)) by A2, Th48;

        end;

        hence thesis by A2, Th49;

      end;

    end;

    theorem :: FUNCOP_1:64

    F is commutative implies (F [;] (x,f)) = (F [:] (f,x))

    proof

      assume

       A1: F is commutative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x1 = (f . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F [;] (x,f)) . y) = (F . (x,x1)) by A2, Th53

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

        end;

        hence thesis by A2, Th49;

      end;

    end;

    theorem :: FUNCOP_1:65

    F is commutative implies (F .: (f,g)) = (F .: (g,f))

    proof

      assume

       A1: F is commutative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x1 = (f . y), x2 = (g . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F .: (f,g)) . y) = (F . (x1,x2)) by A2, Th37

          .= (F . ((g . y),(f . y))) by A1;

        end;

        hence thesis by A2, Th38;

      end;

    end;

    theorem :: FUNCOP_1:66

    F is idempotent implies (F .: (f,f)) = f

    proof

      assume

       A1: F is idempotent;

      per cases ;

        suppose

         A2: Y = {} ;

        

        hence (F .: (f,f)) = {}

        .= f by A2;

      end;

        suppose

         A3: Y <> {} ;

        now

          let y;

          reconsider x = (f . y) as Element of X by A3, FUNCT_2: 5;

          

          thus (f . y) = (F . (x,x)) by A1

          .= (F . ((f . y),(f . y)));

        end;

        hence thesis by A3, Th38;

      end;

    end;

    reserve Y for non empty set,

F for BinOp of X,

f for Function of Y, X,

x for Element of X,

y for Element of Y;

    theorem :: FUNCOP_1:67

    F is idempotent implies ((F [;] ((f . y),f)) . y) = (f . y)

    proof

      assume

       A1: F is idempotent;

      

      thus ((F [;] ((f . y),f)) . y) = (F . ((f . y),(f . y))) by Th53

      .= (f . y) by A1;

    end;

    theorem :: FUNCOP_1:68

    F is idempotent implies ((F [:] (f,(f . y))) . y) = (f . y)

    proof

      assume

       A1: F is idempotent;

      

      thus ((F [:] (f,(f . y))) . y) = (F . ((f . y),(f . y))) by Th48

      .= (f . y) by A1;

    end;

    theorem :: FUNCOP_1:69

    for F,f,g be Function st [:( rng f), ( rng g):] c= ( dom F) holds ( dom (F .: (f,g))) = (( dom f) /\ ( dom g))

    proof

      let F,f,g be Function such that

       A1: [:( rng f), ( rng g):] c= ( dom F);

      ( rng <:f, g:>) c= [:( rng f), ( rng g):] by FUNCT_3: 51;

      

      hence ( dom (F .: (f,g))) = ( dom <:f, g:>) by A1, RELAT_1: 27, XBOOLE_1: 1

      .= (( dom f) /\ ( dom g)) by FUNCT_3:def 7;

    end;

    definition

      let IT be Function;

      :: FUNCOP_1:def6

      attr IT is Function-yielding means

      : Def6: for x be object st x in ( dom IT) holds (IT . x) is Function;

    end

    registration

      cluster Function-yielding for Function;

      existence

      proof

        take ( the set --> the Function);

        let x be object;

        thus thesis;

      end;

    end

    registration

      let B be Function-yielding Function, j be object;

      cluster (B . j) -> Function-like Relation-like;

      coherence

      proof

        per cases ;

          suppose j in ( dom B);

          hence thesis by Def6;

        end;

          suppose not j in ( dom B);

          hence thesis by FUNCT_1:def 2;

        end;

      end;

    end

    registration

      let F be Function-yielding Function, f be Function;

      cluster (F * f) -> Function-yielding;

      coherence

      proof

        thus (F * f) is Function-yielding

        proof

          let x be object;

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

          then ((F * f) . x) = (F . (f . x)) by FUNCT_1: 12;

          hence thesis;

        end;

      end;

    end

    registration

      let B;

      let c be non empty set;

      cluster (B --> c) -> non-empty;

      coherence

      proof

         not {} in ( rng (B --> c)) by TARSKI:def 1;

        hence thesis;

      end;

    end

    theorem :: FUNCOP_1:70

    (( [:X, Y:] --> z) . (x,y)) = z by Th7, ZFMISC_1: 87;

    reserve a,b,c for set;

    definition

      let a,b,c be object;

      :: FUNCOP_1:def7

      func (a,b) .--> c -> Function equals ( { [a, b]} --> c);

      coherence ;

    end

    theorem :: FUNCOP_1:71

    for a,b,c be object holds (((a,b) .--> c) . (a,b)) = c

    proof

      let a,b,c be object;

       [a, b] in { [a, b]} by TARSKI:def 1;

      hence thesis by Th7;

    end;

    definition

      let x,y,a,b be object;

      :: FUNCOP_1:def8

      func IFEQ (x,y,a,b) -> object equals

      : Def8: a if x = y

      otherwise b;

      correctness ;

    end

    definition

      let x,y be object;

      let a,b be set;

      :: original: IFEQ

      redefine

      func IFEQ (x,y,a,b) -> set ;

      correctness

      proof

        x = y or x <> y;

        hence thesis by Def8;

      end;

    end

    definition

      let D be set;

      let x,y be object, a,b be Element of D;

      :: original: IFEQ

      redefine

      func IFEQ (x,y,a,b) -> Element of D ;

      coherence

      proof

        x = y or x <> y;

        hence thesis by Def8;

      end;

    end

    definition

      let x,y be object;

      :: FUNCOP_1:def9

      func x .--> y -> set equals ( {x} --> y);

      coherence ;

    end

    registration

      let x,y be object;

      cluster (x .--> y) -> Function-like Relation-like;

      coherence ;

    end

    registration

      let x,y be object;

      cluster (x .--> y) -> one-to-one;

      coherence

      proof

        let x1,x2 be object;

        set f = (x .--> y);

        assume that

         A1: x1 in ( dom f) and

         A2: x2 in ( dom f);

        x1 = x by A1, TARSKI:def 1;

        hence thesis by A2, TARSKI:def 1;

      end;

    end

    theorem :: FUNCOP_1:72

    

     Th72: for x,y be object holds ((x .--> y) . x) = y

    proof

      let x,y be object;

      x in {x} by TARSKI:def 1;

      hence thesis by Th7;

    end;

    theorem :: FUNCOP_1:73

    for a,b be object, f be Function holds (a .--> b) c= f iff a in ( dom f) & (f . a) = b

    proof

      let a,b be object, f be Function;

      

       A1: ( dom (a .--> b)) = {a};

      

       A2: a in ( dom (a .--> b)) by TARSKI:def 1;

      hereby

        assume

         A3: (a .--> b) c= f;

        then {a} c= ( dom f) by A1, GRFUNC_1: 2;

        hence a in ( dom f) by ZFMISC_1: 31;

        

        thus (f . a) = ((a .--> b) . a) by A2, A3, GRFUNC_1: 2

        .= b by Th72;

      end;

      assume that

       A4: a in ( dom f) and

       A5: (f . a) = b;

       A6:

      now

        let x be object;

        assume x in ( dom (a .--> b));

        then x = a by TARSKI:def 1;

        hence ((a .--> b) . x) = (f . x) by A5, Th72;

      end;

      ( dom (a .--> b)) c= ( dom f) by A4, ZFMISC_1: 31;

      hence thesis by A6, GRFUNC_1: 2;

    end;

    notation

      let o,m,r be object;

      synonym (o,m) :-> r for (o,m) .--> r;

    end

    

     Lm2: for o,m,r be object holds ((o,m) :-> r) is Function of [: {o}, {m}:], {r}

    proof

      let o,m,r be object;

       [: {o}, {m}:] = { [o, m]} by ZFMISC_1: 29;

      hence thesis;

    end;

    definition

      let o,m,r be object;

      :: original: :->

      redefine

      :: FUNCOP_1:def10

      func (o,m) :-> r -> Function of [: {o}, {m}:], {r} means not contradiction;

      coherence by Lm2;

      compatibility

      proof

        let f be Function of [: {o}, {m}:], {r};

        ((o,m) .--> r) is Function of [: {o}, {m}:], {r} by Lm2;

        hence thesis by FUNCT_2: 51;

      end;

    end

    reserve x,y,z for object;

    theorem :: FUNCOP_1:74

    x in ( dom (x .--> y)) by TARSKI:def 1;

    theorem :: FUNCOP_1:75

    z in ( dom (x .--> y)) implies z = x by TARSKI:def 1;

    theorem :: FUNCOP_1:76

     not x in A implies ((x .--> y) | A) = {}

    proof

      assume not x in A;

      then ( dom (x .--> y)) misses A by ZFMISC_1: 50;

      hence thesis by RELAT_1: 66;

    end;

    notation

      let x,y be object;

      synonym x :-> y for x .--> y;

    end

    definition

      let m,o be object;

      :: original: :->

      redefine

      func m :-> o -> Function of {m}, {o} ;

      coherence ;

    end

    theorem :: FUNCOP_1:77

    for x be Element of {a} holds for y be Element of {b} holds (((a,b) :-> c) . (x,y)) = c by TARSKI:def 1;

    registration

      let f be Function-yielding Function, C be set;

      cluster (f | C) -> Function-yielding;

      coherence

      proof

        let i be object;

        (f . i) is Function;

        hence thesis by FUNCT_1: 47;

      end;

    end

    registration

      let A be set;

      let f be Function;

      cluster (A --> f) -> Function-yielding;

      coherence ;

    end

    registration

      let X be set, a be object;

      cluster (X --> a) -> constant;

      coherence

      proof

        let x,y be object;

        assume that

         A1: x in ( dom (X --> a)) and

         A2: y in ( dom (X --> a));

        

        thus ((X --> a) . x) = a by A1, Th7

        .= ((X --> a) . y) by A2, Th7;

      end;

    end

    registration

      cluster non empty constant for Function;

      existence

      proof

        take ( { {} } --> {} );

        thus thesis;

      end;

      let X be set, Y be non empty set;

      cluster constant for Function of X, Y;

      existence

      proof

        take (X --> the Element of Y);

        thus thesis;

      end;

    end

    registration

      let f be constant Function, X be set;

      cluster (f | X) -> constant;

      coherence

      proof

        let x,y be object;

        

         A1: ( dom (f | X)) c= ( dom f) by RELAT_1: 60;

        assume that

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

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

        

        thus ((f | X) . x) = (f . x) by A2, FUNCT_1: 47

        .= (f . y) by A1, A2, A3, FUNCT_1:def 10

        .= ((f | X) . y) by A3, FUNCT_1: 47;

      end;

    end

    theorem :: FUNCOP_1:78

    for f be non empty constant Function holds ex y st for x st x in ( dom f) holds (f . x) = y

    proof

      let f be non empty constant Function;

      consider y be object such that

       A1: y in ( rng f) by XBOOLE_0:def 1;

      take y;

      ex x0 be object st x0 in ( dom f) & (f . x0) = y by A1, FUNCT_1:def 3;

      hence thesis by FUNCT_1:def 10;

    end;

    theorem :: FUNCOP_1:79

    for X be non empty set, x be set holds ( the_value_of (X --> x)) = x

    proof

      let X be non empty set, x be set;

      set f = (X --> x);

      ex i be set st i in ( dom f) & ( the_value_of f) = (f . i) by FUNCT_1:def 12;

      hence thesis by Th7;

    end;

    theorem :: FUNCOP_1:80

    for f be constant Function holds f = (( dom f) --> ( the_value_of f))

    proof

      let f be constant Function;

      thus ( dom (( dom f) --> ( the_value_of f))) = ( dom f);

      let x be object;

      assume

       A1: x in ( dom f);

      then f <> {} & ((( dom f) --> ( the_value_of f)) . x) = ( the_value_of f) by Th7;

      hence thesis by A1, FUNCT_1:def 12;

    end;

    registration

      let X be set, Y be non empty set;

      cluster total for PartFunc of X, Y;

      existence

      proof

        consider y be object such that

         A1: y in Y by XBOOLE_0:def 1;

        reconsider y as Element of Y by A1;

        take (X --> y);

        thus thesis;

      end;

    end

    registration

      let I be set, A be object;

      cluster (I --> A) -> I -defined;

      coherence ;

    end

    registration

      let I,A be object;

      cluster (I .--> A) -> {I} -defined;

      coherence ;

    end

    theorem :: FUNCOP_1:81

    ((A --> x) .: B) c= {x};

    registration

      let I be set, f be Function;

      cluster (I .--> f) -> Function-yielding;

      coherence ;

    end

    registration

      let I be set;

      cluster total for I -defined non-empty Function;

      existence

      proof

        take (I --> { {} });

        thus thesis;

      end;

    end

    theorem :: FUNCOP_1:82

    

     Th82: (x .--> y) is_isomorphism_of ( { [x, x]}, { [y, y]})

    proof

      set F = (x .--> y);

      set R = { [x, x]};

      set S = { [y, y]};

      

       A1: ( field R) = {x} by RELAT_1: 173;

      hence ( dom F) = ( field R);

      ( field S) = {y} by RELAT_1: 173;

      hence ( rng F) = ( field S) by RELAT_1: 160;

      thus F is one-to-one;

      let a,b be object;

      hereby

        assume [a, b] in R;

        then [a, b] = [x, x] by TARSKI:def 1;

        then

         A2: a = x & b = x by XTUPLE_0: 1;

        hence a in ( field R) & b in ( field R) by A1, TARSKI:def 1;

        (F . x) = y by Th72;

        hence [(F . a), (F . b)] in S by A2, TARSKI:def 1;

      end;

      assume a in ( field R) & b in ( field R);

      then a = x & b = x by A1, TARSKI:def 1;

      hence thesis by TARSKI:def 1;

    end;

    theorem :: FUNCOP_1:83

    ( { [x, x]}, { [y, y]}) are_isomorphic

    proof

      take (x .--> y);

      thus thesis by Th82;

    end;

    registration

      let I be set, A be object;

      cluster (I --> A) -> total;

      coherence ;

    end

    theorem :: FUNCOP_1:84

    for f be Function st x in ( dom f) holds (x .--> (f . x)) c= f

    proof

      let f be Function;

      assume x in ( dom f);

      then { [x, (f . x)]} c= f by ZFMISC_1: 31, FUNCT_1: 1;

      hence thesis by ZFMISC_1: 29;

    end;

    registration

      let A be non empty set;

      let x be set, i be Element of A;

      cluster (x .--> i) -> A -valued;

      coherence

      proof

        ( rng (x .--> i)) = {i} by RELAT_1: 160;

        hence ( rng (x .--> i)) c= A by ZFMISC_1: 31;

      end;

    end

    reserve Y for set,

f,g for Function of Y, X,

x for Element of X,

y for Element of Y;

    theorem :: FUNCOP_1:85

    F is associative implies (F .: ((F [;] (x,f)),g)) = (F [;] (x,(F .: (f,g))))

    proof

      assume

       A1: F is associative;

      per cases ;

        suppose Y = {} ;

        hence thesis;

      end;

        suppose

         A2: Y <> {} ;

        now

          let y;

          reconsider x1 = (f . y), x2 = (g . y) as Element of X by A2, FUNCT_2: 5;

          

          thus ((F [;] (x,(F .: (f,g)))) . y) = (F . (x,((F .: (f,g)) . y))) by A2, Th53

          .= (F . (x,(F . (x1,x2)))) by A2, Th37

          .= (F . ((F . (x,x1)),x2)) by A1

          .= (F . (((F [;] (x,f)) . y),(g . y))) by A2, Th53;

        end;

        hence thesis by A2, Th38;

      end;

    end;

    registration

      let A be set, B be non empty set, x be Element of B;

      cluster (A --> x) -> B -valued;

      coherence ;

    end

    registration

      let A be non empty set, x be Element of A, y be object;

      cluster (x .--> y) -> A -defined;

      coherence by ZFMISC_1: 31;

    end

    theorem :: FUNCOP_1:86

    for x,y,A be set st x in A holds ((x .--> y) | A) = (x .--> y)

    proof

      let x,y,A be set;

      assume x in A;

      then ( dom (x .--> y)) c= A by ZFMISC_1: 31;

      hence thesis by RELAT_1: 68;

    end;

    registration

      let Y be functional set;

      cluster Y -valued -> Function-yielding for Function;

      coherence ;

    end

    definition

      let IT be Function;

      :: FUNCOP_1:def11

      attr IT is Relation-yielding means for x be set st x in ( dom IT) holds (IT . x) is Relation;

    end

    registration

      cluster Function-yielding -> Relation-yielding for Function;

      coherence ;

    end

    registration

      cluster empty -> Function-yielding for Function;

      coherence ;

    end

    theorem :: FUNCOP_1:87

    for X,Y be set, x,y be object holds (X --> x) tolerates (Y --> y) iff x = y or X misses Y

    proof

      let X,Y be set;

      let x,y be object;

      set f = (X --> x), g = (Y --> y);

      thus f tolerates g implies x = y or X misses Y

      proof

        assume that

         A3: for z be object st z in (( dom f) /\ ( dom g)) holds (f . z) = (g . z) and

         A4: x <> y;

        assume X meets Y;

        then

        consider z be object such that

         A5: z in X and

         A6: z in Y by XBOOLE_0: 3;

        

         A7: (f . z) = x by A5, Th7;

        

         A8: (g . z) = y by A6, Th7;

        z in (X /\ Y) by A5, A6, XBOOLE_0:def 4;

        hence thesis by A3, A4, A7, A8;

      end;

      assume

       A9: x = y or X misses Y;

      let z be object;

      assume

       A10: z in (( dom f) /\ ( dom g));

      then

       A11: z in Y;

      

       A12: z in X by A10, XBOOLE_0:def 4;

      then (f . z) = x by Th7;

      hence thesis by A9, A12, A11, Th7, XBOOLE_0: 3;

    end;

    reserve x,y,z,A for set;

    theorem :: FUNCOP_1:88

    

     Th88: ( rng (x .--> y)) = {y}

    proof

      ( dom (x .--> y)) = {x};

      

      hence ( rng (x .--> y)) = {((x .--> y) . x)} by FUNCT_1: 4

      .= {y} by Th72;

    end;

    theorem :: FUNCOP_1:89

    z in A implies ((A --> x) * (y .--> z)) = (y .--> x)

    proof

      assume

       A1: z in A;

      

       A2: ( dom (y .--> z)) = {y}

      .= ( dom (y .--> x));

      ( rng (y .--> z)) = {z} by Th88;

      then ( rng (y .--> z)) c= ( dom (A --> x)) by A1, ZFMISC_1: 31;

      hence ( dom ((A --> x) * (y .--> z))) = ( dom (y .--> x)) by A2, RELAT_1: 27;

      let e be object;

      assume

       A3: e in ( dom ((A --> x) * (y .--> z)));

      

      thus (((A --> x) * (y .--> z)) . e) = ((A --> x) . ((y .--> z) . e)) by A3, FUNCT_1: 12

      .= ((A --> x) . z) by A3, Th7

      .= x by A1, Th7

      .= ((y .--> x) . e) by A3, Th7;

    end;

    registration

      let f be Function-yielding Function;

      let a,b be object;

      cluster (f . (a,b)) -> Function-like Relation-like;

      coherence ;

    end

    registration

      let Y be set;

      let X,Z be non empty set;

      cluster -> Function-yielding for Function of X, ( Funcs (Y,Z));

      coherence ;

    end