The first example is artificial intelligence (AI) and law. One of the major lines of research in AI and law is legal logic programming: representing formal deductive legal reasoning using propositions expressed in a logic-programming language. However, general-purpose logic programming languages have limitations because they are monotonic. On the other hand, many legal conclusions are defeasible: they are valid based on present knowledge but could fail if a known exception should apply. Thus, some researchers have developed their own legal programming languages by adding defeasibility as a core language feature (e.g., Catala, PROLEG (PROlog based legal reasoning support system)) or by adding ambiguity and discretion by generating multiple answers (e.g., Language for Legal Discourse (LLD)).
The second example is the M++ project to formalize the French tax code and help the French tax authority upgrade its internal computer system. M++ treats the tax code as though it were a program that lawyers and accountants should execute. The result will not only make tax computations more reliable but also make it possible to understand, reason about, and debate French tax law in new ways. This project is well-known to tax policymakers, and the leading members of the project, such as Denis Merigoux, have presented the project at many international conferences, such as the Annual UCI Law-A. Lavar Taylor Tax Symposium in 2020.
Let us turn to potential research topics using the PL theory. First, we can develop new programming languages designed for problems in specific legal subfields. For example, the R programming language is used for statistical analysis and data visualization of arrays of data. M++ is a specific language for formalizing tax codes. The applications can easily expand to transactional private-law fields when such legal domain-specific languages provide formal models of certain legal subfields. Will drafting, for example, often involves the creation of trusts with common structures that have to be plugged together to fit the details of different family situations. Contracts-specific programming languages are already used in this case.
Second, the aforementioned programming languages for contracts can be used in emerging blockchain-based smart contracts. Readers might find the explanation of smart contracts in my recent article on blockchain helpful:
Smart contracts are computer programmed rules stating “if-then” logic: If a set of agreed upon conditions are met, then the terms of the smart contract are automatically executed. For example, Amy is renting her apartment to Ben using a smart contract. Amy agrees to give Ben the door code to the apartment as soon as Ben pays Amy his security deposit. Both parties would separately send their portion of the deal to the smart contract, which would hold onto and automatically exchange Amy’s door code for Ben’s security deposit on the date of the rental. Both Ben and Amy can know when the other party’s commitment is fulfilled without delay, and there is no need to confirm the receipt of payment or send the door code separately. If Amy does not supply the door code by the rental date, the smart contract refunds Ben’s security deposit. This eliminates the risk of delays and reliance on middlemen to follow through on their commitments. Also, the information sharing between parties is transparent, time-stamped, and irreversible.
Grimmelmann describes such contracts as "hybrid contracts" because there are human-readable terms and machine-readable logic. Such novel forms of contracts may present questions about the legal effects of executing the automated part and the technical effects of legal enforcement. An excellent programming-language-driven approach to smart contracts would contribute to solving such difficult doctrinal questions.
Third, some legal concepts are so simple and pervasive that they can serve as building blocks for legal programming languages. Orlando, a programming language for property conveyance that creates future interests, compiles an enormous range of property conveyances like “to Alice for life, then to Bob” to a small number of operators. It boils down the effects of a conveyance (rather than the language of the conveyance itself) into (1) the termination of interests under specified conditions (“to Alice for life”) and (2) the sequencing of interests (“to Alice …then to Bob”). Other legal concepts that might usefully be translated into programming-language features include the creation and combination of entities in business associations law, hierarchies of authority among sources of law, the movement of jurisdiction over a case among courts during litigation, counterfactuals and hypotheticals, and concepts of transfer and notice in commercial law.
Fourth, legal drafting could be made more transparent and less error-prone by incorporating concepts from PL theory. Sarah Lawsky (Northwestern; Google Scholar) has argued that the scope of statutory definitions in tax law is often ambiguous, which, in theory, should not be. Think about the definition of "home equity indebtedness" under the Internal Revenue Code. Either the definition should include the $1 million limitation on “acquisition indebtedness,” or it should not. However, the way the definition is drafted does not resolve the issue. Lawsky proposes that legislative drafters should formalize their statutory definitions using first-order predicate logic and then use those formalizations to guide their legislative drafting to make explicit the intended scope of each definition. This proposal will promote a clear and correct legal code. Other features of programming language, such as variables and binding, cross-referencing, counterfactuals and hypotheticals, substitution, and abstraction, may also bolster clear and unambiguous legal drafting.
Lastly, lawyers can take advantage of programming languages when they create interactive and visual tools for experimenting with code. Sometimes an exemplary diagram is worth a thousand words, as tax lawyers are well aware. The use of programming-language techniques may provide a more principled foundation than the informal diagrams drawn by generations of tax law teachers and law firm associates. Another great advantage of programming-language techniques is interactivity. Consider TurboTax by Intuit and the "Interactive Tax Assistant" by the IRS (see also this article by Joshua D. Blank (UCI; Google Scholar) and Leigh Osofsky (North Carolina; Google Scholar)). Unlike a pre-canned set of examples, they can adapt on the fly to the user’s queries, allowing in-depth exploration and the ability to test one’s understanding with variations. Moreover, Lawsky has developed a website for her tax students. Her Practice Problems uses programming-language techniques to generate an unlimited number of different tax practice problems, with the names, numbers, and doctrinal classification varying each time.
Even though Grimmelmann and this review have introduced promising areas for intersecting law and programming languages, the actual implementation will be challenging. They have different research methods, different standards of rigor, different authorities, and different writing style. Nevertheless, any interdisciplinary project would have similar challenges. Having said that, why these two fields: law and programming languages? The answer to this question lies in the crucial similarities between the two fields. Both law and programming languages focus on how professionals use precisely structured linguistic constructions to render the tasks. Thus, it would make sense for lawyers to make efforts to understand programming language techniques and apply them to many problems that can benefit from programming solutions. I hope many law school curricula and CLE courses offer such opportunities.