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 _Graph, X, Y being set st X misses Y holds G.edgesBetween(X,Y)
    = union {v.edgesInOut() /\ w.edgesInOut()
      where v, w is Vertex of G : v in X & w in Y}
proof
  let G be _Graph, X,Y be set;
  assume A1: X misses Y;
  set S = {v.edgesInOut() /\ w.edgesInOut()
    where v, w is Vertex of G : v in X & w in Y};
  now
    let e be object;
    assume e in union S;
    then consider E being set such that
      A2: e in E & E in S by TARSKI:def 4;
    consider v, w being Vertex of G such that
      A3: E = v.edgesInOut() /\ w.edgesInOut() & v in X & w in Y by A2;
    A4: e in v.edgesInOut() & e in w.edgesInOut() by A2, A3, XBOOLE_0:def 4;
    then consider v2 being Vertex of G such that
      A5: e Joins v,v2,G by Th64;
    consider w2 being Vertex of G such that
      A6: e Joins w,w2,G by A4, Th64;
    A7: v = w & v2 = w2 or v = w2 & v2 = w by A5, A6;
    v <> w
    proof
      assume v = w;
      then v in X /\ Y by A3, XBOOLE_0:def 4;
      hence contradiction by A1, XBOOLE_0:def 7;
    end;
    then e SJoins X,Y,G by A3, A5, A7;
    hence e in G.edgesBetween(X,Y) by Def30;
  end;
  then A8: union S c= G.edgesBetween(X,Y);
  G.edgesBetween(X,Y) c= union S by Th162;
  hence thesis by A8, XBOOLE_0:def 10;
end;
