reserve f for Function;
reserve p,q for FinSequence;
reserve A,B,C for set,x,x1,x2,y,z for object;
reserve k,l,m,n for Nat;
reserve a for Nat;
reserve D for non empty set;
reserve d,d1,d2,d3 for Element of D;
reserve L,M for Element of NAT;

theorem Th59:
  rng p c= dom p & p is one-to-one implies rng p = dom p
proof
  defpred P[Nat] means for q st len q = $1 & rng q c= dom q & q is one-to-one
  holds rng q = dom q;
A1: len p = len p;
  now
    let k;
    assume
A2: for q st len q = k & rng q c= dom q & q is one-to-one holds rng q = dom q;
    let q;
    assume that
A3: len q = k + 1 and
A4: rng q c= dom q and
A5: q is one-to-one;
A6: dom q = Seg(k + 1) by A3,FINSEQ_1:def 3;
    dom q c= rng q
    proof
      let x be object;
      assume
A7:   x in dom q;
      then reconsider n = x as Element of NAT;
      per cases;
      suppose
A8:     k + 1 in rng q;
        now
          per cases;
          suppose
            n = k + 1;
            hence thesis by A8;
          end;
          suppose
            n <> k + 1;
            then not x in {k + 1} by TARSKI:def 1;
            then x in Seg(k + 1) \ {k + 1} by A6,A7,XBOOLE_0:def 5;
            then
A9:         x in Seg k by FINSEQ_1:10;
            set r = q - {k + 1};
A10:        len r = (k + 1) - 1 by A3,A5,A8,FINSEQ_3:90;
            then
A11:        dom r = Seg k by FINSEQ_1:def 3;
A12:        rng r = rng q \ {k + 1} by FINSEQ_3:65;
            then rng r c= Seg(k + 1) \ {k + 1} by A4,A6,XBOOLE_1:33;
            then rng r c= dom r by A11,FINSEQ_1:10;
            then rng r = dom r by A2,A5,A10,FINSEQ_3:87;
            hence thesis by A12,A11,A9;
          end;
        end;
        hence thesis;
      end;
      suppose
A13:    not k + 1 in rng q;
A14:    rng q c= Seg k
        proof
          let x be object;
          assume
A15:      x in rng q;
          then not x in {k + 1} by A13,TARSKI:def 1;
          then x in Seg(k + 1) \ {k + 1} by A4,A6,A15,XBOOLE_0:def 5;
          hence thesis by FINSEQ_1:10;
        end;
A16:    k + 1 in Seg(k + 1) by FINSEQ_1:4;
        then
A17:    q.(k + 1) in rng q by A6,FUNCT_1:def 3;
        reconsider r = q | Seg k as FinSequence by FINSEQ_1:15;
A18:    dom r c= dom q & k < k + 1 by RELAT_1:60,XREAL_1:29;
A19:    len r = k by A3,FINSEQ_3:53;
        then
A20:    dom r = Seg k by FINSEQ_1:def 3;
        rng r c= rng q & r is one-to-one by A5,FUNCT_1:52,RELAT_1:70;
        then rng r = dom r by A2,A19,A20,A14,XBOOLE_1:1;
        then consider x being object such that
A21:    x in dom r and
A22:    r.x = q.(k + 1) by A20,A14,A17,FUNCT_1:def 3;
        reconsider n = x as Element of NAT by A21;
        r.x = q.x & n <= k by A20,A21,FINSEQ_1:1,FUNCT_1:49;
        hence thesis by A5,A6,A16,A21,A22,A18;
      end;
    end;
    hence rng q = dom q by A4;
  end;
  then
A23: for k st P[k] holds P[k+1];
  now
    let q;
    assume
A24: len q = 0;
    assume that
    rng q c= dom q and
    q is one-to-one;
    q = {} by A24;
    hence rng q = dom q;
  end;
  then
A25: P[0];
  for k holds P[k] from NAT_1:sch 2(A25,A23);
  hence thesis by A1;
end;
