named existential

Keyword: named

A named existential binds a skolem function to a fresh name.

Example:

If we can prove that something exists, we can give it a name. For example, suppose that we can prove that, for every X, there exists a Y such that succ(X,Y). Then there exists a (Skolem) function that, given an X, produces such a Y. We can define such a function called next in the following way:

relation succ(X:t,Y:t)
axiom exists Y. succ(X,Y)

property exists Y. succ(X,Y) named next(X)

Provided we can prove the property, and that next is fresh, we can infer that, for all X, succ(X,next(X)) holds. Defining a function in this way, (that is, as a Skolem function) can be quite useful in constructing a proof. However, since proofs in Ivy are not generally constructive, we have no way to compute the function next, so we can't use it in extracted code.