<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>plwonks</title>
    <description>Programming language enthusiasts from Indiana University
</description>
    <link>http://wonks.github.io/</link>
    <atom:link href="http://wonks.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 16 Apr 2026 15:21:46 +0000</pubDate>
    <lastBuildDate>Thu, 16 Apr 2026 15:21:46 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Polymorphic Bottom-up Weighted Relational Programming</title>
        <description>&lt;p&gt;&lt;em&gt;(Part of &lt;a href=&quot;https://logic.indiana.edu/&quot;&gt;IU Logic Seminar&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Wednesday, April 15&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 3:00PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Ballantine Hall (BH) 142&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;Logic programming languages usually choose one of two approaches: top-down
search (Prolog, miniKanren, etc.), or bottom-up fact collection (Datalog, SQL,
etc.). Polymorphism in programming languages means operating on unknown types of
data. While polymorphism usually comes for free in top-down languages, it is at
odds with the fact-collection approach of bottom-up languages. How can we
collect facts like “x is related to y” when we don’t know what domains x and y
are drawn from?&lt;/p&gt;

&lt;p&gt;This talk introduces semiringKanren, a bottom-up variant of miniKanren with
weights, algebraic data types, and polymorphic relations. In semiringKanren,
weighted relations denote finite multidimensional arrays. Particularly, even
polymorphic relations are stored as a single array; there is no need to generate
separate versions for each type.&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Apr 2026 00:15:00 +0000</pubDate>
        <link>http://wonks.github.io/volkov/spring2026/2026/04/15/volkov.html</link>
        <guid isPermaLink="true">http://wonks.github.io/volkov/spring2026/2026/04/15/volkov.html</guid>
        
        
        <category>Volkov</category>
        
        <category>Spring2026</category>
        
      </item>
    
      <item>
        <title>The Story of Arjun Guha, or: the Arc of a Research Project</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Wednesday, March 25&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 4:00PM-5:30PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall (BLIF) 4012&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;There are many ways to do research successfully, so you should take all advice
with a pinch of salt. That said, I will try to describe some of the attributes
that have worked well for my students and me. To make it concrete, I will use my
former student, Arjun Guha, as a case study. I will strip away most of the
technical detail while trying to retain the essential ideas, so people from any
area of computer science will be able to follow almost all of it. Questions are
welcome at any time. The talk will be followed by plenty of time for Q&amp;amp;A.&lt;/p&gt;
</description>
        <pubDate>Wed, 25 Mar 2026 00:16:00 +0000</pubDate>
        <link>http://wonks.github.io/krishnamurthi/spring2026/2026/03/25/krishnamurthi-mentor.html</link>
        <guid isPermaLink="true">http://wonks.github.io/krishnamurthi/spring2026/2026/03/25/krishnamurthi-mentor.html</guid>
        
        
        <category>Krishnamurthi</category>
        
        <category>Spring2026</category>
        
      </item>
    
      <item>
        <title>The Cognitive and Human Factors of Formal Methods</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Wednesday, March 25&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 10:00-11:30AM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall (BLIF) 4012&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;As formal methods improve in expressiveness and power, they create new
opportunities for non-expert adoption. In principle, formal tools are now
powerful enough to enable developers to scalably validate realistic systems
artifacts without extensive formal training. However, realizing this potential
for adoption requires attention to not only the technical but also the human
side—which has received extraordinarily little attention from formal-methods
research.&lt;/p&gt;

&lt;p&gt;This talk presents some of our efforts to address this paucity. We apply ideas
from cognitive science, human-factors research, and education theory to improve
the usability of formal methods. Along the way, we find misconceptions suffered
by users, how technically appealing designs that experts may value may fail to
help, and how our tools may even mislead users.&lt;/p&gt;
</description>
        <pubDate>Wed, 25 Mar 2026 00:10:00 +0000</pubDate>
        <link>http://wonks.github.io/krishnamurthi/spring2026/2026/03/25/krishnamurthi.html</link>
        <guid isPermaLink="true">http://wonks.github.io/krishnamurthi/spring2026/2026/03/25/krishnamurthi.html</guid>
        
        
        <category>Krishnamurthi</category>
        
        <category>Spring2026</category>
        
      </item>
    
      <item>
        <title>How to Design Loops</title>
        <description>&lt;iframe src=&quot;https://www.youtube.com/embed/fsNjFj3_AQg&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Friday, October 31&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 2:00-3:00PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Center for Artificial Intelligence (BLLU) 1001&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;In this talk I describe a step-by-step translation process for loop construction
that beginning programming students can follow. Loops in programming languages
are difficult for beginning students to correctly construct. At their core, the
idea is simple: repeat a given task until a condition is falsified. Loops,
however, have multiple possible points of failure and opportunities for
mistakes. Via a series of correctness-preserving transformations, students
engage with an fully-mechanical translation pipeline that tries to removes many
instances of failure and frustration when designing loops. We performed two
evaluative studies on students from the CS1 and CS2 population at a large R1
midwestern university to test our methodology against the traditional approach
to teaching loops in a second-semester computer science course. The first study
emphasized translating tail recursive functions into loops. The second study,
which builds upon the results from the first, moves students from a problem
statement, a recursive function, then to its loop counterpart. The results from
our first study indicate that our translation pipeline method improves students’
success in translating tail recursive functions to equivalent loops. The results
of our second study indicate that more students appear to enjoy the presentation
of the translation pipeline versus others’ attitudes toward the traditional
means of learning loops. Combining these facts together can potentially imply
that students who use the translation pipeline perform better at writing loops
than those trained by traditional lectures.&lt;/p&gt;
</description>
        <pubDate>Fri, 31 Oct 2025 14:00:00 +0000</pubDate>
        <link>http://wonks.github.io/crotts/fall2025/2025/10/31/crotts.html</link>
        <guid isPermaLink="true">http://wonks.github.io/crotts/fall2025/2025/10/31/crotts.html</guid>
        
        
        <category>Crotts</category>
        
        <category>Fall2025</category>
        
      </item>
    
      <item>
        <title>Analyzing Control Flow More Like a Human</title>
        <description>&lt;iframe src=&quot;https://www.youtube.com/embed/c282Q5VL75Y&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Wednesday, August 6&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 1:00-2:00PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall 1104&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;Control-flow analysis has been around for over four decades. Over this time
period, the typical formulation has remained essentially an exhaustive analysis
over whole programs—an analyzer ingests an entire higher-order program and
produces a flow fact for each point therein. An alternative approach is
&lt;em&gt;demand-driven&lt;/em&gt;. Implementing this approach, an analyzer allows the user to
indicate a point within a higher-order program and subsequently determines its
flow fact, determining as few subsidiary facts as possible. The analyzer keeps
the set of subsidiary facts relatively small by exploring control flow both
forwards and backwards, similar to how a human might reason. This talk
introduces the demand-driven approach, discusses aspects that make it
particularly appealing for today’s language infrastructure and tooling, and
outlines possible applications and enhancements.&lt;/p&gt;
</description>
        <pubDate>Wed, 06 Aug 2025 13:00:00 +0000</pubDate>
        <link>http://wonks.github.io/germane/summer2025/2025/08/06/germane.html</link>
        <guid isPermaLink="true">http://wonks.github.io/germane/summer2025/2025/08/06/germane.html</guid>
        
        
        <category>Germane</category>
        
        <category>Summer2025</category>
        
      </item>
    
      <item>
        <title>Lightning talks</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Friday, March 28&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 12:15-1:45 PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall 1106&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;agenda&quot;&gt;Agenda&lt;/h2&gt;

&lt;p&gt;During the afternoon of Prof. Dan Friedman’s retirement party, some current and
past Wonks held a session of lightning talks.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ron Garcia (UBC): &lt;strong&gt;Dan’s &lt;em&gt;Mexico&lt;/em&gt; talk, and dynamic program slicing&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Darshal Shetty (IU): &lt;strong&gt;Parallel deep learning with nanopasses&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Lindsey Kuper (UC Santa Cruz): &lt;strong&gt;Communicating chorrectly with a choreography&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Paulette Koronkevich (UBC): &lt;strong&gt;Type universes and heaps&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Will Byrd (UAB): &lt;strong&gt;An update on quines and twines in miniKanren&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 28 Mar 2025 12:15:00 +0000</pubDate>
        <link>http://wonks.github.io/spring2025/2025/03/28/various.html</link>
        <guid isPermaLink="true">http://wonks.github.io/spring2025/2025/03/28/various.html</guid>
        
        
        <category>Spring2025</category>
        
      </item>
    
      <item>
        <title>Formalizing locally nameless syntax with cofinite quantification</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Friday, February 21&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 3:00-4:00 PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall 0119&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;This talk explores the challenges of representing and manipulating variable
bindings in formal verification and programming language theory, focusing on the
formalization of the simply typed lambda calculus (STLC) in Lean using the
locally nameless representation with cofinite quantification. This approach
combines the readability of named representations with the automation-friendly
properties of de Bruijn indices while simplifying the handling of bound
variables, particularly in inductive proofs. We discuss the benefits of cofinite
quantification, which enables strong induction principles. The talk covers the
implementation of confluence and strong normalization proofs, highlighting the
necessity of simultaneous and multivariable substitution. The talk is aimed at
those interested in proof assistants, type theory, and automated reasoning,
offering insights into the advantages and practical applications of this
approach in Lean.&lt;/p&gt;
</description>
        <pubDate>Fri, 21 Feb 2025 15:00:00 +0000</pubDate>
        <link>http://wonks.github.io/uskuplu/spring2025/2025/02/21/uskuplu.html</link>
        <guid isPermaLink="true">http://wonks.github.io/uskuplu/spring2025/2025/02/21/uskuplu.html</guid>
        
        
        <category>Uskuplu</category>
        
        <category>Spring2025</category>
        
      </item>
    
      <item>
        <title>Indexed Families in Category Theory, Part III</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Friday, November 1&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 2:00-3:00 PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall 4111&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;This is the third in a series of lectures introducing how the language of
category theory captures “dependency.” In this lecture, we will continue our
discussion of pullbacks, analyzing their relationship to fibers and base change.&lt;/p&gt;

&lt;p&gt;In this lecture series we will start with set-indexed families of sets,
generalize from Set to arbitrary categories, and conclude with category-indexed
families of categories. Topics covered will include bundles and sections, slice
categories, pullbacks, base change, and Grothendieck fibrations.&lt;/p&gt;

&lt;p&gt;The categorical prerequisites are minimal: I will assume you know about
categories, functors, terminal objects, and binary products. Knowledge of
dependent type theory is not necessary but may provide additional motivation.
If you already know what a Grothendieck fibration is, you probably won’t learn
anything new.&lt;/p&gt;

&lt;p&gt;By the end of this series, you will be prepared to understand the categorical
semantics of dependent type theory (such as comprehension categories, display
map categories, and categories with families / natural models), the categorical
gluing approach to logical relations, and why everyone loves pullbacks so much.&lt;/p&gt;
</description>
        <pubDate>Fri, 01 Nov 2024 14:00:00 +0000</pubDate>
        <link>http://wonks.github.io/angiuli/fall2024/2024/11/01/angiuli.html</link>
        <guid isPermaLink="true">http://wonks.github.io/angiuli/fall2024/2024/11/01/angiuli.html</guid>
        
        
        <category>Angiuli</category>
        
        <category>Fall2024</category>
        
      </item>
    
      <item>
        <title>Indexed Families in Category Theory, Part II</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Friday, October 25&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 2:00-3:00 PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall 4111&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;This is the second in a series of lectures introducing how the language of
category theory captures “dependency.” In this lecture, we will discuss slice
categories and their structure. (The previous lecture was mostly devoted to
background and examples, so you can still catch up if you missed last week.)&lt;/p&gt;

&lt;p&gt;In this lecture series we will start with set-indexed families of sets,
generalize from Set to arbitrary categories, and conclude with category-indexed
families of categories. Topics covered will include bundles and sections, slice
categories, pullbacks, base change, and Grothendieck fibrations.&lt;/p&gt;

&lt;p&gt;The categorical prerequisites are minimal: I will assume you know about
categories, functors, terminal objects, and binary products. Knowledge of
dependent type theory is not necessary but may provide additional motivation.
If you already know what a Grothendieck fibration is, you probably won’t learn
anything new.&lt;/p&gt;

&lt;p&gt;By the end of this series, you will be prepared to understand the categorical
semantics of dependent type theory (such as comprehension categories, display
map categories, and categories with families / natural models), the categorical
gluing approach to logical relations, and why everyone loves pullbacks so much.&lt;/p&gt;
</description>
        <pubDate>Fri, 25 Oct 2024 14:00:00 +0000</pubDate>
        <link>http://wonks.github.io/angiuli/fall2024/2024/10/25/angiuli.html</link>
        <guid isPermaLink="true">http://wonks.github.io/angiuli/fall2024/2024/10/25/angiuli.html</guid>
        
        
        <category>Angiuli</category>
        
        <category>Fall2024</category>
        
      </item>
    
      <item>
        <title>Indexed Families in Category Theory</title>
        <description>&lt;h2 id=&quot;time-and-location&quot;&gt;Time and Location&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Date:&lt;/strong&gt; Friday, October 18&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time:&lt;/strong&gt; 2:00-3:00 PM&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Luddy Hall 4063&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;This is the first in a series of lectures introducing how the language of
category theory captures “dependency.” We will start with set-indexed families
of sets, generalize from Set to arbitrary categories, and conclude with
category-indexed families of categories. Topics covered will include bundles and
sections, slice categories, pullbacks, base change, and Grothendieck fibrations.&lt;/p&gt;

&lt;p&gt;The categorical prerequisites are minimal: I will assume you know about
categories, functors, terminal objects, and binary products. Knowledge of
dependent type theory is not necessary but may provide additional motivation.
If you already know what a Grothendieck fibration is, you probably won’t learn
anything new.&lt;/p&gt;

&lt;p&gt;By the end of this series, you will be prepared to understand the categorical
semantics of dependent type theory (such as comprehension categories, display
map categories, and categories with families / natural models), the categorical
gluing approach to logical relations, and why everyone loves pullbacks so much.&lt;/p&gt;
</description>
        <pubDate>Fri, 18 Oct 2024 14:00:00 +0000</pubDate>
        <link>http://wonks.github.io/angiuli/fall2024/2024/10/18/angiuli.html</link>
        <guid isPermaLink="true">http://wonks.github.io/angiuli/fall2024/2024/10/18/angiuli.html</guid>
        
        
        <category>Angiuli</category>
        
        <category>Fall2024</category>
        
      </item>
    
  </channel>
</rss>
