<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/refinement-without-specification-1x8xgfda2" -->

---
title: Refinement without Specification | daily.dev
description: Formal refinement — a technique from formal specification where one system is shown to be a valid implementation of another — is illustrated using familiar SQL...
canonical: https://daily.dev/posts/refinement-without-specification-1x8xgfda2
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Refinement without Specification | daily.dev
og:description: Formal refinement — a technique from formal specification where one system is shown to be a valid implementation of another — is illustrated using familiar SQL...
og:url: https://daily.dev/posts/refinement-without-specification-1x8xgfda2
og:image: https://api.daily.dev/og/posts/1X8XgFDa2.png
og:image:alt: Refinement without Specification
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Refinement without Specification

**[Computer Things](https://daily.dev/sources/hillelwayne)** · 4 min read · 0 upvotes · 0 comments

## Summary

Formal refinement — a technique from formal specification where one system is shown to be a valid implementation of another — is illustrated using familiar SQL database migrations. Starting with a boolean `is_activated` column, the post walks through two successive schema migrations (to a nullable `activated_at` timestamp, then to an event-sourcing model) and shows how refinement mappings can prove each migration preserves external behavior. It then introduces mutability constraints and shows cases where refinement breaks down (e.g., when deactivation events allow reverting activation state). The key insight is that refinement may be easier to teach in a database context rather than alongside formal methods from scratch.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://buttondown.com/hillelwayne/archive/refinement-without-specification>

## Similar posts on daily.dev

- [Refactoring Databases \(in Rails\)](https://daily.dev/posts/refactoring-databases-in-rails--cjmoam5vc) · RUBYLAND · 0 upvotes · 0 comments
- [A Solid Reference](https://daily.dev/posts/a-solid-reference-np75qpyqs) · The Daily WTF · 0 upvotes · 0 comments
- [Migration Series — Lesson 5: The Final Gate: Proving Trust with Rigorous, Automated Validation](https://daily.dev/posts/migration-series-lesson-5-the-final-gate-proving-trust-with-rigorous-automated-validation-tmofuir4s) · Snowflake Community · 0 upvotes · 0 comments

---

Tags: [#architecture](https://daily.dev/tags/architecture), [#backend](https://daily.dev/tags/backend), [#sql](https://daily.dev/tags/sql)

[View this post on daily.dev](https://daily.dev/posts/refinement-without-specification-1x8xgfda2)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Refinement without Specification","url":"https://daily.dev/posts/refinement-without-specification-1x8xgfda2","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/refinement-without-specification-1x8xgfda2"},"datePublished":"2026-06-17T11:26:25.997Z","dateModified":"2026-06-17T11:34:35.177Z","description":"Formal refinement — a technique from formal specification where one system is shown to be a valid implementation of another — is illustrated using familiar SQL...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d3090b02554ea6f3d48b9fbd735e38a9?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d3090b02554ea6f3d48b9fbd735e38a9?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Computer Things","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Computer Things","logo":"https://media.daily.dev/image/upload/s--wQ-MAPMZ--/f_auto,q_auto/v1781695551/logos/hillelwayne?_a=BAMAMiWQ0","url":"https://daily.dev/sources/hillelwayne"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/refinement-without-specification-1x8xgfda2","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"architecture,backend,sql","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Computer Things","item":"https://daily.dev/sources/hillelwayne"},{"@type":"ListItem","position":3,"name":"Refinement without Specification"}]}
```

