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 Th90:
  G1 == G2 implies G1.order() = G2.order() & G1.size() = G2.size()
& G1.edgesInto(X) = G2.edgesInto(X) & G1.edgesOutOf(X) = G2.edgesOutOf(X) & G1
  .edgesInOut(X) = G2.edgesInOut(X) & G1.edgesBetween(X) = G2.edgesBetween(X) &
  G1.edgesDBetween(X,Y) = G2.edgesDBetween(X,Y)
proof
  assume
A1: G1 == G2;
  hence G1.order() = G2.order();
  thus G1.size() = G2.size() by A1;
A2: the_Edges_of G1 = the_Edges_of G2 by A1;
A3: the_Target_of G1 = the_Target_of G2 by A1;
A4: now
    let e be object;
    e in G1.edgesInto(X) iff e in the_Edges_of G2 & (the_Target_of G2).e
    in X by A2,A3,Def26;
    hence e in G1.edgesInto(X) iff e in G2.edgesInto(X) by Def26;
  end;
  hence
A5: G1.edgesInto(X) = G2.edgesInto(X) by TARSKI:2;
A6: the_Source_of G1 = the_Source_of G2 by A1;
A7: now
    let e be object;
    e in G1.edgesOutOf(X) iff e in the_Edges_of G2 & (the_Source_of G2).e
    in X by A2,A6,Def27;
    hence e in G1.edgesOutOf(X) iff e in G2.edgesOutOf(X) by Def27;
  end;
  hence
A8: G1.edgesOutOf(X) = G2.edgesOutOf(X) by TARSKI:2;
  thus G1.edgesInOut(X)= G2.edgesInOut(X) by A5,A7,TARSKI:2;
  thus G1.edgesBetween(X)=G2.edgesBetween(X) by A4,A8,TARSKI:2;
  now
    let e be object;
    e in G1.edgesDBetween(X,Y) iff e DSJoins X,Y,G1 by Def31;
    then e in G1.edgesDBetween(X,Y) iff e DSJoins X,Y,G2 by A1;
    hence e in G2.edgesDBetween(X,Y) iff e in G1.edgesDBetween(X,Y) by Def31;
  end;
  hence thesis by TARSKI:2;
end;
