How should we handle:

Γ ⊢ α • S ≤ α̂ • S' : (κ¹, …, κⁿ) → κ  ⊣ Γ' work?

Cases:

Case: Γ ⊢ α̂ • S, A ≤ β • S, B : (κ¹, …, κⁿ, κⁿ⁺¹) → κ ⊣ Γ''
  if Γ ⊢ A ≡ B : κⁿ⁺¹ ⊣ Γ' 
   & Γ' ⊢ α̂ • S ≤ β • S : (κ¹, …, κⁿ) → κⁿ⁺¹ → κ ⊣ Γ''

Case: Γ ⊢ α̂ • S, A ≤ β : (κ¹, …, κⁿ) → κ ⊣ Γ'
  Fail 

Case: Γ,α̂, Γ'' ⊢ α̂ • β¹ … βⁿ ≤ α • S : (κ¹, …, κⁿ) → κ ⊣ Γ',α̂=λβ¹ … βⁿ. α (S),Γ''
   if Γ ⊢ λβ¹ … βⁿ. α (S) ≤ κ¹ → … → κⁿ → κ ⊣ Γ'

Case: Γ ⊢ α̂ • · ≤ β • S, A : (κ¹, …, κⁿ) → κ ⊣ Γ'
  if Γ ⊢ α̂ (·) ≤ β • S, A  : κ¹ → ... κⁿ → κ ⊣ Γ'

Case: α (S) ≤ β (S') 
  α = β and S ≡ S'

Otherwise: 
  fail 

    

 




A ::= λα.A | A → B | ∀α:κ.A | R 
R ::= h (S)
h ::= (A : κ) | α
S ::= ε | S, A

N ::= λα.A | A → B | ∀α:κ.A | α (S) 

First, weak-head reduction, in spine form. (We allow eta-short terms.)

A ⇓ N 
N @ S : κ ⇓ N'


———————————
λα.A ⇓ λα.A


—————————————
A → B ⇓ A → B 


———————————————
∀α:κ.A ⇓ ∀α:κ.A


—————————————
α (S) ⇓ α (S)


A ⇓ N
N @ S : κ ⇓ N' 
—————————————————
(A : κ) (S) ⇓ N'


———————————————————————————
α (S) @ S' : κ ⇓ α (S · S')


—————————————
N @ ε : κ ⇓ N 


[(B:κ₁)/α]A ⇓ N 
N @ S : κ ⇓ N'
——————————————————————————————
(λα.A) @ (B, S) : κ₁ → κ ⇓ N'


[(B:κ₁)/α]A ⇓ α (S') 
—————————————————————————————————————
(λα.A) @ (B, S) : κ₁ → κ ⇓ α (S' · S)


Γ ⊢ A ≤ B : κ ⊣ Γ'



A ⇓ N 
B ⇓ M 
Γ ▷ N ≤ M : κ ◁ Γ'
——————————————————
Γ ⊢ A ≤ B : κ ⊣ Γ'


Γ, α̂:κ=? ⊢ [α̂/α]A ≤ B ⊣ Γ'
——————————————————————————
Γ ▷ ∀α:κ. A ≤ B : ∗ ◁ Γ'


Γ, α:κ ⊢ A ≤ B ⊣ Γ', α:κ, Δ
———————————————————————————
Γ ▷ A ≤ ∀α:κ. B : ∗ ◁ Γ'


Γ, α:κ₁ ⊢ (A : κ₁ → κ) (α) ≤ (B : : κ₁ → κ) (α) ⊣ Γ', α:κ₁, Γ''
———————————————————————————————————————————————————————————————
Γ ▷ A ≤ B : κ₁ → κ ◁ Γ'


Γ ⊢ λα¹…αⁿ.N⇐ κ ⊣ Γ'  ∀i,j ∈ {1...n}. α[i] = α[j] ⇔ i = j 
——————————————————————————————————————————————————————————
Γ, α̂:κ=?, Δ ▷ α̂ (α¹, …, αⁿ) ≤ N : ∗ ⊣ Γ', α̂:κ=λα¹…αⁿ.A, Δ


Γ ⊢ λα¹…αⁿ.N ⇐ κ ⊣ Γ'  ∀i,j ∈ {1...n}. α[i] = α[j] ⇔ i = j 
——————————————————————————————————————————————————————————
Γ, α̂:κ=?, Δ ▷ N ≤ α̂ (α¹, …, αⁿ) : ∗ ◁ Γ', α̂:κ=λα¹…αⁿ.A, Δ


Γ ⊢ A¹ ≡ B¹ : κ¹ ⊣ Γ¹
Γⁿ ⊢ Aⁿ ≡ Bⁿ : κⁿ ⊣ Γⁿ⁺¹
—————————————————————————————————————————————
Γ ▷ α (A¹, …, Aⁿ) ≤ α (B¹, …, Bⁿ) : ∗ ◁  Γⁿ⁺¹


Γ ▷ α (A¹, …, Aⁿ) ≤ β̂ (B¹, …, Bʲ) : ∗ ◁  Γⁿ⁺¹




