File: mult.coma

package info (click to toggle)
why3 1.8.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 45,028 kB
  • sloc: xml: 185,443; ml: 111,224; ansic: 3,998; sh: 2,578; makefile: 2,568; java: 865; python: 720; javascript: 290; lisp: 205; pascal: 173
file content (12 lines) | stat: -rw-r--r-- 359 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
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})
  ]