Logical relations

From HandWiki

Logical relations are a proof method employed in programming language semantics to show that two denotational semantics are equivalent. To describe the process, let us denote the two semantics by [math]\displaystyle{ [\![-]\!]_i }[/math], where [math]\displaystyle{ i=1,2 }[/math]. For each type [math]\displaystyle{ A }[/math], there is a particular associated relation [math]\displaystyle{ \sim }[/math] between [math]\displaystyle{ [\![A]\!]_1 }[/math] and [math]\displaystyle{ [\![A]\!]_2 }[/math]. This relation is defined such that for each program phrase [math]\displaystyle{ M }[/math], the two denotations are related: [math]\displaystyle{ [\![M]\!]_1 \sim [\![M]\!]_2 }[/math]. Another property of this relation is that related denotations for ground types are equivalent in some sense, usually equal. The conclusion is then that both denotations exhibit equivalent behavior on ground terms, hence are equivalent.

References

https://www.cs.uoregon.edu/research/summerschool/summer16/notes/AhmedLR.pdf https://www.cs.uoregon.edu/research/summerschool/summer13/lectures/ahmed-1.pdf

  • POPLmark Reloaded: Proofs involving logical relations used as a benchmark for proof assistants.