Quelle est cette notation de «mathématiques discrètes» de type fraction utilisée pour les règles formelles?

18

Dans l'article "Un type de données JSON répliqué sans conflit" , j'ai rencontré cette notation pour définir formellement des "règles":

Certaines des "règles" présentées dans le document] [1

Comment s'appelle cette notation? Comment est-ce que je le lis?

Par exemple:

  • la DOCrègle n'a rien dans son "numérateur" - pourquoi pas?
  • les règles EXECet GETsemblent avoir deux termes distincts au-dessus de la ligne, qu'est-ce que cela signifie?
  • la VARrègle se démarque également un peu, car alors que de nombreuses autres règles utilisent une sorte de flèche (que je considérerais comme "implique") en haut, celle-ci semble seulement dire que x est un élément de quelque chose.
  • presque tout est parsemé d'une initiale Ap,que le texte décrit comme «l'état de la réplique p est décrit par Ap, une fonction partielle finie» - comment un lecteur averti de cette notation aurait-il tendance à «voir» cette partie de chaque règle?

Ce site a suggéré une question connexe qui a une notation très similaire, sur la question Quelle est la signification de ⟨B, s⟩ -> ⟨B ', s'⟩ comme règle initiale dans cette question sur les petits pas sémantique? - ceci est étiqueté comme sémantique opérationnelle , et cela semble être une piste solide. Est-ce bien là le cadre dans lequel je dois interpréter ces chiffres? Pourriez-vous facilement résumer cela sous forme de "cours intensif" afin que, même si je ne peux pas vérifier l'exactitude de leurs preuves, je pourrais au moins avoir un peu plus de compréhension de ce qu'ils disent dans cette section?

natevw
la source

Réponses:

25

Il s'agit d'une notation standard pour une règle d'inférence . Les locaux sont placés au-dessus d'une ligne horizontale et la conclusion est placée au-dessous de la ligne. Ainsi, il finit par ressembler à une "fraction", mais avec une ou plusieurs propositions logiques au-dessus de la ligne et une seule proposition en dessous de la ligne. Si vous voyez une étiquette (par exemple, "LET" ou "VAR" dans votre exemple) à côté, c'est juste un nom lisible par l'homme pour identifier la règle particulière.

Vous pouvez également voir cela comme une déduction naturelle ou une déduction naturelle de style Gentzen .

Il s'agit d'une notation courante dans la littérature des langages de programmation. Vous le verrez partout. C'est très pratique pour les types de conclusions et de preuves structurées récursives qui se présentent dans ce domaine.

Vous verrez cette notation utilisée pour exprimer les axiomes / règles. Vous pouvez considérer chaque axiome comme un modèle avec des "méta-variables" (par exemple, expr ); vous pouvez remplacer chaque méta-variable par une syntaxe du langage de programmation (par exemple, toute expression valide dans le langage de programmation), et vous obtiendrez une instance de la règle. La règle d'inférence promet que si toutes les propositions au-dessus de la ligne sont vraies (pour un exemple du modèle, où vous remplacez systématiquement chaque métavariable par la même valeur dans toute la règle), la proposition sous la ligne sera également vraie .

DW
la source
2
Une utilisation notable consiste à spécifier l'inférence de type Hindley-Milner: cette réponse à «Quelle partie de Milner-Hindley ne comprenez-vous pas?» Explique comment lire et utiliser cet ensemble de règles.
DylanSp
Une petite correction: les prémisses et les conclusions sont des jugements , pas des propositions . Les propositions sont une forme spécifique de jugement. Dans ce sens, les jugements sont évidents , pas vrais (car la notion de vérité est difficile à définir et pas vraiment intéressante pour la sémantique du langage de programmation).
gardenhead
7

Voici une explication très informelle qui pourrait aider les gens qui ne connaissent pas les notations formelles à mettre un pied dans la porte. Elle ne remplace pas une définition formelle!

L' Ap est l'état de votre système ou de votre programme en cours d'exécution. «État» peut signifier beaucoup de choses mais dans ce cas, il semble inclure une liste de toutes les variables locales définies et de leurs valeurs. Pourquoi Ap est-il une fonction? Parce que c'est un moyen pratique d'exprimer les affectations de variables: Ap (x) donne la valeur de la variable x .

Prenons maintenant la règle EXEC comme exemple. Il définit la sémantique d'exécution d'une commande cmd1 suivie d'une commande cmd2 , c'est-à-dire ce qui se passe avec l'état Ap du système lors de l'exécution de cmd1 suivi de cmd2 .

  • Au-dessus de la ligne: ce sont les locaux. Ce qu'ils disent: "Soit cmd1 une commande. Si vous exécutez la commande cmd1 lorsque votre système est dans l'état Ap , votre système se retrouvera dans un nouvel état Ap ' ."
  • Sous la ligne: ici, la règle décrit ce que signifie exécuter deux commandes cmd1 et cmd2 séquentiellement. Ce qu'il dit: "En supposant que votre système est dans l'état Ap , exécuter cmd1 puis cmd2 signifie exécuter cmd2 lorsque votre système est dans l'état Ap ' " (rappelez-vous que Ap' est l'état que vous obtenez après avoir exécuté cmd1 , tel que défini dans le locaux).

Les autres règles décrivent la sémantique des commandes et expressions individuelles. Par exemple, la règle VAR décrit ce que signifie «exécuter» une variable: si x est une variable locale (au-dessus de la ligne), que signifie évaluer / exécuter la variable x ? Il est écrit sous la ligne: Lorsque votre programme est dans l'état Ap , l'évaluation de x vous donne la valeur de x , c'est-à-dire Ap (x) .

J'espère que ça aide.

trunklop
la source
Merci, c'est une grande aide pour comprendre et exactement ce que je cherchais! Cependant, cela laisse ma première question sans réponse: cette notation a-t-elle un nom, généralement et / ou dans ce contexte particulier? Ma conjecture était "la sémantique opérationnelle", mais l'autre réponse jusqu'ici dit que ce ne sont que des "règles d'inférence". Je suppose que si je pose une question en deux parties, je mérite que les réponses soient divisées, mais maintenant je suis déchiré entre lequel accepter :-)
natevw
1
@natevw Ce sont des règles d'inférence. La sémantique opérationnelle n'est que l'une des nombreuses choses qui sont communément exprimées avec des règles d'inférence.
Gilles 'SO- arrête d'être méchant'