<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blub Studies on Hillel Wayne</title>
    <link>https://www.hillelwayne.com/tags/blub-studies/</link>
    <description>Recent content in Blub Studies on Hillel Wayne</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 13 Dec 2021 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://www.hillelwayne.com/tags/blub-studies/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Using Abstract Data Types in TLA&#43;</title>
      <link>https://www.hillelwayne.com/post/tla-adt/</link>
      <pubDate>Mon, 13 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/tla-adt/</guid>
      <description>In my 2021 TLAConf Talk I introduced a technique for encoding abstract data types (ADTs). For accessibility I&amp;rsquo;m reproducing it here. This post is aimed at intermediate-level TLA+ users who already understand action properties and the general concept of refinement.
Say we want to add a LIFO stack to a specification. You can push to and pop from the end of this stack but you cannot change data in the middle.</description>
    </item>
    
    <item>
      <title>Specification Refinement</title>
      <link>https://www.hillelwayne.com/post/refinement/</link>
      <pubDate>Tue, 13 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/refinement/</guid>
      <description>When teaching formal methods, I often get asked how we can connect the specifications we write to the code we produce. One way we do this is with refinement. All examples are in TLA+.1
Imagine we&amp;rsquo;re designing a multithreaded counter. We don&amp;rsquo;t know how we&amp;rsquo;re going to implement it yet, so we start by specifying the abstract behavior.2
---- MODULE abstract ---- EXTENDS Integers, Sequences VARIABLES pc, counter vars == &amp;lt;&amp;lt;pc, counter&amp;gt;&amp;gt; \* Two threads Threads == 1.</description>
    </item>
    
    <item>
      <title>TLA&#43; Action Properties</title>
      <link>https://www.hillelwayne.com/post/action-properties/</link>
      <pubDate>Thu, 25 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/action-properties/</guid>
      <description>There&amp;rsquo;s not a whole lot on TLA+ technique out there: all the resources are either introductions or case studies. Good for people starting out, bad for people past that. I think we need to write more intermediate-level stuff, what Ben Kuhn calls Blub studies. Here&amp;rsquo;s an attempt at that.
Most TLA+ properties are invariants, properties that must be true for every state in the behavior. If we have a simple counter:</description>
    </item>
    
    <item>
      <title>Decision Table Patterns</title>
      <link>https://www.hillelwayne.com/post/decision-table-patterns/</link>
      <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/decision-table-patterns/</guid>
      <description>Decision tables are easy, simple, and powerful. You can teach them in five minutes and write one in half that time. You can look at a table and understand what it&amp;rsquo;s saying, see if it matches your problem, and check for design flaws. So it&amp;rsquo;s kinda weird that there&amp;rsquo;s basically nothing about them online. I wrote an introduction a while back, but I want something a little more formal. So this post will reintroduce the core ideas in a more formal way and then talk about some of the techniques you can apply to make better tables.</description>
    </item>
    
    <item>
      <title>Weak and Strong Fairness</title>
      <link>https://www.hillelwayne.com/post/fairness/</link>
      <pubDate>Fri, 03 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/fairness/</guid>
      <description>I&amp;rsquo;m in the process of revising some of my workshops. I realized that one particular important aspect of TLA+, fairness, is something that I&amp;rsquo;ve struggled to explain well. Then again, everybody struggles to explain it well! It&amp;rsquo;s also a great example of how messy concurrent systems can get, so I figured it would make a good post for the blog.
Stuttering Take the following spec of a clock. I used TLA+ but it should mostly be clear from context:</description>
    </item>
    
    <item>
      <title>Modeling Adversaries with TLA&#43;</title>
      <link>https://www.hillelwayne.com/post/adversaries/</link>
      <pubDate>Sun, 05 May 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/adversaries/</guid>
      <description>A common question I get about specs is how to model bad actors. Usually this is one of two contexts:
 The spec involves several interacting agents sharing a protocol, but some of the nodes are faulty or malicious: they will intentionally try to subvert the system. The spec involves an agent subject to outside forces, like someone can throw a rock at your sensor.  These &amp;ldquo;open world&amp;rdquo; situations are a great place to use formal methods.</description>
    </item>
    
  </channel>
</rss>