Current strategy to make a taxon subset:
- Add axiom Thing subClassOf part-of some NCBITaxon:nnnn
- Remove any inter-species existentials
- homology represented as reciprocal existentials
- inter-species edges (less relevant for uberon)
- Ensure all TCs are EL-ified
- never_in becomes disjointWith in-taxon some X
- Ensure NCBITaxon GCIs are added (in-taxon some X disjoint with in-taxon some Y for all sibs)
- Reason with Elk
- Eliminate all unsatisfiables
Note this has issues if we have:
- A subclass part-of some B
- B never-in-taxon
See
geneontology/go-annotation#3942
@balhoff says he has a solution
Some additional issues with the approach
- hard to mentally reason over - logic is separated across ad-hoc filters on OPs, various pre-processing steps, property chains stored centrally in GO
- Can require 10s of gigs of memory
- this gets worse the further away from human we go
- Hard to 'customize'. E.g. GO may want to include occurs_in when making their subsets
Outline alternative strategies in this ticket