(Typed) λ -Calculi ` a la de Bruijn Fairouz Kamareddine (Heriot-Watt University) Tuesday 17 April 2014 Beihang-17-april-2014
De Bruijn’s typed λ -calculi started with his Automath • In 1967, an internationally renowned mathematician called N.G. de Bruijn wanted to do something never done before: use the computer to formally check the correctness of mathematical books. • Such a task needs a good formalisation of mathematics, a good competence in implementation, and extreme attention to all the details so that nothing is left informal. • Implementing extensive formal systems on the computer was never done before. • De Bruijn, an extremely original mathematician, did every step his own way. • He proudly announced at the ceremony of the publications of the collected Automath work: I did it my way . • Dirk van Dalen said at the ceremony: The Germans have their 3 B’s, but we Dutch too have our 3 B’s: Beth, Brouwer and de Bruijn . Beihang-17-april-2014 1
There is a fourth B: Beihang-17-april-2014 2
Contraversy? • In 1992, de Bruijn told me that when he announced his new project Automath at the start of January 1967, there was mixed reactions: – Amongst mathematicians: Why is de Bruijn defecting? – Amongst computer scientists: De Bruijn is not a computer scientist so why is he coming to do a computer scientist’s job? – Amongst logicians: De Bruijn is not a logician and has he also forgotten about Goedel’s undecidability results? • But, de Bruijn was ahead of everyone else. Beihang-17-april-2014 3
• It goes without saying that de Bruijn and his Automath shaped the way. • De Bruijn’s Automath influenced the Edinburgh Logical Frameworks. • The Nuprl project has been connected to ideas in de Bruijn’s Automath (e.g., telescopes). • Coquand and Huet’s calculus of constructions and consequently the proof checker Coq are influenced by de Bruijn’s dependent types, PAT and Automath. • De Bruijn was the first to put the Propositions As Types (PAT) idea in practice. • Barendregt’s cube and Pure Type systems are a beautiful example of generalisations of typing rules influenced by Automath. Beihang-17-april-2014 4
• De Bruijn was the first to express the importance of definitions to the formalisation and proof checking of mathematics. Definitions (also known as let expressions) have been adopted in other proof checkers and in programming languges (e.g. ML). • De Bruijn’s Automath was the first (and remains the only) proof checker in which an entire book has been fully proof checked by the computer (Mizar is the next system in which 60% of a book is proof checked). • It has been, and will be for many generations to come, a hard but magical task to fully decode the genious ideas of de Bruijn in his Automath project. • In this talk, I will review some details of de Bruijn’s λ -calculus. Beihang-17-april-2014 5
They look good together Beihang-17-april-2014 6
Theme 1: De Bruijn Indices and Explicit Substitutions [de Bruijn, 1972] • Classical λ -calculus: A ::= x | ( λx.B ) | ( BC ) ( λx.A ) B → β A [ x := B ] • ( λx.λy.xy ) y → β ( λy.xy )[ x := y ] � = λy.yy • ( λx.λy.xy ) y → β ( λy.xy )[ x := y ] = α ( λz.xz )[ x := y ] = λz.yz • λx.x and λy.y are the same function. Write this function as λ 1 . • Assume a free variable list (say x, y, z, . . . ). • ( λλ 2 1)2 → β ( λ 2 1)[1 := 2] = λ (2[2 := 2])(1[2 := 2]) = λ 3 1 Beihang-17-april-2014 7
Classical λ -calculus with de Bruijn indices • Let i, n ≥ 1 and k ≥ 0 • A ::= n | ( λB ) | ( BC ) ( λA ) B → β A { { 1 ← B } } U i k ( AB ) = U i k ( A ) U i k ( B ) � n + i − 1 if n > k U i • k ( n ) = if n ≤ k . n U i k ( λA ) = λ ( U i k +1 ( A )) ( A 1 A 2 ) { { i ← B } } = ( A 1 { { i ← B } } ) ( A 2 { { i ← B } } ) • ( λA ) { { i ← B } } = λ ( A { { i + 1 ← B } } ) n − 1 if n > i U i n { { i ← B } } = 0 ( B ) if n = i if n < i . n • Numerous implementations of proof checkers and programming languages have been based on de Bruijn indices. Beihang-17-april-2014 8
From classical λ -calculus with de Bruijn indices to substitution calculus λs [Kamareddine and R´ ıos, 1995] } as Aσ n B and U i k ( A ) as ϕ i • Write A { { n ← B } k A . • A ::= n | ( λB ) | ( BC ) | ( Aσ i B ) | ( ϕ i i, n ≥ 1 , k ≥ 0 . k B ) where A σ 1 B σ -generation ( λA ) B − → λ ( A σ i +1 B ) ( λA ) σ i B − → σ - λ -transition ( A 1 A 2 ) σ i B ( A 1 σ i B ) ( A 2 σ i B ) − → σ -app-transition n − 1 if n > i n σ i B ϕ i σ -destruction − → 0 B if n = i if n < i n ϕ i λ ( ϕ i − → ϕ - λ -transition k ( λA ) k +1 A ) ϕ i ( ϕ i k A 1 ) ( ϕ i ϕ -app-transition k ( A 1 A 2 ) − → k A 2 ) � n + i − 1 if n > k ϕ i − → ϕ -destruction k n if n ≤ k n Beihang-17-april-2014 9
1. The s -calculus (i.e., λs minus σ -generation) is strongly normalising, 2. The λs -calculus is confluent and simulates (in small steps) β -reduction 3. The λs -calculus preserves strong normalisation PSN. 4. The λs -calculus has a confluent extension with open terms λse . • The λs -calculus was the first calculus of substitutions which satisfies all the above properties 1., 2., 3. and 4. Beihang-17-april-2014 10
λυ [Benaissa et al., 1996] Λ υ t ::= IN | Λ υ t Λ υ t | λ Λ υ t | Λ υ t [Λ υ s ] Terms: Λ υ s ::= ↑ | ⇑ (Λ υ s ) | Λ υ t . Substitutions: − → (Beta) ( λa ) b a [ b/ ] (App) ( a b )[ s ] − → ( a [ s ]) ( b [ s ]) (Abs) ( λa )[ s ] − → λ ( a [ ⇑ ( s )]) (FVar) 1 [ a/ ] − → a − → (RVar) n + 1 [ a/ ] n 1 [ ⇑ ( s )] − → (FVarLift) 1 (RVarLift) n + 1 [ ⇑ ( s )] − → n [ s ] [ ↑ ] (VarShift) n [ ↑ ] − → n + 1 λυ satisfies 1., 2., and 3., but does not have a confluent extension on open terms. Beihang-17-april-2014 11
λσ ⇑ Λ σ t ⇑ ::= IN | Λ σ t ⇑ Λ σ t ⇑ | λ Λ σ t ⇑ | Λ σ t ⇑ [Λ σ s Terms: ⇑ ] Λ σ s ⇑ ::= id | ↑ | ⇑ (Λ σ s ⇑ ) | Λ σ t ⇑ · Λ σ s ⇑ | Λ σ s ⇑ ◦ Λ σ s Substitutions: ⇑ . (Beta) ( λa ) b − → a [ b · id ] − → (App) ( a b )[ s ] ( a [ s ]) ( b [ s ]) − → λ ( a [ ⇑ ( s )]) (Abs) ( λa )[ s ] (Clos) ( a [ s ])[ t ] − → a [ s ◦ t ] (Varshift1) n [ ↑ ] − → n + 1 (Varshift2) n [ ↑ ◦ s ] − → n + 1 [ s ] 1 [ a · s ] − → (FVarCons) a n + 1 [ a · s ] − → (RVarCons) n [ s ] (FVarLift1) 1 [ ⇑ ( s )] − → 1 (FVarLift2) 1 [ ⇑ ( s ) ◦ t ] − → 1 [ t ] n + 1 [ ⇑ ( s )] − → n [ s ◦ ↑ ] (RVarLift1) n + 1 [ ⇑ ( s ) ◦ t ] − → n [ s ◦ ( ↑ ◦ t )] (RVarLift2) Beihang-17-april-2014 12
λσ ⇑ rules continued (Map) ( a · s ) ◦ t − → a [ t ] · ( s ◦ t ) ( s ◦ t ) ◦ u − → s ◦ ( t ◦ u ) (Ass) ↑ ◦ ( a · s ) − → (ShiftCons) s (ShiftLift1) ↑ ◦ ⇑ ( s ) − → s ◦ ↑ (ShiftLift2) ↑ ◦ ( ⇑ ( s ) ◦ t ) − → s ◦ ( ↑ ◦ t ) (Lift1) ⇑ ( s ) ◦ ⇑ ( t ) − → ⇑ ( s ◦ t ) ⇑ ( s ) ◦ ( ⇑ ( t ) ◦ u ) − → ⇑ ( s ◦ t ) ◦ u (Lift2) ⇑ ( s ) ◦ ( a · t ) − → a · ( s ◦ t ) (LiftEnv) (IdL) id ◦ s − → s (IdR) s ◦ id − → s ⇑ ( id ) − → (LiftId) id − → (Id) a [ id ] a λσ ⇑ satisfies 1., 2., and 4., but does not have PSN. Beihang-17-april-2014 13
A force in explicit substitutions ` a la λσ Beihang-17-april-2014 14
How is λse obtained from λs ? • They said, we can have open terms (holes in proofs) in λσ , can you do so in λs ? • A ::= X | n | ( λB ) | ( BC ) | ( Aσ i B ) | ( ϕ i k B ) where i, n ≥ 1 , k ≥ 0 . • Extending the syntax of λs with open terms without extending the λs -rules loses the confluence (even local confluence): (( λX ) Y ) σ 1 1 → ( Xσ 1 Y ) σ 1 1 (( λX ) Y ) σ 1 1 → (( λX ) σ 1 1)( Y σ 1 1) • ( Xσ 1 Y ) σ 1 1 and (( λX ) σ 1 1)( Y σ 1 1) have no common reduct. • But, (( λX ) σ 1 1)( Y σ 1 1) → → ( Xσ 2 1) σ 1 ( Y σ 1 1) • Simple: add de Bruijn’s metasubstitution and distribution lemmas to the rules of λs : Beihang-17-april-2014 15
( Aσ i B ) σ j C ( A σ j +1 C ) σ i ( B σ j − i +1 C ) σ - σ if i ≤ j − → k A ) σ j B ( ϕ i ϕ i − 1 σ - ϕ 1 A if k < j < k + i − → k k A ) σ j B k ( A σ j − i +1 B ) ( ϕ i ϕ i σ - ϕ 2 if k + i ≤ j − → k ( A σ j B ) k +1 A ) σ j ( ϕ i ϕ i ( ϕ i ϕ - σ k +1 − j B ) if j ≤ k + 1 − → k ( ϕ j ϕ j ϕ i l ( ϕ i ϕ - ϕ 1 l A ) k +1 − j A ) l + j ≤ k − → if ϕ i k ( ϕ j ϕ j + i − 1 ϕ - ϕ 2 l A ) A if l ≤ k < l + j − → l • These extra rules are the rewriting of the well-known meta-substitution ( σ − σ ) and distribution ( ϕ − σ ) lemmas (and the 4 extra lemmas needed to prove them). • ( σ − σ ): A [ x := B ][ y := C ] = A [ y := C ][ x := B [ y := C ]] if x � = y and x �∈ FV ( C ) . • ( ϕ − σ ): updated ( A [ x := B ]) = ( updatedA )[ x := updatedB ] . Beihang-17-april-2014 16
Recommend
More recommend