Formally Verified Algorithms for Computing with LDDs ---------------------------------------------------- A common aspect in analysing the behaviour of (software) systems involves constructing and manipulating a state space that compactly represents the behaviour of the system being analysed. A state space, which is often some form of graph, can be represented explicitly by storing each of its individual elements in memory. Consequently, larger state spaces require more memory. An alternative to an explicit representation is a symbolic representation, which may represent the state space in a more compact manner. The prototypical example of such a symbolic representation is one in which Binary Decision Diagrams (BDDs) are used to represent the sets of vertices and edges of a graph. Such representations allow for analysing systems of phenomenal size. BDDs are typically useful when the sizes of the relevant sets are known upfront, which is not always the case. A symbolic data structure that does not have this limitation is a List Decision Diagram (LDD). In this assignment, you are asked to formalise LDDs in a theorem prover/program analyser (think, COQ, TLA+, Daphne, etc.) and prove the correctness of sequential (and possibly parallel) algorithms for building and manipulating LDDs.