fixpoint "--rewrite" data Vec 1 = [ | VNil { } | VCons { head : @(0), tail : Vec @(0)} ] define filter (lq1 : func(0 , [a##a29r;bool]), lq2 : [a##a29r]) : [a##a29r] = { if (isNil lq2) then Nil else ( if (lq1 (head lq2)) then (Cons (head lq2) (filter lq1 (tail lq2))) else (filter lq1 (tail lq2))) } constant len: (func(1, [(Vec @(0)); int])) match len VNil = 0 match len VCons x xs = (1 + len xs) constraint: env [] lhs {v : int | true } rhs {v : int | len (VCons 1 (VCons 2 (VCons 3 VNil))) = 3} id 1 tag [] expand [1 : True]