undecidability of d
TRANSCRIPT
![Page 1: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/1.jpg)
Undecidability of D<: and Its Decidable Fragments
Jason Z.S. HuUniversity of Waterloo −→
McGill [email protected]
Ondřej LhotákUniversity of [email protected]
![Page 2: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/2.jpg)
1
IntroductionHistorical Overview: Scala and Dependent Object Types
I Scala was first released in 2004.
I Formalization of Scala is a long running process (Odersky et al., 2003; Cremet et al.,2006; Moors et al., 2008; Amin et al., 2012; Rompf and Amin, 2016; Amin et al., 2016;Rapoport et al., 2017).
I How do type soundness proofs help to implement the compiler directly?
We consider the decidability of path dependent types,and this theoretical result also benefits the implementation.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 3: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/3.jpg)
1
IntroductionHistorical Overview: Scala and Dependent Object Types
I Scala was first released in 2004.I Formalization of Scala is a long running process (Odersky et al., 2003; Cremet et al.,
2006; Moors et al., 2008; Amin et al., 2012; Rompf and Amin, 2016; Amin et al., 2016;Rapoport et al., 2017).
I How do type soundness proofs help to implement the compiler directly?
We consider the decidability of path dependent types,and this theoretical result also benefits the implementation.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 4: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/4.jpg)
1
IntroductionHistorical Overview: Scala and Dependent Object Types
I Scala was first released in 2004.I Formalization of Scala is a long running process (Odersky et al., 2003; Cremet et al.,
2006; Moors et al., 2008; Amin et al., 2012; Rompf and Amin, 2016; Amin et al., 2016;Rapoport et al., 2017).
I How do type soundness proofs help to implement the compiler directly?
We consider the decidability of path dependent types,and this theoretical result also benefits the implementation.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 5: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/5.jpg)
1
IntroductionHistorical Overview: Scala and Dependent Object Types
I Scala was first released in 2004.I Formalization of Scala is a long running process (Odersky et al., 2003; Cremet et al.,
2006; Moors et al., 2008; Amin et al., 2012; Rompf and Amin, 2016; Amin et al., 2016;Rapoport et al., 2017).
I How do type soundness proofs help to implement the compiler directly?
We consider the decidability of path dependent types,and this theoretical result also benefits the implementation.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 6: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/6.jpg)
2
Path Dependent Types: An ExampleTrait Definitions
trait Account
trait Bank { self =>type A <: Accountdef createAccount(initialBalance : Long = 0) : Adef transfer(amount : Long, from : self.A,
toBank : Bank, to : toBank.A) : Unit}
toBank.A depends on a previous parameter.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 7: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/7.jpg)
2
Path Dependent Types: An ExampleTrait Definitions
trait Account
trait Bank { self =>type A <: Accountdef createAccount(initialBalance : Long = 0) : Adef transfer(amount : Long, from : self.A,
toBank : Bank, to : toBank.A) : Unit}
toBank.A depends on a previous parameter.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 8: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/8.jpg)
3
Path Dependent Types: An ExampleA Tiny Program
def transfer(amount : Long, from : self.A,toBank : Bank, to : toBank.A) : Unit
object BankOfWaterloo extends Bank { /* ... */ }object McGillBank extends Bank { /* ... */ }val david : BankOfWaterloo.A = BankOfWaterloo.createAccount(200)val elly : McGillBank.A = McGillBank.createAccount(300)
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 9: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/9.jpg)
3
Path Dependent Types: An ExampleA Tiny Program
def transfer(amount : Long, from : self.A,toBank : Bank, to : toBank.A) : Unit
object BankOfWaterloo extends Bank { /* ... */ }object McGillBank extends Bank { /* ... */ }val david : BankOfWaterloo.A = BankOfWaterloo.createAccount(200)val elly : McGillBank.A = McGillBank.createAccount(300)
BankOfWaterloo.transfer(10, david, McGillBank, elly)
This program works and transfers 10 dollars from David to Elly.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 10: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/10.jpg)
3
Path Dependent Types: An ExampleA Tiny Program
def transfer(amount : Long, from : self.A,toBank : Bank, to : toBank.A) : Unit
object BankOfWaterloo extends Bank { /* ... */ }object McGillBank extends Bank { /* ... */ }val david : BankOfWaterloo.A = BankOfWaterloo.createAccount(200)val elly : McGillBank.A = McGillBank.createAccount(300)
BankOfWaterloo.transfer(10, david, McGillBank, elly)
BankOfWaterloo.transfer(10, david, BankOfWaterloo, elly)
What about this program?
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 11: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/11.jpg)
3
Path Dependent Types: An ExampleA Tiny Program
def transfer(amount : Long, from : self.A,toBank : Bank, to : toBank.A) : Unit
object BankOfWaterloo extends Bank { /* ... */ }object McGillBank extends Bank { /* ... */ }val david : BankOfWaterloo.A = BankOfWaterloo.createAccount(200)val elly : McGillBank.A = McGillBank.createAccount(300)
BankOfWaterloo.transfer(10, david, McGillBank, elly)
BankOfWaterloo.transfer(10, david, BankOfWaterloo, elly)found: McGillBank.A
expect: BankOfWaterloo.A
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 12: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/12.jpg)
4
Research Questions
We can see that path dependent types are very expressive, but ...
I Is type checking decidable with path dependent types?
I Is subtyping decidable with path dependent types?
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 13: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/13.jpg)
4
Research Questions
We can see that path dependent types are very expressive, but ...
I Is type checking decidable with path dependent types?
I Is subtyping decidable with path dependent types?
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 14: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/14.jpg)
4
Research Questions
We can see that path dependent types are very expressive, but ...
I Is type checking decidable with path dependent types?
I Is subtyping decidable with path dependent types?
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 15: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/15.jpg)
5
Definition of D<: (Amin et al., 2016)Path Dependent Types
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:S <: T Γ `D<:
T <: UΓ `D<:
S <: UTRANS
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 16: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/16.jpg)
5
Definition of D<: (Amin et al., 2016)Path Dependent Types
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:S <: T Γ `D<:
T <: UΓ `D<:
S <: UTRANS
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 17: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/17.jpg)
5
Definition of D<: (Amin et al., 2016)Path Dependent Types
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:S <: T Γ `D<:
T <: UΓ `D<:
S <: UTRANS
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 18: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/18.jpg)
5
Definition of D<: (Amin et al., 2016)Path Dependent Types
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:S <: T Γ `D<:
T <: UΓ `D<:
S <: UTRANS
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 19: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/19.jpg)
5
Definition of D<: (Amin et al., 2016)Path Dependent Types
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:S <: T Γ `D<:
T <: UΓ `D<:
S <: UTRANS
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 20: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/20.jpg)
5
Definition of D<: (Amin et al., 2016)Path Dependent Types
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:S <: T Γ `D<:
T <: UΓ `D<:
S <: UTRANS
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 21: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/21.jpg)
6
Outline of Our Undecidability Proof
The actual proof is quite tricky, e.g. the TRANS rule doesn’t provide strong enoughinductive hypothesis.
To establish the proof, we1 find a suitable undecidable problem to reduce from,2 define D<: normal form by restricting the TRANS rule,3 show the equivalence between D<: and D<: normal form,4 conclude undecidability of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 22: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/22.jpg)
6
Outline of Our Undecidability Proof
The actual proof is quite tricky, e.g. the TRANS rule doesn’t provide strong enoughinductive hypothesis.
To establish the proof, we
1 find a suitable undecidable problem to reduce from,2 define D<: normal form by restricting the TRANS rule,3 show the equivalence between D<: and D<: normal form,4 conclude undecidability of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 23: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/23.jpg)
6
Outline of Our Undecidability Proof
The actual proof is quite tricky, e.g. the TRANS rule doesn’t provide strong enoughinductive hypothesis.
To establish the proof, we1 find a suitable undecidable problem to reduce from,
2 define D<: normal form by restricting the TRANS rule,3 show the equivalence between D<: and D<: normal form,4 conclude undecidability of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 24: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/24.jpg)
6
Outline of Our Undecidability Proof
The actual proof is quite tricky, e.g. the TRANS rule doesn’t provide strong enoughinductive hypothesis.
To establish the proof, we1 find a suitable undecidable problem to reduce from,2 define D<: normal form by restricting the TRANS rule,
3 show the equivalence between D<: and D<: normal form,4 conclude undecidability of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 25: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/25.jpg)
6
Outline of Our Undecidability Proof
The actual proof is quite tricky, e.g. the TRANS rule doesn’t provide strong enoughinductive hypothesis.
To establish the proof, we1 find a suitable undecidable problem to reduce from,2 define D<: normal form by restricting the TRANS rule,3 show the equivalence between D<: and D<: normal form,
4 conclude undecidability of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 26: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/26.jpg)
6
Outline of Our Undecidability Proof
The actual proof is quite tricky, e.g. the TRANS rule doesn’t provide strong enoughinductive hypothesis.
To establish the proof, we1 find a suitable undecidable problem to reduce from,2 define D<: normal form by restricting the TRANS rule,3 show the equivalence between D<: and D<: normal form,4 conclude undecidability of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 27: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/27.jpg)
7
Finding An Undecidable ProblemStep 1
function types
universal types
F<:F−<: D<:
dependent functiontypes
??????
Amin et al. (2016) presents an attempt.
TheoremSubtyping of F−
<: is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 28: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/28.jpg)
7
Finding An Undecidable ProblemStep 1
function types
universal types
F<:F−<: D<:
dependent functiontypes
??????
Amin et al. (2016) presents an attempt.
TheoremSubtyping of F−
<: is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 29: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/29.jpg)
7
Finding An Undecidable ProblemStep 1
function types
universal types
F<:F−<: D<:
dependent functiontypes
??????
Amin et al. (2016) presents an attempt.
TheoremSubtyping of F−
<: is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 30: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/30.jpg)
7
Finding An Undecidable ProblemStep 1
function types
universal types
F<:F−<: D<:
dependent functiontypes
??????
TheoremSubtyping of F−
<: is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 31: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/31.jpg)
7
Finding An Undecidable ProblemStep 1
function types
universal types
F<:F−<: D<:
dependent functiontypes
??????
TheoremSubtyping of F−
<: is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 32: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/32.jpg)
8
Transitivity and Subtyping ReflectionStep 2
The TRANS rule induces an unexpected phenomenon:
assume Γ(x) = {A : S..U}Γ `D<:
Γ(x) <: {A : S..>}Γ `D<:
S <: x .ASEL1’
Γ `D<:Γ(x) <: {A : ⊥..U}
Γ `D<:x .A <: U
SEL2’
Γ `D<:S <: U
TRANS
Type declarations reflect bounds into the subtyping relation.This phenomenon is called “subtyping reflection” (or “bad bounds” in the previousliterature).
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 33: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/33.jpg)
8
Transitivity and Subtyping ReflectionStep 2
The TRANS rule induces an unexpected phenomenon:
assume Γ(x) = {A : S..U}Γ `D<:
Γ(x) <: {A : S..>}Γ `D<:
S <: x .ASEL1’
Γ `D<:Γ(x) <: {A : ⊥..U}
Γ `D<:x .A <: U
SEL2’
Γ `D<:S <: U
TRANS
Type declarations reflect bounds into the subtyping relation.This phenomenon is called “subtyping reflection” (or “bad bounds” in the previousliterature).
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 34: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/34.jpg)
8
Transitivity and Subtyping ReflectionStep 2
The TRANS rule induces an unexpected phenomenon:
assume Γ(x) = {A : S..U}Γ `D<:
Γ(x) <: {A : S..>}Γ `D<:
S <: x .ASEL1’
Γ `D<:Γ(x) <: {A : ⊥..U}
Γ `D<:x .A <: U
SEL2’
Γ `D<:S <: U
TRANS
Type declarations reflect bounds into the subtyping relation.
This phenomenon is called “subtyping reflection” (or “bad bounds” in the previousliterature).
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 35: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/35.jpg)
8
Transitivity and Subtyping ReflectionStep 2
The TRANS rule induces an unexpected phenomenon:
assume Γ(x) = {A : S..U}Γ `D<:
Γ(x) <: {A : S..>}Γ `D<:
S <: x .ASEL1’
Γ `D<:Γ(x) <: {A : ⊥..U}
Γ `D<:x .A <: U
SEL2’
Γ `D<:S <: U
TRANS
Type declarations reflect bounds into the subtyping relation.This phenomenon is called “subtyping reflection” (or “bad bounds” in the previousliterature).
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 36: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/36.jpg)
9
D<: Normal FormStep 2
Subtyping reflection is captured by the following rule:
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
We replace the TRANS rule with this rule.
The resulting calculus is called D<: normal form.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 37: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/37.jpg)
9
D<: Normal FormStep 2
Subtyping reflection is captured by the following rule:
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
We replace the TRANS rule with this rule.
The resulting calculus is called D<: normal form.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 38: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/38.jpg)
10
Properties of D<: Normal FormStep 3
TheoremD<: normal form admits transitivity.
TheoremSubtyping in the original D<: definition and in D<: normal form is equivalent.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 39: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/39.jpg)
10
Properties of D<: Normal FormStep 3
TheoremD<: normal form admits transitivity.
TheoremSubtyping in the original D<: definition and in D<: normal form is equivalent.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 40: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/40.jpg)
11
Undecidability of D<: SubtypingStep 4
F−<:D<:
normal form D<:
easy
equivalence???
TheoremSubtyping in D<: normal form is undecidable.
TheoremD<: subtyping is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 41: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/41.jpg)
11
Undecidability of D<: SubtypingStep 4
F−<:D<:
normal form D<:
easy
equivalence???
TheoremSubtyping in D<: normal form is undecidable.
TheoremD<: subtyping is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 42: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/42.jpg)
11
Undecidability of D<: SubtypingStep 4
F−<:D<:
normal form D<:
easy
equivalence???
TheoremSubtyping in D<: normal form is undecidable.
TheoremD<: subtyping is undecidable.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 43: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/43.jpg)
12
A Thought about D<:
Subtyping reflection and transitivity are two sides of the same coin.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 44: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/44.jpg)
13
Step toward Decidable Fragments
Capturing subtyping reflection inspires us to a straightforward study of decidablefragments of D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 45: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/45.jpg)
14
Kernel D<:
Consider the following rules from D<: normal form:
Γ `D<:S2 <: S1 Γ; x : S2 `D<:
U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
These modifications define kernel D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 46: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/46.jpg)
14
Kernel D<:
Consider the following rules from D<: normal form:
Γ `D<:S2 <: S1 Γ; x : S2 `D<:
U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
(((((((((((((((((((((hhhhhhhhhhhhhhhhhhhhh
These modifications define kernel D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 47: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/47.jpg)
14
Kernel D<:
Consider the following rules from D<: normal form:
Γ; x : S `D<:K U1 <: U2
Γ `D<:K ∀(x : S)U1 <: ∀(x : S)U2K-ALL
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
(((((((((((((((((((((hhhhhhhhhhhhhhhhhhhhh
These modifications define kernel D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 48: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/48.jpg)
14
Kernel D<:
Consider the following rules from D<: normal form:
Γ; x : S `D<:K U1 <: U2
Γ `D<:K ∀(x : S)U1 <: ∀(x : S)U2K-ALL
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
(((((((((((((((((((((hhhhhhhhhhhhhhhhhhhhh
These modifications define kernel D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 49: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/49.jpg)
15
Kernel D<:Decidability
TheoremKernel D<: is decidable.
Proof.The decision procedure is step subtyping designed by Nieto (2017).
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 50: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/50.jpg)
16
A Limitation of Kernel D<:
x : {A : >..>} `D<:∀(y : x .A)> <: ∀(y : >)>
is rejected by kernel D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 51: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/51.jpg)
16
A Limitation of Kernel D<:
x : {A : >..>} `D<:∀(y : x .A)> <: ∀(y : >)>
is rejected by kernel D<:.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 52: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/52.jpg)
17
Asymmetry and Symmetry
We want to lift the previous limitation.
The undecidability proof indicates the problem being the asymmetry of the parametertypes of dependent function types.
The idea is to recover the symmetry by operating on two contexts at the same time.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 53: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/53.jpg)
17
Asymmetry and Symmetry
We want to lift the previous limitation.
The undecidability proof indicates the problem being the asymmetry of the parametertypes of dependent function types.
The idea is to recover the symmetry by operating on two contexts at the same time.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 54: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/54.jpg)
17
Asymmetry and Symmetry
We want to lift the previous limitation.
The undecidability proof indicates the problem being the asymmetry of the parametertypes of dependent function types.
The idea is to recover the symmetry by operating on two contexts at the same time.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 55: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/55.jpg)
18
Strong Kernel D<:
Γ `D<:K S <: U ⇒ (Γ1 ` S) <: (U a Γ2)
Kernel D<: Strong kernel D<:
In (Γ1 ` S) <: (U a Γ2), a type only concerns the context on its side:
(Γ1 ` Γ1(x)) <: ({A : ⊥..U} a Γ2)
(Γ1 ` x .A) <: (U a Γ2)SK-SEL2
(Γ2 ` S2) <: (S1 a Γ1) (Γ1; x : S1 ` U1) <: (U2 a Γ2; x : S2)
(Γ1 ` ∀(x : S1)U1) <: (∀(x : S2)U2 a Γ2)SK-ALL
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 56: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/56.jpg)
18
Strong Kernel D<:
Γ `D<:K S <: U ⇒ (Γ1 ` S) <: (U a Γ2)
Kernel D<: Strong kernel D<:
In (Γ1 ` S) <: (U a Γ2), a type only concerns the context on its side:
(Γ1 ` Γ1(x)) <: ({A : ⊥..U} a Γ2)
(Γ1 ` x .A) <: (U a Γ2)SK-SEL2
(Γ2 ` S2) <: (S1 a Γ1) (Γ1; x : S1 ` U1) <: (U2 a Γ2; x : S2)
(Γ1 ` ∀(x : S1)U1) <: (∀(x : S2)U2 a Γ2)SK-ALL
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 57: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/57.jpg)
18
Strong Kernel D<:
Γ `D<:K S <: U ⇒ (Γ1 ` S) <: (U a Γ2)
Kernel D<: Strong kernel D<:
In (Γ1 ` S) <: (U a Γ2), a type only concerns the context on its side:
(Γ1 ` Γ1(x)) <: ({A : ⊥..U} a Γ2)
(Γ1 ` x .A) <: (U a Γ2)SK-SEL2
(Γ2 ` S2) <: (S1 a Γ1) (Γ1; x : S1 ` U1) <: (U2 a Γ2; x : S2)
(Γ1 ` ∀(x : S1)U1) <: (∀(x : S2)U2 a Γ2)SK-ALL
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 58: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/58.jpg)
18
Strong Kernel D<:
Γ `D<:K S <: U ⇒ (Γ1 ` S) <: (U a Γ2)
Kernel D<: Strong kernel D<:
In (Γ1 ` S) <: (U a Γ2), a type only concerns the context on its side:
(Γ1 ` Γ1(x)) <: ({A : ⊥..U} a Γ2)
(Γ1 ` x .A) <: (U a Γ2)SK-SEL2
(Γ2 ` S2) <: (S1 a Γ1) (Γ1; x : S1 ` U1) <: (U2 a Γ2; x : S2)
(Γ1 ` ∀(x : S1)U1) <: (∀(x : S2)U2 a Γ2)SK-ALL
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 59: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/59.jpg)
19
Strong Kernel D<:Properties
TheoremStrong kernel D<: is decidable.
Proof.The decision procedure is stare-at subtyping (defined in the paper).
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 60: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/60.jpg)
19
Strong Kernel D<:Properties
TheoremStrong kernel D<: is strictly stronger than kernel D<:.
x : {A : >..>} `D<:∀(y : x .A)> <: ∀(y : >)>
becomes admissible.
let Γ = x : {A : >..>}
(Γ ` >) <: (x .A a Γ) (Γ; y : x .A ` >) <: (> a Γ; y : >)
(Γ ` ∀(y : x .A)>) <: (∀(y : >)> a Γ)SK-ALL
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 61: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/61.jpg)
19
Strong Kernel D<:Properties
TheoremStrong kernel D<: is strictly stronger than kernel D<:.
x : {A : >..>} `D<:∀(y : x .A)> <: ∀(y : >)>
becomes admissible.let Γ = x : {A : >..>}
(Γ ` >) <: (x .A a Γ) (Γ; y : x .A ` >) <: (> a Γ; y : >)
(Γ ` ∀(y : x .A)>) <: (∀(y : >)> a Γ)SK-ALL
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 62: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/62.jpg)
20
Summary
− +
Kernel D<: Strong kernel D<: D<: without SR(full) D<:
D<: normal form
Decidable Undecidable
Expressive Power
I For theorists: we present a systematic way of investigating (un)decidability!I For practitioners: we develop algorithms for path dependent types!
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 63: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/63.jpg)
21
References
Nada Amin, Samuel Grütter, Martin Odersky, Tiark Rompf, and Sandro Stucki. 2016. The Essence of Dependent Object Types. In A List of Successes That Can Change the World -Essays Dedicated to Philip Wadler on the Occasion of His 60th Birthday (Lecture Notes in Computer Science), Sam Lindley, Conor McBride, Philip W. Trinder, and DonaldSannella (Eds.), Vol. 9600. Springer, 249–272. https://doi.org/10.1007/978-3-319-30936-1_14
Nada Amin, Adriaan Moors, and Martin Odersky. 2012. Dependent object types. In 19th International Workshop on Foundations of Object-Oriented Languages.
Vincent Cremet, François Garillot, Sergueï Lenglet, and Martin Odersky. 2006. A Core Calculus for Scala Type Checking. In Mathematical Foundations of Computer Science 2006,Rastislav Královic and Paweł Urzyczyn (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 1–23.
Adriaan Moors, Frank Piessens, and Martin Odersky. 2008. Safe type-level abstraction in Scala. In Proceedings of the International Workshop on Foundations of Object-OrientedLanguages (FOOL 2008). 1–13.
Abel Nieto. 2017. Towards Algorithmic Typing for DOT (Short Paper). In Proceedings of the 8th ACM SIGPLAN International Symposium on Scala (SCALA 2017). ACM, New York,NY, USA, 2–7. https://doi.org/10.1145/3136000.3136003
Martin Odersky, Vincent Cremet, Christine Röckl, and Matthias Zenger. 2003. A Nominal Theory of Objects with Dependent Types. In ECOOP 2003 - Object-Oriented Programming,17th European Conference, Darmstadt, Germany, July 21-25, 2003, Proceedings (Lecture Notes in Computer Science), Luca Cardelli (Ed.), Vol. 2743. Springer, 201–224.https://doi.org/10.1007/978-3-540-45070-2_10
Marianna Rapoport, Ifaz Kabir, Paul He, and Ondrej Lhoták. 2017. A Simple Soundness Proof for Dependent Object Types. Proc. ACM Program. Lang. 1, OOPSLA, Article 46 (Oct.2017), 27 pages. https://doi.org/10.1145/3133870
Tiark Rompf and Nada Amin. 2016. Type Soundness for Dependent Object Types (DOT). In Proceedings of the 2016 ACM SIGPLAN International Conference on Object-OrientedProgramming, Systems, Languages, and Applications (OOPSLA 2016). ACM, New York, NY, USA, 624–641. https://doi.org/10.1145/2983990.2984008
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 64: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/64.jpg)
22
ExamplesWorks for D<: but not strong kernel
`D<:{A : ⊥..⊥} <: {A : ⊥..>} x : {A : ⊥..⊥} `D<:
x .A <: ⊥`D<:
∀(x : {A : ⊥..>})x .A <: ∀(x : {A : ⊥..⊥})⊥ALL
This judgment is not admissible in strong kernel, because when comparing the returntypes, the following judgment is required:
(x : {A : ⊥..>} ` x .A) <: (?⊥ a x : {A : ⊥..⊥})
Notice that on the left only x .A <: > is known so it is not admissible.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 65: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/65.jpg)
23
Definition of D<: Normal Form
Γ `D<:T <: >
TOPΓ `D<:
⊥ <: TBOT
Γ `D<:T <: T
REFL
Γ `D<:S2 <: S1
Γ `D<:U1 <: U2
Γ `D<:{A : S1..U1} <: {A : S2..U2}
BND
Γ `D<:S2 <: S1
Γ; x : S2 `D<:U1 <: U2
Γ `D<:∀(x : S1)U1 <: ∀(x : S2)U2
ALL
Γ `D<:Γ(x) <: {A : S..>}
Γ `D<:S <: x .A
SEL1’Γ `D<:
Γ(x) <: {A : ⊥..U}Γ `D<:
x .A <: USEL2’
Γ `D<:Γ(x) <: {A : S..>} Γ `D<:
Γ(x) <: {A : ⊥..U} (for some x)Γ `D<:
S <: USR
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments
![Page 66: Undecidability of D](https://reader035.vdocuments.net/reader035/viewer/2022071106/5fe021df2fc96247a875aeff/html5/thumbnails/66.jpg)
24
Summary Table
Name the ALL rule the SR rule DecidabilityD<: and D<: normal form full ALL X undecidable
full ALL × undecidableStrong kernel D<: SK-ALL × decidableKernel D<: K-ALL × decidable
K-ALL or SK-ALL X unknown
One future work is to check whether kernel D<: + SR is decidable or not.We don’t really understand much about subtyping reflection.
Hu and Lhoták | Undecidability of D<: and Its Decidable Fragments