Well-formed Types#
Kinds#
κ::=type∣data∣nat∣nat→data∣nat→nat∣addrSpace
Kinding Structural Rule#
Δ⊢x:κx:κ∈Δ​
Type Equality#
Δ⊢N≡M:nat⊨∀σ:dom(Δ)→N.σ(N)=σ(M)​
Address Spaces#
Δ⊢A:addrSpaceA∈{global,local,private,constant}​
Nat to Nat Type Level Functions#
Δ⊢n↦M:nat→natΔ,n:nat⊢M:nat​
Nat to Data Type Level Functions#
Δ⊢n↦T:nat→dataΔ,n:nat⊢T:data​
Natural numbers#
Δ⊢ℓ​:nat​Δ⊢N⊕M:natΔ⊢N:natΔ⊢M:nat⊕∈{+,∗,…}​Δ⊢FN​ M:natΔ⊢FN​:nat→natΔ⊢M:nat​
Data Types#
Δ⊢scalar:data​Δ⊢natType:data​Δ⊢idx[N]:dataΔ⊢N:nat​Δ⊢vec[T,N]:dataΔ⊢N:natΔ⊢T:data​Δ⊢(S, T):dataΔ⊢S:dataΔ⊢T:data​Δ⊢N∙​T:dataΔ⊢N:natΔ⊢T:data​Δ⊢(n:nat ∗∗ T):dataΔ,n:nat⊢T:data​Δ⊢N∙∙​FT​:dataΔ⊢N:natΔ⊢FT​:nat→data​Δ⊢FT​ N:dataΔ⊢FT​:nat→dataΔ⊢N:nat​
Types#
Δ⊢T:typeΔ⊢T:data​Δ⊢θ1​→θ2​:typeΔ⊢θ1​:typeΔ⊢θ2​:type​Δ⊢(x:κ)→θ:typeΔ,x:κ⊢θ:typeκ∈{addrSpace,nat→nat,nat→data,nat,data}​
Typing Rules#
Structural Rules#
Δ∣Γ⊢x:θx:θ∈Γ​Δ∣Γ⊢E:θ2​Δ∣Γ⊢E:θ1​Δ⊢θ1​≡θ2​:type​Δ∣Γ⊢prim:θprim:θ∈Primitives​
Introduction and Elimination Rules#
Δ∣Γ⊢λx.E:θ1​→θ2​Δ∣Γ,x:θ1​⊢E:θ2​​Δ∣Γ1​,Γ2​⊢E1​ E2​:θ2​Δ∣Γ1​⊢E1​:θ1​→θ2​Δ∣Γ2​⊢E2​:θ1​​Δ∣Γ⊢Λx.E:(x:κ)→θΔ,x:κ∣Γ⊢E:θxî€ âˆˆftv(Γ)​Δ∣Γ⊢E τ:θ[Ï„/x]Δ∣Γ⊢E:(x:κ)→θΔ⊢τ:κ​