We present an abstract, set-theoretic denotational semantics for a signiicant subset of OCaml and its module system in order to reason about the correctness of renaming value bindings. Our abstract semantics captures information about the binding structure of programs. Crucially for renaming, it also captures information about the relatedness of diferent declarations that is induced by the use of various diferent language constructs (e.g. functors, module types and module constraints). Correct renamings are precisely those that preserve this structure. We demonstrate that our semantics allows us to prove various high-level, intuitive properties of renamings. We also show that it is sound with respect to a (domain-theoretic) denotational model of the operational behaviour of programs. This formal framework has been implemented in a prototype refactoring tool for OCaml that performs renaming. module type Stringable = sig type t val to_string : t -> string end module Pair(X : Stringable)(Y : Stringable) = struct type t = X.t * Y.t let to_string (x, y) = (X.to_string x)^" "^(Y.to_string y) end module Int = struct type t = int let to_string i = int_to_string i end module String = struct type t = string let to_string s = s end module P = Pair(Int)(Pair(String)(Int)) ;; print_endline (P.to_string (0, ("!=", 1))) ;;Characterising Renaming within OCaml's Module System PLDI '19, June 22ś26, 2019, Phoenix, AZ, USA While the paper describes the work in the context of OCaml modules, the approach can be used to understand aspects of (re)naming in other languages, such as Haskell (classes and instances), and Java (interfaces).