Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unifying Kind and Type Inference Remko van Beusekom & Jeroen Gordijn.

Similar presentations


Presentation on theme: "Unifying Kind and Type Inference Remko van Beusekom & Jeroen Gordijn."— Presentation transcript:

1 Unifying Kind and Type Inference Remko van Beusekom & Jeroen Gordijn

2 Overview Type inferencing Kind inferencing Example Similarities kind and type inferencing

3 Overview (2) Implementation problem in uhc Our solution to the problem Conclusion

4 Approach Investigate type and kind inferencing Check the similarities Investigate the implementations in UHC Check whether unification is possible

5 Type inferencing Check if an (untyped) term can be typed e.g.: (\x.x+1) true can’t be typed (\x.x+1) 2 can be typed.

6 Kind inferencing Kinds are “the types of types” Check if a type definition can be kinded e.g.: (Bool)(Nat) Can’t be kinded (Nat->Bool)(Nat) Can be kinded

7 Type Inferencing example

8 \x:X.\z:Z.(x z) 0 : S | x C x:X   z:Z   (CT-VAR)  0 : Nat | ø {} (CT-ZERO)  x : _ | _ _  z : _ | _ _ (CT-APP)  (x z) : _ | _ _  0 : _ | _ _ (CT-APP) X | ø {}Z | ø {} Nat | ø {} V 1 | {V 1 } C 1 C 1 = {X = Z  V 1 }  = x:X,z:Z  (x z) 0 : _ | _ (CT-ABS) C 2 = C 1  {V 1 = Nat  V 2 } V 2 | {V 1, V 2 } C 2 X  Z  V 2 {V 1, V 2 } C2C2

9 Unifying the constraints Unify({X = Z  V 1 }, {V 1 = Nat  V 2 }) Unification fails or succeeds If succeeds then typeable  = [X  Z  V 1, V 1  Nat  V 2 ]  (X  Z  V 2 ) = (Z  (Nat  V 2 ))  Z  V 2

10 Kind Inferencing example

11  X Y :: _ (K-ABS) 2x  = X:: _,Y:: _ \X.\Y.X Y :: K (K-APP)  X :: _  _  Y :: _ (K-TVAR) X :: _  _   (K-TVAR) Y :: _   * (*  *)  *  * *  * *  *  * *

12 Similarities Walk over the tree. (BOTH) Introduce placeholders for types/kinds (BOTH) Introduce placeholders for Constraints (TYPE) Fill the environment (BOTH) Fill in the placeholders (BOTH)

13 The challenge Type inferencing implemented first Kind inferencing added by copying parts from type inferencing Duplicate code Q: Can we unify these implementations?

14 Solution to the problem Generalize the AST –put common constructors in general data type –extra general constructor Move inferencing code into general code Problem: extra node in the generalised AST

15 Implementation in UHC Different structure DATA KindExpr | KVar | KStar | KCon | KApply DATA TypeExpr | TVar | TCon | TConProduct | TProduct | TPred | TQuant | TApply

16 Generalized AST Unify structure DATA GenExpr | GVar | GCon | GApply DATA KindExpr | KGenExpr gExpr :: GenExpr | KStar DATA TypeExpr | TGenExpr gExpr :: GenExpr | TConProduct | TProduct | TPred | TQuant

17 Kind abstract tree KindExpr KVarKApplyKConKStarKParen KindExpr KGenExprKStarKParen GenExpr GVarGApplyGCon GenExpr before unified

18 KindExpr KVar TypeExpr TVarTApplyKApply Unified tree GenExpr GVar KindExpr KGenExpr TypeExpr TGenExpr GApply before unified GenExpr

19 -- Pass 1, patterns/placeholders SEM KindExpr | KVar loc. (kpuniq,tai,kgam) = lhs. patTpTpConstrGam SEM TypeExpr | TVar loc. (_,tai,tcgam) = lhs. patImTpConstrGam

20 ATTR GenExpr [ | patImGenGam: {TypeAssumptions} | ] SEM GenExpr | GVar loc. (gpuniq,tai,ggam) = lhs. patImGenGam SEM TypeExpr | TGenExpr gExpr. patImGenGam lhs. patImTpConstrGam SEM KindExpr | KGenExpr gExpr. patImGenGam lhs. patTpTpConstrGam

21 Conclusion Not tested, but this should work Draw back: Lot of work now Improvement: Future additions/fixes easier


Download ppt "Unifying Kind and Type Inference Remko van Beusekom & Jeroen Gordijn."

Similar presentations


Ads by Google