PM test2 {
  User pm {name:"Philippe Martin"   password:"!@#$%^*"} 

  Name "pm#thing" {s:"thing"  nameSpace:User pm}
  Name "object" {s:"object" nameSpace:User pm}

  CType thing {identifier:Name "pm#thing"  name:Name "object" creator:User pm
               subtypePartition:isClosed SubtypePartition{
                 subtype:CType situation subtype:CType entity} }
    CType situation { sourceOf:Supertype{dest:CType thing } }
      CType state { sourceOf:Supertype{dest:CType situation} }
        CType liking { sourceOf:Supertype{dest:CType state} }
        CType health { sourceOf:Supertype{dest:CType state} }
      CType process { sourceOf:Supertype{dest:CType situation} }
        CType approval { sourceOf:Supertype{dest:CType process} }
        CType flight { sourceOf:Supertype{dest:CType process} }
        CType run { sourceOf:Supertype{dest:CType process} }
    CType entity { sourceOf:Supertype{dest:CType thing } }
      CType spatial_entity { sourceOf:Supertype{dest:CType entity } }
        CType physical_entity { sourceOf:Supertype{dest:CType spatial_entity}}
          CType liveable_entity { sourceOf:Supertype{dest:CType physical_entity}}
            CType animal { sourceOf:Supertype{dest:CType liveable_entity}}
              CType bird { sourceOf:Supertype{dest:CType animal} }
              CType mammal { sourceOf:Supertype{dest:CType animal} }
                CType cat { sourceOf:Supertype{dest:CType mammal} }
                CType dog { sourceOf:Supertype{dest:CType mammal} }
                  Indiv Snoopy { sourceOf:InstanceOf{dest:CType dog} }
                CType person { sourceOf:Supertype{dest:CType mammal} }
                  Indiv Tom { sourceOf:InstanceOf{dest:CType person} }
                  Indiv Mary{ sourceOf:InstanceOf{dest:CType person} }
                  Indiv PhM { sourceOf:InstanceOf{dest:CType person}
                               representationOf: User pm }
                  CType parent{ sourceOf:Supertype{dest:CType person} }
                  CType judge { sourceOf:Supertype{dest:CType person} }
          CType non_living_entity{sourceOf:Supertype{dest:CType physical_entity}}
            CType body_part { sourceOf:Supertype{dest:CType non_living_entity}}
              CType head { sourceOf:Supertype{dest:CType body_part}}
            CType artifact {sourceOf:Supertype{dest:CType non_living_entity}}
              CType car { sourceOf:Supertype{dest:CType artifact}}
      CType non_spatial_entity { sourceOf:Supertype{dest:CType entity}
                                 sourceOf:Exclusion{dest:CType spatial_entity}}
        CType collection { sourceOf:Supertype{dest:CType non_spatial_entity}}
          CType class { sourceOf:Supertype{dest:CType collection}}
            CType transitive_binary_relation_type
                      { sourceOf:Supertype{dest:CType class}}
        CType information { sourceOf:Supertype{dest:CType non_spatial_entity}}
          CType description { sourceOf:Supertype{dest:CType information } }
            CType statement { sourceOf:Supertype{dest:CType description } }
            CType law { sourceOf:Supertype{dest:CType description } }
            CType opera { sourceOf:Supertype{dest:CType description } }
              CType Da_Ponte_opera_of_Mozart{sourceOf:Supertype{dest:CType opera}}
                CType Le_Nozze_di_Figaro
                        {sourceOf:Supertype{dest:CType Da_Ponte_opera_of_Mozart}}
                CType Don_Giovanni
                        {sourceOf:Supertype{dest:CType Da_Ponte_opera_of_Mozart}}
                CType Cosi_fan_tutte
                        {sourceOf:Supertype{dest:CType Da_Ponte_opera_of_Mozart}}
          CType descr_container { sourceOf:Supertype{dest:CType information } }
            CType document_element{sourceOf:Supertype{dest:CType descr_container}}
        CType attribute_or_measure{sourceOf:
                                   Supertype{dest:CType non_spatial_entity}}
          CType time_measure{sourceOf:Supertype{dest:CType attribute_or_measure}}
            CType "minute" {sourceOf:Supertype{dest:CType time_measure}}
            CType "year" {sourceOf:Supertype{dest:CType time_measure}}
          CType phys_measure{sourceOf:Supertype{dest:CType attribute_or_measure}}
            CType weight {sourceOf:Supertype{dest:CType phys_measure}}
              CType kg {sourceOf:Supertype{dest:CType weight}}
            CType color {sourceOf:Supertype{dest:CType phys_measure}}
              CType red {sourceOf:Supertype{dest:CType color}}
              CType orange {sourceOf:Supertype{dest:CType color}}
              CType yellow {sourceOf:Supertype{dest:CType color}}
          CType psy_measure{sourceOf:Supertype{dest:CType attribute_or_measure}}
            CType happiness { sourceOf:Supertype{dest:CType psy_measure}}

  RType binary_rel {}
    RType rel_from_situation { sourceOf:Supertype{dest:RType binary_rel}
                               domain:situation }
      RType time { sourceOf:Supertype{dest:RType rel_from_situation}
                   range:time_measure }
      RType duration { sourceOf:Supertype{dest:RType rel_from_situation}
                       range:time_measure }
      RType agent { sourceOf:Supertype{dest:RType rel_from_situation} }
      RType object { sourceOf:Supertype{dest:RType rel_from_situation} }
      RType experiencer { sourceOf:Supertype{dest:RType rel_from_situation} }
    RType rel_from_statement { sourceOf:Supertype{dest:RType binary_rel}
                               domain:statement }
      RType believer { sourceOf:Supertype{dest:RType rel_from_statement}
                       range: person }
    RType owner { sourceOf:Supertype{dest:RType binary_rel} range:person }
    RType part { sourceOf:Supertype{dest:RType binary_rel} }
    RType different_from { sourceOf:Supertype{dest:RType binary_rel} }
    RType equal { sourceOf:Supertype{dest:RType binary_rel} }
    RType implies { sourceOf:Supertype{dest:RType binary_rel} } //KR



  Assertion { text:"[Tom, owner of: (a dog != Snoopy)]"  embeddedNode1:
    TNode{term:Tom sourceOf:
      Relation{rType:owner dest: QNode{cType:dog sourceOf:
        Relation {rType: different_from dest: TNode{term:Snoopy} }}}}}


  Assertion {
    text:"[Tom,believer of:[*p [Mary,agent of:(a liking,object:Tom)],time:2003],
               believer of:[!*p,before:2003] ]"   embeddedNode1:
      TNode {term:Tom 
        sourceOf:isReversed Relation{rType:believer dest:
          ENode {embeddedNode1: ENode p {embeddedNode1:
                   TNode{term:Mary sourceOf:isReversed
                     Relation{rType:agent dest: QNode{cType:liking sourceOf:
                       Relation{rType:object dest: TNode{term:Tom} }}}}}
                 sourceOf:Relation{rType:time dest: QNode{
                            cType:"year" quantifier: Quantifier{num:"2003"}}}}}
        sourceOf:isReversed Relation{rType:believer dest:
          ENode {embeddedNode1: isNegated ENode {embeddedNode1Ref: p}
                 sourceOf: Relation{rType:before dest:
                 QNode{cType:"year" quantifier: Quantifier{num:"2003"}}}}}}}


  Assertion { text:"[any animal, part: 1 head]"  embeddedNode1:
       QNode {cType:animal quantifier: Quantifier {kind:any}
         sourceOf: Relation {rType:part dest:
           QNode {cType:head quantifier: Quantifier {num:"1"}}}}}


  Assertion { text:"[at least 85% of bird, can be agent of: a flight]"
    embeddedNode1:
      QNode {cType:bird quantifier: Quantifier{kind:percentage num:"85"}
        sourceOf: Relation {rType:agent  modality:"can"
          dest: QNode {cType: flight} }}}


  Assertion { text:"[at least 93% of (bird, experiencer of: a good health),
                     is agent of: a flight]"
    embeddedNode1: LNode { 
      embeddedNode1: QNode {cType:bird
                            quantifier: Quantifier{kind:percentage num:"93"}
                            sourceOf: isReversed Relation {rType:experiencer
                                dest: QNode {cType: health  qualifier:good}}}
      sourceOf: Relation {rType:agent dest: QNode {cType: flight}} }}


  Assertion { text:"[Tom, owner of: a !car]"  embeddedNode1:
    TNode {term:Tom  sourceOf:isReversed Relation{rType:owner dest:
                                      isNegatedType QNode{cType:car}}}}


  Assertion {
    text:"[Tom, owner of: (a car, color: OR{a red, a yellow, an orange})]"
    embeddedNode1: TNode {term:Tom 
        sourceOf:isReversed Relation{rType:owner dest:
          QNode{cType:car sourceOf: Relation{rType:color dest:
            NodeCollection{aggregation:or collElt:QNode{cType:red}
              collElt:QNode{cType:yellow} collElt:QNode{cType:orange}}}}}}}


  Assertion { text:"[9 judges, agent of: (an approval, object: 50 laws)]"
    embeddedNode1:
      QNode{cType:judge quantifier:Quantifier{num:"9"}
        sourceOf:isReversed Relation{rType:agent dest:
          QNode{cType:approval sourceOf: Relation{rType:object dest:
            QNode{cType:judge quantifier:Quantifier{num:"50"}}}}}}}


  Assertion { text:"[a car, weight: 923.5 kg]"  embeddedNode1:
    QNode{cType:car  sourceOf:Relation{rType:weight dest:
          QNode{cType:kg quantifier:Quantifier{num:"923.5"}}}}}


  Assertion { 
    text:"[2 to 3 persons, agent of: (a run, duration: 45 to 60 minute)]"
    embeddedNode1:
      QNode{cType:person quantifier:Quantifier{num:"2" toNumber:"3"}
        sourceOf:isReversed Relation{rType:agent dest:
          QNode{cType:run sourceOf:Relation{rType:duration dest:
            QNode{cType:"minute" quantifier:Quantifier{num:"45.5" toNumber:"60"}}}}}}}


  Assertion { text:"[type transitive_binary_relation_type (*rt) :=
                      [ [^x, *rt: (^y, *rt: ^z)] => [^x, *rt: ^z] ]]"
    embeddedNode1:
      Definition {dType:MetaType transitive_binary_relation_type
                   kind:NSC  parameter:("rt") embeddedNode1:ENode {
        embeddedNode1:
          QNode {var:"x" sourceOf:Relation{var:"rt" dest:
            QNode{var:"y" sourceOf:Relation{var:"rt" dest:QNode{var:"z"}}}}}
        sourceOf: Relation {rType:"implies" dest: ENode {embeddedNode1:
          QNode {var:"x" sourceOf:Relation{var:"rt" dest:QNode{var:"z"}}}}}}}}


  Assertion { text:"[type wn#person (*x) :=> [*x, pm#parent: a wn#person] ](pm)"
    embeddedNode1:
      Definition { creator: User pm
        dType:CType person  kind:NC  parameter:("x")
        embeddedNode1: QNode {var:"x" sourceOf:Relation{rType:parent
          dest: QNode {cType:person} }}}}


  Assertion {
    text:"[a pm#Da_Ponte_opera_of_Mozart,
             = OR{pm#Le_Nozze_di_Figaro,pm#Don_Giovanni,pm#Cosi_fan_tutte}]"
    embeddedNode1:
      QNode{cType:Da_Ponte_opera_of_Mozart
        sourceOf: Relation{rType:equal dest:
          NodeCollection{aggregation:or
            collElt: TNode{term:Le_Nozze_di_Figaro}
            collElt: TNode{term:Don_Giovanni}
            collElt: TNode{term:Cosi_fan_tutte} }}}}

}
