CPSC 415: SML Homework A "directed graph" can be represented by a list of edges such as [(1,3), (3,4), (4,5)]. which represents a graph with edges from 1 to 3, 3 to 4 and 4 to 5. The "transitive closure" of such a graph G is defined to be the smallest graph T that contains G as a subgraph, and which stisfies the transitivity property: if (x,y) and (y,z) are in T then (x,z) is also in T. The transitive closure of the above graph would be [(1,3), (3,4), (4,5), (1,4), (1,5), (3,5)]. Your task is to write a function that computes the transitive closure of a given graph. This will involve finding instances of (x,y) and (y,z) in the graph and adding the edge (x,z) if it's not there already- be aware that a new edge may create more such instances. You should keep adding edges until no (x,y) and (y,z) are in the graph without (x,z). (Hint: since the transitive closure operation is idempotent (meaning?) you can design your program so that it will stop when no new edges are being added.) The procedure described above is similar to the overall structure of Knuth-Bendix Completion.