Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Infer all missing part-of relations using rules or the GCI-materialize approach #2699

Open
cmungall opened this issue Oct 26, 2022 · 2 comments
Assignees
Labels

Comments

@cmungall
Copy link
Member

cmungall commented Oct 26, 2022

Example of a problem:

image

There should be a part-of between cingulum-of-molar and crown-of-molar (because a cingulum is part of a crown)

The existing part-of (which comes from relaxation) is correct but not specific enough.

@balhoff @dosumis @matentzn we have discussed strategies in the past for inferring part-of, going back to inferring the many part-ofs in GO BP (e.g. development of nose part-of development of head).

The strategy we have previously arrived on (but AFAIK not codified in a central place is)

  • Add GCIs to DPs
  • Use materialize in the release process

Note that materialize is necessary, and Protege will not directly show the entailments in a hierarchical view

I think the only ontology to have implemented this was OBA and TO, and the pipeline for the former may have changed.

UPDATE: currently trying this for GO

IMO this is quite a complex pattern to get your head around, involves coordinating a number of different pieces. It may work for ontologies like GO and OBA where we typically have simple edge inferences.

In uberon we want to recapitulate parallel structures in their entirety; the pieces should join-up via continuous-with, deep-to, proximal-to, drains, etc.

Previously in uberon I used prolog rules to infer these linkages, we could look at a datalog over dosdps approach

A single rule should cover all intra-pattern cases:

R(c,d) :-  
  R(c_generic, d_generic),
  P(c, c_generic, x...),
  P(d, d_generic, x...),
  propagates_over(R, P)

R is a TBox relationship, P is a pattern instance P(defined_class, genus, additional_args....)

the intuition here is that we are "cloning" a generic pair of classes that stand in some relationship like part-of. E.g. cingulum to crown

if the cloned pair has the same differentia then the original relation can be "copied"

propagates_over would be curated tuples - e.g. part-of would propagate over patterns that use part of or laterality as differentia

(note this also works for R=is_a, but we already have owl reasoning to do this)

we can see how this works by grounding 2nd order predicates for propagates_over(deep_to, intestinal_layer)

deep_to(c,d) :-  
  deep_to(c_generic, d_generic),
  intestinal_layer(c, c_generic, subdivision),
  intestinal_layer(d, d_generic, subdivision)

and an example grounding

deep_to(submucosa_of_stomach, submucosa_of_stomach) :-  
  deep_to(submucoa, mucosa),
  intestinal_layer(submucosa_of_stomach, submucoa, stomach),
  intestinal_layer(submucosa_of_stomach, mucoa, stomach)

in this was we can capture all superficial-deep relationships for all proximal-distal subdivisions.

we can also write custom rules for inter-pattern, but the above works as a generic rule

Parallel issues:

@dosumis
Copy link
Contributor

dosumis commented Feb 28, 2023

I prefer the GCI approach where possible as it is transparent to explanations and can be OWL reasoner driven. However, I'm finding it hard to see how to make this work here compared to the GO example, where it is easy to see how to achieve without any increase in pattern vars. @cmungall Can you sketch how this could work?

Copy link

This issue has not seen any activity in the past 6 months; it will be closed automatically one year from now if no action is taken.

@github-actions github-actions bot added the Stale label Dec 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants