Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

2024 Participants: Hannah Ackermans * Sara Alsherif * Leonardo Aranda * Brian Arechiga * Jonathan Armoza * Stephanie E. August * Martin Bartelmus * Patsy Baudoin * Liat Berdugo * David Berry * Jason Boyd * Kevin Brock * Evan Buswell * Claire Carroll * John Cayley * Slavica Ceperkovic * Edmond Chang * Sarah Ciston * Lyr Colin * Daniel Cox * Christina Cuneo * Orla Delaney * Pierre Depaz * Ranjodh Singh Dhaliwal * Koundinya Dhulipalla * Samuel DiBella * Craig Dietrich * Quinn Dombrowski * Kevin Driscoll * Lai-Tze Fan * Max Feinstein * Meredith Finkelstein * Leonardo Flores * Cyril Focht * Gwen Foo * Federica Frabetti * Jordan Freitas * Erika FülöP * Sam Goree * Gulsen Guler * Anthony Hay * SHAWNÉ MICHAELAIN HOLLOWAY * Brendan Howell * Minh Hua * Amira Jarmakani * Dennis Jerz * Joey Jones * Ted Kafala * Titaÿna Kauffmann-Will * Darius Kazemi * andrea kim * Joey King * Ryan Leach * cynthia li * Judy Malloy * Zachary Mann * Marian Mazzone * Chris McGuinness * Yasemin Melek * Pablo Miranda Carranza * Jarah Moesch * Matt Nish-Lapidus * Yoehan Oh * Steven Oscherwitz * Stefano Penge * Marta Pérez-Campos * Jan-Christian Petersen * gripp prime * Rita Raley * Nicholas Raphael * Arpita Rathod * Amit Ray * Thorsten Ries * Abby Rinaldi * Mark Sample * Valérie Schafer * Carly Schnitzler * Arthur Schwarz * Lyle Skains * Rory Solomon * Winnie Soon * Harlin/Hayley Steele * Marylyn Tan * Daniel Temkin * Murielle Sandra Tiako Djomatchoua * Anna Tito * Introna Tommie * Fereshteh Toosi * Paige Treebridge * Lee Tusman * Joris J.van Zundert * Annette Vee * Dan Verständig * Yohanna Waliya * Shu Wan * Peggy WEIL * Jacque Wernimont * Katherine Yang * Zach Whalen * Elea Zhong * TengChao Zhou
CCSWG 2024 is coordinated by Lyr Colin (USC), Andrea Kim (USC), Elea Zhong (USC), Zachary Mann (USC), Jeremy Douglass (UCSB), and Mark C. Marino (USC) . Sponsored by the Humanities and Critical Code Studies Lab (USC), and the Digital Arts and Humanities Commons (UCSB).

Code, Law, (Smart) Contracts, and Goals vs. Procedures in Praxis

Hi all, I'm new to the field of critical code studies and not sure where what I intended to bring up for discussion fits in, so I'll just share it here in the general category. It's a sprawling topic so I'll try to be as brief as possible and leave the detail to enter into any resulting discussion as needed.

Background

In the law, there exists a distinction in notions of justice between justice arising from the correct procedures having been followed and justice arising from the correct outcome having been reached. The same distinction exists in programming techniques, where most focus on describing the algorithm (procedure) explicitly, and leaving the outcome (goal) implicit, but some techniques (called declarative) invert this, and describe the goal explicitly, and only implicitly derive an algorithm to reach the goal.

In both law and software, the focus on procedure has come at the expense of reaching the desired outcomes. In both, it began with a promise of simplicity - procedures are easier to describe and to prescribe than outcomes, and it is easier to tell whether a procedure has been followed than whether a goal has been reached. But the relationship of any given procedure to the outcome it is intended to reach is tenuous - and the collection of subtle and gross variations of procedure needed to consistently reach a goal in varying circumstances quickly grows impossible to manage.

I believe this phenomenon to be responsible for the explosive growth in complexity observed across law, bureaucracy, and software as they mature, and which brings about their collapse, as described by Tainter in his work, The Collapse of Complex Societies. In my career as a software engineer, I regularly confronted the resulting pathologies, and recoiled from them, taking up a project to embrace the paradigm of programming in terms of explicit goals, and leaving the algorithm for the system to derive implicitly, and I hope that technology might also be a foundation for tools to organize law and society in a similar way, and to help both software projects and social entities avoid the atrophy and collapse that follows from the overgrowth of complexity of procedure.

In concrete terms, this has led me to develop for software the paradigm of information-gain computation, of which the most comprehensive description so far is in this workshop paper. Its key innovation is to develop a general-purpose measure of the progress of a computation in terms of the information gained about a query. It uses this measure of progress to optimize the choices made in evaluating the query. Those choices, in turn, implicitly determine the algorithms used, but that implicit choice remains contextualized so that the choice can continue to be adapted as circumstances change.

The net effect is to relieve humans of the burden of managing the combinatorial explosion of complexity that results from translating goals to procedures, and to keep humans from being the bottleneck in the iterative process of adapting procedures to changing circumstances.

My original technical motivation for developing this was to make smart contracts purely goal-directed, and in turn to open up the use of sophisticated financial tools to people working at the level of sophistication of spreadsheet users running small businesses. (Smart contracts are computer programs that can be used to define financial assets and carry out financial transactions automatically; seminal work on how to formalize them rigorously and elegantly is here. However, the technology applies to all of software, and the concepts, and perhaps the tools as well, may apply to all of law and bureaucracy. My most far-reaching hope is to build out of this an antidote to the kafkaesque horror and waste and human tragedy of living in a society whose institutions are defined as procedural bureacracies, by giving primacy to outcomes, so that procedures can no longer be systematically corrupted and outcomes systematically betrayed.

Proposals For Discussion

I could use a lot more background on humanities work on the kafkaesque horror of bureaucracy, and on the injustice inherent in procedural notions of justice.

I am also curious about general feedback / impressions, and how this line of inquiry might fit in with other work going on in this field.

Comments

  • edited February 2018

    @difranco I feel remiss at getting to this so late. I am fascinated by the analogy you draw between programming and law here.

    To understand your approach better and to move us toward some code, I wondered if you could set up the example from your paper and also share the python implementation for our further analysis:

    4.2 Example Preliminaries
    As an elementary example, consider the following code to compute the transitive closure of a graph (phrased in terms of the elementary Prolog programming example about recursively finding ancestors of a person given a set of parent- child relationships):

    ancestor (A, B) :− parent (A, B) . ancestor (A, B) :− parent (A, X) , ancestor (X, B) .
    

    That is, A is an ancestor of B either if A is a parent of B, or if A is a parent of another X and X is an ancestor of B.
    We can use this as the basis of a simple example to test the effects of an adaptive evaluation strategy. To represent the effects of sparsity of the search space, which is the main obstacle that adaptive evaluation is meant to address, we add additional rules that confound the search, like so:

    ancestor (A, B) :− parent (A, B) .
    ancestor (A, B) :− deadend (A, B) . 
    deadend (A, B) :− deadend (A, B,
                                      100000000). 
    deadend (A, B, N) :− N1 i s N − 1 , N > 0
                                    −> deadend (A, B, N1) ;
                                          f a i l . 
    ancestor (A, B) :− parent (A, X) , ancestor (X, B) .
    
    

    Can you explain ths Prolog here briefly?

  • @difranco said:

    In the law, there exists a distinction in notions of justice between justice arising from the correct procedures having been followed and justice arising from the correct outcome having been reached. The same distinction exists in programming techniques, where most focus on describing the algorithm (procedure) explicitly, and leaving the outcome (goal) implicit, but some techniques (called declarative) invert this, and describe the goal explicitly, and only implicitly derive an algorithm to reach the goal.

    In both law and software, the focus on procedure has come at the expense of reaching the desired outcomes.

    I suspect I don't have anything helpful to contribute here, but I wanted to tell you how useful I found this. I'm in the early stages of a project that is exactly about this tension--applying the same procedure in all cases does not in fact produce just outcomes. My context is whose intellectual property is protected and whose isn't, and how it means something different, say, for a Black artist to "steal" rock music for a hip-hop sample than it did for white rock artists to steal Black blues in the first place. Mechanically applying procedures can't account for that, but the law nearly always works by procedure rather than outcome.

    Ultimately it's my hope to do something algorithmic with it--if humans decide Black music is uncreative 20% more often than white music, can we account for that by adding 20% to a creativity score? To technologically reproduce, but also improve upon, human judgments by counteracting the biases built in--by paying attention to outcome at the expense of procedure.

  • One base text you might want to start with that does a bit of connection between source code and legal codes is Lawrence Lessig's Code. Might serve as a foundation text.

    Lessig, Lawrence. Code: And Other Laws of Cyberspace, Version 2.0. 2nd Revised ed. edition, Basic Books, 2006.

Sign In or Register to comment.