LOFO — Logique Formelle (Correction)
EPITA – Sans machine ni document Juin 2013 (1h30)
Bien lire les questions, chaque mot est important. Écrire court, juste, et bien. Une argumentation informelle mais convaincante est souvent suffisante.
Pour les questions à choix multiples (numérotées Q.1, Q.2 etc.) aucune réponse manuscrite ne sera corrigée : répondre sur les formulaires. Renseigner les champs d’identité. Il y a exactement une et une seule réponse juste pour ces questions. Si plusieurs réponses sont valides, sélectionner la plus restrictive. Par exemple s’il est demandé si 0 est nul, non nul, positif, ou négatif, cocher nul qui est plus restrictif que positif et négatif, tous deux vrais. Répondre incorrectement est plus pénalisé que de ne pas répondre.
1 λ -Calcul
Q.1 Quelle est la forme complètement parenthésée de λxyz · xz(yz).
3 (λx · (λy · (λz · ((xz)(yz))))).
7 (λx · (λy · (λz · (x(z(yz)))))).
7 (λx · (λy · (λz · (xz))(yz))).
7 (λx · (λy · (λz · (xz)))(yz)).
7 ((λx · (λy · (λz · (xz))))(yz)).
Q.2 À quoi λn f x · f ( f (x)) n’est pas équivalent ?
7 λ f f x · f ( f (x)) 7 λx f x · f ( f (x)) 7 λxx f · x(x( f )) 3 λx f x · x(x( f )) Q.3 Quel arbre de syntaxe abstraite est correct ?
7 abs
N abs
app
x abs
var
y y
7 app
N app
M abs
abs
var
x M x
3 app
var
v app
var
u abs
abs
var
y y x
7 app
abs
x abs
y var
y abs
abs
var
y y x
Soit les combinateurs suivants :
True = λx · λy · x False = λx · λy · y
Pair = λx · λy · λ f · f xy
First = λp · p True
Second = λp · p False
1. Prouver que First (Pair M N) →
∗M.
2. Les entiers de Church, n sont des fonctions de répétition. Le nombre de Church 0 applique 0 fois son argument fonction à un argument valeur, 42 le fait 42 fois. On pose :
n = λ f · λx · ( f · · · ( f
| {z }
nfois
x ) · · · )
|{z}
nfois
Que calcule le combinateur S ?
S = λn · λ f · λx · f (n f x)
Correction: On reconnaît le combinateur qui calcule le successeur d’un entier de Church : il applique la fonction une fois de plus.
S n = λn · λ f · λx · f (n f x) n
→
βλ f · λx · f (n f x)
= λ f · λx · f (λx · ( f · · · ( f
| {z }
nfois
x ) · · · )
|{z}
nfois
)
= λ f · λx · (λx · ( f · · · ( f
| {z }
n+1 fois
x ) · · · )
|{z}
n+1 fois