reserve x,y for set,
  n,m for Nat,
  r,s for Real;
reserve f, g for Function;

theorem
  for f,g be Function,m,n be set st f.m=g.n & f.n=g.m & m in dom f &
  n in dom f & dom f = dom g &
  (for k be set st k<>m & k<>n & k in dom f holds f.k=g.k)
  holds f,g are_fiberwise_equipotent
proof
  let f,g be Function,m,n be set;
  assume that
A1: f.m=g.n and
A2: f.n=g.m and
A3: m in dom f and
A4: n in dom f and
A5: dom f = dom g and
A6: for k be set st k<>m & k<>n & k in dom f holds f.k=g.k;
  set t=id dom f, nm=n .--> m,mn=m .--> n, p=t +* nm +* mn;
A7: dom nm ={ n };
A8: dom t = dom f;
A9: rng t = dom (t") by FUNCT_1:33
    .= dom f by A8,FUNCT_1:45;
  dom mn ={ m };
  then
A10: dom p = dom (t +* nm) \/ {m} by FUNCT_4:def 1
    .= dom t \/ {n} \/ {m} by A7,FUNCT_4:def 1
    .= dom f \/ {n} \/ {m}
    .= dom f \/ {m} by A4,ZFMISC_1:40
    .= dom f by A3,ZFMISC_1:40;
A11: now
    let x be object;
    assume
A12: x in dom f;
    then
A13: (p*p).x=p.(p.x) by A10,FUNCT_1:13;
    per cases;
    suppose
A14:  x=m;
      hence (p*p).x=p.n by A13,FUNCT_4:89
        .=x by A14,FUNCT_4:90;
    end;
    suppose
A15:  x<>m;
      now
        per cases;
        suppose
A16:      x=n;
          hence (p*p).x=p.m by A13,FUNCT_4:90
            .=x by A16,FUNCT_4:89;
        end;
        suppose
A17:      x<>n;
          hence (p*p).x=p.(t.x) by A13,A15,FUNCT_4:91
            .=p.x by A12,FUNCT_1:17
            .=t.x by A15,A17,FUNCT_4:91
            .=x by A12,FUNCT_1:17;
        end;
      end;
      hence (p*p).x=x;
    end;
  end;
  rng nm = {m} by FUNCOP_1:8;
  then rng t \/ rng nm =dom f by A3,ZFMISC_1:40;
  then
A18: rng(t +* nm) \/ rng mn c= dom f \/ rng mn by FUNCT_4:17,XBOOLE_1:9;
  for z be object st z in rng(p*p) holds z in rng p by FUNCT_1:14;
  then
A19: rng(p*p) c= rng p;
A20: rng p c= rng(t +* nm) \/ rng mn by FUNCT_4:17;
A21: rng mn ={n} by FUNCOP_1:8;
  then dom f \/ rng mn =dom p by A4,A10,ZFMISC_1:40;
  then
A22: dom (p*p) =dom f by A10,A18,A20,RELAT_1:27,XBOOLE_1:1;
  then p*p=t by A11,FUNCT_1:17;
  then
A23: p is one-to-one by A10,FUNCT_1:31;
  rng p c= dom f \/ rng mn by A18,A20;
  then
A24: rng p c= dom p by A4,A10,A21,ZFMISC_1:40;
  then
A25: dom (g*p) =dom f by A5,A10,RELAT_1:27;
  now
    let x be object;
    assume
A26: x in dom f;
    then
A27: (g*p).x=g.(p.x) by A25,FUNCT_1:12;
    per cases;
    suppose
      x=m;
      hence (g*p).x=f.x by A1,A27,FUNCT_4:89;
    end;
    suppose
A28:  x<>m;
      now
        per cases;
        suppose
          x=n;
          hence (g*p).x=f.x by A2,A27,FUNCT_4:90;
        end;
        suppose
A29:      x<>n;
          hence (g*p).x=g.(t.x) by A27,A28,FUNCT_4:91
            .=g.x by A26,FUNCT_1:17
            .=f.x by A6,A26,A28,A29;
        end;
      end;
      hence (g*p).x=f.x;
    end;
  end;
  then
A30: f=g*p by A25,FUNCT_1:2;
  rng(p*p)=dom f by A9,A22,A11,FUNCT_1:17;
  then rng p = dom g by A5,A10,A24,A19;
  hence thesis by A10,A23,A30,CLASSES1:77;
end;
