Publish introducton to SPA in Agda

Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
Danila Fedorin 2024-07-06 17:39:03 -07:00
parent 861dafef70
commit e91b6f692f
3 changed files with 16 additions and 11 deletions

View File

@ -2,8 +2,7 @@
title: "Implementing and Verifying \"Static Program Analysis\" in Agda, Part 0: Intro" title: "Implementing and Verifying \"Static Program Analysis\" in Agda, Part 0: Intro"
series: "Static Program Analysis in Agda" series: "Static Program Analysis in Agda"
description: "In this post, I give a top-level overview of my work on formally verified static analyses" description: "In this post, I give a top-level overview of my work on formally verified static analyses"
date: 2024-05-30T19:36:58-07:00 date: 2024-07-06T17:37:42-07:00
draft: true
tags: ["Agda", "Programming Languages"] tags: ["Agda", "Programming Languages"]
--- ---
@ -45,13 +44,13 @@ I'd like to cover the following major topics, spending a couple of posts on each
lattice-based static program analysis, the various elements of the lattice-based static program analysis, the various elements of the
lattice represent different facts or properties that we know about the lattice represent different facts or properties that we know about the
program in question; operations on the lattice help us combine these facts program in question; operations on the lattice help us combine these facts
and reason about them. I write about this in [Part 1: Lattices]({{< relref "01_spa_agda_lattices" >}}). and reason about them. I write about this in {{< draftlink "Part 1: Lattices" "01_spa_agda_lattices" >}}.
Interestingly, lattices can be made by combining other lattices in certain Interestingly, lattices can be made by combining other lattices in certain
ways. We can therefore use simpler lattices as building blocks to create ways. We can therefore use simpler lattices as building blocks to create
more complex ones, all while preserving the algebraic structure that more complex ones, all while preserving the algebraic structure that
we need for program analysis. I write about this in we need for program analysis. I write about this in
[Part 2: Combining Lattices]({{< relref "02_spa_agda_combining_lattices" >}}). {{< draftlink "Part 2: Combining Lattices" "02_spa_agda_combining_lattices" >}}.
* __The Fixed-Point Algorithm__: to analyze a program, we use information * __The Fixed-Point Algorithm__: to analyze a program, we use information
that we already know to compute additional information. For instance, that we already know to compute additional information. For instance,
@ -65,9 +64,15 @@ I'd like to cover the following major topics, spending a couple of posts on each
What does it mean for the output to stop changing? Roughly, that's when What does it mean for the output to stop changing? Roughly, that's when
the following equation holds: `knownInfo = analyze(knownInfo)`. In mathematics, the following equation holds: `knownInfo = analyze(knownInfo)`. In mathematics,
this is known as a [fixed point](https://mathworld.wolfram.com/FixedPoint.html). this is known as a [fixed point](https://mathworld.wolfram.com/FixedPoint.html).
Crucially, not all functions have fixed points; however, certain types of To enable computing fixed points, we focus on a specific kind of lattices:
functions on lattices do. The fixed-point algorithm is a way to compute these those with a _fixed height_. I talk about what this means in
points, and we will use this to drive our analyses. {{< draftlink "Part 3: Lattices of Finite Height" "03_spa_agda_fixed_height" >}}.
Even if we restrict our attention to lattices of fixed height,
not all functions have fixed points; however, certain types of functions on
lattices always do. The _fixed-point algorithm_ is a way to compute these
points, and we will use this to drive our analyses. I talk
about this in {{< draftlink "Part 4: The Fixed-Point Algorithm" "04_spa_agda_fixedpoint" >}}.
* __Correctness__: putting together the work on lattices and the fixed-point * __Correctness__: putting together the work on lattices and the fixed-point
algorithm, we can implement a static program analyzer in Agda. However, algorithm, we can implement a static program analyzer in Agda. However,
@ -89,5 +94,6 @@ I'd like to cover the following major topics, spending a couple of posts on each
### Navigation ### Navigation
Here are the posts that Ive written so far for this series: Here are the posts that Ive written so far for this series:
* [Lattices]({{< relref "01_spa_agda_lattices" >}}) * {{< draftlink "Lattices" "01_spa_agda_lattices" >}}
* [Combining Lattices]({{< relref "02_spa_agda_combining_lattices" >}}) * {{< draftlink "Combining Lattices" "02_spa_agda_combining_lattices" >}}
* {{< draftlink "Lattices of Finite Height" "03_spa_agda_fixed_height" >}}

View File

@ -7,6 +7,5 @@ summary = """
analyzer for a simple language. analyzer for a simple language.
""" """
status = "ongoing" status = "ongoing"
draft = true
divider = ": " divider = ": "
+++ +++

@ -1 +1 @@
Subproject commit f931e6eceb79affac3563bba398ebe9bbbbe26a3 Subproject commit c00867d46bf88c6ee31b52894120d7579f4c3070