Représentation de phrases

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).

  1. Représentez la phrase "Every car has at least a red wheel"
    (dans chacune des notations indiquées ci-dessous)
    FL without quantifCtxt:      
    FL with 2 quantifCtxts:      
    FL with Red first:       
    FL-DF with Car first:    
    FL-DF with Wheel first:  
                             
    FE:                      
    
    
  2. Représentez la phrase "There is a wheel shared by every car".
    FL without quantifCtxt:      
    FL with a quantifCtxt:       
    FL with Car first:       
    FL-DF with Wheel first:  
    FL-DF with Car first:    
    FE:                      
    
    
  3. Représentez la phrase "Every red car has at least a wheel".
    FL without quantifCtxt:      
    FL-DF with Car first:    
                             
    FE:                      
    
    
  4. 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:
    
    
    
  5. 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).

0.p.0. @@ Exemples d'introduction pour les RCs et les requêtes

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

0.m.0. @@ Règles de base pour la représentation de connaissances

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).

0.p.0. @@ 2nde suite d'exemples de RCs

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

0.p.0. @ Exemples de RCs

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;

0.p.0. Exemples de RCs

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>

0.p.0. Exemples de RCs

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="&pm;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>

0.p.0. @ Exemples de RCs

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

0.s.mult. Multiplicité, cardinalité

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].

0.s.contexte. Méta-phrases (contextes)

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.

Solution.


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.

Solution.