doc-src/Sledgehammer/sledgehammer.tex
changeset 43990 3928b3448f38
parent 43822 86cdb898f251
child 44091 d40e5c72b346
equal deleted inserted replaced
43989:eb763b3ff9ed 43990:3928b3448f38
   884 
   884 
   885 \begin{enum}
   885 \begin{enum}
   886 \item[$\bullet$] \textbf{\textit{erased} (very unsound):} No type information is
   886 \item[$\bullet$] \textbf{\textit{erased} (very unsound):} No type information is
   887 supplied to the ATP. Types are simply erased.
   887 supplied to the ATP. Types are simply erased.
   888 
   888 
   889 \item[$\bullet$] \textbf{\textit{poly\_preds} (sound):} Types are encoded using
   889 \item[$\bullet$] \textbf{\textit{poly\_guards} (sound):} Types are encoded using
   890 a predicate \textit{has\_\allowbreak type\/}$(\tau, t)$ that restricts the range
   890 a predicate \textit{has\_\allowbreak type\/}$(\tau, t)$ that guards bound
   891 of bound variables. Constants are annotated with their types, supplied as extra
   891 variables. Constants are annotated with their types, supplied as additional
   892 arguments, to resolve overloading.
   892 arguments, to resolve overloading.
   893 
   893 
   894 \item[$\bullet$] \textbf{\textit{poly\_tags} (sound):} Each term and subterm is
   894 \item[$\bullet$] \textbf{\textit{poly\_tags} (sound):} Each term and subterm is
   895 tagged with its type using a function $\mathit{type\_info\/}(\tau, t)$.
   895 tagged with its type using a function $\mathit{type\_info\/}(\tau, t)$.
   896 
   896 
   897 \item[$\bullet$] \textbf{\textit{poly\_args} (unsound):}
   897 \item[$\bullet$] \textbf{\textit{poly\_args} (unsound):}
   898 Like for \textit{poly\_preds} constants are annotated with their types to
   898 Like for \textit{poly\_guards} constants are annotated with their types to
   899 resolve overloading, but otherwise no type information is encoded. This
   899 resolve overloading, but otherwise no type information is encoded. This
   900 coincides with the default encoding used by the \textit{metis} command.
   900 coincides with the default encoding used by the \textit{metis} command.
   901 
   901 
   902 \item[$\bullet$]
   902 \item[$\bullet$]
   903 \textbf{%
   903 \textbf{%
   904 \textit{mono\_preds}, \textit{mono\_tags} (sound);
   904 \textit{mono\_guards}, \textit{mono\_tags} (sound);
   905 \textit{mono\_args} (unsound):} \\
   905 \textit{mono\_args} (unsound):} \\
   906 Similar to \textit{poly\_preds}, \textit{poly\_tags}, and \textit{poly\_args},
   906 Similar to \textit{poly\_guards}, \textit{poly\_tags}, and \textit{poly\_args},
   907 respectively, but the problem is additionally monomorphized, meaning that type
   907 respectively, but the problem is additionally monomorphized, meaning that type
   908 variables are instantiated with heuristically chosen ground types.
   908 variables are instantiated with heuristically chosen ground types.
   909 Monomorphization can simplify reasoning but also leads to larger fact bases,
   909 Monomorphization can simplify reasoning but also leads to larger fact bases,
   910 which can slow down the ATPs.
   910 which can slow down the ATPs.
   911 
   911 
   912 \item[$\bullet$]
   912 \item[$\bullet$]
   913 \textbf{%
   913 \textbf{%
   914 \textit{mangled\_preds},
   914 \textit{mangled\_guards},
   915 \textit{mangled\_tags} (sound); \\
   915 \textit{mangled\_tags} (sound); \\
   916 \textit{mangled\_args} (unsound):} \\
   916 \textit{mangled\_args} (unsound):} \\
   917 Similar to
   917 Similar to
   918 \textit{mono\_preds}, \textit{mono\_tags}, and \textit{mono\_args},
   918 \textit{mono\_guards}, \textit{mono\_tags}, and \textit{mono\_args},
   919 respectively but types are mangled in constant names instead of being supplied
   919 respectively but types are mangled in constant names instead of being supplied
   920 as ground term arguments. The binary predicate $\mathit{has\_type\/}(\tau, t)$
   920 as ground term arguments. The binary predicate $\mathit{has\_type\/}(\tau, t)$
   921 becomes a unary predicate $\mathit{has\_type\_}\tau(t)$, and the binary function
   921 becomes a unary predicate $\mathit{has\_type\_}\tau(t)$, and the binary function
   922 $\mathit{type\_info\/}(\tau, t)$ becomes a unary function
   922 $\mathit{type\_info\/}(\tau, t)$ becomes a unary function
   923 $\mathit{type\_info\_}\tau(t)$.
   923 $\mathit{type\_info\_}\tau(t)$.
   924 
   924 
   925 \item[$\bullet$] \textbf{\textit{simple} (sound):} Exploit simple first-order
   925 \item[$\bullet$] \textbf{\textit{simple} (sound):} Exploit simple first-order
   926 types if the prover supports the TFF or THF syntax; otherwise, fall back on
   926 types if the prover supports the TFF or THF syntax; otherwise, fall back on
   927 \textit{mangled\_preds}. The problem is monomorphized.
   927 \textit{mangled\_guards}. The problem is monomorphized.
   928 
   928 
   929 \item[$\bullet$] \textbf{\textit{simple\_higher} (sound):} Exploit simple
   929 \item[$\bullet$] \textbf{\textit{simple\_higher} (sound):} Exploit simple
   930 higher-order types if the prover supports the THF syntax; otherwise, fall back
   930 higher-order types if the prover supports the THF syntax; otherwise, fall back
   931 on \textit{simple} or \textit{mangled\_preds\_heavy}. The problem is
   931 on \textit{simple} or \textit{mangled\_guards\_heavy}. The problem is
   932 monomorphized.
   932 monomorphized.
   933 
   933 
   934 \item[$\bullet$]
   934 \item[$\bullet$]
   935 \textbf{%
   935 \textbf{%
   936 \textit{poly\_preds}?, \textit{poly\_tags}?, \textit{mono\_preds}?, \textit{mono\_tags}?, \\
   936 \textit{poly\_guards}?, \textit{poly\_tags}?, \textit{mono\_guards}?, \textit{mono\_tags}?, \\
   937 \textit{mangled\_preds}?, \textit{mangled\_tags}?, \textit{simple}?, \textit{simple\_higher}? (quasi-sound):} \\
   937 \textit{mangled\_guards}?, \textit{mangled\_tags}?, \textit{simple}? (quasi-sound):} \\
   938 The type encodings \textit{poly\_preds}, \textit{poly\_tags},
   938 The type encodings \textit{poly\_guards}, \textit{poly\_tags},
   939 \textit{mono\_preds}, \textit{mono\_tags}, \textit{mangled\_preds},
   939 \textit{mono\_guards}, \textit{mono\_tags}, \textit{mangled\_guards},
   940 \textit{mangled\_tags}, \textit{simple}, and \textit{simple\_higher} are fully
   940 \textit{mangled\_tags}, and \textit{simple} are fully
   941 typed and sound. For each of these, Sledgehammer also provides a lighter,
   941 typed and sound. For each of these, Sledgehammer also provides a lighter,
   942 virtually sound variant identified by a question mark (`{?}')\ that detects and
   942 virtually sound variant identified by a question mark (`{?}')\ that detects and
   943 erases monotonic types, notably infinite types. (For \textit{simple} and
   943 erases monotonic types, notably infinite types. (For \textit{simple}, the types
   944 \textit{simple\_higher}, the types are not actually erased but rather replaced
   944 are not actually erased but rather replaced by a shared uniform type of
   945 by a shared uniform type of individuals.) As argument to the \textit{metis}
   945 individuals.) As argument to the \textit{metis} proof method, the question mark
   946 proof method, the question mark is replaced by a \hbox{``\textit{\_query}''}
   946 is replaced by a \hbox{``\textit{\_query}''} suffix. If the \emph{sound} option
   947 suffix. If the \emph{sound} option is enabled, these encodings are fully sound.
   947 is enabled, these encodings are fully sound.
   948 
   948 
   949 \item[$\bullet$]
   949 \item[$\bullet$]
   950 \textbf{%
   950 \textbf{%
   951 \textit{poly\_preds}!, \textit{poly\_tags}!, \textit{mono\_preds}!, \textit{mono\_tags}!, \\
   951 \textit{poly\_guards}!, \textit{poly\_tags}!, \textit{mono\_guards}!, \textit{mono\_tags}!, \\
   952 \textit{mangled\_preds}!, \textit{mangled\_tags}!, \textit{simple}!, \textit{simple\_higher}! \\
   952 \textit{mangled\_guards}!, \textit{mangled\_tags}!, \textit{simple}!, \textit{simple\_higher}! \\
   953 (mildly unsound):} \\
   953 (mildly unsound):} \\
   954 The type encodings \textit{poly\_preds}, \textit{poly\_tags},
   954 The type encodings \textit{poly\_guards}, \textit{poly\_tags},
   955 \textit{mono\_preds}, \textit{mono\_tags}, \textit{mangled\_preds},
   955 \textit{mono\_guards}, \textit{mono\_tags}, \textit{mangled\_guards},
   956 \textit{mangled\_tags}, \textit{simple}, and \textit{simple\_higher} also admit
   956 \textit{mangled\_tags}, \textit{simple}, and \textit{simple\_higher} also admit
   957 a mildly unsound (but very efficient) variant identified by an exclamation mark
   957 a mildly unsound (but very efficient) variant identified by an exclamation mark
   958 (`{!}') that detects and erases erases all types except those that are clearly
   958 (`{!}') that detects and erases erases all types except those that are clearly
   959 finite (e.g., \textit{bool}). (For \textit{simple} and \textit{simple\_higher},
   959 finite (e.g., \textit{bool}). (For \textit{simple} and \textit{simple\_higher},
   960 the types are not actually erased but rather replaced by a shared uniform type
   960 the types are not actually erased but rather replaced by a shared uniform type
   963 
   963 
   964 \item[$\bullet$] \textbf{\textit{smart}:} The actual encoding used depends on
   964 \item[$\bullet$] \textbf{\textit{smart}:} The actual encoding used depends on
   965 the ATP and should be the most efficient virtually sound encoding for that ATP.
   965 the ATP and should be the most efficient virtually sound encoding for that ATP.
   966 \end{enum}
   966 \end{enum}
   967 
   967 
   968 In addition, all the \textit{preds} and \textit{tags} type encodings are
   968 In addition, all the \textit{guards} and \textit{tags} type encodings are
   969 available in two variants, a lightweight and a heavyweight variant. The
   969 available in two variants, a lightweight and a heavyweight variant. The
   970 lightweight variants are generally more efficient and are the default; the
   970 lightweight variants are generally more efficient and are the default; the
   971 heavyweight variants are identified by a \textit{\_heavy} suffix (e.g.,
   971 heavyweight variants are identified by a \textit{\_heavy} suffix (e.g.,
   972 \textit{mangled\_preds\_heavy}{?}).
   972 \textit{mangled\_guards\_heavy}{?}).
   973 
   973 
   974 For SMT solvers, the type encoding is always \textit{simple}, irrespective of
   974 For SMT solvers, the type encoding is always \textit{simple}, irrespective of
   975 the value of this option.
   975 the value of this option.
   976 
   976 
   977 \nopagebreak
   977 \nopagebreak