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
  G1 == G2 implies (G1 is _finite implies G2 is _finite) &
    (G1 is loopless implies G2 is loopless) &
    (G1 is _trivial implies G2 is _trivial) &
    (G1 is non-multi implies G2 is non-multi) &
    (G1 is non-Dmulti implies G2 is non-Dmulti) &
    (G1 is simple implies G2 is simple) &
    (G1 is Dsimple implies G2 is Dsimple)
proof
  assume
A1: G1 == G2;
  then
A2: the_Edges_of G1 = the_Edges_of G2;
    the_Vertices_of G1 = the_Vertices_of G2 by A1;
  hence G1 is _finite implies G2 is _finite by A2;
A3: the_Source_of G1 = the_Source_of G2 & the_Target_of G1 = the_Target_of
  G2 by A1;
A4: G1 is loopless implies G2 is loopless by A2,A3;
  hence G1 is loopless implies G2 is loopless;
  thus G1 is _trivial implies G2 is _trivial by A1;
A5: now
    assume
A6: G1 is non-multi;
    now
      let e1,e2,v1,v2 be object;
      assume e1 Joins v1,v2,G2 & e2 Joins v1,v2,G2;
      then e1 Joins v1,v2,G1 & e2 Joins v1,v2,G1 by A1;
      hence e1 = e2 by A6;
    end;
    hence G2 is non-multi;
  end;
  hence G1 is non-multi implies G2 is non-multi;
A7: now
    assume
A8: G1 is non-Dmulti;
    now
      let e1,e2,v1,v2 be object;
      assume e1 DJoins v1,v2,G2 & e2 DJoins v1,v2,G2;
      then e1 DJoins v1,v2,G1 & e2 DJoins v1,v2,G1 by A1;
      hence e1 = e2 by A8;
    end;
    hence G2 is non-Dmulti;
  end;
  hence G1 is non-Dmulti implies G2 is non-Dmulti;
  thus G1 is simple implies G2 is simple by A4,A5;
  thus thesis by A4,A7;
end;
