;_______________________________________________________________________;
; P A Q U E T   D E T E C T I O N   S O U S   C L A S S E S   ;
;_______________________________________________________________________;
 
# sousclasse

$RIniT      
  SI
  Vrai(sousclassetest)
 ALORS
   PCategorieResultat(3)
   Oublie()

 
$RVerifiePur      
  SI
  Vrai(sousclassetest)
  Vrai(pur)                   ;deja montre que le reseau est pur;  
  Vrai(rpurtest)
  ALORS
   EstFaux(rpurtest)
   PDebutEnsemble()
   PReponseNumTexte(20)
   PFinEnsemble()
   
  
   
 $RVerifieNonPur  
  SI
  Vrai(sousclassetest)
  Faux(pur)
  Vrai(rpurtest)            ;deja montre que le reseau n'est pas pur;
  ALORS
    EstFaux(rpurtest)
    PDebutEnsemble() 
    PReponseNumTexte(21)
   PFinEnsemble()
    
$ RVerifieMachineEtats  
  SI
  Vrai(sousclassetest)
  Vrai(machineetattest) 
  Vrai(machineetat)
  ALORS                        ;deja montre que le reseau est une;
   EstFaux(machineetattest)    ; machine a etats;
   PDebutEnsemble()
   PReponseNumTexte(22)
   PFinEnsemble()
   
$ RVerifieNonMachine  
  SI
  Vrai(sousclassetest)
  Vrai(machineetattest)
  Faux(machineetat)             ;deja montre que le reseau;
  ALORS                         ;n'est pas une machine a etats;
   EstFaux(machineetattest)
   PDebutEnsemble()
   PReponseNumTexte(53)
   PFinEnsemble()
   
  $RVerifieGrapheEvenement
  SI
  Vrai(sousclassetest)
  Vrai(grapheevenementtest)
  Vrai(grapheevenement)               ;deja montre que le reseau; 
  ALORS                               ;est un graphe d'evenements;
   EstFaux(grapheevenementtest)
   PDebutEnsemble()
   PReponseNumTexte(25)
   PFinEnsemble()
 
$ RVerifieNonGrapheEvenement
  SI
  Vrai(sousclassetest)
  Vrai(grapheevenementtest)      ;deja montre que le reseau ;
  Faux(grapheevenement)          ;n'est pas un graphe d'evenements;
  ALORS
   EstFaux(grapheevenementtest)
   PDebutEnsemble()
   PReponseNumTexte(26)
   PFinEnsemble()
   
 $RVerifieChoixLibre
  SI
  Vrai(sousclassetest)
  Vrai(choixlibretest)     
  Vrai(choixlibre)
  ALORS                       ;deja montre que le reseau ;
   EstFaux(choixlibretest)    ;est a choix libre;
   PDebutEnsemble()
   PReponseNumTexte(28)
   PFinEnsemble()
  
 $RVerifieNonChoixLibre
  SI
  Vrai(sousclassetest)
  Vrai(choixlibretest) 
  Faux(choixlibre)            ;Cette regle evite de refaire les inferences;
  ALORS                       ;Quand on a deja montre que le reseau ;
   EstFaux(choixlibretest)    ;n'est pas a choix libre;
   PDebutEnsemble()
   PReponseNumTexte(29)
   PFinEnsemble()
   
$ RVerifieChoixLibreEtendu
  SI
  Vrai(sousclassetest)
  Vrai(choixlibreetendutest)  ;Cette regle evite de refaire les inferences;
  Vrai(choixlibreetendu)      ;Quand on a deja montre que le reseau ;
  ALORS                       ;est a choix libre etendu;
   EstFaux(choixlibreetendutest) 
   PDebutEnsemble()
   PReponseNumTexte(31)
   PFinEnsemble()
 
$ RVerifieNonChoixEtendu
  SI
  Vrai(sousclassetest)
  Vrai(ChoixLibreetendutest)  ;Cette regle evite de refaire les inferences;
  Faux(choixlibreetendu)      ;Quand on a deja montre que le reseau ;
  ALORS                       ;n'est pas a choix libre etendu;
   EstFaux(choixlibreetendutest)
   PDebutEnsemble()
   PReponseNumTexte(32)
   PFinEnsemble()
   
$ RVerifieGrapheSimple
  SI
  Vrai(sousclassetest)     ;Cette regle evite de refaire les inferences;
  Vrai(graphesimpletest)   ;Quand on a deja montre que le reseau ; 
  Vrai(graphesimple)       ;est un graphe simple;
  ALORS
   EstFaux(graphesimpletest)
   PDebutEnsemble()
   PReponseNumTexte(34)
   PFinEnsemble()


$ RVerifieNonGrapheSimple
  SI
  Vrai(sousclassetest)
  Vrai(graphesimpletest)     ;Cette regle evite de refaire les inferences;
  Faux(graphesimple)         ;Quand on a deja montre que le reseau ;
  ALORS                      ;n'est pas un graphe simple;
   EstFaux(graphesimpletest) 
   PDebutEnsemble()
   PReponseNumTexte(35)
   PFinEnsemble()
   
               
$ RPur
  SI
   (PourTous :p  RE(placetransition :p place) )
   RC(EnsDisjoint 11 Pre :p Post :p)
   Vrai(rpurtest)
   Vrai(sousclassetest)
  ALORS
   EstFaux(rpurtest)
   EstVrai(pur)
   PDebutEnsemble()
   PReponseNumTexte(20)
   PFinEnsemble()
   
 $ RNonPur1
  SI
   (PourTous :p  RE(placetransition :p place) )
   Vrai(sousclassetest)
   non RC(EnsDisjoint 11 Pre :p Post :p)
   Vrai(rpurtest)
  ALORS
   EstFaux(rpurtest)
   EstFaux(pur)
   PDebutEnsemble()
   PReponseNumTexte(21)
   PMiseEnEvidence(:p)
   PFinEnsemble()
   
$ RMachineEtat
  SI
   (PourTous :t  RE(placetransition :t transition) )
   Vrai(sousclassetest)
   Vrai(machineetattest) 
   VR(1 Pre :t) VR(1 Post :t)
  ALORS 
   EstVrai(machineetat)
   EstFaux(machineetattest)
   PDebutEnsemble()
   PReponseNumTexte(22)
   PMiseEnEvidence(:t)
   PFinEnsemble()
   
   
$ RNonMachineEtat1
  SI
   (Existe :v)
   (Existe :t)  RE(placetransition :t transition)
   Vrai(sousclassetest)
   Vrai(machineetattest) 
   VR(:v Pre :t) 
   Inf(2 :v)
  ALORS 
   EstFaux(machineetat) 
   EstFaux(machineetattest)
   PDebutEnsemble()
   PReponseNumTexte(23)
   PMiseEnEvidence(:t)
   PFinEnsemble()
   
  $ RNonMachineEtat2
  SI
   (Existe :v)
   (Existe :t)  RE(placetransition :t transition)
   Vrai(sousclassetest)
   Vrai(machineetattest) 
   VR(:v Post :t)
   Inf(2 :v)
  ALORS 
   EstFaux(machineetat) 
   EstFaux(machineetattest)
   PDebutEnsemble()
   PReponseNumTexte(24)
   PMiseEnEvidence(:t)
   PFinEnsemble()
 
$ RGrapheEvenement
  SI
   (PourTous :p  RE(placetransition :p place) )
   VR(1 Post :p) VR(1 Pre :p)
   Vrai(sousclassetest)
   Vrai(grapheevenementtest)
  ALORS
   EstVrai(grapheevenement)
   EstFaux(grapheevenementtest)
   PReponseNumTexte(25)
   PDebutEnsemble()
   PMiseEnEvidence(:p)
   PFinEnsemble()
  

$ RNonGrapheEvenement1
  SI
   (Existe :v)
   (Existe :p)  RE(placetransition :p place)
   VR(:v Pre :p)
   Inf(2 :v)
   Vrai(sousclassetest)
   Vrai(grapheevenementtest)
  ALORS
   EstFaux(grapheevenement)
   EstFaux(grapheevenementtest)
   PReponseNumTexte(26)
   PDebutEnsemble()
   PMiseEnEvidence(:p)
   PFinEnsemble()
  
$ RNonGrapheEvenement2
  SI
  (Existe :v)
   (Existe :p ) RE(placetransition :p place)
   VR(:v Post :p) Inf(2 :v)
   Vrai(sousclassetest)
   Vrai(grapheevenementtest)
  ALORS
   EstFaux(grapheevenement)
   EstFaux(grapheevenementtest)
   PReponseNumTexte(27)
   PDebutEnsemble()
   PMiseEnEvidence(:p)
   PFinEnsemble()
 

$ RChoixLibre
  SI
   (Existe :a)
   (PourTous :p  RX(Pre :p))
   (PourTous :v RE(valarc :a :v))
   Egal( :v 1)
   RXn(Pre :p)
   Vrai(sousclassetest)
   Vrai(choixlibretest)
   RE( arc :a arc)
  ALORS
   EstVrai(choixlibre) 
   EstFaux(choixlibretest)
   PDebutEnsemble()
   PReponseNumTexte(28)
   PFinEnsemble()
    
$ RNonChoixLibre1
  SI
   (PourTous :p  RX(Pre :p) )
   non RXn(Pre :p)
   Vrai(sousclassetest)
   Vrai(choixlibretest)
  ALORS
   EstFaux(choixlibre) 
   PDebutEnsemble()
   PReponseNumTexte(29)
   PMiseEnEvidence(:p)
   PFinEnsemble()
   EstFaux(choixlibretest)
   
 $ RNonChoixLibre2
  SI
  
   (Existe :v) (Existe :a)
   RE(valarc :a :v)
   non Egal( :v 1)
   Vrai(sousclassetest)
   Vrai(choixlibretest)
   
  Alors
  
   EstFaux(choixlibre)
   EstFaux(choixlibretest)
   PDebutEnsemble()
   PReponseNumTexte(30)
   PMiseEnEvidence(:v)
   PFinEnsemble()
  
$ RChoixLibreEtendu
  SI
   (PourTous :v   RE(valarc :a :v))
   (PourTous :p1  RX(Pre :p1   )                             )
   (PourTous :p2  RE(Pre :p1 :t) RE(Pre :p2 :t) Inf(:p1 :p2) )
   Egal( :v 1)
   RC(EnsEgal 11 Pre :p1 Pre :p2)
   Vrai(sousclassetest)
   Vrai(choixlibreetendutest)
  ALORS
   EstVrai(choixlibreetendu) 
   EstFaux(choixlibreetendutest)
   PDebutEnsemble()
   PReponseNumTexte(31)
   PFinEnsemble()


$ RNonChoixLibreEtendu1
  SI
   (PourTous :v   RE(valarc :a :v))
   (PourTous :p1  RX(Pre :p1   )                             )
   (PourTous :p2  RE(Pre :p1 :t) RE(Pre :p2 :t) Inf(:p1 :p2) )
   non Egal( :v 1)
   Vrai(sousclassetest)
   Vrai(choixlibreetendutest)
   RE( placetransition :p1 place)
   RE( placetransition :p2 place)
  ALORS
   EstFaux(choixlibreetendu) 
   EstFaux(choixlibreetendutest)
   PDebutEnsemble()
   PReponseNumTexte(32)
   PFinEnsemble()

$ RNonChoixLibreEtendu2
  SI
   (PourTous :p1  RX(Pre :p1   )                             )
   (PourTous :p2  RE(Pre :p1 :t) RE(Pre :p2 :t) Inf(:p1 :p2) )
   non RC(EnsEgal 11 Pre :p1 Pre :p2)
   Vrai(sousclassetest)
   Vrai(choixlibreetendutest)
  ALORS
   EstFaux(choixlibreetendu) 
   EstFaux(choixlibreetendutest)
   PDebutEnsemble() 
   PReponseNumTexte(33)
   PFinEnsemble()
   
$ RGrapheSimple
  SI
   (PourTous :p1  RX(Pre :p1    )                                   )
   (PourTous :p2  RE(Pre :p1 :t ) RE(Pre :p2 :t ) non Egal(:p1 :p2)
                  VR(:v1 Pre :p1) VR(:v2 Pre :p2)  InfEgal(:v1 :v2) )
   RC(EnsInclu 11 Pre :p1 Pre :p2)
   Vrai(graphesimpletest)
   Vrai(sousclassetest)
  ALORS 
   EstVrai(graphesimple)
   EstFaux(graphesimpletest)
   PDebutEnsemble()
   PReponseNumTexte(34)
   PFinEnsemble()
   
 $ RNonGrapheSimple
  SI
   (PourTous :p1  RX(Pre :p1    )                                   )
   (PourTous :p2  RE(Pre :p1 :t ) RE(Pre :p2 :t ) non Egal(:p1 :p2)
                  VR(:v1 Pre :p1) VR(:v2 Pre :p2)  InfEgal(:v1 :v2) )
   non RC(EnsInclu 11 Pre :p1 Pre :p2)
   Vrai(graphesimpletest)
   Vrai(sousclassetest)
  ALORS 
   EstVrai(graphesimple)
   EstFaux(graphesimpletest)
   PDebutEnsemble()
   PReponseNumTexte(35)
   PFinEnsemble()



$RIntersousclasse 
 SiPasAutre
  Vrai(sousclassetest)
 ALORS
 EstVrai(Interpreteur)
 RA(Reussite sousclasse vrai)
 Oublie()
