Files
why3/examples/coma/mult.coma
2024-10-17 20:00:12 +02:00

13 lines
359 B
Plaintext

use coma.Std
use int.Int
use int.ComputerDivision
let product (a b: int) {b >= 0} (return (c: int) { c = a * b })
= loop {a} {b} {0}
[ loop (p q r: int) { p * q + r = a * b } {q >= 0}
= if {q > 0} (-> if {mod q 2 = 1}
(-> loop {p+p} {div q 2} {r+p})
(-> loop {p+p} {div q 2} {r}))
(-> return {r})
]