term ::= ...
| (`binderIdent` matches an `ident` or a `_`. It is used for identifiers in binding
position, where `_` means that the value should be left unnamed and inaccessible.
ident : term) × term
term ::= ...
| Σ `binderIdent` matches an `ident` or a `_`. It is used for identifiers in binding
position, where `_` means that the value should be left unnamed and inaccessible.
ident `binderIdent` matches an `ident` or a `_`. It is used for identifiers in binding
position, where `_` means that the value should be left unnamed and inaccessible.
ident* (: term)?, term
term ::= ...
| Σ (`binderIdent` matches an `ident` or a `_`. It is used for identifiers in binding
position, where `_` means that the value should be left unnamed and inaccessible.
ident `binderIdent` matches an `ident` or a `_`. It is used for identifiers in binding
position, where `_` means that the value should be left unnamed and inaccessible.
ident* : term), term
Dependent pair types bind one or more variables, which are then in scope in the final term.
If there is one variable, then its type is a that of the first element in the pair and the final term is the type of the second element in the pair.
If there is more than one variable, the types are nested right-associatively.
The identifiers may also be _
.
With parentheses, multiple bound variables may have different types, while the unparenthesized variant requires that all have the same type.