reserve GS for GraphStruct;
reserve G,G1,G2,G3 for _Graph;
reserve e,x,x1,x2,y,y1,y2,E,V,X,Y for set;
reserve n,n1,n2 for Nat;
reserve v,v1,v2 for Vertex of G;

theorem Th109:
  for G being non-Dmulti _Graph, v being Vertex of G
  holds v.inDegree() = card v.inNeighbors()
proof
  let G be non-Dmulti _Graph, v be Vertex of G;
  defpred P[object,object] means $2 DJoins $1,v,G;
  A1: for x,y1,y2 being object st x in v.inNeighbors() & P[x,y1] & P[x,y2]
    holds y1 = y2 by Def21;
  A2: for x being object st x in v.inNeighbors() ex y being object st P[x,y]
    by Th69;
  consider f being Function such that
    A3: dom f = v.inNeighbors() and
    A4: for x being object st x in v.inNeighbors() holds P[x,f.x]
    from FUNCT_1:sch 2(A1,A2);
  for y being object holds y in rng f iff y in v.edgesIn()
  proof
    let y be object;
    hereby
      assume y in rng f;
      then consider x being object such that
        A5: x in dom f & f.x = y by FUNCT_1:def 3;
      reconsider x as set by TARSKI:1;
      thus y in v.edgesIn() by A3, A4, A5, Th57;
    end;
    assume y in v.edgesIn();
    then consider x being set such that
      A6: y DJoins x,v,G by Th57;
a7: x in v.inNeighbors() by A6, Th69;
    then x in dom f & P[x,f.x] by A3, A4;
    then y = f.x by A1, A3, A6;
    hence thesis by a7, FUNCT_1:def 3, A3;
  end;
  then A8: rng f = v.edgesIn() by TARSKI:2;
  for x1,x2 being object st x1 in dom f & x2 in dom f & f.x1 = f.x2
    holds x1 = x2
  proof
    let x1,x2 be object;
    assume x1 in dom f & x2 in dom f & f.x1 = f.x2;
    then P[x1,f.x1] & P[x2,f.x1] by A3, A4;
    then (the_Source_of G).(f.x1) = x1 & (the_Source_of G).(f.x1) = x2
      by Def14;
    hence x1 = x2;
  end;
  then f is one-to-one by FUNCT_1:def 4;
  then card v.inNeighbors() = card v.edgesIn()
    by A3, A8, WELLORD2:def 4, CARD_1:5;
  hence thesis;
end;
