\DOC mk_let \TYPE {mk_let : term * term -> term} \SYNOPSIS

advertisement
\DOC mk_let
\TYPE {mk_let : term * term -> term}
\SYNOPSIS
Constructs a {let} term.
\DESCRIBE
The invocation {mk_let (M,N)} returns the term {`LET M N`}. If {M} is
of the form {\x.t} then the result will be pretty-printed as
{let x = N in t}. Since {LET M N} is defined to be {M N}, one can
think of a {let}-expression as a suspended beta-redex (if that helps).
\FAILURE
Fails if the types of {M} and {N} are such that {LET M N} is
not well-typed, i.e., the type of {M} must be a function type, and
the type of {N} must equal the domain of the type of {M}.
\EXAMPLE
{
- mk_let(Term`\x. x \/ x`, Term`Q /\ R`);
> val it = `let x = Q /\ R in x \/ x` : term
}
\COMMENTS
{let} expressions may be nested.
Pairing can also be used in the {let} syntax, provided {pairTheory}
has been loaded. The library {pairLib} provides support for manipulating
`paired' lets.
\SEEALSO
boolSyntax.dest_let, boolSyntax.is_let, pairSyntax.mk_anylet, pairLib.
\ENDDOC
Download