A to dynamické znamená, že mi:
function test (x: Even) return Even
begin
return x + x;
end
test(13)
sice přeloží, ale při běhu to vyhodí výjimku při pokusu zavolat test(13), tak?
Doporučuji mrknout, jak se kontrakty kontrolují v době překladu ve SPARKu (GNATprove), zejména na hinty přímo v kódu (Pragma Assert — nesouvisí s asercí v době běhu). IMHO je tento způsob statické verifikace intuitivnější než holá int. logika à la Agda.