
theorem Th27: :: Function version for EXCHSORT:42
for F be Function, x,y be object st x in dom F & y in dom F
 holds Swap(F,x,y) = F*Swap(id dom F,x,y)
proof
    let F be Function, x,y be object;
    assume A1: x in dom F & y in dom F;

A2: dom(Swap(F,x,y)) = dom F & dom(Swap(id dom F,x,y)) = dom(id dom F)
      by FUNCT_7:99;
    rng(Swap(id dom F,x,y)) = rng(id dom F) by FUNCT_7:103; then
A3: dom(F*Swap(id dom F,x,y)) = dom(Swap(F,x,y)) by A2,RELAT_1:27;

A4: dom(id dom F) = dom F;

    now let z be object;
     assume A5: z in dom(Swap(F,x,y));

A6:  now assume A7: z = x; then
A8:   Swap(F,x,y).z = F.y by A1,EXCHSORT:29;
      Swap(id dom F,x,y).z = (id dom F).y by A1,A4,A7,EXCHSORT:29; then
      Swap(id dom F,x,y).z = y by A1,FUNCT_1:18;
      hence Swap(F,x,y).z = (F*Swap(id dom F,x,y)).z by A1,A2,A7,A8,FUNCT_1:13;
     end;
A9:  now assume A10: z = y; then
A11:  Swap(F,x,y).z = F.x by A1,EXCHSORT:31;
      Swap(id dom F,x,y).z = (id dom F).x by A1,A4,A10,EXCHSORT:31; then
      Swap(id dom F,x,y).z = x by A1,FUNCT_1:18;
      hence Swap(F,x,y).z = (F*Swap(id dom F,x,y)).z
        by A1,A2,A10,A11,FUNCT_1:13;
     end;
     now assume A12: z <> x & z <> y; then
A13:  Swap(F,x,y).z = F.z by EXCHSORT:33;
      Swap(id dom F,x,y).z = (id dom F).z by A12,EXCHSORT:33
       .= z by A2,A5,FUNCT_1:18;
      hence Swap(F,x,y).z = (F*Swap(id dom F,x,y)).z
        by A2,A5,A13,FUNCT_1:13;
     end;
     hence Swap(F,x,y).z = (F*Swap(id dom F,x,y)).z by A6,A9;
    end;
    hence thesis by A3,FUNCT_1:def 11;
end;
