···33trees = ["trees"] # The directories in which your trees are stored
44assets = ["assets"] # The directories in which your assets are stored
55theme = "theme" # The directory in which your theme is stored
66-66+url = "https://liamoc.net/"
77[renderer]
88home = "index"
99+
+2-2
trees/dm-0000.tree
···11-\taxon{definition}
11+\taxon{Definition}
22\author{liamoc}
33-\title{partial order}
33+\title{Partial order}
44\p{A binary relation #{(\sqsubseteq) \subseteq X \times X} is a \em{partial order} if it is, for all #{x, y, z \in X}:
55\ul{
66\li{ [reflexive](dm-0001): #{x \sqsubseteq x}, }
+2-2
trees/dm-0001.tree
···11-\taxon{definition}
11+\taxon{Definition}
22\author{liamoc}
33-\title{reflexivity}
33+\title{Reflexivity}
44\p{A binary relation #{\mathcal{R} \subseteq X \times X} is \em{reflexive} iff, for all #{x \in X}, #{x\ \mathcal{R}\ x}.}
+2-2
trees/dm-0002.tree
···11-\taxon{definition}
11+\taxon{Definition}
22\author{liamoc}
33-\title{transitivity}
33+\title{Transitivity}
44\p{A binary relation #{\mathcal{R} \subseteq X \times X} is \em{transitive} iff, for all #{x, y, z \in X}, if #{x\ \mathcal{R}\ y} and #{y\ \mathcal{R}\ z} then #{x\ \mathcal{R}\ z}.}
+2-2
trees/dm-0003.tree
···11-\taxon{definition}
11+\taxon{Definition}
22\author{liamoc}
33-\title{antisymmetry}
33+\title{Antisymmetry}
44\p{A binary relation #{\mathcal{R} \subseteq X \times X} is \em{antisymmetric} iff, for all #{x, y \in X}, if #{x\ \mathcal{R}\ y} and #{y\ \mathcal{R}\ x} then #{x = y}.}
+4-4
trees/dm-0004.tree
···11-\taxon{definition}
11+\taxon{Definition}
22\author{liamoc}
33-\title{poset}
44-\p{A partially ordered set, or \em{poset} for short, is a pair #{(X, \sqsubseteq)} of a set #{X} equipped with a [[dm-0000]] #{(\sqsubseteq) \subseteq X \times X}.}
55-\p{ Sometimes, when [[dm-0000]] is arbitrary or clear from context, the set #{X} itself may be referred to as a poset.}
33+\title{Poset}
44+\p{A partially ordered set, or \em{poset} for short, is a pair #{(X, \sqsubseteq)} of a set #{X} equipped with a [partial order](dm-0000) #{(\sqsubseteq) \subseteq X \times X}.}
55+\p{ Sometimes, when the [ordering](dm-0000) is arbitrary or clear from context, the set #{X} itself may be referred to as a poset.}
+2-2
trees/dm-0005.tree
···11-\taxon{definition}
11+\taxon{Definition}
22\author{liamoc}
33-\title{cartesian product}
33+\title{Cartesian product}
44\p{The cartesian product of two sets #{X} and #{Y} is the set of pairs #{ \{ (x,y) \mid x \in X \land y \in Y \} }.}
+2-2
trees/dm-0006.tree
···11\import{dt-macros}
22-\taxon{definition}
22+\taxon{Definition}
33\author{liamoc}
44-\title{power set}
44+\title{Power set}
55\p{The power set of #{X}, often written #{\pow{X}}, is the set of all subsets of #{X}: ##{ \pow{X} = \{ Y \mid Y \subseteq X \} }. }
+2-2
trees/dt-0000.tree
···11\import{dt-macros}
22-\title{the \cal{C} Language (without loops)}
33-\taxon{definition}
22+\title{The \cal{C} Language (without loops)}
33+\taxon{Definition}
44\author{liamoc}
55\p{ Using notation similar to \em{Backus-Naur Form} (BNF):
66##{
+2-2
trees/dt-0001.tree
···11\import{dt-macros}
22-\taxon{definition}
33-\title{denotational semantics}
22+\taxon{Definition}
33+\title{Denotational semantics}
44\author{liamoc}
55\p{A \em{denotational semantics} consists of, for each syntactic class \cal{X} in a language:
66\ol{
+1-1
trees/dt-0002.tree
···11\import{dt-macros}
22\author{liamoc}
33\taxon{Remark}
44-\p{The choices semantic domain and valuation function is, essentially, arbitrary: we choose objects that reflect those aspects of our programs that we are interested in. For most of the simple languages we will examine, we are only concerned with the \em{results} of the computation, which is a semantics suitable for reasoning about program behaviour and correctness. However, there also exist denotational \em{cost models} that compositionally assign a measure of program performance to syntax. This measure is just another kind of [[dt-0001]].}
44+\p{The choices semantic domain and valuation function is, essentially, arbitrary: we choose objects that reflect those aspects of our programs that we are interested in. For most of the simple languages we will examine, we are only concerned with the \em{results} of the computation, which is a semantics suitable for reasoning about program behaviour and correctness. However, there also exist denotational \em{cost models} that compositionally assign a measure of program performance to syntax. This measure is just another kind of [denotational semantics](dt-0001).}
+1-1
trees/dt-0003.tree
···11\import{dt-macros}
22-\title{denotational semantics}
22+\title{Denotational semantics}
33\author{liamoc}
44\p{In this course we are concerned with programming languages, which, as with natural languages, consist of a \em{syntax} and \em{semantics}.
55 The syntax of a language is, for our purposes, merely an inductively-defined tree structure (i.e. abstract syntax).}
+2-2
trees/dt-0004.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{[[dt-0001]] for [[dt-0000]]}
44-\taxon{example}
33+\title{[Denotational semantics](dt-0001) for [the \cal{C} language (without loops)](dt-0000)}
44+\taxon{Example}
55\p{We shall first select a semantic domain for each syntactic class:
66##{
77\begin{array}{lcl}
+1-1
trees/dt-0006.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{recursively defined programs}
33+\title{Recursively defined programs}
44\p{
55Suppose we extended [the \cal{C} language](dt-0000) with a while loop construct:
66##{
+4-4
trees/dt-0007.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{recursively defined semantic domains}
33+\title{Recursively defined semantic domains}
4455\p{Suppose we extend our notion of expressions in [the \cal{C} language](dt-0000) with parameterless \em{higher-order} procedures:
66##{
···1111}}
1212\subtree{
1313\taxon{Example}
1414-\title{using higher-order procedures}
1414+\title{Using higher-order procedures}
1515\p{We can store procedures in variables, so the program:
1616##{\mathit{inc} := (\mathsf{proc}\ a := a + 1); \mathit{inc}; \mathit{inc}}
1717has the same effects on the variable #{a} as the program:
1818##{a := a + 1; a := a + 1}
1919}
2020}
2121-\p{For our [[dt-0001]], our domains now take this form (#{\textcolor{blue}{\text{blue}}} parts are new vs. \ref{dt-0004}), where #{\uplus} denotes \em{disjoint union}:
2121+\p{For our [denotational semantics](dt-0001), our domains now take this form (#{\textcolor{blue}{\text{blue}}} parts are new vs. \ref{dt-0004}), where #{\uplus} denotes \em{disjoint union}:
2222##{
2323\begin{array}{lcl}
2424 \mathbf{E} & \triangleq & \Sigma \rightarrow \mathbb{Z}\textcolor{blue}{\ \uplus\ \mathbf{C}}\\
···3232##{\mathbf{C} \; = \; (\mathcal{V} \rightarrow (\mathbb{Z} \uplus \mathbf{C})) \rightarrow (\mathcal{V} \rightarrow (\mathbb{Z} \uplus \mathbf{C}))}
3333Such equations have \em{no} set-theoretic solution, even if we weaken equality to mere \em{set isomorphism} (here notated #{\simeq}).
3434}
3535-\subtree{\taxon{example}\title{A simpler equation with no solution}
3535+\subtree{\taxon{Example}\title{A simpler equation with no solution}
3636\p{Consider the recursive equation #{X = X \rightarrow \mathbb{B}}. Cantor's theorem says that there is no set #{X} such that #{X \simeq \pow{X}} (where #{\pow{X}} is the [[dm-0006]] of #{X}), and seeing as #{\pow{X} \simeq (X \rightarrow \mathbb{B})} it follows that #{X = X \rightarrow \mathbb{B}} has no solution.}
3737}
3838\p{Any kind of \em{higher-order} construct leads to such recursive domain equations.}
+2-2
trees/dt-0008.tree
···11\import{dt-macros}
22\author{liamoc}
33-\taxon{definition}
44-\title{flat domain}
33+\taxon{Definition}
44+\title{Flat domain}
55\p{Given a set #{X}, the \em{flat domain} (or \em{lifted set}) #{X_\bot} is just the set #{X \cup \{ \bot \}} (where #{\bot \notin X}).}
+3-3
trees/dt-0009.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{flat domains and information ordering}
33+\title{Flat domains and information ordering}
44\transclude{dt-000A}
55\transclude{dt-0008}
66\transclude{dt-000B}
···99 \put\transclude/toc{false}
1010 \put\transclude/numbered{false}
1111\subtree{
1212-\taxon{warning}
1313-\p{Don't confuse the [[dt-000B]] on numbers, i.e. #{\sqsubseteq} on #{\mathbb{Z}_\bot}, with the \em{numerical} ordering #{\leq} on #{\mathbb{Z}}. We know #{0 \leq 1}, but #{0} and #{1} are not comparable in our flat [[dt-000B]].}
1212+\taxon{Warning}
1313+\p{Don't confuse the [information ordering](dt-000B) on numbers, i.e. #{\sqsubseteq} on #{\mathbb{Z}_\bot}, with the \em{numerical} ordering #{\leq} on #{\mathbb{Z}}. We know #{0 \leq 1}, but #{0} and #{1} are not comparable in our flat [information ordering](dt-000B).}
1414}
1515}
+1-1
trees/dt-000A.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{the bottom value}
33+\title{The bottom value}
44\p{Following [Scott](danascott), we introduce a special \em{bottom} value #{\bot} to our semantic domains.
55##{\bot\ \text{represents}\ \begin{cases}\text{an undefined value;}\\\text{an error value;}\\\text{a \emph{non-terminating} computation.} \end{cases}}}
+4-4
trees/dt-000B.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{information ordering}
44-\taxon{definition}
55-\p{An information ordering is a [[dm-0000]] on denotations, written #{a \sqsubseteq b}. This indicates that #{b} is \em{approximated by}, or carries \em{more information} than, or is \em{more well-defined} than #{a}.
66-Naturally, [[dt-000A]], being totally uninformative, is always the least element in this ordering.}
33+\title{Information ordering}
44+\taxon{Definition}
55+\p{An information ordering is a [partial order](dm-0000) on denotations, written #{a \sqsubseteq b}. This indicates that #{b} is \em{approximated by}, or carries \em{more information} than, or is \em{more well-defined} than #{a}.
66+Naturally, [the bottom value](dt-000A), being totally uninformative, is always the least element in this ordering.}
+3-3
trees/dt-000C.tree
···11\import{dt-macros}
22\author{liamoc}
33-\taxon{example}
44-\title{information ordering for flat domains}
55-\p{Consider a [[dt-0008]] #{X_\bot}. There is a natural [[dt-000B]] #{\sqsubseteq} on #{X_\bot}:}
33+\taxon{Example}
44+\title{Information ordering for flat domains}
55+\p{Consider a [flat domain](dt-0008) #{X_\bot}. There is a natural [information ordering](dt-000B) #{\sqsubseteq} on #{X_\bot}:}
66\figure{\tex{\usepackage{tikz}}{\begin{tikzpicture}
77 \node (d1) at (-1,0) {$\cdots$};
88 \node (d2) at (4,0) {$\cdots$};
+2-2
trees/dt-000D.tree
···11\import{dt-macros}
22\author{liamoc}
33-\title{combining domains}
33+\title{Combining domains}
44\p{Some of our semantics may depend on the combination of multiple domains, i.e. semantic functions of multiple arguments. As an example, the semantics of an
55-\syn{if} statement combines the semantics of the condition and the semantics of each of the two branches. In such scenarios, our domains are no longer flat — we must generalise to [[dt-000G]]s.}
55+\syn{if} statement combines the semantics of the condition and the semantics of each of the two branches. In such scenarios, our domains are no longer flat — we must generalise to [pointed poset](dt-000G)s.}
66\transclude{dt-000G}
77\transclude{dt-000E}
88\transclude{dt-000F}
+4-4
trees/dt-000E.tree
···11\import{dt-macros}
22\author{liamoc}
33-\taxon{construction}
44-\title{product of two pointed posets}
55-\p{Given two [[dt-000G]]s #{X} and #{Y}, the [product](dm-0005) [[dm-0004]] #{X \times Y} is ordered as follows:
33+\taxon{Construction}
44+\title{Product of two pointed posets}
55+\p{Given two [pointed poset](dt-000G)s #{X} and #{Y}, the [product](dm-0005) [poset](dm-0004) #{X \times Y} is ordered as follows:
66##{ (x,y) \sqsubseteq_{X \times Y} (x',y') \quad \text{iff} \quad x \sqsubseteq_X x' \land y \sqsubseteq_Y y' }
77Intuitively, this says that "the information content of a pair of values is increased by increasing the information of either or both of its component values".}
88-\p{This [product](dm-0005) [[dm-0004]] is also pointed, with bottom value #{\bot_{X \times Y}} being #{(\bot_A, \bot_B)}.}
88+\p{This [product](dm-0005) [poset](dm-0004) is also pointed, with bottom value #{\bot_{X \times Y}} being #{(\bot_A, \bot_B)}.}
+3-3
trees/dt-000F.tree
···11\import{dt-macros}
22\author{liamoc}
33-\taxon{example}
44-\title{the domain #{\mathbb{B}_\bot \times \mathbb{B}_\bot}}
33+\taxon{Example}
44+\title{The domain #{\mathbb{B}_\bot \times \mathbb{B}_\bot}}
55\figure{\tex{\usepackage{tikz}}{
66\begin{tikzpicture}
77 \node (ff) at (0,1) {$(F,F)$};
···2727 (tb.north) -- (tf);
2828\end{tikzpicture}
2929}}
3030-\p{As can be seen above, the domain #{\mathbb{B}_\bot \times \mathbb{B}_\bot} is not flat, but it is still a [[dt-000G]].}
3030+\p{As can be seen above, the domain #{\mathbb{B}_\bot \times \mathbb{B}_\bot} is not flat, but it is still a [pointed poset](dt-000G).}
+3-3
trees/dt-000G.tree
···11\import{dt-macros}
22\author{liamoc}
33-\taxon{definition}
44-\title{pointed poset}
55-\p{A \em{pointed [[dm-0004]]} is a [partially ordered set](dm-0004) with a [bottom value](dt-000A).}
33+\taxon{Definition}
44+\title{Pointed poset}
55+\p{A \em{pointed [poset](dm-0004)} is a [partially ordered set](dm-0004) with a [bottom value](dt-000A).}
+2-2
trees/dt-000H.tree
···11\import{dt-macros}
22\title{Monotonic Functions}
33\author{liamoc}
44-\p{If we model our semantic domains for values with [[dt-000G]]s, then programs are modelled by functions between such [[dm-0004]]s. But, not all functions are suitable:}
44+\p{If we model our semantic domains for values with [pointed poset](dt-000G)s, then programs are modelled by functions between such [poset](dm-0004)s. But, not all functions are suitable:}
55\transclude{dt-000I}
66\p{It stands to reason that the amount of information we get out of our functions should grow as we increase the amount of information we put into them.
77Such functions are called \em{monotonic} with respect to our information ordering.}
···1111 \put\transclude/toc{false}
1212 \put\transclude/numbered{false}
1313\subtree{
1414-\taxon{thesis}
1414+\taxon{Thesis}
1515\p{Computable functions are [monotonic](dt-000J) (observe that #{H} is not). }
1616}
1717}
+2-2
trees/dt-000I.tree
···11\import{dt-macros}
22-\taxon{example}
22+\taxon{Example}
33\author{liamoc}
44-\title{the halting query}
44+\title{The halting query}
55\p{The function #{H : \mathbb{B}_\bot \rightarrow \mathbb{B}_\bot} seems to let us solve the halting problem, assuming #{\bot} represents non-termination:
66##{
77 H(v) \; = \; \begin{cases} F & \text{if}\ v = \bot \\ T & \text{otherwise} \end{cases}
+3-3
trees/dt-000J.tree
···11\import{dt-macros}
22-\taxon{definition}
22+\taxon{Definition}
33\author{liamoc}
44-\title{monotonicity}
55-\p{A function #{f : X \rightarrow Y} between [[dm-0004]]s #{X} and #{Y} is \em{monotone} (or \em{monotonic}) if, for all #{x, y \in X}:
44+\title{Monotonicity}
55+\p{A function #{f : X \rightarrow Y} between [poset](dm-0004)s #{X} and #{Y} is \em{monotone} (or \em{monotonic}) if, for all #{x, y \in X}:
66##{ x \sqsubseteq y\; \text{implies}\; f(x) \sqsubseteq f(y) }}
+3-3
trees/dt-000K.tree
···11\import{dt-macros}
22\author{liamoc}
33-\taxon{definition}
44-\title{strictness}
55-\p{A function #{f : X \rightarrow Y} on pointed posets #{X} and #{Y} is \em{strict} if it preserves [[dt-000A]], i.e. #{f(\bot_X) = \bot_Y}. }
33+\taxon{Definition}
44+\title{Strictness}
55+\p{A function #{f : X \rightarrow Y} on pointed posets #{X} and #{Y} is \em{strict} if it preserves [the bottom value](dt-000A), i.e. #{f(\bot_X) = \bot_Y}. }
+1-1
trees/dt-000N.tree
···11\import{dt-macros}
22-\taxon{exercise}
22+\taxon{Exercise}
33\author{liamoc}
44\p{Consider the functions #{\mathbb{B}_\bot \rightarrow \mathbb{B}_\bot}. Which ones are [monotonic](dt-000J)? There are a total of 27 such functions but only three significant classes.}
+1-1
trees/dt-000O.tree
···11\import{dt-macros}
22-\taxon{exercise}
22+\taxon{Exercise}
33\author{liamoc}
44\p{Let #{\mathbf{K}_K} denote the chain of values #{x_1, x_2, x_3, \dots, x_K} where #{a \leq b} implies #{x_a \sqsubseteq x_b}. There is one [monotonic](dt-000J) function #{\mathbf{K}_1 \rightarrow \mathbf{K}_1}:}
55\figure{\tex{\usepackage{tikz}}{
+1-1
trees/dt-000P.tree
···11\import{dt-macros}
22-\taxon{exercise}
22+\taxon{Exercise}
33\author{liamoc}
44\p{Give a semantics to the \syn{proc} construct:
55 \ol{
+3-3
trees/dt-000Q.tree
···11\import{dt-macros}
22-\taxon{exercise}
22+\taxon{Exercise}
33\author{liamoc}
44\ol{
55-\li{Give an example of a [[dm-0004]] #{A} and a [monotonic](dt-000J) function #{f : A \rightarrow A} such that #{f} \em{doesn't} have a [[dt-000S]].}
66-\li{Give an example of a [[dm-0004]] #{A} and a [monotonic](dt-000J) function #{f : A \rightarrow A} such that #{f} has \em{multiple} [[dt-000S]]s.}
55+\li{Give an example of a [poset](dm-0004) #{A} and a [monotonic](dt-000J) function #{f : A \rightarrow A} such that #{f} \em{doesn't} have a [fixed point](dt-000S).}
66+\li{Give an example of a [poset](dm-0004) #{A} and a [monotonic](dt-000J) function #{f : A \rightarrow A} such that #{f} has \em{multiple} [fixed point](dt-000S)s.}
77}
+1-1
trees/dt-000R.tree
···1818 \end{cases}
1919\end{array}
2020}
2121-Looking at it this way, we can see that any solution to this equation must be an element of our semantic domain #{X \in \mathbf{C}} such that #{f(X) = X}. In other words, the problem of finding solutions to our recursive equations can be cast as the problem of finding a [[dt-000S]] for \em{non-recursive} higher-order functions.
2121+Looking at it this way, we can see that any solution to this equation must be an element of our semantic domain #{X \in \mathbf{C}} such that #{f(X) = X}. In other words, the problem of finding solutions to our recursive equations can be cast as the problem of finding a [fixed point](dt-000S) for \em{non-recursive} higher-order functions.
2222}
+2-2
trees/dt-000S.tree
···11\import{dt-macros}
22-\taxon{definition}
22+\taxon{Definition}
33\author{liamoc}
44-\title{fixed point}
44+\title{Fixed point}
55\p{A value #{x} is a \em{fixed point} of a function #{f} if #{f(x) = x}.
66}
+2-2
trees/dt-000T.tree
···44\scope{
55 \put\transclude/toc{false}
66 \put\transclude/numbered{false}
77-\subtree{\taxon{problem}
88-\p{Not all [monotonic](dt-000J) functions on [[dm-0004]]s have [[dt-000S]], and some have \em{multiple} [[dt-000S]]s!}
77+\subtree{\taxon{Problem}
88+\p{Not all [monotonic](dt-000J) functions on [posets](dm-0004) have [fixed points](dt-000S), and some have \em{multiple} [fixed point](dt-000S)s!}
99}}
1010\p{So, requiring our functions to be monotonic is insufficient to guarantee that a single "best" solution exists. }
1111\p{Intuitively, recursive programs are executed by "unfolding" as much as necessary to get a result. We would like to characterise our domains to ensure that solutions always exist, and to allow us to pick the solutions that are "minimal" in the sense that they rely on a minimal amount of unfolding.}
···11\import{table-macros}
22-\title{teaching}
22+\title{Teaching}
33\author{liamoc}
44-\p{The following teaching engagements were/are all at [[anu]]:}
44+\p{The following teaching engagements were/are all at the [[anu]]:}
55\table{
66\tr{\td{2025}\td{ [[COMP1100]]. Lecturer.}}
77}
88-\p{The following teaching engagements were all at [[uoe]]:}
88+\p{The following teaching engagements were all at the [[uoe]]:}
99\table{
1010\tr{\td{2024}\td{ [[typesig-dt]] (15 students). Invited Lecturer.}}
1111\tr{\td{}\td{ [[mcs]] (30 students). Lecturer Convenor, Tutor.}}
+1-1
trees/loc-0008.tree
···11-\title{research themes}
11+\title{Research themes}
22\author{liamoc}
33\p{I specialise in the intersection of programming languages and formal methods, with a particular emphasis on type systems, test frameworks and other connections between specification and implementation.}
44\p{I enjoy applying theory to practice: developing programming languages and tools based on established theoretical models and techniques.}
+1-1
trees/loc-0009.tree
···11-\title{contact}
11+\title{Contact}
22\author{liamoc}
33\p{I am generally available via email, at \code{me@} this domain. I may also be found on Discord (\code{liamoc}), various Zulips (SPLS, Lean, Agda), the [cogent-club slack](https://cogent-club.slack.com/), [bluesky](https://bsky.app/profile/liamoc.net), [the types.pl mastodon instance](https://types.pl/@liamoc), and inexplicably still [twitter](https://twitter.com/kamatsu8). My office is Room N213 in the Skaidrite Darius Building (CSIT) 108 on the [ANU](anu) Campus. The office door is open to the public so feel free to pop over if you want to visit me. To ensure my availability, it may be wise to first contact me via other means to make an appointment.}
44\p{If you are a student or a colleague, please contact me via my [ANU](anu) email (\code{liam.oconnor} at \code{anu.edu.au}), or on the appropriate course forum (e.g. Ed).}
+1-1
trees/loc-000A.tree
···11\import{refs-datalog}
22-\title{property-based testing}
22+\title{Property-based testing}
33\taxon{Research Theme}
44\author{liamoc}
55\p{I'm interested in bringing more formal methods techniques into the world of testing and traditional software engineering via the avenue of property-based testing.}
+1-1
trees/loc-000B.tree
···11\import{refs-datalog}
22-\title{temporal logic}
22+\title{Temporal logic}
33\taxon{Research Theme}
44\author{liamoc}
55\p{As one of the most common ways to specify reactive systems, temporal logic hasn't gotten as much attention as it deserves. I hope to expand on the theory of temporal logics as well as put them into more practical software engineering tools.}
+1-1
trees/loc-000C.tree
···11\import{refs-datalog}
22-\title{semantics}
22+\title{Semantics}
33\author{liamoc}
44\taxon{Research Theme}
55\p{While I haven't had much opportunity to do research purely in semantics, I am fascinated by the field and eager to work on problems in that area.}
···33\author{liamoc}
44\table{
55\tr{
66- \th{ 2025-03-22 }
66+ \th{ 25.03.22 }
77 \td{I have joined the PC for [[haskell25]]. }
88}
99\tr{
1010- \th{ 2025-03-13 }
1010+ \th{ 25.03.13 }
1111 \td{I have joined the PC for [[fproper25]]. }
1212}
1313\tr{
1414- \th{ 2025-02-04 }
1414+ \th{ 25.02.04 }
1515 \td{ [[jackb]] has joined me for a semester project working on [Holbert](oconnor-amjad-2022). }
1616}
1717\tr{
1818- \th{ 2025-01-08 }
1818+ \th{ 25.01.08 }
1919 \td{I have joined the PC for [[aplas25]]. }
2020}
2121\tr{
2222- \th{ 2024-11-05 }
2222+ \th{ 24.11.05 }
2323 \td{I have joined the PC for [[icfp25]]. }
2424}
2525\tr{
2626- \th{ 2024-10-22 }
2626+ \th{ 24.10.22 }
2727 \td{I have joined the PC for [[pldi25]]. }
2828}
2929\tr{
3030- \th{ 2024-09-17 }
3030+ \th{ 24.09.17 }
3131 \td{I have agreed to organise the [[icfpc25]]. }
3232}
3333\tr{
3434- \th{2024-09-30 }
3434+ \th{24.09.30 }
3535 \td{I was delighted to spend a week with the [WG2.1](wg21) folks here at the [ANU](anu).}
3636}
3737\tr{
3838- \th{ 2024-09-09 }
3939- \td{Our student [[rayhana]] has published her first paper, [[amjad-vanglabbeek-oconnor-2024]] at [EXPRESS/SOS](expresssos24). }
3838+ \th{ 24.09.09 }
3939+ \td{Our student [[rayhana]] has published her first paper, [[amjad-vanglabbeek.oconnor-24]] at [EXPRESS/SOS](expresssos24). }
4040}
4141\tr{
4242- \th{ 2024-07-30 }
4242+ \th{ 24.07.30 }
4343 \td{I have taken a new position as a Senior Lecturer at the [[anu]]. }
4444}
4545
···11\import{table-macros}
22\title{Liam O'Connor}
33-\taxon{person}
33+\taxon{Person}
44\meta{external}{https://liamoc.net}
55\meta{institution}{[[anu]]}
66\meta{orcid}{0000-0003-2765-4269}
77\meta{position}{Senior Lecturer}
88\<html:img>[class]{portrait}[src]{\route-asset{assets/me.jpeg}}
99\p{I am a Senior Lecturer in Foundations at the [[anu]] School of Computing, on [[loc-000D]]. I'm also an Honorary Fellow at the [[uoe]] Laboratory for Foundations of Computer Science, where I worked until 2024.}
1010-\p{Lately, my research has been focused on [[loc-000A]], [[loc-000C]] and [[loc-000B]], but I have very broad research interests. See my [personal bibliography](loc-0001) for a full list of my work.}
1010+\p{Lately, my research has been focused on [property-based testing](loc-000A), [semantics](loc-000C) and [temporal logic](loc-000B), but I have very broad research interests. See my [personal bibliography](loc-0001) for a full list of my work.}
1111\p{Previously, I lectured courses at [[unsw]], where I did my PhD with [[gckeller]] and the Trustworthy Systems Team lead by [[heiser]], focusing on the [[cogent]] project.}
12121313-\p{More details about me can be found on my [[loc-0004]].}
1313+\p{More details about me can be found on my [curriculum vitæ](loc-0004).}
···11\title{Yutaka Nagashima}
22-\taxon{person}
22+\taxon{Person}
33\meta{external}{https://yutakang.github.io/}
44\meta{institution}{Czech Academy of Sciences}
55\meta{orcid}{0000-0001-6693-5325}
···11\title{Australian National University}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{[[loc-000D]]}
44\meta{external}{https://anu.edu.au}
+1-1
trees/places/asplos16.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/2872362}
44\title{\conf-name{ASPLOS '16}{Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems}}
55\date{2016-03}
+1-1
trees/places/asplos19.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/3297858}
44\title{\conf-name{ASPLOS '19}{24th International Conference on Architectural Support for Programming Languages and Operating Systems}}
55\date{2019-04}
+1-1
trees/places/cam.tree
···11\title{University of Cambridge}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Cambridge, United Kingdom}
44\meta{external}{https://www.cam.ac.uk/}
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{\conf-name{ESOP '22}{31st European Symposium on Programming}}
44\date{2022-04}
55\meta{venue}{Munich, Germany}
+1-1
trees/places/expresssos24.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/2872362}
44\title{\conf-name{EXPRESS/SOS '24}{Combined 31st International Workshop on Expressiveness in Concurrency and 21st Workshop on Structural Operational Semantics}}
55\date{2024-11}
+1-1
trees/places/fossacs21.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{\conf-name{FoSSaCS '21}{24th International Conference on Foundations of Software Science and Computation Structures}}
44\date{2021-03}
55\meta{venue}{Luxembourg}
+1-1
trees/places/fproper25.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{\conf-name{FProPer '25}{2nd ACM SIGPLAN Workshop on Functional Programming for Productivity and Performance}}
44\date{2025-10}
55\meta{venue}{Singapore}
+1-1
trees/places/google-syd.tree
···11\title{Google Sydney}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{external}{https://www.google.com/about/careers/applications/locations/sydney}
44\p{A Google office where (among others) Maps and Wave were developed.}
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{[ICFP '21](icfp21) Student Research Competition}
44\date{2021-08}
55\meta{venue}{Online}
+1-1
trees/places/iohk.tree
···11\title{IOHK}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{external}{https://iohk.io}
44\p{Input Output is a blockchain company that develops the Cardano blockchain.}
+1-1
trees/places/isola18.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1007/978-3-030-03418-4}
44\title{\conf-name{ISoLA '18}{8th International Symposium On Leveraging Applications of Formal Methods, Verification and Validation}}
55\date{2018-11}
+1-1
trees/places/itp16.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1007/978-3-319-43144-4}
44\title{\conf-name{ITP '16}{7th International Conference on Interactive Theorem Proving}}
55\date{2016-08}
+1-1
trees/places/itp17.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1007/978-3-319-66107-0}
44\title{\conf-name{ITP '17}{8th International Conference on Interactive Theorem Proving}}
55\date{2017-09}
+1-1
trees/places/jfp.tree
···11\title{Journal of Functional Programming}
22-\taxon{journal}
22+\taxon{Journal}
33\meta{external}{https://www.cambridge.org/core/journals/journal-of-functional-programming}
4455\p{Journal of Functional Programming is an Open Access journal and is the only journal devoted solely to the design, implementation, and application of functional programming languages, spanning the range from mathematical theory to industrial practice. Topics covered include functional languages and extensions, implementation techniques, reasoning and proof, program transformation and synthesis, type systems, type theory, language-based security, memory management, parallelism and applications. Special tracks are devoted to tools and applications, commercial uses and education; pearl-type papers are encouraged.}
···11\title{NICTA}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Australia}
44\p{
55National ICT Australia (NICTA) was a centre for ICT research across Australia. It was later merged with [[csiro]] to become [[data61]].
+1-1
trees/places/nott.tree
···11\title{University of Nottingham}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Nottingham, United Kingdom}
44\meta{external}{https://nott.ed.ac.uk/}
···11\title{University of Oxford}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Oxford, United Kingdom}
44\meta{external}{https://ox.ac.uk}
+1-1
trees/places/pepm24.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{\conf-name{PEPM '24}{ACM SIGPLAN International Workshop on Partial Evaluation and Program Manipulation}}
44\date{2024-01}
55\meta{venue}{London, United Kingdom}
+1-1
trees/places/philtransA.tree
···11\title{Philosophical Transactions of the Royal Society A}
22-\taxon{journal}
22+\taxon{Journal}
33\meta{external}{https://royalsocietypublishing.org/journal/rsta}
4455\p{Philosophical Transactions is a (very!) long-standing, refereed, open access journal published by the Royal Society. It contains influential themed journal issues across the physical, mathematical and engineering sciences. }
+1-1
trees/places/pldi22.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/2525528}
44\title{\conf-name{PLDI '22}{43rd ACM SIGPLAN International Conference on Programming Language Design and Implementation}}
55\date{2022-06}
+1-1
trees/places/pldi25.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{\conf-name{PLDI '25}{46th ACM SIGPLAN International Conference on Programming Language Design and Implementation}}
44\date{2025-06}
55\meta{venue}{Seoul, Republic of Korea}
+1-1
trees/places/plos13.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/2525528}
44\title{\conf-name{PLOS '13}{Seventh Workshop on Programming Languages and Operating Systems}}
55\date{2013-11}
+1-1
trees/places/plos17.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/3144555}
44\title{\conf-name{PLOS '17}{Ninth Workshop on Programming Languages and Operating Systems}}
55\date{2017-10}
···11\import{conf-name-macros}
22\title{\conf-name{POPL '15}{42nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages}}
33-\taxon{conference}
33+\taxon{Conference}
44\date{2015-01}
55\meta{doi}{10.1145/2676726}
66\meta{venue}{Mumbai, India}
+1-1
trees/places/popl16.tree
···11\import{conf-name-macros}
22\title{\conf-name{POPL '16}{43rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages}}
33-\taxon{conference}
33+\taxon{Conference}
44\date{2016-01}
55\meta{doi}{10.1145/2837614}
66\meta{venue}{St. Petersburg, Florida, USA}
+1-1
trees/places/popl22.tree
···11\import{conf-name-macros}
22\title{\conf-name{POPL '22}{49th ACM SIGPLAN Symposium on Principles of Programming Languages}}
33-\taxon{conference}
33+\taxon{Conference}
44\date{2022-01}
55\meta{venue}{Philadelphia, Pennsylvania, USA}
66\meta{external}{https://popl22.sigplan.org/}
+1-1
trees/places/popl23.tree
···11\import{conf-name-macros}
22\title{\conf-name{POPL '23}{50th ACM SIGPLAN Symposium on Principles of Programming Languages}}
33-\taxon{conference}
33+\taxon{Conference}
44\date{2023-01}
55\meta{venue}{Boston, Massachusetts, USA}
66\meta{external}{https://popl23.sigplan.org/}
+1-1
trees/places/popl24.tree
···11\import{conf-name-macros}
22\title{\conf-name{POPL ’24}{51st ACM SIGPLAN Symposium on Principles of Programming Languages}}
33-\taxon{conference}
33+\taxon{Conference}
44\date{2024-01}
55\meta{venue}{London, United Kingdom}
66\meta{external}{https://popl24.sigplan.org/}
+1-1
trees/places/programming-journal.tree
···11\title{The Art, Science, and Engineering of Programming}
22-\taxon{journal}
22+\taxon{Journal}
33\meta{external}{https://programming-journal.org}
4455\p{The Art, Science, and Engineering of Programming was created with the goal of placing the wonderful art of programming in the map of scholarly works. Many academic journals and conferences exist that publish research related to programming, starting with programming languages, software engineering, and expanding to the whole Computer Science field. Yet, many of us feel that, as the field of Computer Science expanded, programming, in itself, has been neglected to a secondary role not worthy of scholarly attention. That is a serious gap, as much of the progress in Computer Science lies on the basis of computer programs, the people who write them, and the concepts and tools available to them to express computational tasks.}
+1-1
trees/places/qmul.tree
···11\title{Queen Mary University of London}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{London, United Kingdom}
44\meta{external}{https://www.qmul.ac.uk/}
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/3567512}
44\title{\conf-name{SLE '22}{15th ACM SIGPLAN International Conference on Software Language Engineering}}
55\date{2022-12}
+1-1
trees/places/spli.tree
···11\title{Scottish Programming Languages Institute}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Scotland, United Kingdom}
44\meta{external}{https://spli.scot/}
+1-1
trees/places/tase23.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\title{\conf-name{TASE '23}{17th International Symposium on Theoretical Aspects of Software Engineering}}
44\date{2023-07}
55\meta{venue}{Bristol, United Kingdom}
···11\title{Technische Universität Berlin}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Berlin, Germany}
44\meta{external}{https://www.tu.berlin/en/}
+1-1
trees/places/tweag.tree
···11\title{Tweag}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{external}{https://tweag.io}
44\p{A consulting firm that specialises in functional programming.}
+1-1
trees/places/tyde16.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/2976022}
44\title{\conf-name{TyDe '16}{1st ACM SIGPLAN International Workshop on Type-Driven Development}}
55\date{2016-09}
+1-1
trees/places/tyde17.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/3122975}
44\title{\conf-name{TyDe '17}{2nd ACM SIGPLAN International Workshop on Type-Driven Development}}
55\date{2017-09}
+1-1
trees/places/tyde19.tree
···11\import{conf-name-macros}
22-\taxon{conference}
22+\taxon{Conference}
33\meta{doi}{10.1145/3331554}
44\title{\conf-name{TyDe '19}{4th ACM SIGPLAN International Workshop on Type-Driven Development}}
55\date{2019-08}
+1-1
trees/places/typesig.tree
···11\title{TypeSIG}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{external}{https://typesig.pl/}
44\p{A student society, part of CompSoc at the [[uoe]], devoted to theoretical computer science and programming languages.}
+1-1
trees/places/uiuc.tree
···11\title{University of Illinois Urbana-Champaign}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Illinois, United States}
44\meta{external}{https://illinois.edu/}
+1-1
trees/places/unimelb.tree
···11\title{University of Melbourne}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Victoria, Australia}
44\meta{external}{https://unimelb.edu.au}
+1-1
trees/places/unsw.tree
···11\title{UNSW Sydney}
22\meta{venue}{New South Wales, Australia}
33-\taxon{institution}
33+\taxon{Institution}
44\meta{external}{https://unsw.edu.au}
+1-1
trees/places/uoe.tree
···11\title{University of Edinburgh}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{venue}{Scotland, United Kingdom}
44\meta{external}{https://ed.ac.uk}
···11\title{IFIP Working Group 2.1: Algorithmic Languages and Calculi}
22-\taxon{institution}
22+\taxon{Institution}
33\meta{external}{https://ifipwg21wiki.cs.kuleuven.be/}
44\p{
55IFIP Working Group 2.1 on Algorithmic Languages and Calculi is a working group of the International Federation for Information Processing (IFIP). Its scope includes:
···11\title{Semantics for Linear-time Temporal Logic with Finite Observations}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[expresssos24]]}
44\author{rayhana}
55\author{rvg}
+1-1
trees/refs/chen-lokmjr-2023.tree
···11\title{Dargent: A Silver Bullet for Verified Data Layout Refinement}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[popl23]]}
44\author{zilinc}
55\author{amblafont}
+1-1
trees/refs/chen-okkh-2017.tree
···11\title{The Cogent Case for Property-Based Testing}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[plos17]]}
44\author{zilinc}
55\author{liamoc}
+1-1
trees/refs/chen-roskhk-2022.tree
···1122\title{Property-based Testing: Climbing the Stairway to Verification}
33-\taxon{reference}
33+\taxon{Reference}
44\meta{venue}{[[sle22]]}
55\author{zilinc}
66\author{crizkallah}
+1-1
trees/refs/cheung-oconnor-rizkallah-2022.tree
···11\title{Overcoming Restraint: Composing Verification of Foreign Functions with Cogent}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[cpp22]]}
44\author{lcheung}
55\author{liamoc}
+1-1
trees/refs/keller-maocrkh-2013.tree
···11\title{File Systems Deserve Verification Too!}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[plos13]]}
44\author{gckeller}
55\author{tobym}
···11\title{Close Encounters of the Higher Kind: Emulating Constructor Classes in Standard ML}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[ml16]]}
44\author{yutakang}
55\author{liamoc}
···11\title{Putting the Past Behind Us (but not forgetting it)}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[wg21]] Meeting, Kloster Neustadt an der Weinstraße, Germany}
44\author{liamoc}
55\date{2024-04}
+1-1
trees/refs/oconnor-amjad-2022.tree
···11\title{Holbert: Reading, Writing, Proving and Learning in the Browser}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[hatra22]]}
44\author{liamoc}
55\author{rayhana}
+1-1
trees/refs/oconnor-cralmnsk-2016.tree
···11\title{Refinement through Restraint: Bringing Down the Cost of Verification}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[icfp16]]}
44\author{liamoc}
55\author{zilinc}
+1-1
trees/refs/oconnor-crjakmsk-2021.tree
···11\title{Cogent: Uniqueness Types and Certifying Compilation}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[jfp]], Volume 31, Issue on Secure Compilation}
44\author{liamoc}
55\author{zilinc}
+1-1
trees/refs/oconnor-csrkk-2018.tree
···11\title{Bringing Effortless Refinement of Data Layouts to Cogent}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[isola18]]}
44\author{liamoc}
55\author{zilinc}
+1-1
trees/refs/oconnor-kamkcr-2014.tree
···11\title{CDSL Version 1: Simplifying Verification with Linear Types}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{NICTA Technical Report}
4455\author{liamoc}
+1-1
trees/refs/oconnor-thesis-2019.tree
···11\title{Type Systems For Systems Types}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{PhD Thesis, [[unsw]]}
44\author{liamoc}
55\date{2019-10-23}
+1-1
trees/refs/oconnor-tyde-2016.tree
···11\title{Applications of Applicative Proof Search}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[tyde16]]}
44\author{liamoc}
55\date{2016-09-18}
+1-1
trees/refs/oconnor-tyde-2019.tree
···11\title{Deferring the Details and Deriving Programs}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[tyde19]]}
44\author{liamoc}
55\date{2019-08-18}
···11\title{Gentzen: A Beginner's Proof Assistant based on Higher Order Logic}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{Undergraduate Project, [[unsw]]}
44\author{liamoc}
55\date{2012-12}
+1-1
trees/refs/oconnor-vanglabbeek-2023-compsoc.tree
···11\title{Mutual Exclusion: Harder than you Think!}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[uoe]] CompSoc Meeting}
44\author{liamoc}
55\author{rvg}
···11\title{Primrose: Selecting Container Data Types by Their Properties}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[programming-journal]], Volume 7, Issue 3, Article 11}
44\author/literal{Xueying Qin}
55\author{liamoc}
+1-1
trees/refs/qin-ovghks-2024.tree
···11\title{Shoggoth: A Formal Foundation for Strategic Rewriting}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[popl24]]}
44\author/literal{Xueying Qin}
55\author{liamoc}
+1-1
trees/refs/rizkallah-lnscomkk-2016.tree
···11\title{A Framework for the Automatic Formal Verification of Refinement from Cogent to C}
22-\taxon{reference}
22+\taxon{Reference}
33\meta{venue}{[[itp16]]}
44\author{crizkallah}
55\author/literal{Japheth Lim}