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
  for G being simple _Graph, v being Vertex of G
  holds v.degree() = card v.allNeighbors()
proof
  let G be simple _Graph, v be Vertex of G;
  v.inNeighbors() /\ v.outNeighbors() = {}
  proof
    assume v.inNeighbors() /\ v.outNeighbors() <> {};
    then consider w being object such that
      A1: w in v.inNeighbors() /\ v.outNeighbors() by XBOOLE_0:def 1;
    A2: w in v.inNeighbors() & w in v.outNeighbors() by A1, XBOOLE_0:def 4;
    consider e1 being object such that
      A3: e1 DJoins w,v,G by A2, Th69;
    consider e2 being object such that
      A4: e2 DJoins v,w,G by A2, Th70;
    e1 Joins v,w,G & e2 Joins v,w,G by A3, A4;
    then e1 = e2 by Def20;
    then e1 in the_Edges_of G & (the_Source_of G).e1 = v &
      (the_Target_of G).e1 = v by A3, A4;
    hence contradiction by Def18;
  end;
  then card(v.inNeighbors() \/ v.outNeighbors())
     = card v.inNeighbors() +` card v.outNeighbors()
       by CARD_2:35,XBOOLE_0:def 7
    .= v.inDegree() +` card v.outNeighbors() by Th109
    .= v.degree() by Th110;
  hence thesis;
end;
