1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
module Recursive
use int.Int
use seq.Seq
use mach.java.lang.IndexOutOfBoundsException
use mach.java.lang.Integer
use mach.java.util.List
type t
let rec count_true_rec (l : list bool) (i : integer) : integer
requires { length l < Integer.max_integer }
ensures { i <= length l -> result <= length l - i }
requires { 0 <= i }
variant { length l - i }
=
let e_x = i+1 in
try
if i >= size l then 0
else if get l i then 1 + count_true_rec l e_x
else count_true_rec l e_x
with
IndexOutOfBoundsException.E -> absurd
end
let count_true (l : list bool) : integer
requires { length l < Integer.max_integer }
=
count_true_rec l 0
end
|