On the expressive power of programming languages (2019)
He (Morris, actually) defines observational equivalence as:    e1 == e2 iff
    
    for all contexts C,
    C[e1] halts iff C[e2] halts.

Which is a great trick to avoid having to compare contexts. Around 29:00 they discuss how to show 5 != 6.One question I have is: what if your language doesn't allow for ways to halt? For example, a language where you have no loops. That definition would imply everything equals everything, since all contexts eventually halt.