Zulip Chat Archive

Stream: general

Topic: int.sizeof


Enrico Borba (Jan 16 2020 at 06:05):

I'm trying to define fib over the naturals, but I can't seem to make the equation compiler happy. I tried writing

def fib : ℤ → ℤ
| (int.of_nat 0) := 0
| (int.of_nat 1) := 1
| (int.of_nat (n + 2)) := fib (n + 1) + fib n
| -[1+ n] := fib (-(1 + n) + 1) - fib (-(1 + n) + 2)

I need to prove a few things to have well founded recursion, one of them is int.sizeof ↑n < n + 3. Using #print I can see the definition of int.sizeof and see that the statement I need to show is true. I couldn't find any docs on int.sizeof though, and I also don't see it in int.basic, what is it and why is it showing up here?

Mario Carneiro (Jan 16 2020 at 07:04):

I recommend breaking this into two definitions

Mario Carneiro (Jan 16 2020 at 07:05):

The equation compiler will accept the definition over nat, and the definition over int can refer to it in each branch

Mario Carneiro (Jan 16 2020 at 07:07):

If you see the equation compiler giving you subgoals about X.sizeof, that just means it failed to prove it automatically and you need to supply your own well founded measure. X.sizeof is almost never the measure you want to use

Enrico Borba (Jan 16 2020 at 18:42):

Splitting them up worked. Thank you for that suggestion.


Last updated: Dec 20 2023 at 11:08 UTC