Bidirectional Type Theory

A bidirectional type theory is a type theory where the Judgement Γ e : A proves Γ 𝑒 : 𝐴 \Gamma\vdash e:A comes in two forms: a "check" form Γ e : A proves Γ 𝑒 : 𝐴 absent \Gamma\vdash e:A\Uparrow and a "synthesis" form Γ e : A proves Γ 𝑒 : 𝐴 absent \Gamma\vdash e:A\Downarrow . This allows the theory to enforce certain syntactic constraints on terms; EG: that they have no β 𝛽 \beta -redexes.

Typically, the check rules are the Introduction Rules and the synthesis rules are the Elimination Rules, though some care must be taken with the Structural Rules. For instance, there are 4 possible forms of the rule for Let Bindings!