(*
   --------------------------------------------------------------------------
   title: Reciprocal Relationship
   description: Verify counterexample equals instance of negation
   order: 4
   --------------------------------------------------------------------------

   Concept: Reciprocal relationship between verify and instance

   Demonstrates that `verify` finding a counterexample is equivalent to
   `instance` finding an example of the negated property. Both return the
   same values.

   Expected: Both return `x = 0, y = -1`

   ============================================================================ *)

let add (x : int) (y : int) : int = x + y

(* verify on a false statement returns a counterexample *)
verify (fun x y -> add x y >= x)

(* instance on the negation finds the same counterexample *)
instance (fun x y -> not (add x y >= x))
