מושגי ליבה
The compactness lemma states that any recursive function can be simulated by a finite unrolling of the function. This paper presents a new proof technique for formally verifying the compactness lemma using a pattern stepping bisimulation approach.
תקציר
The paper discusses the compactness lemma in programming language theory, which states that any recursive function can be simulated by a finite unrolling of the function. This lemma is important for logical relations proofs, such as proving strong normalization.
The key idea is that within a terminating program, the recursive function must have called itself up to a finite recursive depth, so replacing the function with a finite unrolling with the same behavior up to that recursive depth should result in the same outcome.
The paper presents a new proof technique using a "pattern stepping bisimulation" approach. This involves:
Defining a pattern language that extends the original language with a special variable ω to represent the recursive function.
Relating terms in the original language to patterns in the pattern language using an "of" relation that tracks the minimum required unrolling depth.
Proving a series of lemmas that allow converting between the original language and the pattern language, while preserving the overall structure of execution.
This approach avoids the need for excessive bookkeeping on the depth of function unrollings during execution, and extends the compactness lemma to a wider range of programming languages, including those with control flow effects.
The paper also presents a formal verification of the compactness lemma in the Coq theorem prover, including extensions to handle explicit control flow.