SlideShare une entreprise Scribd logo
1  sur  27
Motivation       1960s   1970s          1980s          1990s   2000s   Conclusions




             Formal Verification of Programming Language
                           Implementations
                         Ph.D. Literature Seminar


                              Jason S. Reich
                         <jason@cs.york.ac.uk>

                                  University of York


                                 December 8, 2009
Motivation     1960s      1970s       1980s   1990s      2000s      Conclusions




Compiling an arithmetic language

      Compile from a simple arithmetic language to machine code for a
      simple register machine.




      Example taken from [McCart67]
Motivation        1960s     1970s     1980s   1990s      2000s      Conclusions




Compiling an arithmetic language

      Compile from a simple arithmetic language to machine code for a
      simple register machine.


     Source language

             Numeric constants
             Variables
             Addition
     e.g. (x + 3) + (x + (y + 2))

      Example taken from [McCart67]
Motivation        1960s     1970s     1980s        1990s        2000s        Conclusions




Compiling an arithmetic language

      Compile from a simple arithmetic language to machine code for a
      simple register machine.

                                              Target language
     Source language
                                                  Load Immediate into ac
             Numeric constants                    LOAD into ac from
             Variables                            address/register
             Addition                             STOre ac value to
                                                  address/register
     e.g. (x + 3) + (x + (y + 2))
                                                  ADD register value to ac
      Example taken from [McCart67]
Motivation     1960s     1970s     1980s     1990s   2000s   Conclusions




Compiling an arithmetic language


      Arithmetic expression compiler in Haskell

       compile    : : Source −> I n t −> Target
       compile   ( Const v ) t = [ L i v ]
       compile   ( Var x ) t = [ Load x ]
       compile   (Sum e1 e2 ) t =
                      c o m p i l e e1 t
                 ++ [ Sto ( "t + " ++ show t ) ]
                 ++ c o m p i l e e2 ( t + 1 )
                 ++ [ Add ( "t + " ++ show t ) ]
Motivation       1960s       1970s       1980s        1990s       2000s        Conclusions




Compiling an arithmetic language

      When compiled and executed, is the value in the accumulator the
      result of the source arithmetic expression?
      (x + 3) + (x + (y + 2)) compiled to machine code?

             1    LOAD    x                       8   LOAD    y
             2    STO     t                       9   STO     t + 2
             3    LI      3                      10   LI      2
             4    ADD     t                      11   ADD     t + 2
             5    STO     t                      12   ADD     t + 1
             6    LOAD    x                      13   ADD     t
             7    STO     t + 1
      n.b. Where x and y are known memory locations and t + k are registers.
Motivation        1960s      1970s      1980s      1990s   2000s   Conclusions




Why use high-level languages?



             Rapid development
             Easier to understand, maintain and modify
             Less likely to make mistakes
             Easier to reason about and infer properties
             Architecture portability
      But...
Motivation       1960s      1970s       1980s      1990s      2000s        Conclusions




Can you trust your compiler?


             Use a compiler to translate from a high-level language to a
             low-level
             Compilers are programs (generally) written by people
             People make mistakes
             Can silently turn “a correct program into an incorrect
             executable” [Leroy09]
             GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs
             reported in the bug tracker as of 04/12/2009 [GHC]
             Can we formally verify a compiler?
Motivation       1960s      1970s       1980s      1990s      2000s        Conclusions




Can you trust your compiler?


             Use a compiler to translate from a high-level language to a
             low-level
             Compilers are programs (generally) written by people
             People make mistakes
             Can silently turn “a correct program into an incorrect
             executable” [Leroy09]
             GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs
             reported in the bug tracker as of 04/12/2009 [GHC]
             Can we formally verify a compiler?
Motivation       1960s      1970s       1980s      1990s      2000s        Conclusions




Can you trust your compiler?


             Use a compiler to translate from a high-level language to a
             low-level
             Compilers are programs (generally) written by people
             People make mistakes
             Can silently turn “a correct program into an incorrect
             executable” [Leroy09]
             GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs
             reported in the bug tracker as of 04/12/2009 [GHC]
             Can we formally verify a compiler?
Motivation       1960s      1970s      1980s       1990s      2000s    Conclusions




McCarthy and Painter, 1967



             “Correctness of a compiler for arithmetic expressions”
             [McCart67]
             Describe, in first-order predicate logic;
                 Source language semantics
                 Target language semantics
                 A compilation process
             Reason that the compiler maintains semantic equivalence
Motivation       1960s      1970s      1980s      1990s          2000s   Conclusions




McCarthy and Painter, 1967


      Semantic equivalence in [McCart67]
      ∀e ∈ Expressions, ∀µ : Variable Mappings •
      interpret(e, µ) ≡ acValue(emulate(compile(e), mkState(µ)))

             Very limited, small toy source and target language
             Proof performed by hand
             Logical framework and proof presented in under ten pages
             Shows that proving a compiler correct is possible
Motivation       1960s      1970s      1980s      1990s     2000s     Conclusions




Milner and Weyhrauch, 1972



             “Proving compiler correctness in a mechanised logic”
             [Milner72]
             Provide an LCF machine-checked proof of the
             McCarthy-Painter example
             Proceed towards mechanically proving a compiler for a more
             complex language to a stack machine
             Claim to have “no significant doubt that the remainder of the
             proof can be done on machine” [Milner72]
Motivation       1960s         1970s        1980s        1990s         2000s   Conclusions




Morris, 1973

             “Advice on structuring compilers and proving them correct”
             [Morris73]
             Proves by hand the correctness of a compiler for a source
             language that contains assignment, conditionals, loops,
             arithmetic, booleans operations and local definitions

      “Essence” of the advice presented in [Morris73]

                                           compile
                         Source language   −−→
                                           −−        Target language
                                                          
                                                          Target semantics
                Source semantics

                         Source meanings   ←−−
                                            −−       Target meanings
                                           decode
Motivation       1960s         1970s        1980s        1990s         2000s   Conclusions




Thatcher, Wagner and Wright, 1980
      Advice presented in [Thatch80]

                                           compile
                         Source language   −−→
                                           −−        Target language
                                                          
                                                          Target semantics
                Source semantics

                         Source meanings   −−→
                                           −−        Target meanings
                                           encode



             “More on advice on structuring compilers and proving them
             correct” [Thatch80]
             Provides a correct compiler for a more advanced target
             language than [Morris73]
             Claim that mechanised theorem proving tools required further
             development
Motivation       1960s       1970s      1980s      1990s      2000s        Conclusions




The “structuring compilers” series


             Discuss constructing algebras to describe languages
             How to move from one algebra to another
             Encode abstract state to concrete or decode to abstract?
             “there is not enough information in the [abstract] state to
             recover the [concrete] state completely” [Moore89]
             Further paper “Even more on advice on structuring compilers
             and proving them correct: changing an arrow” [Orejas81]
             [Moore89] discusses this issue from a practical perspective
Motivation       1960s       1970s      1980s      1990s      2000s        Conclusions




The “structuring compilers” series


             Discuss constructing algebras to describe languages
             How to move from one algebra to another
             Encode abstract state to concrete or decode to abstract?
             “there is not enough information in the [abstract] state to
             recover the [concrete] state completely” [Moore89]
             Further paper “Even more on advice on structuring compilers
             and proving them correct: changing an arrow” [Orejas81]
             [Moore89] discusses this issue from a practical perspective
Motivation       1960s       1970s      1980s      1990s      2000s        Conclusions




The “structuring compilers” series


             Discuss constructing algebras to describe languages
             How to move from one algebra to another
             Encode abstract state to concrete or decode to abstract?
             “there is not enough information in the [abstract] state to
             recover the [concrete] state completely” [Moore89]
             Further paper “Even more on advice on structuring compilers
             and proving them correct: changing an arrow” [Orejas81]
             [Moore89] discusses this issue from a practical perspective
Motivation       1960s       1970s      1980s      1990s      2000s       Conclusions




Meijer, 1994

             “More advice on proving a compiler correct: Improve a correct
             compiler” [Meijer94]
             Given a interpreter for a source language, can we transform it
             into a compiler to and residual interpreter for the target
             language?
             A functional decomposition problem (i.e.
             interpreter = emulator ◦ compiler )
             Demonstrate this technique for a first-order imperative
             language compiling to a three-address code machine
             While quite feasible for first-order languages, becomes far
             more difficult for higher-order languages
Motivation       1960s      1970s       1980s      1990s      2000s       Conclusions




Berghofer and Stecker, 2003


             “Extracting a formally verified, fully executable compiler from
             a proof assistant” [Bergho03]
             Proves a compiler for a subset of the Java source language to
             Java bytecode
             Includes typechecking, abstract syntax tree annotation and
             bytecode translation
             Isabelle/HOL used to prove properties about an abstract
             compiler
             Isabelle code extraction to produce an executable compiler
Motivation          1960s      1970s       1980s        1990s        2000s        Conclusions




Dave, 2003


                                               Papers listed against decade published
             Maulik A. Dave’s
             bibliography for “Compiler
             Verification” [Dave03]
             Ninety-nine papers listed
             Ninety-one of those listed
             were published after 1990
             Interestingly neither the
             Milner and Weyhrauch paper
             nor the Meijer are included
Motivation          1960s      1970s       1980s        1990s        2000s        Conclusions




Dave, 2003


                                               Papers listed against decade published
             Maulik A. Dave’s
             bibliography for “Compiler
             Verification” [Dave03]
             Ninety-nine papers listed
             Ninety-one of those listed
             were published after 1990
             Interestingly neither the
             Milner and Weyhrauch paper
             nor the Meijer are included
Motivation          1960s      1970s       1980s        1990s        2000s        Conclusions




Dave, 2003


                                               Papers listed against decade published
             Maulik A. Dave’s
             bibliography for “Compiler
             Verification” [Dave03]
             Ninety-nine papers listed
             Ninety-one of those listed
             were published after 1990
             Interestingly neither the
             Milner and Weyhrauch paper
             nor the Meijer are included
Motivation        1960s      1970s        1980s        1990s       2000s      Conclusions




Recent work

             Leroy’s “A formally verified compiler back-end” [Leroy09]
                 Proves a compiler for Cminor to PowerPC assembler
             Chlipala’s “A verified compiler for an impure functional
             language” [Chlipa10]
                 For a toy (but still quite feature rich) functional source
                 language to instructions register-based machine
             Both use the Coq proof assistant and code extraction
             Both decompose the problem into compilation to several
             intermediate languages
             Both express worries that the proof assistant itself contain
             bugs that would invalidate correctness
Motivation       1960s       1970s      1980s      1990s      2000s         Conclusions




Conclusions



             Compilers have been proved correct for progressively larger
             source languages
             Rapidly became apparent that some kind of proof assistant is
             required
             Decomposition of large compilers is a key factor for success
             Programs are only verified when all surrounding elements are
             verified
Motivation       1960s      1970s      1980s      1990s     2000s        Conclusions




Open questions


             What about compilers for larger target languages and more
             advanced compilation facilities?
             Are our mechanised assistants producing valid proofs?
             Are there other ways to decompose the problem?
             Are particular language paradigms more amenable to compiler
             verification?
             Why haven’t the concepts of [Meijer94] been more widely
             used?
             What other ways are there of decomposing the compiler
             verification problem?
Motivation   1960s      1970s       1980s      1990s      2000s   Conclusions




More information




             Slides and bibliography will be made available at;
              http://www-users.cs.york.ac.uk/~jason/

                             Jason S. Reich
                        <jason@cs.york.ac.uk>

Contenu connexe

En vedette

Actividad nº1
Actividad nº1Actividad nº1
Actividad nº1bebo07
 
Diaporama Montceau
Diaporama MontceauDiaporama Montceau
Diaporama Montceauguesteee797
 
Day 1 evidence
Day 1   evidenceDay 1   evidence
Day 1 evidenceCrickh10
 
Bhakti Vedanta Darshana July 2016
Bhakti Vedanta Darshana July 2016Bhakti Vedanta Darshana July 2016
Bhakti Vedanta Darshana July 2016ISKCON Bangalore
 
Chapter iii(advance function)
Chapter iii(advance function)Chapter iii(advance function)
Chapter iii(advance function)Chhom Karath
 
ECG RECORDING ‘ELECTROCARDIOGRAM’
ECG RECORDING ‘ELECTROCARDIOGRAM’ECG RECORDING ‘ELECTROCARDIOGRAM’
ECG RECORDING ‘ELECTROCARDIOGRAM’Muhammad Nasrullah
 
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")NCCV
 
БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...
БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...
БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...NCCV
 
Water Treatment Technology
Water Treatment TechnologyWater Treatment Technology
Water Treatment TechnologyNilay Patel
 
''E3: Realidad Virtual y los tipos de juegos''
''E3: Realidad Virtual y los tipos de juegos''''E3: Realidad Virtual y los tipos de juegos''
''E3: Realidad Virtual y los tipos de juegos''NiLen A.R ♥
 

En vedette (17)

Actividad nº1
Actividad nº1Actividad nº1
Actividad nº1
 
Diaporama Montceau
Diaporama MontceauDiaporama Montceau
Diaporama Montceau
 
Day 1 evidence
Day 1   evidenceDay 1   evidence
Day 1 evidence
 
Chapter iii(oop)
Chapter iii(oop)Chapter iii(oop)
Chapter iii(oop)
 
Paul
PaulPaul
Paul
 
Bhakti Vedanta Darshana July 2016
Bhakti Vedanta Darshana July 2016Bhakti Vedanta Darshana July 2016
Bhakti Vedanta Darshana July 2016
 
Chapter iii(advance function)
Chapter iii(advance function)Chapter iii(advance function)
Chapter iii(advance function)
 
E+ 09 06
E+ 09 06E+ 09 06
E+ 09 06
 
Chapter v(error)
Chapter v(error)Chapter v(error)
Chapter v(error)
 
ECG RECORDING ‘ELECTROCARDIOGRAM’
ECG RECORDING ‘ELECTROCARDIOGRAM’ECG RECORDING ‘ELECTROCARDIOGRAM’
ECG RECORDING ‘ELECTROCARDIOGRAM’
 
Tarta de manzana
Tarta de manzanaTarta de manzana
Tarta de manzana
 
Bg 01 01
Bg 01 01Bg 01 01
Bg 01 01
 
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")
 
БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...
БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...
БЕЛАНОВСКИЙ Ю. - Что необходимо для социального корпоративного волонтёрства? ...
 
Water Treatment Technology
Water Treatment TechnologyWater Treatment Technology
Water Treatment Technology
 
''E3: Realidad Virtual y los tipos de juegos''
''E3: Realidad Virtual y los tipos de juegos''''E3: Realidad Virtual y los tipos de juegos''
''E3: Realidad Virtual y los tipos de juegos''
 
Manicura casero
Manicura caseroManicura casero
Manicura casero
 

Similaire à Formal Verification of Programming Languages

Another programming language - jeszcze jeden język
Another programming language - jeszcze jeden językAnother programming language - jeszcze jeden język
Another programming language - jeszcze jeden językJarek Ratajski
 
Javascript Art for Kids - Library Program
Javascript Art for Kids - Library ProgramJavascript Art for Kids - Library Program
Javascript Art for Kids - Library ProgramRino Landa
 
R programming language
R programming languageR programming language
R programming languageKeerti Verma
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009spierre
 
Lesson 1-3 Fundamentals of Programming.pptx
Lesson 1-3 Fundamentals of Programming.pptxLesson 1-3 Fundamentals of Programming.pptx
Lesson 1-3 Fundamentals of Programming.pptxDysRobles
 
Issues in the design of Code Generator
Issues in the design of Code GeneratorIssues in the design of Code Generator
Issues in the design of Code GeneratorDarshan sai Reddy
 
Game development
Game developmentGame development
Game developmentAsido_
 
ACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageMarko Rodriguez
 
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
Trends in Programming Technology you might want to keep an eye on af Bent Tho...Trends in Programming Technology you might want to keep an eye on af Bent Tho...
Trends in Programming Technology you might want to keep an eye on af Bent Tho...InfinIT - Innovationsnetværket for it
 
From concept to cloud a look at modern software development
From concept to cloud a look at modern software developmentFrom concept to cloud a look at modern software development
From concept to cloud a look at modern software developmentSoftware Guru
 
The Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's PerspectiveThe Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's Perspectivekfrdbs
 
Internationalisation And Globalisation
Internationalisation And GlobalisationInternationalisation And Globalisation
Internationalisation And GlobalisationAlan Dean
 
Chapter 1 1
Chapter 1 1Chapter 1 1
Chapter 1 1bolovv
 
Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31Magnus Christerson
 
Reduce course notes class xii
Reduce course notes class xiiReduce course notes class xii
Reduce course notes class xiiSyed Zaid Irshad
 

Similaire à Formal Verification of Programming Languages (20)

Pascal programming language
Pascal programming languagePascal programming language
Pascal programming language
 
Chapter1.pptx
Chapter1.pptxChapter1.pptx
Chapter1.pptx
 
Compiler
CompilerCompiler
Compiler
 
Another programming language - jeszcze jeden język
Another programming language - jeszcze jeden językAnother programming language - jeszcze jeden język
Another programming language - jeszcze jeden język
 
Javascript Art for Kids - Library Program
Javascript Art for Kids - Library ProgramJavascript Art for Kids - Library Program
Javascript Art for Kids - Library Program
 
R programming language
R programming languageR programming language
R programming language
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009
 
Lesson 1-3 Fundamentals of Programming.pptx
Lesson 1-3 Fundamentals of Programming.pptxLesson 1-3 Fundamentals of Programming.pptx
Lesson 1-3 Fundamentals of Programming.pptx
 
Issues in the design of Code Generator
Issues in the design of Code GeneratorIssues in the design of Code Generator
Issues in the design of Code Generator
 
Game development
Game developmentGame development
Game development
 
ACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and Language
 
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
Trends in Programming Technology you might want to keep an eye on af Bent Tho...Trends in Programming Technology you might want to keep an eye on af Bent Tho...
Trends in Programming Technology you might want to keep an eye on af Bent Tho...
 
NCCU: Statistics in the Criminal Justice System, R basics and Simulation - Pr...
NCCU: Statistics in the Criminal Justice System, R basics and Simulation - Pr...NCCU: Statistics in the Criminal Justice System, R basics and Simulation - Pr...
NCCU: Statistics in the Criminal Justice System, R basics and Simulation - Pr...
 
From concept to cloud a look at modern software development
From concept to cloud a look at modern software developmentFrom concept to cloud a look at modern software development
From concept to cloud a look at modern software development
 
The Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's PerspectiveThe Next Mainstream Programming Language: A Game Developer's Perspective
The Next Mainstream Programming Language: A Game Developer's Perspective
 
Compilers Design
Compilers DesignCompilers Design
Compilers Design
 
Internationalisation And Globalisation
Internationalisation And GlobalisationInternationalisation And Globalisation
Internationalisation And Globalisation
 
Chapter 1 1
Chapter 1 1Chapter 1 1
Chapter 1 1
 
Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31
 
Reduce course notes class xii
Reduce course notes class xiiReduce course notes class xii
Reduce course notes class xii
 

Dernier

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 

Dernier (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

Formal Verification of Programming Languages

  • 1. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Formal Verification of Programming Language Implementations Ph.D. Literature Seminar Jason S. Reich <jason@cs.york.ac.uk> University of York December 8, 2009
  • 2. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Compiling an arithmetic language Compile from a simple arithmetic language to machine code for a simple register machine. Example taken from [McCart67]
  • 3. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Compiling an arithmetic language Compile from a simple arithmetic language to machine code for a simple register machine. Source language Numeric constants Variables Addition e.g. (x + 3) + (x + (y + 2)) Example taken from [McCart67]
  • 4. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Compiling an arithmetic language Compile from a simple arithmetic language to machine code for a simple register machine. Target language Source language Load Immediate into ac Numeric constants LOAD into ac from Variables address/register Addition STOre ac value to address/register e.g. (x + 3) + (x + (y + 2)) ADD register value to ac Example taken from [McCart67]
  • 5. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Compiling an arithmetic language Arithmetic expression compiler in Haskell compile : : Source −> I n t −> Target compile ( Const v ) t = [ L i v ] compile ( Var x ) t = [ Load x ] compile (Sum e1 e2 ) t = c o m p i l e e1 t ++ [ Sto ( "t + " ++ show t ) ] ++ c o m p i l e e2 ( t + 1 ) ++ [ Add ( "t + " ++ show t ) ]
  • 6. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Compiling an arithmetic language When compiled and executed, is the value in the accumulator the result of the source arithmetic expression? (x + 3) + (x + (y + 2)) compiled to machine code? 1 LOAD x 8 LOAD y 2 STO t 9 STO t + 2 3 LI 3 10 LI 2 4 ADD t 11 ADD t + 2 5 STO t 12 ADD t + 1 6 LOAD x 13 ADD t 7 STO t + 1 n.b. Where x and y are known memory locations and t + k are registers.
  • 7. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Why use high-level languages? Rapid development Easier to understand, maintain and modify Less likely to make mistakes Easier to reason about and infer properties Architecture portability But...
  • 8. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Can you trust your compiler? Use a compiler to translate from a high-level language to a low-level Compilers are programs (generally) written by people People make mistakes Can silently turn “a correct program into an incorrect executable” [Leroy09] GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs reported in the bug tracker as of 04/12/2009 [GHC] Can we formally verify a compiler?
  • 9. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Can you trust your compiler? Use a compiler to translate from a high-level language to a low-level Compilers are programs (generally) written by people People make mistakes Can silently turn “a correct program into an incorrect executable” [Leroy09] GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs reported in the bug tracker as of 04/12/2009 [GHC] Can we formally verify a compiler?
  • 10. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Can you trust your compiler? Use a compiler to translate from a high-level language to a low-level Compilers are programs (generally) written by people People make mistakes Can silently turn “a correct program into an incorrect executable” [Leroy09] GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs reported in the bug tracker as of 04/12/2009 [GHC] Can we formally verify a compiler?
  • 11. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions McCarthy and Painter, 1967 “Correctness of a compiler for arithmetic expressions” [McCart67] Describe, in first-order predicate logic; Source language semantics Target language semantics A compilation process Reason that the compiler maintains semantic equivalence
  • 12. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions McCarthy and Painter, 1967 Semantic equivalence in [McCart67] ∀e ∈ Expressions, ∀µ : Variable Mappings • interpret(e, µ) ≡ acValue(emulate(compile(e), mkState(µ))) Very limited, small toy source and target language Proof performed by hand Logical framework and proof presented in under ten pages Shows that proving a compiler correct is possible
  • 13. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Milner and Weyhrauch, 1972 “Proving compiler correctness in a mechanised logic” [Milner72] Provide an LCF machine-checked proof of the McCarthy-Painter example Proceed towards mechanically proving a compiler for a more complex language to a stack machine Claim to have “no significant doubt that the remainder of the proof can be done on machine” [Milner72]
  • 14. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Morris, 1973 “Advice on structuring compilers and proving them correct” [Morris73] Proves by hand the correctness of a compiler for a source language that contains assignment, conditionals, loops, arithmetic, booleans operations and local definitions “Essence” of the advice presented in [Morris73] compile Source language −−→ −− Target language    Target semantics Source semantics Source meanings ←−− −− Target meanings decode
  • 15. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Thatcher, Wagner and Wright, 1980 Advice presented in [Thatch80] compile Source language −−→ −− Target language    Target semantics Source semantics Source meanings −−→ −− Target meanings encode “More on advice on structuring compilers and proving them correct” [Thatch80] Provides a correct compiler for a more advanced target language than [Morris73] Claim that mechanised theorem proving tools required further development
  • 16. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions The “structuring compilers” series Discuss constructing algebras to describe languages How to move from one algebra to another Encode abstract state to concrete or decode to abstract? “there is not enough information in the [abstract] state to recover the [concrete] state completely” [Moore89] Further paper “Even more on advice on structuring compilers and proving them correct: changing an arrow” [Orejas81] [Moore89] discusses this issue from a practical perspective
  • 17. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions The “structuring compilers” series Discuss constructing algebras to describe languages How to move from one algebra to another Encode abstract state to concrete or decode to abstract? “there is not enough information in the [abstract] state to recover the [concrete] state completely” [Moore89] Further paper “Even more on advice on structuring compilers and proving them correct: changing an arrow” [Orejas81] [Moore89] discusses this issue from a practical perspective
  • 18. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions The “structuring compilers” series Discuss constructing algebras to describe languages How to move from one algebra to another Encode abstract state to concrete or decode to abstract? “there is not enough information in the [abstract] state to recover the [concrete] state completely” [Moore89] Further paper “Even more on advice on structuring compilers and proving them correct: changing an arrow” [Orejas81] [Moore89] discusses this issue from a practical perspective
  • 19. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Meijer, 1994 “More advice on proving a compiler correct: Improve a correct compiler” [Meijer94] Given a interpreter for a source language, can we transform it into a compiler to and residual interpreter for the target language? A functional decomposition problem (i.e. interpreter = emulator ◦ compiler ) Demonstrate this technique for a first-order imperative language compiling to a three-address code machine While quite feasible for first-order languages, becomes far more difficult for higher-order languages
  • 20. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Berghofer and Stecker, 2003 “Extracting a formally verified, fully executable compiler from a proof assistant” [Bergho03] Proves a compiler for a subset of the Java source language to Java bytecode Includes typechecking, abstract syntax tree annotation and bytecode translation Isabelle/HOL used to prove properties about an abstract compiler Isabelle code extraction to produce an executable compiler
  • 21. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Dave, 2003 Papers listed against decade published Maulik A. Dave’s bibliography for “Compiler Verification” [Dave03] Ninety-nine papers listed Ninety-one of those listed were published after 1990 Interestingly neither the Milner and Weyhrauch paper nor the Meijer are included
  • 22. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Dave, 2003 Papers listed against decade published Maulik A. Dave’s bibliography for “Compiler Verification” [Dave03] Ninety-nine papers listed Ninety-one of those listed were published after 1990 Interestingly neither the Milner and Weyhrauch paper nor the Meijer are included
  • 23. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Dave, 2003 Papers listed against decade published Maulik A. Dave’s bibliography for “Compiler Verification” [Dave03] Ninety-nine papers listed Ninety-one of those listed were published after 1990 Interestingly neither the Milner and Weyhrauch paper nor the Meijer are included
  • 24. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Recent work Leroy’s “A formally verified compiler back-end” [Leroy09] Proves a compiler for Cminor to PowerPC assembler Chlipala’s “A verified compiler for an impure functional language” [Chlipa10] For a toy (but still quite feature rich) functional source language to instructions register-based machine Both use the Coq proof assistant and code extraction Both decompose the problem into compilation to several intermediate languages Both express worries that the proof assistant itself contain bugs that would invalidate correctness
  • 25. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Conclusions Compilers have been proved correct for progressively larger source languages Rapidly became apparent that some kind of proof assistant is required Decomposition of large compilers is a key factor for success Programs are only verified when all surrounding elements are verified
  • 26. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions Open questions What about compilers for larger target languages and more advanced compilation facilities? Are our mechanised assistants producing valid proofs? Are there other ways to decompose the problem? Are particular language paradigms more amenable to compiler verification? Why haven’t the concepts of [Meijer94] been more widely used? What other ways are there of decomposing the compiler verification problem?
  • 27. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions More information Slides and bibliography will be made available at; http://www-users.cs.york.ac.uk/~jason/ Jason S. Reich <jason@cs.york.ac.uk>