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 e being object holds
  e Joins v1,v2,G implies v1.adj(e) = v2 & v2.adj(e) = v1
proof let e be object;
  assume
A1: e Joins v1, v2,G;
  then
A2: e in v1.edgesInOut() by Th62;
  now
    per cases by A1;
    suppose
A3:   (the_Source_of G).e = v2 & (the_Target_of G).e = v1;
      hence v1.adj(e) = v2 by A2,Def41;
      now
        per cases;
        suppose
          v1 = v2;
          hence v2.adj(e) = v1 by A2,A3,Def41;
        end;
        suppose
          v1 <> v2;
          hence v2.adj(e) = v1 by A2,A3,Def41;
        end;
      end;
      hence v2.adj(e) = v1;
    end;
    suppose
A4:   (the_Source_of G).e = v1 & (the_Target_of G).e = v2;
      now
        per cases;
        suppose
          v1 = v2;
          hence v1.adj(e) = v2 by A2,A4,Def41;
        end;
        suppose
          v1 <> v2;
          hence v1.adj(e) = v2 by A2,A4,Def41;
        end;
      end;
      hence v1.adj(e) = v2;
      thus v2.adj(e) = v1 by A2,A4,Def41;
    end;
  end;
  hence thesis;
end;
