Please, have a look to the lemma proof:
http://rise4fun.com/Dafny/jead
I cannot think what is the problem there!!!
Some help, please?
Comments: Here is a `calc` version: http://rise4fun.com/Dafny/6UNv ``` function add(e1:int, e2:int) : int { e1+e2 } function dec(e:int) : int { e-1 } function mul(e1:int, e2:int) : int { e1*e2 } lemma L (b:int,e1:int,e2:int) requires e1 >= 0 && e2 >= 0 ensures exp(b,add(e1,e2)) == mul(exp(b,e1), exp(b,e2)) { if e1 == 0 {} else { calc{ exp(b,add(e1,e2)); == mul(b, exp(b,add(e1,dec(e2)))); == mul(b, exp(b,add(dec(e1),e2))); == { L(b,dec(e1),e2); } mul(b, mul(exp(b,dec(e1)), exp(b,e2))); == mul(mul(b, exp(b,dec(e1))), exp(b,e2)); == mul(exp(b,e1),exp(b,e2)); } } } function exp(x:int,e:int):int requires e >= 0 { if e==0 then 1 else mul(x, exp(x,dec(e))) } ```
http://rise4fun.com/Dafny/jead
I cannot think what is the problem there!!!
Some help, please?
Comments: Here is a `calc` version: http://rise4fun.com/Dafny/6UNv ``` function add(e1:int, e2:int) : int { e1+e2 } function dec(e:int) : int { e-1 } function mul(e1:int, e2:int) : int { e1*e2 } lemma L (b:int,e1:int,e2:int) requires e1 >= 0 && e2 >= 0 ensures exp(b,add(e1,e2)) == mul(exp(b,e1), exp(b,e2)) { if e1 == 0 {} else { calc{ exp(b,add(e1,e2)); == mul(b, exp(b,add(e1,dec(e2)))); == mul(b, exp(b,add(dec(e1),e2))); == { L(b,dec(e1),e2); } mul(b, mul(exp(b,dec(e1)), exp(b,e2))); == mul(mul(b, exp(b,dec(e1))), exp(b,e2)); == mul(exp(b,e1),exp(b,e2)); } } } function exp(x:int,e:int):int requires e >= 0 { if e==0 then 1 else mul(x, exp(x,dec(e))) } ```