This document mixes HTML and 
   FL
   (a KRL, i.e., a Knowledge Representation Language; it is here used in the 
   preformatted text parts).
  It is an input+backup+presentation file for the
   Multi-Source Ontology (MSO).
  The MSO  i) aligns and extends several ontologies, and 
  ii) can be extended by Web users via the shared KB server
     WebKB-2 and its
     shared KB (knowledge base) editing protocols.
In this document, for supertype links,
 "/^" is used instead of the more common "<" symbol.
Similarly, for subtype links, "\." is used instead of the more common ">" symbol.
The ontology in this document is original.  Some content is added to it from time to time.
It is part of a set of complementary "ontologies on formal languages":
The goals, underlying ideas, conventions and content of these ontologies are explained and illustrated in this article.
Table of contents
    1.  Between a property AE and an RDF reified statement
    2.  Between frames and conjunctions of binary relations from a same source
    3.  Between binary relations and non-binary ones
    4.  Between a property AE and an RDF reified statement
In each rule below, ":-" means "<=" and
the AE in bold font is the AEs (partially) defined by the rule.
Each r_descr relation relates a Descr_content (thing) to an AE.
//Note: in FL, by default, variables prefixed by "%" are universally quantified
//  in their minimal context (e.g., a rule if they are in a rule)
[%prop /^^ Property  r_op: %op,
                     r_args: .[(%propSource  r_descr of: %describedPropSource)
                               (%propDest    r_descr of: %describedPropDest) ]
<=> [%prop  rdf#predicate: %op,  rdf#subject: %describedPropSource,
                                 rdf#object:  %describedPropDest ];
/* In RIF-BLD/RIF-PS:
  Forall ?prop  ?op   ?propSource ?describedPropSource  ?propDest ?describedPropDest  (
    ?prop[rdf:type Property   r_op->?op   r_args->List(?propSource ?propDest)]
    :- And (?prop [rdf:predicate->?op  rdf:subject->?describedPropSource
                                         rdf:object->?describedPropDest ] 
            ?describedPropSource[r_descr->?propSource]
            ?describedlPropDest[r_descr->?propDest] ) )
  Forall ?prop  ?op   ?propSource ?describedPropSource  ?propDest ?describedPropDest  (
    ?prop [rdf:predicate->?op  rdf:subject->?describedPropSource
                                 rdf:object->?describedPropDest ]
    :- And( ?prop[rdf:type Property  r_op->?op  r_args->List(?propSource ?propDest)]
            ?describedPropSource[r_descr->?propSource]
            ?describedlPropDest[r_descr->?propDest] ) )
*/
The next rule relates the structures of two AEs (%c and %f) that are
  description instruments of  something that is both a
  Thing_that_can_be_represented_via_binary-relations_from_a_same_source
  and a Thing_that_can_be_represented_via_a_frame.
  By default, in KRLO, these two types are related by an equivalence relation: see
  this Figure 4.2 of this article.
However, as explained in Section 3 of te same article, if the represented knowledge 
  has more expressiveness than OWL-RL and RIF-BLD, this equivalence is not (always) true.
  Hence, to get the translation results she wants, i.e., for the next rule to apply only
  to certain types of frames and certain types of conjunctions of binary relations from
  a same source, the end-user can modify this equivalence relation by specializing its
  source type or destination type, hence restricting them. She can also remove this
  equivalence or keep it and have more complete results even if they may not always
  be correct.
Note: alone, the next rule is not sufficient to correctly handle quantifiers around 
  the conjunction or the use of cardinality restrictions within the frame. This is 
  handled by other rules.
And{[%relSource = %f_head]
    [%halfProperties  r_half-property-item_matching_this_binary-relation: %binRel]
    [%binaryRelations r_binary-relation_item_matching_this_half-property: %halfProperty] }
<= [%t /^^ Thing_that_can_be_represented_via_binary-relations_from_a_same_source
           Thing_that_can_be_represented_via_a_frame,
       r_descr_instrument: (%c /^^ Conjunction_of_binary-relations_from_a_same_source,
                               r_args: (%binaryRelations  pred#list-contains:
                                           (%binRel r_1st_arg: %relSource) ) )
       r_descr_instrument: (%f /^^ Frame_as_non-token-phrase,  r_op: %f_head, 
                               r_args: (%halfProperties pred#list-contains: %halfProperty) ) ];
//With the following definitions:
  Thing_that_can_be_represented_via_a_frame 
    <=> Thing_that_can_be_represented_via_binary-relations_from_a_same_source;
  r_half-property-item_matching_this_binary-relation ~[?halfProperties, ?binRel]
     := [?halfProperties  pred:list-contains:
            (a thing ?halfProperty  r_op: (an Operator ?relType  r_op of: ?binRel),
                                    r_1st_arg: (a Relation_node ?relDest  r_2nd_arg of: ?binRel) ) ];
  r_binary-relation_item_matching_this_half-property ~[?binaryRelations, ?halfProperty]
     := [?binaryRelations  pred:list-contains:
            (a thing ?binRel  r_op: (an Operator ?relType  r_op of: ?halfProperty),
                              r_2ng_arg: (a Relation_node ?relDest  r_1st_arg of: ?halfProperty) ) ];
  [%at  r_1st_arg: %arg1]  <=>  [%at  r_args: List(%arg1 | %l)];
  [%at  r_2nd_arg: %arg2]  <=>  [%at  r_args: List(%arg1 %arg2 | %l)];
/* In RIF-BLD/RIF-PS:
  Forall ?t  ?c  ?binaryRelations  ?binRel    ?f  ?f_head  ?halfProperties  ?halfProperty  (
    And( ?relSource = ?f_head
         r_half-property-item_matching_this_binary-relation(?halfProperties ?binRel)
         r_binary-relation_item_matching_this_half-property(?binaryRelations ?halfProperty) )
    :- And( ?t[rdf:type->Thing_that_can_be_represented_via_binary-relations_from_a_same_source
               rdf:type->Thing_that_can_be_represented_via_a_frame
               r_descr_instrument->?c    r_descr_instrument->?f ]    
            ?c[rdf:type->Conjunction_of_binary-relations_from_a_same_source
               r_args->?binaryRelations ]  
            ?f[rdf:type->Frame_as_non-token-phrase    r_op->?f_head
                                                      r_args->?halfProperties ]
            External(pred:list-contains(?binaryRelations  ?binRel))
            ?binRel[r_1st_arg->?relSource]
            External(pred:list-contains(?halfProperties  ?halfProperty))  ) )
  
  
  //With the following definitions:
    Forall ?t (
      ?t[rdf:type->Thing_that_can_be_represented_via_a_frame]
       :- ?t[rdf:type->Thing_that_can_be_represented_via_binary-relations_from_a_same_source] )
    Forall ?t (
      ?t[rdf:type->Thing_that_can_be_represented_via_binary-relations_from_a_same_source]
       :- ?t[rdf:type->Thing_that_can_be_represented_via_a_frame] )
  
    Forall ?halfProperties  ?halfProperty   ?binRel  ?relType  ?relDest  (
      r_half-property-item_matching_this_binary-relation(?halfProperties ?binRel)
      :- And( External(pred:list-contains(?halfProperties  ?halfProperty))
              ?halfProperty[r_op->?relType    r_1st_arg->?relDest]
              ?binRel[r_op->?relType    r_2nd_arg->?relDest] )  )
  
    Forall ?binaryRelations  ?halfProperty  ?binRel  ?relType  ?relDest  (
      r_binary-relation_item_matching_this_half-property(?binaryRelations ?halfProperty)
      :- And( External(pred:list-contains(?binaryRelations  ?binRel)) 
              ?binRel[r_op->?relType    r_2nd_arg->?relDest] 
              ?halfProperty[r_op->?relType    r_1st_arg->?relDest] )  )
  
    Forall ?at  ?arg1 ?l ( ?at[r_1st_arg->?arg1]
      :-  ?at[r_args->List(?arg1 | ?l) ]  )
  
    Forall ?at  ?arg1 ?arg2 ?l ( ?at[r_2nd_arg->?arg2]
      :-  ?at[r_args->List(?arg1 ?arg2 | ?l) ]  )
*/
The next implication relates the structures of two AEs that are description instruments of
  something that is both 
  a Thing_that_can_be_represented_via_a_non-binary_relation and 
  a Thing_that_can_be_represented_via_a_binary_relation.
  By default, in KRLO, these two types are related by an equivalence relation
  (the next rule can be used for translations in both directions).
And{ [%binRelArg1 = %nbrArg1] [%binRelArg2 = %nbrArgsExcept1st] }
 <= [%t /^^ Thing_that_can_be_represented_via_a_non-binary_relation
            Thing_that_can_be_represented_via_a_binary_relation,
        r_descr_instrument: (%nonBinRel /^^ Non-binary_relation,
                                        r_args: List(%nbrArg1 | %nbrArgsExcept1st) ),
        r_descr_instrument: (%binRel /^^ Binary_relation,
                                     r_1st_arg: %binRelArg1, r_2nd_arg: %binRelArg2 ) ];
//With the following definitions:
  Thing_that_can_be_represented_via_a_non-binary_relation
    has_descr_instrument<=: a Non-binary_relation, //actually "=:", not just "<=:" but "=: a ..."
    <=> (Thing_that_can_be_represented_via_a_binary_relation,       // cannot be translated to RIF-BLD
          has_descr_instrument<=: a Binary_relation );              // without skolem functions
/* In RIF-BLD/RIF-PS:
Forall ?t ?binRel  ?binRelArg1  ?binRelArg2     ?nonBinRel  ?nbrArg1  ?nbrArgsExcept1st  (
  And ( ?binRelArg1 = ?nbrArg1      ?binRelArg2 = ?nbrArgsExcept1st )
  :-  And( ?t [rdf:type->Thing_that_can_be_represented_via_a_non-binary_relation
               rdf:type->Thing_that_can_be_represented_via_a_binary_relation
               r_descr_instrument->?nonBinRel     r_descr_instrument->?binRel ]
           ?binRel[rdf:type->Binary_relation  r_1st_arg->?binRelArg1 
                                              r_2nd_arg->?binRelArg2] 
           ?nonBinRel[rdf:type->Non-binary_relation 
                      r_args->List(?nbrArg1 | ?nbrArgsExcept1st) ] ) )
//With the following definitions:
  Forall ?t ?nbr (
  ?t[rdf:type->Thing_that_can_be_represented_via_a_non-binary_relation]
   :-  And ( ?t[has_descr_instrument->?nbr]  ?nbr[rdf:type->Non-binary_relation] ) )
  
  Forall ?t ?br (
    ?t[rdf:type->Thing_that_can_be_represented_via_a_binary_relation]
     :-  And ( ?t[has_descr_instrument->?nbr]  ?br[rdf:type->Binary_relation] ) )
  Forall ?t (
    ?t[rdf:type->Thing_that_can_be_represented_via_a_binary_relation]
     :- ?t[rdf:type->Thing_that_can_be_represented_via_a_non-binary_relation] )
*/
And{ [%fctArgs = %fRelArg1] [%fctResult = %fRelArgsExcept1st] }
 <= [%t /^^ Thing_that_can_be_represented_via_a_functional_relation
           Thing_that_can_be_represented_via_a_function,
        r_descr_instrument: (%fRel /^^ Functional_relation,   r_op: %fRelType,
                                   r_args: List(%fRelArg1 | %fRelArgsExcept1st) ),
        r_descr_instrument: (%fct  /^ Function,   r_op: %fctType,
                                   r_args: %fctArgs,  r_result: %fctResult ) ];
//With the following definitions:
  Thing_that_can_be_represented_via_a_functional_relation
    has_descr_instrument<=: a Functional_relation, //actually "=:", not just "<=:" but "=: a ..."
    <=> (Thing_that_can_be_represented_via_a_function,         // cannot be translated to RIF-BLD
          has_descr_instrument<=: a Function );                // without skolem functions
/* In RIF-BLD/RIF-PS:
Forall ?t  ?fct ?fctType ?fctArgs ?fctResult  ?fRel ?fRelType ?fRelArg1 ?fRelArgsExcept1st (
  And ( ?fctArgs = ?fRelArg1      ?fctResult = ?fRelArgsExcept1st )
  :- And( ?t [rdf:type->Thing_that_can_be_represented_via_a_functional_relation
              rdf:type->Thing_that_can_be_represented_via_a_function
              r_descr_instrument->?fct     r_descr_instrument->?fRel ]
          ?fRel[r_op->?fRelType  r_args->List(?fRelArg1 | ?fRelArgsExcept1st)]
          ?fct[r_op->?fctType    r_args->?fctArgs  r_result->?fctResult] ) )
           
//With the following definitions:
  Forall ?t ?fRel (
  ?t[rdf:type->Thing_that_can_be_represented_via_a_functional_relation]
   :-  And ( ?t[has_descr_instrument->?fRel]  ?fRel[rdf:type->Functional_relation] ) )
  
  Forall ?t ?fct (
    ?t[rdf:type->Thing_that_can_be_represented_via_a_function]
     :-  And ( ?t[has_descr_instrument->?fct]  ?fct[rdf:type->Function] ) )
  Forall ?t (
    ?t[rdf:type->Thing_that_can_be_represented_via_a_functional_relation]
     :- ?t[rdf:type->Thing_that_can_be_represented_via_a_function] )
  Forall ?t (
    ?t[rdf:type->Thing_that_can_be_represented_via_a_function]
     :- ?t[rdf:type->Thing_that_can_be_represented_via_a_functional_relation] )