Most previous work on the semantics of programs with local state involves complex storage modeling with pointers and memory
cells, complicated categorical constructions, or reasoning in the presence of context. In this paper, we explore the extent
to which relational semantics and axiomatic reasoning in the style of Kleene algebra can be used to avoid these complications.
We provide (i) a fully compositional relational semantics for a first-order programming language with a construct for local
variable scoping; and (ii) an equational proof system based on Kleene algebra with tests for proving equivalence of programs
in this language. We show that the proof system is sound and complete relative to the underlying equational theory without
local scoping. We illustrate the use of the system with several examples.