“…Unfortunately, both need human intervention: coinduction to pick a "good" bisimulation relation, and context induction to invent and prove lemmas. Circular coinduction [3,12] is an automatic proof technique for behavioral equivalence. By circular coinduction one can prove, for example, the equality zip(zeros, ones) = blink on streams as follows (zeros is the stream 0 ω , ones is 1 ω , blink is (01) ω , zip merges two streams): 1. check that the two streams have the same head, 0; 2. take the tail of the two streams and generate the new goal zip(ones, zeros) = 1:blink; this becomes the next task; 3. check that the two new streams have the same head, 1; 4. take the tail of the two new streams; after simplification one gets the new goal zip(zeros, ones) = blink, which is nothing but the original proof task; 5. conclude that zip(zeros, ones) = blink holds.…”