free variable

A free variable is a logical variable that occurs outside of any quantifier.

Free variables in Ivy are implicitly universally quantified.

In the case of a declaration, this is equivalent to writing the universal quantifiers in the declared formula explicitly.

In the case of a statement, this is equivalent to an implicit loop over all possible values of the variable.

Examples:

Declaration

The following two declarations are equivalent

# Explicit quantifiers:
axiom [foo] forall X:t. forall Y:t. bar(X,Y)

# Implicit quantifiers
axiom [foo] bar(X,Y)

Statement

In the following example, the two groups of assignments are equivalent

type t = {red, green}
relation foo(X:t, Y:t)

action bar = {

    # Explicit assignments
    foo(red, red) := true
    foo(red, green) := true
    foo(green, red) := true
    foo(green, green) := true

    # Implicit assignment, ranging over all X:t and Y:t
    foo(X, Y) := true

}