cis 500 software foundations algorithmic typing fall 2005
play

CIS 500 Software Foundations Algorithmic Typing Fall 2005 23 - PowerPoint PPT Presentation

CIS 500 Software Foundations Algorithmic Typing Fall 2005 23 November CIS 500, 23 November 1 CIS 500, 23 November 2 Algorithmic typing Issue For the typing relation, we have just


  1. ✬ ✩ ✬ ✩ CIS 500 Software Foundations Algorithmic Typing Fall 2005 23 November ✫ ✪ ✫ ✪ CIS 500, 23 November 1 CIS 500, 23 November 2 ✬ ✩ ✬ ✩ Algorithmic typing Issue For the typing relation, we have just one problematic rule to deal with: � How do we implement a type checker for the lambda-calculus with subsumption. subtyping? � Given a context Γ and a term t , how do we determine its type T , such that Γ ⊢ t : S S < : T Γ ⊢ t : T ? ( T-Sub ) Γ ⊢ t : T We observed last time that this rule is sometimes required when typechecking applications: E.g., the term ( λ r:{x:Nat}. r.x) {x=0,y=1} is not typable without using subsumption. But we conjectured that applications were the only critical uses of subsumption. ✫ ✪ ✫ ✪ CIS 500, 23 November 3 CIS 500, 23 November 4

  2. ✬ ✩ ✬ ✩ Plan Example ( T-Sub with T-Abs ) 1. Investigate how subsumption is used in typing derivations by looking at . . . . examples of how it can be “pushed through” other rules . . 2. Use the intuitions gained from this exercise to design a new, algorithmic Γ, x:S 1 ⊢ s 2 : S 2 S 2 < : T 2 ( T-Sub ) typing relation that Γ, x:S 1 ⊢ s 2 : T 2 ( T-Abs ) � omits subsumption Γ ⊢ λ x:S 1 .s 2 : S 1 → T 2 � compensates for its absence by enriching the application rule 3. Show that the algorithmic typing relation is essentially equivalent to the original, declarative one ✫ ✪ ✫ ✪ CIS 500, 23 November 5 CIS 500, 23 November 6 ✬ ✩ ✬ ✩ Example ( T-Sub with T-Abs ) Example ( T-Sub with T-Rcd ) . . . . . . . . . . . . Γ, x:S 1 ⊢ s 2 : S 2 S 2 < : T 2 Γ ⊢ t i : S i S i < : T i ( T-Sub ) ( T-Sub ) for each i Γ, x:S 1 ⊢ s 2 : T 2 Γ ⊢ t i : T i ( T-Abs ) ( T-Rcd ) i ∈ 1 ..n } : {l i :T i i ∈ 1 ..n } Γ ⊢ λ x:S 1 .s 2 : S 1 → T 2 Γ ⊢ {l i =t i becomes . . . . . . ( S-Refl ) Γ, x:S 1 ⊢ s 2 : S 2 S 1 < : S 1 S 2 < : T 2 ( T-Abs ) ( S-Arrow ) Γ ⊢ λ x:S 1 .s 2 : S 1 → S 2 S 1 → S 2 < : S 1 → T 2 ( T-Sub ) Γ ⊢ λ x:S 1 .s 2 : S 1 → T 2 ✫ ✪ ✫ ✪ CIS 500, 23 November 6-a CIS 500, 23 November 7

  3. ✬ ✩ ✬ ✩ Intuitions Example ( T-Sub with T-App on the left) These examples show that we do not need T-Sub to “enable” T-Abs or . . . . T-Rcd : given any typing derivation, we can construct a derivation with the . . . same conclusion in which T-Sub is never used immediately before T-Abs or . . T 11 < : S 11 S 12 < : T 12 T-Rcd . ( S-Arrow ) . . Γ ⊢ s 1 : S 11 → S 12 S 11 → S 12 < : T 11 → T 12 . ( T-Sub ) Γ ⊢ s 1 : T 11 → T 12 Γ ⊢ s 2 : T 11 ( T-App ) What about T-App ? Γ ⊢ s 1 s 2 : T 12 We’ve already observed that T-Sub is required for typechecking some applications. So we expect to find that we cannot play the same game with T-App as we’ve done with T-Abs and T-Rcd . Let’s see why. ✫ ✪ ✫ ✪ CIS 500, 23 November 8 CIS 500, 23 November 9 ✬ ✩ ✬ ✩ Example ( T-Sub with T-App on the left) Example ( T-Sub with T-App on the right) . . . . . . . . . . . . . . . . . T 11 < : S 11 S 12 < : T 12 . Γ ⊢ s 2 : T 2 T 2 < : T 11 ( S-Arrow ) . (T-Sub) . Γ ⊢ s 1 : S 11 → S 12 S 11 → S 12 < : T 11 → T 12 . Γ ⊢ s 1 : T 11 → T 12 Γ ⊢ s 2 : T 11 ( T-Sub ) ( T-App ) Γ ⊢ s 1 : T 11 → T 12 Γ ⊢ s 2 : T 11 Γ ⊢ s 1 s 2 : T 12 ( T-App ) Γ ⊢ s 1 s 2 : T 12 becomes . . . . . . . . . Γ ⊢ s 2 : T 11 T 11 < : S 11 ( T-Sub ) . . Γ ⊢ s 1 : S 11 → S 12 Γ ⊢ s 2 : S 11 . ( T-App ) Γ ⊢ s 1 s 2 : S 12 S 12 < : T 12 ( T-Sub ) ✫ ✪ ✫ ✪ Γ ⊢ s 1 s 2 : T 12 CIS 500, 23 November 9-a CIS 500, 23 November 10

  4. ✬ ✩ ✬ ✩ Intuitions Example ( T-Sub with T-App on the right) So we’ve seen that uses of subsumption can be “pushed” from one of . . . . immediately before T-App ’s premises to the other, but cannot be completely . . . eliminated. . . Γ ⊢ s 2 : T 2 T 2 < : T 11 (T-Sub) Γ ⊢ s 1 : T 11 → T 12 Γ ⊢ s 2 : T 11 ( T-App ) Γ ⊢ s 1 s 2 : T 12 becomes . . . (S-Refl) . . . T 2 < : T 11 T 12 < : T 12 ( S-Arrow ) . . Γ ⊢ s 1 : T 11 → T 12 T 11 → T 12 < : T 2 → T 12 . ( T-Sub ) Γ ⊢ s 1 : T 2 → T 12 Γ ⊢ s 2 : T 2 ( T-App ) Γ ⊢ s 1 s 2 : T 12 ✫ ✪ ✫ ✪ CIS 500, 23 November 10-a CIS 500, 23 November 11 ✬ ✩ ✬ ✩ Example (nested uses of T-Sub ) Example (nested uses of T-Sub ) . . . . . . . . . . . . . . . . Γ ⊢ s : S S < : U . Γ ⊢ s : S S < : U . ( T-Sub ) ( T-Sub ) Γ ⊢ s : U U < : T Γ ⊢ s : U U < : T ( T-Sub ) ( T-Sub ) Γ ⊢ s : T Γ ⊢ s : T becomes . . . . . . . . . S < : U U < : T ( S-Trans ) Γ ⊢ s : S S < : T ( T-Sub ) Γ ⊢ s : T ✫ ✪ ✫ ✪ CIS 500, 23 November 12 CIS 500, 23 November 12-a

  5. ✬ ✩ ✬ ✩ Summary Summary What we’ve learned: What we’ve learned: � Uses of the T-Sub rule can be “pushed down” through typing derivations � Uses of the T-Sub rule can be “pushed down” through typing derivations until they encounter either until they encounter either 1. a use of T-App or 1. a use of T-App or 2. the root fo the derivation tree. 2. the root fo the derivation tree. � In both cases, multiple uses of T-Sub can be collapsed into a single one. � In both cases, multiple uses of T-Sub can be collapsed into a single one. This suggests a notion of “normal form” for typing derivations, in which there is � exactly one use of T-Sub before each use of T-App � one use of T-Sub at the very end of the derivation � no uses of T-Sub anywhere else. ✫ ✪ ✫ ✪ CIS 500, 23 November 13 CIS 500, 23 November 13-a ✬ ✩ ✬ ✩ Algorithmic Typing Minimal Types The next step is to “build in” the use of subsumption in application rules, by But... if subsumption is only used at the very end of derivations, then it is changing the T-App rule to incorporate a subtyping premise. actually not needed in order to show that any term is typable! It is just used to give more types to terms that have already been shown to Γ ⊢ t 1 : T 11 → T 12 Γ ⊢ t 2 : T 2 ⊢ T 2 < : T 11 have a type. Γ ⊢ t 1 t 2 : T 12 In other words, if we dropped subsumption completely (after refining the application rule), we would still be able to give types to exactly the same set of Given any typing derivation, we can now terms — we just would not be able to give as many types to some of them. 1. normalize it, to move all uses of subsumption to either just before applications (in the right-hand premise) or at the very end If we drop subsumption, then the remaining rules will assign a unique, minimal type to each typable term. 2. replace uses of T-App with T-Sub in the right-hand premise by uses of the extended rule above For purposes of building a typechecking algorithm, this is enough. This yields a derivation in which there is just one use of subsumption, at the ✫ very end! ✪ ✫ ✪ CIS 500, 23 November 14 CIS 500, 23 November 15

  6. ✬ ✩ ✬ ✩ Final Algorithmic Typing Rules Soundness of the algorithmic rules x:T ∈ Γ ( TA-Var ) Theorem: If Γ ⊢ ◮ t : T , then Γ ⊢ t : T . ◮ x : T Γ ⊢ ◮ t 2 : T 2 Γ, x:T 1 ⊢ ( TA-Abs ) ◮ λ x:T 1 .t 2 : T 1 → T 2 Γ ⊢ ◮ t 1 : T 1 ◮ t 2 : T 2 ◮ T 2 < Γ ⊢ T 1 = T 11 → T 12 Γ ⊢ ⊢ : T 11 ( TA-App ) ◮ t 1 t 2 : T 12 Γ ⊢ ◮ t i : T i for each i Γ ⊢ ( TA-Rcd ) ◮ {l 1 =t 1 . . . l n =t n } : {l 1 :T 1 . . . l n :T n } Γ ⊢ ◮ t 1 : R 1 Γ ⊢ R 1 = {l 1 :T 1 . . . l n :T n } ( TA-Proj ) ◮ t 1 .l i : T i Γ ⊢ ✫ ✪ ✫ ✪ CIS 500, 23 November 16 CIS 500, 23 November 17 ✬ ✩ ✬ ✩ Completeness of the algorithmic rules Completeness of the algorithmic rules ◮ t : S for some S < ◮ t : S for some S < Theorem [Minimal Typing]: If Γ ⊢ t : T , then Γ ⊢ : T . Theorem [Minimal Typing]: If Γ ⊢ t : T , then Γ ⊢ : T . Proof: Induction on typing derivation. (N.b.: All the messing around with transforming derivations was just to build intuitions and decide what algorithmic rules to write down and what property to prove: the proof itself is a straightforward induction on typing derivations.) ✫ ✪ ✫ ✪ CIS 500, 23 November 18 CIS 500, 23 November 18-a

  7. ✬ ✩ ✬ ✩ Adding Booleans Suppose we want to add booleans and conditionals to the language we have been discussing. Meets and Joins For the declarative presentation of the system, we just add in the appropriate syntactic forms, evaluation rules, and typing rules. ( T-True ) Γ ⊢ true : Bool ( T-False ) Γ ⊢ false : Bool Γ ⊢ t 1 : Bool Γ ⊢ t 2 : T Γ ⊢ t 3 : T ( T-If ) Γ ⊢ if t 1 then t 2 else t 3 : T ✫ ✪ ✫ ✪ CIS 500, 23 November 19 CIS 500, 23 November 20 ✬ ✩ ✬ ✩ A Problem with Conditional Expressions The Algorithmic Conditional Rule For the algorithmic presentation of the system, however, we encounter a little More generally, we can use subsumption to give an expression difficulty. if t 1 then t 2 else t 3 any type that is a possible type of both t 2 and t 3 . What is the minimal type of So the minimal type of the conditional is the least common supertype (or join) if true then {x=true,y=false} else {x=true,z=true} of the minimal type of t 2 and the minimal type of t 3 . ? ◮ t 1 : Bool ◮ t 2 : T 2 ◮ t 3 : T 3 Γ ⊢ Γ ⊢ Γ ⊢ ( T-If ) ◮ if t 1 then t 2 else t 3 : T 2 ∨ T 3 Γ ⊢ ✫ ✪ ✫ ✪ CIS 500, 23 November 21 CIS 500, 23 November 22

Recommend


More recommend