Pour les questions de ce document (à préparer chez vous, comme pour tous les TDs/TPs),
revoyez tout d'abord les pages 4 et 5 du support de cours,
puis, si besoin, les exemples des
pages suivantes et de l'annexe du support de cours (i.e. sa section 3 ; les pages suivantes et
cette annexe partagent de nombreux exemples). Pour les 2 premières questions de cette page,
il se peut que la relecture des pages 4 et 5 du support de cours
vous suffise.
Les solutions à ces
2 premières questions sont
accessibles lorsque, pour tous les groupes, les TDs/TPs relatifs ces questions sont achevés.
N'oubliez pas d'effecter les exercices donnés dans la dernière page de ce document.
Dans cette page,
i) "QuantifCtxt" est l'abréviation de
"context for (representing the) quantifiers",
ii) en FL et FE, les noeuds relations sont en italique,
iii) les types de concept ont une initiale en majuscule
(mais ce n'est pas le cas dans les pages suivantes).
FL without quantifCtxt: FL with 2 quantifCtxts: FL with Red first: FL-DF with Car first: FL-DF with Wheel first: FE:
FL without quantifCtxt: FL with a quantifCtxt: FL with Car first: FL-DF with Wheel first: FL-DF with Car first: FE:
FL without quantifCtxt: FL-DF with Car first: FE:
Représentez en FL et et FL-DF la phrase "by definition, any man loves Paris and loves at least 3 red hats" (utilisez des relations 'agent', 'object' et 'color' ainsi que les variables ?l1 et ?l2 ; inutile de préfixer les termes).
FL without quantifCtxt: FL with quantifCtxt:
Représentez en FL la phrase suivante: "in 2012, every man believed that he loved himself" (utilisez les relations 'believer', 'agent' et 'object' ainsi que les variables ?m et ?l ; inutile de préfixer les termes).
FL without quantifCtxt: FL with quantifCtxt: FL-DF:
Solutions aux questions de cette page
(accessible lorsque, pour tous les groupes, les TDs/TPs relatifs ces questions sont achevés).
En: A motel is an hotel. A king-size bed is a bed. Bates Motel has 2 bedrooms with a king-size bed, at 40$/night. //in 2018 FE: Bates_motel has for type Motel which is subtype of Hotel ; King-size_bed is subtype of Bed ; Bates_motel has for part 2 Bedroom which have for part a King-size_bed and which have for price-per-night 40 Dollar ; FLnc: //"nc": "no context" (and here: "not connected") Bates_motel type: ( Motel supertype: Hotel ) ; King-size_bed subtype of: Bed ; Bates_motel part: ( 2 Bedroom price-per-night: 40 Dollar, part: a King-size_bed ) ; FLc: //"c": "with context" (and here: "connected") Bates_motel type _[. -> .]: ( Motel supertype _[. -> .]: Hotel ), part _[. -> 2 ?b] : ( Bedroom part _[?b -> a]: (King-size_bed supertype _[. -> .]: Bed), price-per-night _[?b -> 40]: Dollar ) ; FL-DF: //"DF": "display form", i.e. "graphique" ("2D") hence connected, no parenthesis, hardly parsable Bates_motel --type _[. -> .]--> Motel --supertype _[. -> .]--> Hotel |---part _[. -> 2 ?b]--> Bedroom --part _[?b -> a]--> King-size_bed --type _[any -> .]--> Bed |---price-per-night _[?b -> 40]--> Dollar Q1: //"query 1": get the part of the knowledge base (KB) which includes and relates all the // graphs that imply the one given in parameter of the search operator "?" ? [ a Bedroom price-per-night: at most 50 Dollar ] Q2: //get the list of all graphs that imply the parameter ("list": no relations between the graphs) ?s [ a Bedroom price-per-night: at most 50 Dollar ] <= ?s Q3: //get the list of all graphs that specialize the parameter ?s [ a Bedroom price-per-night: at most 50 Dollar ] =< ?s Q4: //get the list of all graphs that the parameter implies ?s [ a Bedroom price-per-night: at most 50 Dollar ] => ?s Q5: //get the list of all graphs that the parameter specializes ?s [ a Bedroom price-per-night: at most 50 Dollar ] >= ?s
Examples of specializations are in section +1.0.e
Queries are further presented in section +1.e.comp
"Structured discussions"
- un des Google Docs de 2017
- old examples (do not imitate)
- 1er Google Doc de 2018
Règles à suivre dans tous vos exercices de modélisation
(à faire par les M2 info avant leur CC :
* apprendre ces règles et comprendre les exemples des pages suivantes,
et donc
- savoir lire tous les exemples des pages suivantes d'après ces
règles,
- savoir répondre aux questions de ce CC1
sans regarder la solution ;
* faire les exercices de la page suivante et de la page 12).
1. Une relation binaire de type ?rt (e.g., 'subtype' or 'part')
depuis un nœud source ?s (e.g., 'feline' or 'at least 80% of car')
vers une destination ?d (e.g., 'cat' or 'at most 100 wheel')
se lit :
" ?s has/have for ?rt ?d ".
E.g. :
`feline > cat´ ou [feline > cat]
ou `feline subtype: cat´ se lit
"feline has for subtype cat" (ou "the type feline has for subtype the type
cat"),
[at least 80% of car part: at most 100 wheel] se lit
`at least 80% of car have for part at most 100 wheel´.
Ce dernier exemple peut aussi se lire :
"at least 80% of instances of the
type car have for part
at most 100 instances of the type wheel". Enfin,
conformément à la règle 7 ci-dessous,
`car part: at most 100 wheel´ se lit
"any (instance of) car has for part at most 100 (instance of)
wheel(s)".
2. Si ?rt est suivi de "of" (pour inverser la direction de la relation),
il vaut mieux lire
" ?s is/are ?r of ?d ".
E.g., `cat < feline´ (i.e., `cat subtype of: feline´)
se lit
"cat is subtype of feline" et
`at least 51% of wheel part of: a car´ se lit
"at least 51% of wheels are part of a car".
3. `?st subtype of: ?t´ (alias, `?st < ?t´) est équivalent
à `any ?st instance of: ?t´,
i.e., ` `?i type: ?st´ => `?i type: ?t´ ´.
Formellement :
[?st subtype of: ?t] <=> [ [?i instance of: ?st] => [?i instance of: ?t] ].
Informellement :
"?st est sous-type de ?t ssi toute instance de ?st est aussi
instance de ?t".
4. `?t > excl{?st1 ?st2}´ <=> `?t > ?st1 (?st2 exclusion: ?st1)´
(informellement :
?st1 et ?st2 sont sous-types de ?t et ne peuvent avoir ni sous-type commun,
ni instance commune).
5. Si le nœud destination d'une relation est source/destination d'autres
relations,
il faut isoler ce nœud destination et ses autres
relations avec des parenthèses
(comme dans l'exemple du
paragraphe précédent) pour que l'interpréteur du
langage puisse savoir que ces autres relations sont sur le nœud
destination,
pas sur le nœud source.
Similairement, dans une notation textuelle, lorsque 2 relations de même
source
se suivent, il faut les séparer par un symbôle.
En FL, c'est la virgule (cf.
exemples).
À l'oral ou en Formalized-English (FE : FL lu avec les règles de
lecture), les mots "that"/"which" et "and" peuvent être
utilisés comme dans
l'exemple suivant :
En: any white cat is on a blue mat and is happy.
FL: any ^(cat color: a white) place: (a mat color: a blue),
experiencer of: an happiness;
FE: any `cat that has for color a white´
has for place a mat that has for color a blue , and
is experiencer of an happiness. //", and" ou ", ," ou "and and" car
// il faut remonter 2 relations (color et place) pour trouver le bon
// nœud source. À l'oral, il vaut mieux dire "and and".
//Dans le cas simple ci-dessus, les quotes pourraient être omises
// mais il vaut mieux les garder à l'écrit. À l'oral, il vaut
// mieux marquer une pause avant et après chaque quote.
6. Les noms utilisés dans les nœuds relation/source/destination doivent
être des
noms communs/propres (jamais d'adjectif, verbe, ...)
au singulier et en
minuscules (sauf pour les noms propres s'ils
prennent normalement des majuscules).
7. Les relations qui ne sont pas entre types et/ou des individus nommés
(i.e., pas les relations sous-type/instance mais la
majorité des relations)
doivent préciser comment les
nœuds source et destination
sont quantifiés
Exemples de quantificateurs : "a" (i.e., "there exists a"),
"any" (i.e., "by definition, each"),
"every" ("by observation, each"), "most" (i.e., "at least 51%"), "at most 20%",
"0..20%", "at most 20", "0..20", "between 2 and 3", "2..3".
Toutefois, si le quantificateur du nœud source est
'any' - i.e., s'il s'agit d'une définition -
celui-ci peut être omis : c'est le quantificateur par
défaut pour un nœud source.
Pour le nœud destination, 0..* est le quantificateur par défaut.
Donc :
[car part _[any->0..*, 0..*<-any]: wheel]
=> ( [any car part: 0..* wheel] <=>
[car part: 0..* wheel] )
Lorsque c'est possible, il vaut mieux rendre les quantificateurs
explicites.
C'est toujours possible pour des RCs isolées
ou en mettant les quantificateurs
dans les contextes
associées aux nœuds relations au lieu de les mettre dans
leurs nœuds sources/destinations.
8. Si vous hésitez entre 2 relations dont une seule est transitive,
choisissez la transitive
(e.g., choisissez "<=" au lieu de
"argument").
Sinon, si vous hésitez entre 2 relations, choisissez la plus
basique|générique (et
utilisez des nœuds
concept adéquats pour ne pas perdre en précision).
Différentes phrases représentant la même chose :
En: Every green mouse is (agent of a) dancing. //"every" -> this is an observation, hence at least one green_mouse exists // -> instead of: ∀?m green-mouse(?m) => ( ∃?d dancing(?d) ∧ agent(?d,?m) ) // the simpler following representation in LP can be given LP: ∀?m ∃?d green-mouse(?m) ∧ dancing(?d) ∧ agent(?d,?m) FL-DF: every green_mouse --agent of--> a dancing //only if "every" has priority over "a" FL-DF: green_mouse --agent of _[every->a]--> dancing FLc: green_mouse agent of _[every->a]: dancing; FLc: green_mouse agent of: dancing __[every->a]; FLnc: every green_mouse agent of: a dancing //all the above FL-DF and FL phrases should be read in the same way: // every green mouse is agent of a dancing
Les phrases ci-dessous sont syntaxiquement correctes mais
ne représentent pas la même chose que ci-dessus.
En: There is a dancing to which every green_mouse participate. En: There is a dancing that has for agent every green_mouse. LP: ∃?d ∀?m dancing(?d) ∧ green-mouse(?m) ∧ agent(?d,?m) FL-DF: dancing --agent _[a->every]--> green_mouse FL-DF: green_mouse <--agent _[every<-a]-- dancing FLnc: a dancing agent: every green_mouse //these last 5 FL-DF and FL phrases can/should be read in the same way: // (there is) a dancing that has for agent every green_mouse En: every mouse is dancing and is green LP: ∀?m ∃?g ∃?d mouse(?m) ∧ dancing(?d) ∧ green(?g) ∧ agent(?d,?m) ∧ color(?m,?g) FL-DF: mouse --agent of _[every->a]--> dancing //graph unconnected to the next one: mouse --color _[every->a]--> green FL-DF: dancing <--agent of _[a<-every]-- mouse --color _[every->a]--> green FL-DF: dancing <--agent of _[a<-every ?m1]-- mouse --color _[every ?m2->a]--> green FL-DF: dancing <--agent of _[a<-every ?m]-- mouse --color _[every ?m->a]--> green FLnc: every mouse agent of: a dancing, color: a green //these last 5 FL-DF and FL phrases should be read in the same way: // every mouse is agent of a dancing and has for color a green En: every mouse that dances is green LP: ∀?m ( (mouse(?m) ∧ ∃?d dancing(?d) ∧ agent(?d,?m)) => (∃?g green(?g) ∧ color(?m,?g)) ) //LP: ∀?m ( dancing_mouse(?m) ∧ (∃?g green(?g) ∧ color(?m,?g)) ) FL-DF: dancing_mouse --type _[any ?dm ^-> .]--> mouse | |---agent of _[?dm ^-> a]--> dancing //^dm -> dancing_mouse |---color _[every -> a]--> green FL-DF: mouse --agent of _[any ^dm ^-> a]--> dancing //^dm -> dancing_mouse |---color _[every ^dm -> a]--> green //every ^dm is green FLnc: every ^(mouse agent of: a dancing) color: a green //these last 3 FL-DF and FL phrases can be read in the same way: // every mouse that is agent of a dancing has for color a green //the FL-DF phrases can also be read: // every dancing_mouse -- defined as a mouse that is agent of a dancing -- // has for color a green
Différentes phrases représentant la même chose :
En: The cat Tom and at least 2 mice are dancing together. Every green mouse is (constantly) dancing. LP: //with "at least 1 mouse": ∃?d ∃?m dancing(?d) ∧ mouse(?m) ∧ cat(Tom) ∧ agent(?d,Tom) ∧ agent(?d,?m) ∀?m ∃?d green-mouse(?m) ∧ dancing(?d) ∧ agent(?d,?m) FL-DF: dancing <--agent of _[. -> a ?d]-- Tom <--instance-- cat |---agent _[?d -> 2..*]--> mouse |---agent _[a <- every]--> green_mouse --type _[any ?gm ^-> .]--> mouse |---color _[?gm ^-> a]--> green FL-DF: dancing --agent _[a ?d <- 1]--> Tom <--instance-- cat |---agent _[?d <- 2..*]--> mouse |---agent _[a <- every ^gm]--> mouse --color _[any ^gm ^-> a]--> green FL-DF: dancing --agent _[a ?d <- .]--> the cat Tom |---agent _[?d <- 2..*] _[a <- every ^gm]--> mouse --color _[any ^gm ^-> a]--> green FL-DF: 2..* mouse <--agent-- a dancing --agent--> the cat Tom green <--color _[a <-^ any ^gm]-- mouse --agent _[every ^gm -> a]--> dancing FLc: dancing agent _[a ?d <- .]: (Tom instance of: cat), agent _[?d -> 2..*]: mouse, //or: _[?d <- 2..*] agent _[a <- every]: (green_mouse = ^(mouse color: a green)); FLc: dancing agent: the cat Tom __[a ?d <- .], agent: mouse __[?d<-2..*], agent: ^(mouse color: a green) __[a <- every]; FLnc: the cat Tom agent of: (a dancing agent: 2..* mouse); every ^(mouse color: a green) agent of: a dancing;
Ci-après, 3 exemples de "phrases affirmées" équivalentes, en
En [English], en LP (logique des prédicats en notation de Peano) et
dans les LRCs
CGLF (Conceptual Graph Linear Form), FE (Formalized English),
FCG (Frame/For Conceptual Graph), FL (For Links),
N3 (Notation 3),
KIF (Knowledge Interchange Format) et R+O/X (RDF+OWL linéarisé avec XML).
Ces exemples permettent d'illustrer et d'expliquer oralement l'usage de
quantificateurs et de définitions,
ainsi que plusieurs notions liées aux "relations sémantiques
(entre "noeuds conceptuels/sémantiques").
La notion de "relation sémantique" est précisée plus tard.
Si vous souhaitez d'autres exemples, cliquez ici.
Les parties en italique sont optionelles (elles ne sont utilisées que pour la lisibilité).
Également pour une question de lisibilité, les sources des termes et des
phrases ne sont pas précisées
sauf pour le terme pm#blue_man et les termes venant de OWL ou de RDF.
1) En : Tom -- who is a man -- owns a red hat and a bird. LP : ∃?h hat(?h) ∧ ∃?r red(?r) ∧ ∃?b bird(?b) ∧ man(Tom) ∧ owner(?h,Tom) ∧ color(?h,?r) ∧ owner(?b,Tom). CGLF: [man: Tom]- { <-(owner: *)<-[hat: *]->(color)->[red: *]; <-(owner)<-[bird] }. FCG: [the man Tom, owner of: (a hat, color: a red), is owner of: a bird]; FCG: [Tom, type: man, owner of: (a hat, color: a red) (at least 1 bird)]; FE : The man Tom is owner of a hat with color a red, and is owner of a bird. FE : The man Tom is owner of a hat that has for color a red, and is owner of a bird. FLnc: Tom type: man, owner of: a ^(hat color: a red) a bird; N3 : [a hat; color [a red]] owner [Tom a man; owner_of [a bird]]. N3 : a hat; color [a red]; owner [Tom a man; owner_of [a bird]]. N3 : [:h rdf:type hat] color [a red]; owner [Tom a man; owner_of [a bird]]. KIF: (exists ((?h hat)(?r red)(?b bird)) (and (type Tom man) (owner ?h Tom) (color ?h ?r) (owner ?b Tom))) R+O/X: <hat> <color><red/></color> <owner> <man rdf:ID="Tom"><owner_of><bird/></owner_of> </man> </owner> </hat> <owl:ObjectProperty rdf:ID="owner_of"><owl:inverseOf rdf:resource="owner"/> </owl:ObjectProperty>
2) En : (It appears that) all birds fly in the same sky. //-> observation/belief (can be false) LP : ∃?s ∀?b ∃?f sky(?s) ∧ bird(?b) ∧ flight(?f) ∧ agent(?f,?b) ∧ place(?b,?s) CGLF: [proposition: [sky:*s] [proposition: [sky:*s]<-(place)<-[bird: @forall]<-(agent)<-[flight] ] ]. FCG: [a sky, place of: every ^(bird, agent of: a flight)]; FE : There is a sky that is place of every `bird that is agent of a flight´. FLnc: a sky place of: every ^(bird agent of: a flight); N3 : @forSome :s . @forAll :b . { [:s a sky] [:b a bird] } => {:b agent of a flight}. KIF: (exists ((?s sky)) (forall ((?b bird)) (exists ((?f flight)) (and (agent ?f ?b) (place ?b ?s))))) 3) En : By definition of the term "bird" by pm, birds fly. //definition -> cannot be false CGLF: pm#bird (*x) :=> [pm#bird: *x]<-(agent)<-[flight]. FCG: [any pm#bird, agent of: a flight]; FE : any pm#bird is agent of a flight. FLc : pm#bird agent of _[any->1..*]: flight; FLc : pm#bird agent of: flight __[any->1..*]; FLnc: pm#bird agent of: 1..* flight; N3 : pm:bird rdfs:subClassOf [a owl:restriction; agent of a flight]. //note: owl#restriction does not have a normal semantics: it is // an anonymous type when used as destination of a relation // between types (e.g., rdfs:subClassOf or owl#equal) // and otherwise it refers to "any" instance of this type KIF: (defconcept pm#bird (?b) :=> (exists ((?f flight)) (agent ?f ?b))) R+O/X: <owl:Class rdf:about="±bird"> <rdfs:subClassOf> <owl:restriction><agent_of><flight/></agent_of> </owl:restriction> </rdfs:subClassOf> </owl:Class> <owl:ObjectProperty rdf:ID="agent_of"><owl:inverseOf rdf:resource="agent"/> </owl:ObjectProperty>
Voici, en FL et en FL-DF ("DF": "Display Form"), l'union des 3 exemples précédents en supposant que dans les 2 premiers exemples "bird" réfère à pm#bird :
En: Tom -- a man -- owns a red hat and a pm#bird. (It appears that) all pm#bird fly in the same sky. By definition of the term "bird" by pm, birds fly. FL: Tom instance of: man, //in this page, "intance of" is used instead of "type" owner of: (a hat color: a red), owner of: a (pm#bird place: sky __[every<-a], agent of: a flight //implicitly: _[any->a] ); FL-DF: man --instance--> Tom <--owner-- a hat --color--> a red ^ a pm#bird --owner--| ^ |--instance-- pm#bird --place _[every<-a]--> sky |--agent _[any->a]--> flight FL-DF: /-> the man Tom <--owner-- a hat --color--> a red /--owner _[.<-a]-- pm#bird --place _[every<-a]--> sky |--agent _[any->a]--> flight
Multiplicité (d'une relation entre des types): spécifications
indiquant le nombre possible de relations entre des instances anonymes de ces types.
Par abus de langage, une multiplicité est plus souvent appelée
"cardinalité", mais une
cardinalité est en réalité
le nombre de relations du même type entre des
instances de types. Voici quelques exemples:
- dans "any bird is agent of a flight",
la multiplicité est "any -> 1..*"
(ou "any -> a" ou, en raccourci, "a").
- dans "every man has for part 0..* leg", la multiplicité est "every -> 0..*"
(ou, en raccourci, "0..*").
- dans "Philippe_Martin has for part 2 leg", la cardinalité est
"any -> 2" (ou, en raccourci, "2").
Note: le noeud source de la relation doit comporter un quantificateur universel ou
l'indication d'une définition (en FE/FL/FCG, il s'agit respectivement
de "every" et "any").
Dans "2 bird have for part a wing", il n'y a pas
de multiplicité puisque pour "part", on n'a pas "any->2" mais
"2->a" (ici "2" est un quantificateur numérique).
Dans les logiques de description
(et donc dans OWL), les multiplicités peuvent être
représentées mais pas les (autres) quantificateurs numériques.
De manière similaire, OWL et la plupart des logiques de description
permettent de définir des types ("classes" en RDFS) mais ne possèdent
pas de quantificateur universel (ces logiques obligent donc à utiliser des
définitions pour représenter des observations, ce qui est parfois
problématique).
Ci-dessous, 2 exemples en En, FE, FCG et N3. En : By definition, any man owns 2 hats. //définition certes fort peu commune FE : any man is owner of 2 hat. FCG: [any man, owner of: 2 hat]; N3 : owner_of owl:inverseOf owner; owner_of_2_hats owl:equivalentClass [a owl:Restriction; owl:onProperty owner_of owl:cardinality 2; owl:allValuesFrom hat]. man rdfs:subClassOf owner_of_2_hats. En : there are two men who own a hat. FE : 2 man are owner of a hat. FCG: [2 man, owner of: a hat]; N3 : a man owner_of [a hat]; different_from [a man owner_of [a hat]]. N3 : two_men a set; size 2. @forAll :m . { :m a man; is member of two_men } => { :m owner_of [a hat] }.
Exercice de contrôle (après réponse aux questions
éventuelles des étudiants):
représenter en En, FE, FCG et N3 les 3 phrases suivantes
et dire s'il est possible de les représenter en utilisant OWL:
- apparemment, tout oiseau a 2 ailes.
- par définition, tout oiseau a 2 ailes.
- 2 oiseaux volent.
//solution en N3 pour la 2ème phrase: N3: wing_part rdfs:subPropertyOf part; rdfs:range wing. bird rdfs:subClassOf [a owl:Restriction; owl:onProperty wing_part owl:cardinality 2; owl:allValuesFrom bird].
Représentez dans le LRC que vous souhaitez
– après l'avoir précisé – et en respectant les règles
de modélisation données en cours, la phrase
"If a student S does not ask a teacher about a point P at a time T, this is because
he (S) has understood this point before T or he does not want to learn P".
Notes :
- pour représenter le "or", utilisez une relation de type "or" entre 2 phrases,
- rappelez vous qu'une relation est une phrase,
- en FL, 14 relations (dont 2 relations de type "time") suffisent pour la
représentation demandée (→ 3 à 5 lignes);
vous avez déjà vu plusieurs fois en cours
les autres relations nécessaires.
Représentez dans le LRC que vous souhaitez
-- après l'avoir précisé -- et en respectant les règles
de modélisation données en cours, la phrase
"Having read the E5_course is sufficient for a student to represent this phrase".
Notes :
- la solution à cet exercice ressemble
à celle pour l'exercice précédent
(avec 2 lignes au lieu de 4 ou 5),
- en FL, 4 relations suffisent pour la représentation demandée.