Type checking and inference Using the type constraints
- Slides: 22
Type checking and inference • • • Using the type constraints approach Applications of typing axioms / rules are replaced with type equations. A solution to the equations assigns types for every sub-expression. A 4 -stages algorithm. Question 1: Typing the application ((lambda (f x)) sqrt 4) STAGE-I: Renaming STAGE-II: Assign type variables to all sub-expressions Expression Var ((lambda(f x)) sqrt 4) (lambda(f x)) T 0 T 1 T 2 Tf Tx Tsqrt Tnum 4 (f x) f x sqrt 4
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Construct type equations The rules: 1. Atomic expressions / primitiveprocedures: Construct equations using their types. Expression Equation sqrt 4 Tsqrt = [Number → Number] Tnum 4=Number T 1=[Tsqrt*Tnum 4→T 0] T 1=[Tf*Tx→T 2] Tf=[Tx→T 2] ((lambda (f x)) sqrt 4) (lambda (f x)) (f x) 2. Lambda expressions: For (lambda (v 1. . . vn) e 1. . . em), construct: Expression Var ((lambda(f x)) sqrt 4) (lambda(f x)) 3. Application expressions: For (f e 1. . . en), construct: (f x) f x sqrt 4 T 0 T 1 T 2 Tf Tx Tsqrt Tnum 4
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Construct type equations The rules: 1. Atomic expressions / primitiveprocedures: Construct equations using their types. Expression Equation sqrt 4 Tsqrt = [Number → Number] Tnum 4=Number T 1=[Tsqrt*Tnum 4→T 0] T 1=[Tf*Tx→T 2] Tf=[Tx→T 2] ((lambda (f x)) sqrt 4) (lambda (f x)) (f x) 2. Lambda expressions: For (lambda (v 1. . . vn) e 1. . . em), construct: Expression Var ((lambda(f x)) sqrt 4) (lambda(f x)) 3. Application expressions: For (f e 1. . . en), construct: (f x) f x sqrt 4 T 0 T 1 T 2 Tf Tx Tsqrt Tnum 4
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-IV: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 1. T 1=[Tsqrt*Tnum 4→T 0] 2. T 1=[Tf*Tx→T 2] 3. Tf=[Tx→T 2] 4. Tsqrt = [Number → Number] 5. Tnum 4=Number {} Equation 1: - Initially, the substitution is empty. Step 1 is ignored. - Eq 1 is moved to the substitution.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 2. T 1=[Tf*Tx→T 2] 3. Tf=[Tx→T 2] 4. Tsqrt = [Number → Number] 5. Tnum 4=Number T 1: =[Tsqrt*Tnum 4→T 0] Equation 1: - Initially, the substitution is empty. Step 1 is ignored. - Eq 1 is moved to the substitution.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 2. T 1=[Tf*Tx→T 2] 3. Tf=[Tx→T 2] 4. Tsqrt = [Number → Number] 5. Tnum 4=Number T 1: =[Tsqrt*Tnum 4→T 0] Equation 2: - Apply step 1: T 1 is replaced by current substitution: [Tsqrt* Tnum 4 -> T 0] = [Tf* Tx -> T 2] - Both side are composite, apply step 5: Equations are split and Eq 2 is removed.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 3. Tf=[Tx→T 2] 4. Tsqrt = [Number → Number] 5. Tnum 4=Number 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 T 1: =[Tsqrt*Tnum 4→T 0] Equation 2: - Apply step 1: T 1 is replaced by current substitution: [Tsqrt* Tnum 4 -> T 0] = [Tf* Tx -> T 2] - Both side are composite, apply step 5: Equations are split and Eq 2 is removed.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 3. Tf=[Tx→T 2] 4. Tsqrt = [Number → Number] 5. Tnum 4=Number 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 T 1: =[Tsqrt*Tnum 4→T 0] Equation 3: - Apply step 1: No change. - Eq 3 is added to the substitution.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 4. Tsqrt = [Number → Number] 5. Tnum 4=Number 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 T 1: =[Tsqrt*Tnum 4→T 0] Tf: =[Tx→T 2] Equation 3: - Apply step 1: No change. - Eq 3 is added to the substitution.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 4. Tsqrt = [Number → Number] 5. Tnum 4=Number 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 T 1: =[Tsqrt*Tnum 4→T 0] Tf: =[Tx→T 2] Equation 4: - Apply step 1: No change. - Eq 4 is added to the substitution: The substitution is updated by substituting Tsqrt for [Number → Number]
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 5. Tnum 4=Number 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 T 1: =[[Number → Number]*Tnum 4→T 0] Tf: =[Tx→T 2] Tsqrt : = [Number → Number] Equation 4: - Apply step 1: No change. - Eq 4 is added to the substitution: The substitution is updated by substituting Tsqrt for [Number → Number]
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 5. Tnum 4=Number 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 T 1: =[[Number → Number]*Tnum 4→T 0] Tf: =[Tx→T 2] Tsqrt : = [Number → Number] Equation 5: - Apply step 1: No change. - Eq 5 is added to the substitution: The substitution is updated by substituting Tnum 4 for Number
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: Equation Substitution 1. Replace vars by their substituting expressions. 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. T 1: =[[Number → Number]*Number→T 0] Tf: =[Tx→T 2] Tsqrt : = [Number → Number] Tnum 4: =Number 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation 5: - Apply step 1: No change. - Eq 5 is added to the substitution: The substitution is updated by substituting Tnum 4 for Number
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: Equation Substitution 1. Replace vars by their substituting expressions. 6. Tf=Tsqrt 7. Tx=Tnum 4 8. T 2=T 0 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. T 1: =[[Number → Number]*Number→T 0] Tf: =[Tx→T 2] Tsqrt : = [Number → Number] Tnum 4: =Number 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation 6: - Apply step 1: Tf , Tsqrt are replaced by current substitution: [Tx→T 2] = [Number → Number] - Both side are composite, apply step 5: Equations are split and Eq 6 is removed.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 7. Tx=Tnum 4 8. T 2=T 0 9. Tx=Number 10. T 2=Number T 1: =[[Number → Number]*Number→T 0] Tf: =[Tx→T 2] Tsqrt : = [Number → Number] Tnum 4: =Number Equation 6: - Apply step 1: Tf , Tsqrt T 1 is replaced by current substitution: [Tx→T 2]=[Number → Number] - Both side are composite, apply step 5: Equations are split and Eq 6 is removed.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 7. Tx=Tnum 4 8. T 2=T 0 9. Tx=Number 10. T 2=Number T 1: =[[Number → Number]*Number→T 0] Tf: =[Tx→T 2] Tsqrt : = [Number → Number] Tnum 4: =Number Equation 7: - Apply step 1: Tnum 4 is replaced by current substitution: Tx=Number - Eq 7 is added to the substitution: The substitution is updated by substituting Tx for Number
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: Equation Substitution 1. Replace vars by their substituting expressions. 8. T 2=T 0 9. Tx=Number 10. T 2=Number 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. T 1: =[[Number → Number]*Number→T 0] Tf: =[Number→T 2] Tsqrt : = [Number → Number] Tnum 4: =Number Tx: =Number 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation 7: - Apply step 1: Tnum 4 is replaced by current substitution: Tx=Number - Eq 7 is added to the substitution: The substitution is updated by substituting Tx for Number
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: Equation Substitution 1. Replace vars by their substituting expressions. 8. T 2=T 0 9. Tx=Number 10. T 2=Number 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. T 1: =[[Number → Number]*Number→T 0] Tf: =[Number→T 2] Tsqrt : = [Number → Number] Tnum 4: =Number Tx: =Number 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation 8: - Apply step 1: no change. - Eq 8 is added to the substitution: The substitution is updated by substituting T 2 for T 0
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: Equation Substitution 1. Replace vars by their substituting expressions. 9. Tx=Number 10. T 2=Number 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. T 1: =[[Number → Number]*Number→T 0] Tf: =[Number→T 0] Tsqrt : = [Number → Number] Tnum 4: =Number Tx: =Number T 2: =T 0 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation 8: - Apply step 1: no change. - Eq 8 is added to the substitution: The substitution is updated by substituting T 2 for T 0
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: Equation Substitution 1. Replace vars by their substituting expressions. 9. Tx=Number 10. T 2=Number 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. T 1: =[[Number → Number]*Number→T 0] Tf: =[Number→T 0] Tsqrt : = [Number → Number] Tnum 4: =Number Tx: =Number T 2: =T 0 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation 9: - Apply step 1: Tx is replaced by current substitution: Number=Number - Step 3: both sides are atomic types and the equation is ignored.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. 4. A circular substitution occurred? Output FAIL. 5. Both side are composite with the same type constructor? Split into equations between corresponding components. Equation Substitution 10. T 2=Number T 1: =[[Number → Number]*Number→T 0] Tf: =[Number→T 0] Tsqrt : = [Number → Number] Tnum 4: =Number Tx: =Number T 2: =T 0 Equation 10: - Apply step 1: no change. - Eq 8 is added to the substitution: The substitution is updated by substituting T 2 for T 0.
Type checking and inference Using the type constraints approach Question 1 (cont’d): Typing the application ((lambda (f x)) sqrt 4) STAGE-III: Solving the equations. For each equation: 1. Replace vars by their substituting expressions. 2. Both sides of the eq. are atomic? 1. If equal, ignore equation. 2. Else, output FAIL. 3. Both sides are different vars? 1. Apply the equation to the current substitution. 2. Add the equation to the substitution. Equation Substitution T 1: =[[Number → umber]*Number→Number] Tf: =[Number→Number] Tsqrt : = [Number → Number] Tnum 4: =Number Tx: =Number T 2: =Number T 0: =Number Equation 10: - Apply step 1: no change. 4. A circular substitution occurred? Output FAIL. - 5. Both side are composite with the same type constructor? Split into equations between corresponding components. The type inference succeeds. The inferred type is: Number Eq 8 is added to the substitution: The substitution is updated by substituting T 0 with Number.
- Compiler type checking
- Simple type checker in compiler design
- Type checking in compiler design
- Sdt for type checking
- Compiler type checking
- Type checking in ppl
- Family of orientation
- Marriages and families changes choices and constraints
- Hát kết hợp bộ gõ cơ thể
- Frameset trong html5
- Bổ thể
- Tỉ lệ cơ thể trẻ em
- Gấu đi như thế nào
- Chụp phim tư thế worms-breton
- Chúa sống lại
- Các môn thể thao bắt đầu bằng từ đua
- Thế nào là hệ số cao nhất
- Các châu lục và đại dương trên thế giới
- Công thức tính độ biến thiên đông lượng
- Trời xanh đây là của chúng ta thể thơ
- Mật thư tọa độ 5x5
- Phép trừ bù
- độ dài liên kết