fixpoint "--rewrite" data Peano 0 = [ | Zero {} | S {prev : Peano} ] data BBool 0 = [ | BTrue {} | BFalse {} ] constant negb : (func(0, [BBool; BBool])) constant even : (func(0, [Peano; BBool])) define negb (x:BBool) : BBool = { if (is$BTrue x) then BFalse else BTrue } define even (x:Peano) : BBool = { if (is$Zero x) then BTrue else if (is$Zero (prev x)) then BFalse else even (prev (prev x)) } bind 0 n : {v: Peano | not (is$Zero v) && is$S v && not (is$S (prev v)) && is$Zero (prev v) } constraint: env [0] lhs {v : bool | true } rhs {v : bool | even (S n) == negb (even n) } id 1 tag [] expand [1 : True]