packages feed

liquid-fixpoint-8.10.7: tests/proof/even.fq

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]