Presentation is loading. Please wait.

Presentation is loading. Please wait.

What’s left in the course. The course in a nutshell Logics Techniques Applications.

Similar presentations


Presentation on theme: "What’s left in the course. The course in a nutshell Logics Techniques Applications."— Presentation transcript:

1 What’s left in the course

2 The course in a nutshell Logics Techniques Applications

3 Logics Propositional, first-order, higher-order Expressiveness, level of automation, human friendliness Constructive logic: Today!

4 Techniques Proof-system search ( ` ) Interpretation search ( ² ) Quantifiers Equality Decision procedures Induction Cross-cutting aspectsMain search strategy E-graph Next Tu: Rewrite rules Communication between decision procedures and between prover and decision procedures DPLL Backtracking Incremental SAT Matching Skolemization Unifcation Natural deduction Sequents Tactics & Tacticals Resolution Next Th: Applying induction based on recursive structures

5 Applications Rhodium ESC/Java Proof Carrying Code Later: Translation Validation (Zach’s project)

6 Curry-Howard Isomorphism

7 But before: Type systems 101

8 Simply typed lambda calculus Consider the simply typed lambda calculus: e ::= n (integers) |x (variables) | x: . e (function definition) |e 1 e 2 (function application)  ::= int (integer type) |   !  2  (function type)

9 Typing rules Typing judgment:  ` e:  Is read as: in context , e has type  The context tells us what the type of the free variables in e are Example: x:int, f:int ! int ` (f x):int Typing rules: Judgment 1 Judgment 2

10 Rules for lambda terms  ` (f x):  2

11 Rules for lambda terms  ` ( x:  1. b):

12 What other rules do we need?

13  ` x:  x:  2   ` n: int

14 Summary so far  x:  1 ` b:  2  ` ( x:  1. b):  1 !  2  ` f:  1 !  2  ` (f x):  2  ` x:  1  ` x:  x:  2   ` n: int

15 Adding pairs e ::= n | x | x: . e | e 1 e 2  ::= int |   !  2

16 Adding pairs e ::= n | x | x: . e | e 1 e 2 |(e 1,e 2 )(pair construction) | fst e(select first element of a pair) | snd e(select second element of a pair)  ::= int |   !  2  |  1 *  2 (pair type)

17 Rules for pairs  ` (x,y):   *  2

18 Rules for pairs  ` fst x:    ` snd x:  

19 Rules for pairs (summary)  ` x:  1  ` (x,y):   *  2  ` y:  2  ` x:   *  2  ` fst x:    ` x:   *  2  ` snd x:  

20 Adding unions e ::= n | x | x: . e | e 1 e 2 | (e 1,e 2 ) | fst e | snd e  ::= int |   !  2  |  1 *  2

21 Adding unions e ::= n | x | x: . e | e 1 e 2 | (e 1,e 2 ) | fst e | snd e | inl e(create a union of the left case) | inr e(create a union of the right case) | case e of inl x ) e 1 | inr y ) e 2 (perform case analysis on union)  ::= int |   !  2  |  1 *  2 |  1 +  2 (sum (aka union) type)

22 Rules for unions  ` inl  x:  1 +  2  ` inr  x:  1 +  2

23 Rules for unions  ` z:  1 +  2  ` ( case z of inl x ) b 1 | inr y ) b 2 ) : 

24 Rules for unions (summary)  ` x:  1  ` inl  x:  1 +  2  ` y:  2  ` inr  x:  1 +  2  ` z:  1 +  2  ` ( case z of inl x ) b 1 | inr y ) b 2 ) :   x:  1 ` b 1 :  y:  2 ` b 2 : 

25 Curry-Howard Isomorphism

26 Typing rules for lambda terms Where have we seen these rules before?  x:  1 ` b:  2  ` ( x:  1. b):  1 !  2  ` f:  1 !  2  ` (f x):  2  ` x:  1

27 Typing rules for lambda terms  x:  1 ` b:  2  ` ( x:  1. b):  1 !  2  ` f:  1 !  2  ` (f x):  2  ` x:  1  ` B  ` A ) B  ` A ) B  ` A  ` B )I)I )E)E  1 ` 2 1 ` 2  `  1 !  2  `  2  `  1 Erase terms Convert to logic

28 Typing rules for pairs  ` x:  1  ` (x,y):   *  2  ` y:  2  ` x:   *  2  ` fst x:    ` x:   *  2  ` snd x:   Where have we seen these rules before?

29 Typing rules for pairs  ` x:  1  ` (x,y):   *  2  ` y:  2  ` x:   *  2  ` fst x:    ` x:   *  2  ` snd x:   Erase terms  ` 1 ` 1  `   *  2  ` 2 ` 2  `   *  2  `    `   *  2  `    ` A  ` B  ` A Æ B  ` A  ` A Æ B  ` B ÆIÆI ÆE1ÆE1 ÆE2ÆE2 Convert to logic

30 Typing rules for unions  ` x:  1  ` inl  x:  1 +  2  ` y:  2  ` inr  x:  1 +  2 Where have we seen these rules before?

31 Typing rules for unions  ` x:  1  ` inl  x:  1 +  2  ` y:  2  ` inr  x:  1 +  2 Erase terms ` 1` 1  `  1 +  2 ` 2` 2 Convert to logic  ` A  ` A Ç B ÇI1ÇI1  ` B  ` A Ç B ÇI2ÇI2

32 Typing rules for unions (cont’d)  ` z:  1 +  2  ` ( case z of inl x ) b 1 | inr y ) b 2 ) :   x:  1 ` b 1 :  y:  2 ` b 2 :  Where have we seen this rule before?

33 Typing rules for unions (cont’d)  ` z:  1 +  2  ` ( case z of inl x ) b 1 | inr y ) b 2 ) :   x:  1 ` b 1 :  y:  2 ` b 2 :   `  1 +  2 ` `   1 `  1 `  2 `  2 `   ` A Ç B  ` C ÇEÇE  ` C  ` C Erase terms Convert to logic

34 Curry-Howard isomorphism Propositions-as-types :  ::= int |   !    |  1 *  2 |  1 +  2 A ::=p| A 1 ) A 2 | A 1 Æ A 2 | A 1 Ç A 2 If types are propositions, then what are lambda terms?

35 Typing rules using logic for types  x : A ` y : B  ` ( x : A. y) : A ) B  ` f : A ) B  ` (f x) : B  ` x : A )I)I )E)E  ` x : A  ` (x,y) : A Æ B  ` y : B  ` x : A Æ B  ` fst x : A  ` x : A Æ B  ` snd x : B ÆIÆI ÆE1ÆE1 ÆE2ÆE2  ` x : A  ` inl  x : A Ç B  ` y : B  ` inr  x : A Ç B ÇI1ÇI1 ÇI2ÇI2  ` z : A Ç B  ` ( case z of inl x ) e 1 | inr y ) e 2 ) : C  x : A ` e 1 : C  y: B ` e 2 : C ÇEÇE

36 Curry-Howard isomorphism If types are propositions, then what are lambda terms? Answer: terms are proofs Programs-as-proofs:  ` e:A means that under assumptions , A holds and has proof e

37 Example A proof of A ) B is a function that takes a parameter x of type A (that is to say, a proof of A), and returns something of type B (that is to say, a proof of B)  x : A ` y : B  ` ( x : A. y) : A ) B )I)I

38 Another example Suppose we have a proof of A ) B. This is a function f that, given a proof of A, returns a proof of B. Suppose also that we have a proof of A, call it x. Then applying f to x gives us a proof of B.  ` f : A ) B  ` (f x) : B  ` x : A )E)E

39 Another example A proof of A Æ B is just a pair containing the proof of A and the proof of B  ` x : A  ` (x,y) : A Æ B  ` y : B ÆIÆI

40 Another example Given a proof of A, a proof of A Ç B is a union in the left case, which records that we attained the disjunction through the left of the Ç There is a problem though…  ` x : A  ` inl  x : A Ç B ÇI1ÇI1

41 Another example Given a proof of A, a proof of A Ç B is a union in the left case, which records that we attained the disjunction through the left of the Ç Unfortunately, the proof does not record what the right type of the union is. –Given that x is a proof of A, what is inl  x a proof of? Ideally, we would like the proof (lambda term) to determine the formula (type). What’s the fix?  ` x : A  ` inl  x : A Ç B ÇI1ÇI1

42 The fix for Ç proofs (union terms) Ideally, we would like the proof (lambda term) to determine the formula (type). What’s the fix?  ` x : A  ` inl  x : A Ç B  ` y : B  ` inr  x : A Ç B ÇI1ÇI1 ÇI2ÇI2

43 The fix for Ç proofs (union terms) Ideally, we would like the proof (lambda term) to determine the formula (type). What’s the fix? We add the other type to the Ç proof (union term):  ` x : A  ` inl B  x : A Ç B  ` y : B  ` inr A  x : A Ç B ÇI1ÇI1 ÇI2ÇI2

44 Intuition for quantifiers A proof of 8 x: . P(x) is a function that, given a parameter x of type , returns a proof of P(x) A proof of 9 x: . P(x) is a function that computes a value of type  for which P(x) holds Note that 8 x: .P(x) and 9 x: . P(x) are formulas, and so they are types. But they also contain a type  inside of them.

45 Programs-as-proofs The programs-as-proofs paradigm is operational: to prove something, we have to provide a program This program, when run, produces a computational artifact that represents a proof of the formula –the program itself is also a representation of the proof, but so is the final result computed by the program

46 Curry-Howard breaking down Because of the operational nature of the programs-as-proofs paradigm, the paradigm only works for proofs that are constructive Consider the formula 9 x. P(x) –A constructive proof must show how to compute the x that makes the formula valid –A proof by contradiction would assume 8 x. : P(x), and then derive false. –But this does not give us a way to compute x, which means it doesn’t give us a “program-as-proofs” proof.

47 Curry-Howard breaking down Curry-Howard isomorphism only holds for constructive logics –Like classical logic, except that we do not allow proofs by contradiction The rule that you remove depends on the calculus you’re using –In our natural deduction calculus, remove the following rule:  ` : : A  ` A : E

48 Constructive logic In other calculii, it may be the following rule: Or it may be the law of the excluded middle:  :  A  ` F  ` A  ` A Ç : A

49 Constructive logic example Consider the task of constructing an algorithm that prints 0 if Riemann’s Hypothesis holds and prints 1 otherwise. –Riemann’s Hypothesis has not been proved or disproved (Fermat’s last theorem was previously used, until it was proven…) Does such an algorithm exists?

50 Constructive logic example Consider the task of constructing an algorithm that prints 0 if Riemann’s Hypothesis holds and prints 1 otherwise. –Riemann’s Hypothesis has not been proved or disproved (Fermat’s last theorem was previously used, until it was proven…) Does such an algorithm exists? –Classicists: yes –Constructivists: don’t know yet. Need to wait until Riemann’s Hypothesis is proven or disproven

51 Another example Consider the following theorem, which holds in classical logic: –Every infinite sequence of 0’s and 1’s has a least upper bound Translation to constructive logic: –There exists an algorithm that given an algorithm f from natural numbers of {0, 1}, computes the least upper bound of { f(n) | n ¸ 0 } Doesn’t hold in constructive logic, because the algorithm doesn’t exist

52 Constructive logic It may seem that using constructive logic is like tying your hands behind your back before starting a proof. So why use it? Several arguments for it, including philosophical ones (for example?) One of the concrete arguments in favor of constructive logic is the Curry-Howard isomorphism, which leads to the so-called specifications-as-programs paradigm.

53 Specifications as programs Suppose we want to program an algorithm that given a natural number x produces a natural number y so that a decidable condition P(x,y) is satisfied A proof of 8 x. 9 y. P(x,y) in constructive logic yields a program for computing y from x, which is a provably correct implementation of the specification. Programs and specifications are the same!

54 Specifications as programs This idea has been used in various contexts, including three widely know theorem provers –Coq –NuPRL –Twelf Main challenge –extracting efficient programs from the proofs


Download ppt "What’s left in the course. The course in a nutshell Logics Techniques Applications."

Similar presentations


Ads by Google