
(*

DONE alt-ergo devrait tenir que de certains labels, i.e.
pour les termes et les propositions, un label qui matche "model:.*", et
pour les variables "model:[0-9]+"

DONE: modele donné apres timeout

*)

module M1

  use int.Int

  let f (x [@model:0]:int) : int
    ensures { [@model:post] result <= 50 }
  = if ([@model:cond] x >= 42) then x + 3 else 0

  let f_no_lab (x:int) : int
    ensures { result <= 50 }
  = if x >= 42 then x + 3 else 0

  use ref.Ref

  let g (x : ref int) : int
    ensures { result <= 50 }
  = x := !x + 1;
    if (!x >= 42) then !x + 3 else 0

end
