-- Suspects based on a person being seen

create table SUSPECT_S as
select 
  PERSON.name as suspect, 
  CRIME.type as crime
from  SAWPERSON, WITNESS, CRIME, PERSON
where SAWPERSON.witness = WITNESS.name
  and CRIME.sector = WITNESS.sector 
  and PERSON.hair = SAWPERSON.hair
  and PERSON.clothes = SAWPERSON.clothes;

-- Suspects based on a car being seen

create table SUSPECT_D as 
select 
  DRIVES.person as suspect, 
  CRIME.type as crime
from  SAWCAR, WITNESS, CRIME, DRIVES
where SAWCAR.witness = WITNESS.name
  and WITNESS.sector = CRIME.sector
  and DRIVES.car = SAWCAR.car; 

-- High suspects with confidence filter

create table HIGH_SUSPECT as
select 
  SUSPECT_D.suspect,
  SUSPECT_D.crime
from SUSPECT_D, SUSPECT_S
where SUSPECT_D.suspect = SUSPECT_S.suspect 
  and SUSPECT_D.crime = SUSPECT_S.crime
  and conf(SUSPECT_D) >= 0.25;
  
-- Trace high suspects due to Susan by their lineage

select 
  suspect,
  crime
from HIGH_SUSPECT H, WITNESS W
where H ==> W
  and W.name = 'Susan';

-- Find accomplices

create table ACCOMPLICES as 
select distinct 
  S1.suspect as name1,
  S2.suspect as name2,
  s1.crime
from SUSPECT_D S1, SUSPECT_D S2
where S1.crime = S2.crime
  and S1.suspect < S2.suspect;
