A judgment is a statement derivable in a particular object logic. A hypothetical judgment is a judgment that makes use of hypothetical assumptions. On paper, we often represent a set of hypothetical assumptions using a context:
We name the judgment that proves the truth of a proposition , which can be read as "Under the assumptions , is true." The context is the sequence of assumptions .
With an ordinary hypothetical context, we may freely coalesce repeated assumptions, add extra unused assumptions, and to reorder the assumptions in the context. (Formally, these are the properties of contraction, weakening, and exchange.)
Additionally, a context in a hypothetical judgment should satisfy the identity and substitution properties. Identity simply means that we should be able to use our hypotheses -- . Substitution means that if we have a proof tree showing , and another proof tree , then we should be able to substitute the second tree into the first, replacing hypothesis and producing a new tree proving .
This sample rule is the implication introduction rule, which says that is true if we can show is true under the hypothetical assumption .
In the LF methodology, we represent the hypothetical context of our object language's judgment using the LF context itself. (See higher-order judgment.)
For example, we can represent the introduction rule as follows:
prop : type. ==> : prop -> prop -> prop. %infix none 10 ==>. true : prop -> type. imp/intro : true (A ==> B) <- (true A -> true B).
Here, we represent the hypothetical assumption that using an LF hypothesis of type A true. We can see this clearly if we write down the proof term for the proof of the tautology P ==> P:
taut : true (P ==> P)= imp/intro ([ptrue : true P] ptrue).
Within the scope of the function argument to imp/intro, we assume that we have a proof of P true (which we creatively named ptrue). This assumption lets us show that P true holds, and that lets us show that (P ==> P) true.