Variables d'après la logique combinatoire

$\newcommand{\s}{\mathbf S}
\newcommand{\k}{\mathbf K}
\newcommand{\o}[2]{\square #1 #2}
\newcommand{\i}{\o{\o {\s}{\k}}{\k}}
\newcommand{\r}[2]{#1 \rhd #2}
\newcommand{\l}[2]{\lambda #1 #2}
\newcommand{\sub}[3]{\left [#2 / #1 \right ] #3}
\newcommand{\subv}[3]{\left [\vec{#2} / \vec{#1} \right ] #3}
\newcommand{\b}{\o {\o {\s}{\o {\k}{\s}}}{\k}}
\newcommand{\a}[2]{\langle #1 \rangle \to #2}
\newcommand{\jt}[3]{#1 \vdash #2 : #3}
$L'emploi des lettres en mathématiques pose beaucoup de problèmes à beaucoup de monde. Le statut de la lettre $x$ dans "la fonction affine $t\mapsto xt+y$"et dans $\forall x\in \R, x^2\geq 0$ n'est pas le même. Comment exprimer clairement les rôles respectifs des lettres dans ces deux situations. Qu'est-ce, au fond, qu'une variable?
Le mathématicien russe Moses Schönfinkel a inventé dans les années 1920 la logique combinatoire pour répondre
précisément à cette question. Ce formalisme a été repris ensuite par Haskell Curry parallèlement au développement du lambda calcul par Alonzo Church. Puis il est tombé dans une sorte d'oubli (les traités de lambda calcul lui consacrent rarement plus de quelques pages à ma connaissance; hors des milieux spécialisés il y a de grandes chances que personne n'en ait entendu parler) et -ce n'est que mon avis- il n'a pas eu la postérité qu'il aurait dû avoir.

Bien sûr d'autres solutions sont disponibles pour parler intelligemment et précisément des variables: description explicite de l'apha-équivalence (les manuels de logique le font); indices de De Bruijn; méthode graphique (notations de Quine, reprises par Bourbaki: les variables liées sont un symbole dédié relié par un trait à un symbole lieur).
Mais seule la logique combinatoire permet de répondre de la bonne manière aux pires poncifs sur les variables (liées) en les remettant à leur vraie place: celle de pur sucre syntaxique au service d'une écriture plus compacte des formules.
De plus ce formalisme est tellement simple qu'il peut être maîtrisé en quelques heures.
Un très bon livre introductif sur ce sujet est le "Lambda-Calculus and Combinators: An Introduction" de R.Hindley et J.Seldin (il contient tous les développements techniques du présent fil).

I) Définition des combinateurs et de la relation de réduction.
On fixe deux constantes $\s,\k$ dans tout ce qui suit. On appelle combinateur (ils sont en notation polonaise ci-dessous):
-une des deux constantes $\s,\k$
-une lettre ou un symbole mathématique autre que $\s,\k$.
-$\o P Q$ où $P,Q$ sont des combinateurs (edit: ajout du tiret!).
On définit "$\r {\:}{\:}$" comme la plus petite relation binaire réflexive et transitive entre combinateurs telle que pour tous combinateurs $A,B,C$ et $D$:
1°) $\r{\o {\o {\k} A} B} A$
2°) $\r{\o {\o {\o{\s} A} B} C}{\o {\o A C}{\o B C}}$
3°) si $\r A B$ et $\r C D$ alors $\r{\o A C}{\o B D}$.

Par exemple, pour tout combinateur $E$, on a $\r{\o{\i} E} E$.
En effet, $\r{\r{\o{\i}{E}}{\o{\o{\k}{E}}{\o{\k}{E}}}}{E}$ via les axiomes ci-dessus.

II) Substitution d'une lettre par un terme.
Soit $\mathbf v$ une lettre et $T,P$ deux combinateurs. On désigne par $\sub {\mathbf v} T P$ le combinateur obtenu en remplaçant, dans $P$, toutes les occurrences de $\mathbf v$ par $T$ (édité).
Exemples:
1°) $\sub x {\o {\k} {\s}} {\o {\o {\s} x} x}$ est le combinateur $\o {\o {\s} {\o {\k} {\s}}} {\o {\k} {\s}}$
2°) $\sub y {\o x y} {\o y {\o y {\k}}}$ est le combinateur $\o {\o x y} {\o {\o x y} {\k}}$

NB:
3°) étant donné une lettre quelconque $\mathbf w$ et un combinateur $Q$, $\sub {\mathbf w} {\mathbf w} Q$ est bien évidemment $Q$ lui-même (en remplaçant $\mathbf w$ par $\mathbf w$ on ne change rien!).
4°) Etant donnés trois combinateurs $A,B,C$ et une lettre $\mathbf u$, si $\r A B$, alors $\r {\sub {\mathbf u} C A}
{\sub {\mathbf u} C B}$
Cela se voit par induction évidente sur la longueur de la suite de réductions élémentaires (étapes décrites au I) de ce paragraphe) appliquées pour obtenir $\r A B$: quand vous remplacez un terme $X$ par $\sub{\mathbf u} C X$ dans chacun des cas 1°, 2° ou 3° de I) vous obtenez une étape de réduction de même forme.
Par exemple: on prend les lettres $x,y,z$. On a $\r {\o {\o {\o {\b}x}y}z} {\o x {\o y z}}$: le détail est donné par
$$\r{\o {\o {\o {\b}x}y}z}{\r {\o {\o {\o {\o {\o {\k}{\s}}x}{\o {\k} x}}y}z} {\r {\o {\o {\o {\s} {\o {\k} x}} y}z} {\r {\o {\o {\o {\k} x} z}{\o y z}}{\o x {\o y z}}}}} \tag{$\dagger$}$$ Alors on a également $\r {\o {\o {\o {\b}{\o {\s}{\k}}}y}z} {\o {\o{\s}{\k}} {\o y z}}$ en appliquant $\sub x {\o {\s}{\k}} {\:}$ à chaque terme; la suite de réductions correspondante étant $$
\r{\o {\o {\o {\b}{\o {\s}{\k}}}y}z}{\r {\o {\o {\o {\o {\o {\k}{\s}}{\o {\s}{\k}}}{\o {\k} {\o {\s}{\k}}}}y}z} {\r {\o {\o {\o {\s} {\o {\k} {\o {\s}{\k}}}} y}z} {\r {\o {\o {\o {\k} {\o {\s}{\k}}} z}{\o y z}}{\o {\o {\s}{\k}} {\o y z}}}}} \tag{$\dagger \dagger$}$$
III) Elimination de l'abstraction.
A) Cas d'un argument:
étant donné une lettre $\mathbf x$ et un combinateur $P$, on définit par induction sur la taille de $P$ le combinateur $\l {\mathbf x} P$ de la façon suivante:
(i) $\l {\mathbf x} {\mathbf x} := \i$
(ii) $\l {\mathbf x} P := \o {\k} P$ lorsque $P$ ne contient aucune occurrence de la lettre $\mathbf x$
(iii) $\l {\mathbf x}{\o Q {\mathbf x}} := Q$ lorsque $Q$ ne contient aucune occurrence de la lettre $\mathbf x$.
(iv) dans tous les autres cas, $P$ est de la forme $\o M N$ avec $M,N$ combinateurs et on pose $\l {\mathbf x}{\o M N} := \o{\o{\s}{\l {\mathbf x}{M}}}{\l {\mathbf x} N}$

On peut maintenant énoncer le théorème fondamental de la logique combinatoire:
Pour toute lettre $\mathbf y$ et tous combinateurs $F,Z$, la lettre $\mathbf y$ ne figure pas dans $\l {\mathbf y} F$, et toutes les autres lettres (les constantes $\s,\k$ ne sont pas considérées comme des lettres) apparaissant dans $\l {\mathbf y} F$ apparaissent dans $F$. De plus $$\r {\o {\l {\mathbf y} F} Z} {\sub {\mathbf y} Z F} \tag{*}$$.

Le fait que l'algorithme définissant $\lambda$ retire une par une toutes les occurences de $\mathbf y$ dans $F$ est évident.
Le deuxième point du théorème se démontre par induction sur le nombre de symboles de $F$ en examinant les 4 cas dans la définition de $\lambda$:
cas (i): découle de l'exemple du I)
cas (ii): découle du 1°) de la définition du I)
cas (iii): découle de ce que comme $\mathbf y$ n'apparaît pas dans $F$, $\sub {\mathbf y} Z F$
cas (iv): découle du 2°) de la définition du I) et de l'hypothèse de récurrence (l'initialisation étant couverte par les cas (i) et (ii) ci-dessus).

Remarque: on a en particulier compte tenu de II) 3°), $\r {\o {\l {\mathbf y} F} {\mathbf y}} F$ (puisque $ \sub {\mathbf y} {\mathbf y} F $ est identique à $F$).

B) Cas de plusieurs arguments.
Soient $d$ un entier et $\vec {\mathbf x} = (\mathbf x_1,\mathbf x_2,...,\mathbf x_d)$ une liste de lettres distinctes deux à deux.
Etant donnés un combinateur $C$, et une liste $\vec T := (T_1,...,T_d)$ de combinateurs, on désigne par $\subv {\mathbf x} {T} C$ le combinateur obtenu en remplaçant, pour tout $i=1,...,d$, toutes les occurrences de la lettre $\mathbf x_i$ par $T_i$ dans $C$. La substitution décrite au II) est un cas particulier de cette opération avec des listes d'une seule lettre et un seul combinateur.
$(\clubsuit)$ On a à nouveau, pour les mêmes raisons, $\r {\subv {\mathbf x} T M} {\subv {\mathbf x} T N}$ pour tous combinateurs $M,N$ tels que $\r M N$. A nouveau il suffit de regarder ce qui se passe sur les étapes élémentaires d'une réduction.

Lemme: pour tout combinateur $P$, $$
\r {\o {\ldots \o {\o {\l {\mathbf x_1} {\l {\mathbf x_2} {\ldots {\l {\mathbf x_d} P}}}} {\mathbf x_1}} {\mathbf x_2}} {\ldots \mathbf x_d}} P \tag{**}$$
Ce lemme se montre par récurrence immédiate sur $d$ en exploitant la remarque à la fin de II)A)
On en déduit une généralisation à $d$ arguments du résultat fondamental du même paragraphe:
Pour tout combinateur $Q$,$$
\r {\o {\ldots \o {\o {\l {\mathbf x_1} {\l {\mathbf x_2} {\ldots {\l {\mathbf x_d} Q}}}} T_1} T_2} {\ldots T_d}} {\subv {\mathbf x} T Q} \tag{***}$$

Cela découle de $(**)$ ci-dessus et de la remarque $(\clubsuit)$ plus haut vu que comme $\l {\mathbf x_1} {\l {\mathbf x_2} {\ldots {\l {\mathbf x_d} P}}}$ ne contient aucune occurrence des lettres $\mathbf x_1, \mathbf x_2,...,\mathbf x_d$, $\subv {\mathbf x} T {\o {\ldots \o {\o {\l {\mathbf x_1} {\l {\mathbf x_2} {\ldots {\l {\mathbf x_d} Q}}}} {\mathbf x_1}} {\mathbf x_2}} {\ldots \mathbf x_d}}$ est identique à $\o {\ldots \o {\o {\l {\mathbf x_1} {\l {\mathbf x_2} {\ldots {\l {\mathbf x_d} Q}}}} T_1} T_2} {\ldots T_d}$.

La logique combinatoire, via $(*)$ et $(***)$ ci-dessus, donne donc un sens précis à la notion de "définition d'une fonction par une expression avec des variables".
Exemple: prenons à nouveau les lettres $x,y,z$. Un calcul montre que $\l x {\l y {\l z {\o x {\o y z}}}}$ est le combinateur $\b$. Si $F,G,H$ sont trois autres combinateurs, on a $\r {\o {\o {\o {\l x {\l y {\l z {\o x {\o y z}}}}}F}G}H} {\o F {\o G H}}$, autrement dit: $\r {\o {\o {\o {\b}F}G}H} {\o F {\o G H}}$. L'exemple $(\dagger \dagger)$ du II) plus haut est un cas particulier de cette relation.

IV) Introduction au typage.
Il est impossible de résumer la totalité des systèmes de typages qui existent en maths ou en informatique. Celui qui est présenté ci-dessous est le plus simple que je connaisse (c'est un début!).
On introduit un nouvel alphabet (on utilisera des lettres grecques ci-dessous). On appelle sorte (ou pour faire court: type) une expression obtenue de la façon suivante:
-une lettre est une sorte
-si $\Phi,\Psi$ sont des sortes, $\a {\Phi}{\Psi}$ est une sorte.

Un contexte est un ensemble de couples $(\mathbf a_1:\Theta_1),...,(\mathbf a_n:\Theta_n)$ de couples où pour tout $i=1...n$, $\mathbf a_i$ est une lettre et $\Theta_i$ un type.

Etant donné un contexte $\mathcal C$, on définit une relation binaire entre combinateurs
On introduit une nouvelle relation binaire entre combinateurs $T$ et types $\Xi$, notée $\jt {\mathcal C}{T}{\Xi}$ (on dira que "$T$ est de type $\Xi$ dans $\mathcal C$" ou même simplement "$T$ est de type $\Xi$" si aucune confusion n'est à craindre), définie par induction de la façon suivante:
-si $(T:\Xi) \in \mathcal C$ alors $\jt {\mathcal C}{T}{\Xi}$
-pour toutes sortes $\Gamma,\Delta$, on a $\jt {\mathcal C}{\k}{\a {\Gamma} {\a {\Delta}{\Gamma}}}$
-pour toutes sortes $\Phi,\Psi,\Sigma$, on a $\jt {\mathcal C}{\s}{\a {\a {\Phi}{\a{\Psi}{\Sigma}}}{\a{\a{\Phi}{\Psi}}{\a{\Phi}{\Sigma}}}}$
-pour toutes sortes $\Upsilon,\Omega$ et tous combinateurs $P,Q$, si $\jt {\mathcal C} P {\a{\Upsilon}{\Omega}}$ et $\jt {\mathcal C} Q {\Upsilon}$ alors $\jt {\mathcal C} {\o P Q} {\Omega}$

Citons deux résultats exprimant le bon comportement de cette notion vis-à-vis de celles que nous avons définies au points précédents. Soit $\mathcal D$ un contexte.
1°) Pour tous combinateurs $V,W$ tels que $\r V W$ et toute sorte $\Xi$, si $\jt {\mathcal D} V \Xi$ alors $\jt {\mathcal D} W \Xi$
2°) Pour toute lettre $\mathbf x$ ne figurant pas dans $\mathcal D$, toutes sortes $\Delta,\Sigma$ et tout combinateur $F$ tel que $\jt{\mathcal D \cup \{(\mathbf x : \Delta)\}} F {\Sigma}$, on a également $\jt {\mathcal D} {\l {\mathbf x} F} {\a {\Delta}{\Sigma}}$

Ces résultats se montrent par induction respectivement sur la taille de la preuve de la relation de réduction dans le premier cas et sur la taille du combinateur dans le second.
Noter que si un terme $X$ est typable dans un contexte $\mathcal E$ (i.e. il existe une sorte $\Omega$ telle que $\jt {\mathcal E} T {\Omega}$), alors toutes les lettres apparaissant dans $X$ apparaissent dans $\mathcal E$ (examiner les étapes de la preuve de ce que le terme est typable).

D'autres exemples seront introduits plus loin.
Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.

Réponses

  • J'ai essayé de lire pour la culture, mais j'ai vite trouvé ça lourd et compliqué.

    Pour mon petit cerveau : dans le calcul des prédicats, tout symbole précédé par un $\forall$ ou un $\exists$ est non seulement clairement défini "par définition" des quantificateurs, mais aussi "muet" : on peut le remplacer par un autre symbole dans toute la formule sans changer le sens ou la valeur de vérité de cette formule. En ce sens, je pense qu'il est presque plus difficile de définir ce qu'est une constante : si j'écris "pour tout $x$ dans $E$", il faut savoir qui est $E$, mais $E$ n'est pas une constante mathématique donnée par une définition précise, $E$ change de nature dans chaque cours, exercice... donc certains symboles sont (plus ou moins) réservés pour être des variables quantifiées, et d'autres sont réservés pour être des constantes du langage.

    Dans une fonction, les variables c'est... un peu pareil. Dans ZFC, une fonction $f : A \longrightarrow B$, c'est une relation $\mathcal{R} \in \mathscr{P}(A \times B)$ qui vérifie ce qu'il faut. Donc en fait, $f = \{(x,y) \in A \times B \mid x \mathcal{R}y\}$. Et là, pareil, c'est muet et "techniquement" bien défini, en tout cas ça l'est si on a une formule précise pour $f$... dans laquelle $x$ et $y$ seraient des variables quantifiées : formule du style $\forall x \in A$, $\forall y \in B$, $x \mathcal{R} y \Longleftrightarrow [\dots]$.


    EDIT tardif : Quand on définit "la" fonction affine $t \longmapsto xt +y$, ça requiert bien d'avoir introduit $x$ et $y$ comme des "constantes locales" (identifiées dans le contexte précis d'existence de la fonction). La fonction affine $t \longmapsto 2t-1$ est "parfaitement définie" parce que $2$ et $-1$ sont des "constantes universelles" du monde des maths, on les définit une fois pour toutes les mathématiques, mais $2$ c'est toujours $2$, ce symbole a une seule définition. En ce sens, $2$ est une variable "non locale", alors que les $x$ et $y$ ici ne sont clairement définis que dans le contexte momentané du texte mathématique qui les contient.

    J'aimerais comprendre dans quelle mesure mon point de vue est trop simpliste. Même si je n'ai pas réussi à lire le premier message.
  • Bonjour Foys

    Pour la notion de sorte, de quel livre t'es-tu servi, s'il te plait ? Sinon, l'on peut définir la notion de sorte ou de type de la manière suivante.

    Soit $\mathfrak{o}$ une sorte particulière (la sorte objet pour les catégories, la sorte formule pour la logique du second ordre, ...). L'on choisit un ensemble $\mathcal{S}_0$ de sortes tel que $\mathfrak{o}\not\in\mathcal{S}_0$, appelé ensemble des sortes de base. L'on définit l'ensemble $\mathcal{S}$ des sortes par la grammaire\[\mathcal{S}=\mathfrak{o}\mid\mathcal{S}_0\mid\mathcal{S}\to\mathcal{S}\mid(\mathcal{S})\]Remarque :
    • $\mathcal{S}$ est le plus petit ensemble contenant la sorte particulière $\mathfrak{o}$, les sortes appartenant à $\mathcal{S}_0$ et clos par les règles $\bullet\to\bullet$ et $(\bullet)$.
    • Si $\mathfrak{s}$ et $\mathfrak{s}'$ appartiennent à $\mathcal{S}$, alors $\mathfrak{s}\to\mathfrak{s}'$, qui appartient à $\mathcal{S}$, désigne la sorte des fonctions partiellement définies, associant à un objet de la sorte (ou du type) $\mathfrak{s}$ un objet de la sorte (ou du type) $\mathfrak{s}'$. Prenons l'exemple de l'arithmétique où l'on convient que $\omega\in\mathcal{S}_0$ est introduite pour désigner la sorte des entiers naturels. Toute fonction considérée est une fonction partiellement définie sur son ensemble de départ. Par suite, la sorte $(\omega\to\omega)\to\omega$ désigne la sorte des fonctions associant à une fonction de la sorte $\omega\to\omega$ (i.e. d'une fonction des entiers dans les entiers) l'objet de la sorte $\omega$ (i.e. un entier).
    Le chat ouvrit les yeux, le soleil y entra. Le chat ferma les yeux, le soleil y resta. Voilà pourquoi le soir, quand le chat se réveille, j'aperçois dans le noir deux morceaux de soleil. (Maurice Carême).
  • $\newcommand{\s}{\mathbf S}\newcommand{\k}{\mathbf K}\newcommand{\o}[2]{\square #1 #2}
    \newcommand{\i}{\o{\o {\s}{\k}}{\k}}\newcommand{\r}[2]{#1 \rhd #2}\newcommand{\l}[2]{\lambda #1 #2}\newcommand{\sub}[3]{\left [#2 / #1 \right ] #3}\newcommand{\subv}[3]{\left [\vec{#2} / \vec{#1} \right ] #3}\newcommand{\b}{\o {\o {\s}{\o {\k}{\s}}}{\k}}\newcommand{\a}[2]{\langle #1 \rangle \to #2}\newcommand{\jt}[3]{#1 \vdash #2 : #3}\newcommand{\cforall}[3]{\forall^{#2} #1. #3}\newcommand{\cexists}[3]{\exists^{#2} #1. #3}\newcommand{cimpl}[2]{\o {\o {\Rightarrow}{#1}}{#2}}\newcommand{cplus}[2]{\o {\o +{#1}}{#2}}\newcommand{ctimes}[2]{\o {\o \times {#1}}{#2}}\newcommand{cpow}[2]{\o {\o {\uparrow}{#1}}{#2}}\newcommand{ceq}[2]{\o {\o ={#1}}{#2}}\newcommand{cminus}[2]{\o {\o -{#1}}{#2}}
    $Bonjour, en ce moment je suis peu disponible donc ne peux pas trop animer le fil autant que j'aurais souhaité. Mais je vais tenter des réponses.
    Thierry Poma a écrit:
    Pour la notion de sorte, de quel livre t'es-tu servi, s'il te plait ?
    Essentiellement du livre "Lambda-Calculus and Combinators: An Introduction" de R.Hindley et J.Seldin que j'ai cité au début de mon message précédent.
    Il y a aussi des documents sur le web bien faits qui traitent de cette question (les pages wikipédia sont correctes, voir aussi https://plato.stanford.edu/entries/logic-combinatory/ ; du reste le site de Stanford est de très bonne qualité pour les sujets mathématiques qu'il aborde, je n'ai jamais été déçu jusqu'à présent).
    Y a-t-il des sources en Français? Je sais qu'il y a un livre de logique combinatoire avec une couverture bleue mais ne connais pas son contenu (je l'avais vu une fois à la fnac et l'ai juste entrouvert rapidement).

    D'autre part l'usage d'une constante de sorte dédiée $\omicron$ pour désigner le "type des énoncés logiques" est utile si on veut parler d'énoncés logiques mais pas toujours indispensable (quand on veut interpréter les termes de logique combinatoire dans les catégories cartésiennes fermées par exemple).

    Si on le fait on se retrouve par exemple avec des "connecteurs logiques" qui sont eux même des connecteurs typés.
    Par exemple il y aura dans le contexte $\Rightarrow$ de sorte $\a {\omicron} {\a {\omicron} {\omicron}}$; et pour toute sorte $\alpha$,
    $\Pi^{\alpha}$ de sorte $\a {\a {\alpha}{\omicron}}{\omicron}$.
    Lorsque $F$ est de type $\a {\alpha}{\omicron}$, $\o {\Pi^{\alpha}}F$ est un énoncé (combinateur de type $\omicron$) signifiant intuitivement que $\o F T$ est vrai pour n'importe quel objet $T$ de type $\alpha$.

    Soit $\mathcal C$ un contexte (contenant $(\Pi^{\alpha}:\a {\a {\alpha}{\omicron}}{\omicron})$ pour tout $\alpha$ et $(\Rightarrow:\a {\omicron}{\a {\omicron}{\omicron}})$ comme ci-dessus). On suppose que la lettre $x$ n'est pas dans $\mathcal C$.

    On définit alors (NB: ci-dessous, $a,b,p,x,y$ sont des lettres distinctes et ne figurant pas dans $\mathcal C$):
    1°) $\forall^{\alpha} x.G := \o {\Pi^{\alpha}} {\l x G}$ pour tout combinateur $G$ sur le contexte $\mathcal C \cup \{(x:\alpha)\}$.
    $\forall^{\alpha} x.G$ est un terme du contexte $\mathcal C$ (la lettre $x$ a été enlevée par l'algorithme $\lambda$) et si $\jt {\mathcal C \cup \{(x:\alpha)\}} G {\omicron}$ alors $\jt {\mathcal C} {\l x G} {\a {\alpha} {\omicron}} $ ce qui entraîne que
    $\jt {\mathcal C} {\o{\Pi^{\alpha}}{\l x G}}{\omicron}$ autrement dit $\jt {\mathcal C} {\forall^{\alpha} x.G}{\omicron}$.
    2°) $\perp:= \forall^{\omicron} p.p$ ("faux" signifie intuitivement "tous les énoncés sont vrais"). $\perp$ est de type $\omicron$
    3°) $\wedge := \l a {\l b {\cforall p {\omicron} {\cimpl {\cimpl a {\cimpl b p}} p}}}$.
    4°) $\vee := \l a {\l b {\cforall p {\omicron} {\cimpl {\cimpl a p} {\cimpl {\cimpl b p} p}}}}$. $\wedge$ et $\vee$ sont de type $\a {\omicron}{\a {\omicron}{\omicron}}$
    5°) $\neg := \l a {\cimpl a {\perp}}$ (ou encore $\l a {\cforall p {\omicron} {\cimpl a p}}$). $\neg$ est de type $\a {\omicron} {\omicron}$.
    6°) $\Sigma^{\alpha}:= \l f {\cforall p {\omicron} {\cimpl {\cforall x {\alpha} {\cimpl {\o f x} p}} p}}$. $\Sigma^{\alpha}$ est de type $\a {\a {\alpha}{\omicron}}{\omicron}$.
    7°) $\cexists y {\alpha} G := \o{\Sigma^{\alpha}} {\l y G}$. $\cexists y {\alpha} G$ est de type $\omicron$ lorsque $G$ l'est.
    Homo topi a écrit:
    EDIT tardif : Quand on définit "la" fonction affine $t\mapsto xt+y$, ça requiert bien d'avoir introduit x et y comme des "constantes locales" (identifiées dans le contexte précis d'existence de la fonction).
    NB: "$x \mapsto \ldots$" est une autre notation pour "$\l x {\ldots}$".

    Une "constante locale" est juste une lettre figurant dans le contexte. Avec les notations du message précédent,
    disons qu'on a une certaine sorte $\nu$ (que nous appellerons "nombres" sans plus de précision) et un contexte: $\mathcal A := \{(=: \a {\nu} {\a {\nu} {\omicron}})(0:\nu), (1:\nu), (+:\a {\nu}{\a {\nu}{\nu}}), (\times:\a {\nu}{\a {\nu}{\nu}}), (-:\a {\nu}{\a {\nu}{\nu}}),(\div:\a {\nu}{\a {\nu}{\nu}}), (\uparrow :\a {\nu}{\a {\nu}{\nu}}), (x:\nu), (y:\nu)\}$.
    Par exemple lorsque $m,k$ sont de type $\nu$, $\o {\o {\uparrow} n} k$ l'est aussi, s'appelle "$n$ puissance $k$" (et se note lorsqu'aucune confusion n'est à craindre, $n^k$).
    Les combinateurs de type $\nu$ vont être en quelque sorte des "nombres" écrits avec des "expressions arithmétiques".
    $\omicron$ est la sorte des énoncés vue plus haut.
    Ajoutons une lettre $t$ de type $\nu$ au contexte:
    Le combinateur $\cplus {\ctimes x t}y$ (notée de façon plus lisible "$xt+y$") est alors une expression du contexte $\mathcal A \cup \{(t:\nu)\}$ et cette expression est de type $\nu$.
    En revanche, $t \mapsto xt+y$, c'est à dire $\l t {\cplus {\ctimes x t}y}$:
    (i) est une expression de type $\a {\nu} {\nu}$
    (ii) ne contient pas la lettre $t$ !!!! c'est une expression du contexte $\mathcal A$

    $t \mapsto xt+y$ est en fait égal à $\o {\o {\o {\s} {\o {\k} +}}{\o {\times}x}}{\o {\k} y}$. Où se trouve la lettre $t$ dans cette expression??? Il n'yen a pas et d'ailleurs $t \mapsto xt+y$ est identique à $s \mapsto xs+y$.

    D'autre part soit $\mathcal B$ le contexte obtenu en retirant les lettres $x$ et $y$ de $\mathcal A$ (mais en y ajoutant les connecteurs logiques dans la réponse faite à Thierry plus haut).

    Alors $x^2-y^2= (x-y)(x+y)$ est une expression de type $\omicron$ du contexte $\mathcal A \cup \{(=:\a {\nu} {\a {\nu} {\omicron}})\}$. Elle s'écrit de façon non abrégée:$$\ceq {\cminus {\cpow x 2}{\cpow y 2}}{\ctimes {\cminus x y}{\cplus x y}} \tag{$\spadesuit$}$$ où $2$ est mettons une abréviation de $1+1$ i.e. $\cplus 1 1$.

    Cependant l'expression $\cforall x {\nu} {\cforall y {\nu} {x^2-y^2= (x-y)(x+y)}}$ est une expression de type $\omicron$ de $\mathcal B$
    Elle ne contient pas les lettres $x$ et $y$ !!! (Sa forme explicite est longue et illisible).
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Bon... merci d'avoir répondu, mais j'abandonne. Je ne comprends aucune des notations. Je ne comprends ni S, ni K, ni le carré blanc, et comme tu ne les as pas redéfinis ici, je ne dois pas faire partie du public visé par le fil.
  • Pardon Homo Topi, les symboles $\mathbf S,\mathbf K,\o{}{}$ sont ceux de mon premier message.
    Ce sont uniquement des objets syntaxiques (des symboles quoi). Il ne sont pas définis, c'est leur usage qui l'est.
    D'autres messages viendront quand je serai dispo.
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Justement, c'est ça qui me pose problème.

    Je sais que tu les as introduits dans ton premier message, mais tu supposes qu'on comprenne comment s'en servir. Or, je n'ai aucune idée de comment comprendre ces symboles, je ne peux pas vraiment chercher "carré blanc mathématiques" sur Google pour trouver ce que ce symbole représente. Donc par défaut, je ne peux pas comprendre ce que tu racontes. Tu dis que leur usage est défini, je veux bien, mais je ne sais pas comment le trouver...
  • $\newcommand{\r}[2]{#1 \rhd #2}
    \newcommand{\o}[2]{\square #1 #2}
    \newcommand{\k}{\mathbf K}

    $Homo Topi il faut faire attention car je crois qu'au début du premier message de Foys il manque un "tiret" (en rouge ci-dessous) qui peut contribuer à rendre la début difficile à comprendre. D'ailleurs j'ai eu du mal également. Je réécris les règles :

    On appelle combinateur (ils sont en notation polonaise ci-dessous):
    - une des deux constantes $\mathbf S,\mathbf K$
    - une lettre ou un symbole mathématique autre que $\mathbf S,\mathbf K$.
    - $\square P Q$ où $P,Q$ sont des combinateurs.


    Par exemple pour le point 1°), ${\o {\o {\k} A} B}$ est un combinateur car :

    - $\k$ et $A$ sont des combinateurs donc en appliquant la troisième règle ci-dessus, $ {\o {\k} A}$ est un combinateur

    - en appliquant à nouveau la troisième règle avec les combinateurs ${\o {\k} A}$ et $B$ en en déduit que ${\o {\o {\k} A} B}$ est un combinateur.
  • J'avais mentalement rajouté le tiret mais, est-ce que $\square \square \mathbf{K} A B$ est à lire comme $\square (\square \mathbf{K} A) B$ ? Auquel cas je trouve un poil absurde d'utiliser des notations comme ça, c'est très vite très illisible...
  • L'opération de concaténation de chaînes de caractères est associative donc pas besoin de parenthèses.
  • Si tu fais un truc théorique abstrait, oui. Mais en pratique, ça devient des trucs comme $\times~3~(+~2~~1)$, je ne vois pas l'intérêt de noter les choses comme ça au lieu de $3 \times(2+1)$. Regarde les formules du premier message de Foys, est-ce que c'est très lisible ? Si on y passe le temps, effectivement on va comprendre, mais il y a des façons de noter les choses qui sont beaucoup plus lisibles que ça...
  • @Homo Topi: Tu peux reprendre les définitions de Foys en remplaçant $\square A B$ par $(AB)$ si tu préfères. C'est ce qui est fait dans le livre que Foys conseille "Lambda-calculus and combinators, an introduction". Le chapitre 2 de ce bouquin (pas très dur à trouver en ligne...) semble contenir les même chose que le premier post, avec en prime un peu plus d'explications "intuitive" de ce qu'il se passe, notamment des interprétations intuitives de $\mathbf{S}$ et de $\mathbf{K}$.

    En tout cas merci à toi Foys du long post, c'est intéressant et je ne connaissais que de trop loin ces idées!

    Il y a une typo dans la définition de la substitution.

    Tu parles de la possibilité d’interpréter tout ça dans une catégorie cartésienne fermée, j'imagine un peu comment ça peut se faire vu les définitions, mais peux-tu quand même en dire un peu plus là-dessus?
  • En fait j'ai déjà trouvé $\mathbf{S}$ et $\mathbf{K}$ sur Wikipédia, où les notations sont plus claires que dans l'exposé de Foys à mon goût. Cela dit, ils racontent moins de choses, aussi. Je vais essayer de relire posément le premier message plus tard.
  • Je n'ai jamais compris comment on peut croire une seconde que ce genre de longs pavés ultra formels (que je trouve également pour ma part très indigestes) peut aider une seule seconde à la compréhension.
  • Héhéhé a écrit:
    Je n'ai jamais compris comment on peut croire une seconde que ce genre de longs pavés ultra formels (que je trouve également pour ma part très indigestes) peut aider une seule seconde à la compréhension.
    Tu exagères, c'est quand même moins long que le premier chapitre de N.Bourbaki Théorie des ensembles.

    Le but de ces posts et aussi de livrer certaines informations, plutôt que reproduire une vaguerie pédagogiste mièvre, du reste visible presque partout ailleurs (à quoi bon rédiger le 54ième article sur "la variable x, c'et un objet qu'on prend dans ses mains et qui varie, par opposition à constante").

    Il faudra que je raconte une anecdote personnelle non mathématique (quoique) qui explique pourquoi j'écris certains textes d'une certaine manière (et il faudra aussi que j'arrête de promettre des trucs dans le futur alors que j'ai la flemme ou même simplement pas la disponibilité. Mais ça c'est une autre histoire).
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Il y a un juste milieu entre un texte imbuvable à la Bourbaki (je parle en connaissance de cause, j'ai voulu les lire quand j'étais étudiant) et un truc "tellement pédagogique" que ça n'a plus de contenu. On n'a pas introduit la notion de pédagogie pour rien, ce n'est pas parce que les programmes scolaires actuels sont complètement débiles à force de vouloir faire trop de pédagogie que nécessaire que la pédagogie en soi n'a aucun intérêt.

    En ce qui me concerne, si ton objectif Foys était de rendre quelque chose compréhensible pour des néophytes, je trouve ça effectivement un peu raté à cause de la présentation. Si ton but était de clarifier un détail très pointu pour des gens qui s'y connaissent déjà, là je n'ai rien à dire.

    Bonne nuit, les insomniaques.
  • Voilà c'est exactement ça que je veux dire : ce genre de texte est trop difficile à suivre quand on est néophyte dans ce genre de choses (mon cas) donc en fait on a l'impression que cela s'adresse à des spécialistes :-S
  • Voici le début d'un texte qui me semble compréhensible ... même par moi, c'est tout dire !
    Il s'agit de "Logique moderne, fasc 3" de Jean-Blaise Grize, éd. Gauthier-Villars, 1972, dont le rabat de couverture précise qu'il s'adresse principalement aux étudiants et aux chercheurs en sciences humaines, et non aux mathématiciens !

    À noter que ce que j'en comprends me convainc facilement que vouloir commencer par un exposé de logique combinatoire pour introduire les notions basiques de constante, variable, champ d'un quantificateur, occurences libres et liées de variables, substitutions autorisées d'expressions aux variables, notions quasi triviales lorsqu'elles sont clairement exposées, est, selon moi, une absurdité pédagogique.


    (coquilles à la dernière page)
  • Chat-maths a écrit:
    Tu parles de la possibilité d’interpréter tout ça dans une catégorie cartésienne fermée, j'imagine un peu comment ça peut se faire vu les définitions, mais peux-tu quand même en dire un peu plus là-dessus?
    Etant donnés des objets $M,A,B,C$ d'une catégorie cartésienne fermée, $\mathbf S$ et $\mathbf K$ vont être les flèches de source $M$ obtenus par curryfications successives des flèches $M \times (C^B)^A\times B^A \times A \to C$ et $M \times A \times B \to A$ auxquelles on pense (!!! ce n'est pas dur mais l'écrire formellement et précisément est très fastidieux; je le ferai peut-être).

    Merci aussi à GG pour avoir indiqué une source en français (l'auteur se sert d'autres constantes de base; la définition de "$\lambda$" est un peu plus compliquée et ne figure pas dans la préface mais on procèderait comme suit: $x$ est une lettre; $P$ est un combinateur où ne figure pas $x$, $F,G$ des combinateurs où figurent $x$. je garde ses notations: on pose $\lambda x.x:=I$, $\lambda x.P:=KP$; $\lambda x.Px:=P$; $\lambda x.PF:= BP(\lambda x .F)$; $\lambda x.FP:= C(\lambda x.F)P; \lambda x.FG:=W(B(C(\lambda x.F))(\lambda x.G))$).
    GG a écrit:
    À noter que ce que j'en comprends me convainc facilement que vouloir commencer par un exposé de logique combinatoire pour introduire les notions basiques de constante, variable, champ d'un quantificateur, occurences libres et liées de variables, substitutions autorisées d'expressions aux variables, notions quasi triviales lorsqu'elles sont clairement exposées
    Alors non par contre. C'est un massacre dans l'enseignement et la preuve est dans les résultats: presque personne n'est capable d'aborder ces sujets. On est en permanence dans le non dit vague. Ce qui est facile c'est de faire un cours où on ne dit rien aux élèves et où on ne pose que des exercices types simples, évitant toutes les subtilités. Personne ne réagit et après on pense qu'on a transmis le message. Mais après des décennies de ça on se réveille en constatant que des élèves entrent en prépa sans pouvoir simplifier des fractions numériques avec des nombres à deux chiffres.
    Donc moi je cherche une solution d'exposition qui soit à la fois la plus courte possible, et où tout est dit explicitement. La logique combinatoire me semble un candidat sérieux dans cette optique.
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
Connectez-vous ou Inscrivez-vous pour répondre.