Reach imposes further restrictions on syntactically well-formed programs. These restrictions are described throughout this manual using the term valid to refer to constructions that obey the restrictions, and the term invalid to refer to constructions that do not obey them.
The text of Reach program is public knowledge to all participants. However, any value that comes from an interaction expression is a secret which only that participant knows. Furthermore, any values derived from secret values are also secret. A value, X, is considered derived from another, Y, if the value of Y is provided to a primitive operation to arrive at X, or if Y is used as part of a conditional that influences the definition of X. Secrets can only be made public by using the declassify primitive.
Consequently, identifiers which appear inside of a function definition or arrow expression MAY be prefixed by an underscore. This will cause a compiler error if any value bound to that identifier is public.