mirror of
https://github.com/AdaCore/why3.git
synced 2026-02-12 12:34:55 -08:00
30 lines
717 B
Plaintext
30 lines
717 B
Plaintext
|
|
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
|