Skip to content

Instantly share code, notes, and snippets.

@gahrae
Created August 2, 2025 16:46
Show Gist options
  • Select an option

  • Save gahrae/63d53217bda168c7486f797aea64dbe6 to your computer and use it in GitHub Desktop.

Select an option

Save gahrae/63d53217bda168c7486f797aea64dbe6 to your computer and use it in GitHub Desktop.
Prolog program on the 1983 KFC murders
% Kentucky Fried Chicken Murders - Kilgore, Texas (1983)
% Comprehensive Prolog Knowledge Base for Case Analysis
%
% SOURCES:
% - Transcript from YouTube video: https://www.youtube.com/watch?v=_81kTZ0MxjI
% - Wikipedia: https://en.wikipedia.org/wiki/Kentucky_Fried_Chicken_murders
% ============================================================================
% CASE OVERVIEW
% ============================================================================
case(kfc_murders, kilgore_texas, september_23_1983).
case_type(kfc_murders, armed_robbery, mass_murder).
case_status(kfc_murders, solved, year_2005_2008).
unsolved_period(kfc_murders, twentytwo_years).
% ============================================================================
% VICTIMS
% ============================================================================
victim(mary_tyler, age_37, assistant_manager, female, employee).
victim(joey_johnson, age_20, cook, male, employee).
victim(opie_hughes, age_39, employee, female, mother_of_three).
victim(david_maxwell, age_20, customer, male, friend_of_joey).
victim(monty_landers, age_19, customer, male, friend_of_joey).
% Victim relationships
relationship(david_maxwell, joey_johnson, friend).
relationship(monty_landers, joey_johnson, friend).
relationship(david_maxwell, monty_landers, frat_brothers).
relationship(mary_tyler, kim_miller, mother_daughter).
relationship(mary_tyler, billy_tyler, married).
% Victim details
victim_detail(david_maxwell, married, pregnant_wife).
victim_detail(opie_hughes, mother, three_children).
victim_detail(mary_tyler, stepmother, billy_tyler_children).
% ============================================================================
% KEY PEOPLE
% ============================================================================
person(billy_tyler, male, mary_husband, stepfather).
person(kim_miller, female, mary_daughter, found_scene_disturbed).
person(leanne_raspberry, female, kfc_manager, worked_until_11pm).
person(star_powers, female, witness, heard_money_comment).
person(glenn_elliott, male, texas_ranger, lead_investigator).
person(george_keaney, male, fbi_agent, case_investigator).
% Family connections
family(mary_tyler, [tony, kim, bubba], biological_children).
family(billy_tyler, [denise, unnamed_child], children_from_previous_marriage).
% ============================================================================
% LOCATION DETAILS
% ============================================================================
location(kfc_restaurant, kilgore_texas, crime_scene_primary).
location(oil_field, county_road_232, execution_site).
location(rusk_county, texas, twelve_miles_from_kfc).
% Geographic details
distance(kfc_restaurant, oil_field, twelve_miles).
jurisdiction(kilgore, gregg_county, texas).
jurisdiction(oil_field, rusk_county, texas).
% ============================================================================
% TIMELINE OF EVENTS
% ============================================================================
timeline(september_23_1983, evening, before_closing, robbery_occurs).
timeline(september_23_1983, evening, closing_time, victims_abducted).
timeline(september_23_1983, late_evening, oil_field, victims_executed).
timeline(september_24_1983, morning, oil_field_worker, bodies_discovered).
timeline(september_24_1983, morning, kim_miller, restaurant_found_disturbed).
% Investigation timeline
investigation_timeline(year_1983, initial_investigation, multiple_suspects).
investigation_timeline(year_1990s, dna_testing_available, mankins_tested).
investigation_timeline(year_1993, grand_jury, mankins_indicted).
investigation_timeline(year_1999, advanced_dna_testing, mankins_cleared).
investigation_timeline(year_2005, cold_case_reopened, new_dna_analysis).
investigation_timeline(november_2005, arrests_made, hartsfield_pinkerton).
investigation_timeline(october_2007, pinkerton_plea, guilty_five_counts).
investigation_timeline(year_2008, hartsfield_trial, convicted_five_life_sentences).
investigation_timeline(may_2022, hartsfield_death, hemorrhagic_stroke).
% ============================================================================
% CRIME DETAILS
% ============================================================================
crime_type(armed_robbery).
crime_type(mass_murder).
crime_type(execution_style_killing).
crime_type(sexual_assault).
% Method of operation
modus_operandi(kfc_murders, armed_robbery, closing_time).
modus_operandi(kfc_murders, victim_abduction, transported_to_remote_location).
modus_operandi(kfc_murders, execution_style, shot_back_of_head).
modus_operandi(kfc_murders, sexual_assault, opie_hughes).
% Murder method details
murder_method(execution_style, shot_back_of_head).
victim_position(lying_on_stomachs, hands_under_heads).
location_arrangement(four_victims_in_row, one_victim_separate).
% Weapons used
weapon(caliber_38_pistol).
weapon(caliber_357_magnum).
weapon(possibly_third_weapon, different_bullet_types).
% Evidence of struggle
struggle_evidence(kfc_restaurant, blood_spatter, box_lid).
struggle_evidence(kfc_restaurant, scattered_items, restaurant_interior).
struggle_evidence(kfc_restaurant, money_taken, cash_registers).
% ============================================================================
% SUSPECTS AND INVESTIGATION
% ============================================================================
% Primary suspects (convicted)
suspect(darnell_hartsfield, primary, tyler_resident, age_at_arrest_44).
suspect(romeo_pinkerton, primary, accomplice, age_at_arrest_47).
% Early suspect (cleared)
suspect(james_earl_mankins_jr, cleared, son_of_state_representative, drug_dealer).
% Suspect relationships
relationship(darnell_hartsfield, romeo_pinkerton, cousins).
relationship(james_earl_mankins_jr, jimmy_mankins, father_son).
% Suspect criminal history
criminal_history(darnell_hartsfield, prior_convictions).
criminal_history(darnell_hartsfield, armed_robbery, tyler_grocery_store, three_days_after_kfc).
criminal_history(romeo_pinkerton, prison_record).
criminal_history(james_earl_mankins_jr, drug_dealer, known_to_police).
% Similar crime pattern
similar_crime(tyler_grocery_robbery, three_days_after_kfc, darnell_hartsfield).
crime_similarity(both_closing_time, both_armed_robbery, victims_made_to_lie_down).
% ============================================================================
% EVIDENCE
% ============================================================================
% Physical evidence
physical_evidence(fingernail, found_on_joey_johnson, initially_linked_to_mankins).
physical_evidence(blood_spatter, box_lid, high_velocity_pattern).
physical_evidence(blood_evidence, napkin, cast_off_pattern).
physical_evidence(bullet_evidence, multiple_calibers, at_least_two_weapons).
% DNA evidence
dna_evidence(fingernail, james_earl_mankins_jr, no_match, year_1990s_testing).
dna_evidence(blood_box, darnell_hartsfield, match, year_2005_testing).
dna_evidence(blood_napkin, romeo_pinkerton, match, year_2005_testing).
dna_evidence(semen_opie_hughes, unknown_third_person, no_match_any_suspect).
% Witness evidence
witness_evidence(star_powers, overheard_money_comment, two_thousand_dollars).
witness_evidence(star_powers, saw_two_men, behind_her_in_line).
% Circumstantial evidence
circumstantial_evidence(no_deposit_made, unusual_cash_amount).
circumstantial_evidence(friday_night, busy_period, more_cash_than_usual).
% ============================================================================
% LEGAL PROCEEDINGS
% ============================================================================
% James Earl Mankins Jr. case
legal_proceeding(year_1993, grand_jury_indictment, james_earl_mankins_jr).
legal_proceeding(year_1999, charges_dropped, dna_excluded_mankins).
legal_proceeding(year_1999, release_from_custody, after_six_months_jail).
% Hartsfield and Pinkerton cases
legal_proceeding(november_2005, arrest_and_charges, capital_murder).
legal_proceeding(year_2007, jury_selection, pinkerton_trial).
legal_proceeding(october_29_2007, pinkerton_plea_deal, five_life_sentences).
legal_proceeding(year_2008, hartsfield_trial, bryan_texas).
legal_proceeding(year_2008, hartsfield_conviction, five_consecutive_life_sentences).
legal_proceeding(february_4_2010, appeals_court, conviction_upheld).
% Venue changes
venue_change(hartsfield_trial, east_texas_to_bryan, pretrial_publicity).
% Current status
current_status(romeo_pinkerton, serving_sentence, james_v_allred_unit).
current_status(darnell_hartsfield, deceased, may_4_2022).
death_details(darnell_hartsfield, hemorrhagic_stroke, french_m_robertson_unit).
% ============================================================================
% UNSOLVED ASPECTS
% ============================================================================
unsolved_aspect(third_perpetrator, dna_evidence_unmatched).
unsolved_aspect(sexual_assault, opie_hughes_rapist_identity).
unsolved_aspect(accomplice_identity, neither_convicted_revealed).
% Theories about third person
theory(third_perpetrator_exists, dna_evidence_supports).
theory(third_person_rapist, separate_from_shooters).
theory(more_than_three_involved, complex_operation).
% ============================================================================
% INVESTIGATIVE TECHNIQUES USED
% ============================================================================
technique(fingerprint_analysis, year_1983_standard).
technique(blood_spatter_analysis, early_adoption).
technique(dna_testing, year_1990s_technology).
technique(advanced_dna_testing, year_2005_technology).
technique(polygraph_testing, multiple_suspects).
technique(informant_network, smith_county_jail).
technique(ballistics_analysis, multiple_weapons).
% ============================================================================
% MEDIA COVERAGE
% ============================================================================
media_coverage(cold_case_files, friday_night_ghosts, february_2022).
media_coverage(local_news, ongoing_coverage, year_1983_2008).
media_coverage(documentary, murder_case_transcript, detailed_analysis).
% ============================================================================
% USEFUL PREDICATES FOR CASE ANALYSIS
% ============================================================================
% Find all victims
all_victims(Victims) :-
findall(Name, victim(Name, _, _, _, _), Victims).
% Find all convicted perpetrators
convicted_perpetrators(Perpetrators) :-
findall(Name, (legal_proceeding(_, hartsfield_conviction, _), Name = darnell_hartsfield), Names1),
findall(Name, (legal_proceeding(_, pinkerton_plea_deal, _), Name = romeo_pinkerton), Names2),
append(Names1, Names2, Perpetrators).
% Check if case is fully solved
fully_solved :-
convicted_perpetrators(Convicted),
length(Convicted, N),
N >= 2,
\+ unsolved_aspect(_, _).
% Case is partially solved
partially_solved :-
convicted_perpetrators(Convicted),
length(Convicted, N),
N >= 1,
unsolved_aspect(_, _).
% Find evidence linking person to crime
evidence_links_person(Person, Evidence) :-
dna_evidence(Evidence, Person, match, _).
% Find cleared suspects
cleared_suspect(Person) :-
suspect(Person, cleared, _, _);
dna_evidence(_, Person, no_match, _).
% Find weapons used
weapons_used(Weapons) :-
findall(Weapon, weapon(Weapon), Weapons).
% Check if person has criminal history
has_criminal_history(Person) :-
criminal_history(Person, _).
% Find similar crimes
similar_crimes(Crimes) :-
findall(Crime, similar_crime(Crime, _, _), Crimes).
% Check execution style murder
execution_style_murder :-
murder_method(execution_style, _).
% Find witness testimony
witness_testimony(Witnesses) :-
findall(Witness, witness_evidence(Witness, _, _), Witnesses).
% Check for sexual assault
involves_sexual_assault :-
crime_type(sexual_assault).
% Find unsolved aspects
unsolved_elements(Elements) :-
findall(Aspect, unsolved_aspect(Aspect, _), Elements).
% Check if multiple perpetrators
multiple_perpetrators :-
convicted_perpetrators(Perpetrators),
length(Perpetrators, N),
N > 1.
% Find DNA evidence
dna_evidence_exists(Evidence) :-
findall(E, dna_evidence(E, _, _, _), Evidence).
% Check time period unsolved
years_unsolved(Years) :-
unsolved_period(kfc_murders, Years).
% Find family connections
family_of_victim(Victim, Family) :-
victim(Victim, _, _, _, _),
family(Victim, Family, _).
% Check if location is remote
remote_location(Location) :-
location(Location, county_road_232, execution_site).
% Find current status of perpetrators
perpetrator_status(Person, Status) :-
current_status(Person, Status, _).
% Find victim by age
victim_by_age(Name, Age) :-
victim(Name, Age, _, _, _).
% Find victims by role
victims_by_role(Role, Victims) :-
findall(Name, victim(Name, _, _, _, Role), Victims).
% Check if evidence matches suspect
evidence_matches_suspect(Evidence, Suspect) :-
dna_evidence(Evidence, Suspect, match, _).
% Find investigation techniques by era
techniques_by_era(Era, Techniques) :-
findall(Tech, technique(Tech, Era), Techniques).
% Check if crime involved robbery
involved_robbery :-
crime_type(armed_robbery).
% Find relationships between people
people_related(Person1, Person2, Relationship) :-
relationship(Person1, Person2, Relationship).
% Check weapon caliber used
weapon_caliber_used(Caliber) :-
weapon(Weapon),
atom_concat(caliber_, CaliberAtom, Weapon),
atom_concat(CaliberAtom, _, Caliber).
% Find timeline events by date
events_on_date(Date, Events) :-
findall(Event, timeline(Date, _, _, Event), Events).
% Check if suspect was convicted
suspect_convicted(Suspect) :-
convicted_perpetrators(Convicted),
member(Suspect, Converted).
% Find physical evidence types
physical_evidence_types(Types) :-
findall(Type, physical_evidence(Type, _, _), Types).
% Check modus operandi
case_modus_operandi(Case, MO) :-
modus_operandi(Case, MO, _).
% ============================================================================
% CASE ANALYSIS QUERIES
% ============================================================================
% Example queries for case analysis:
% ?- all_victims(X).
% ?- convicted_perpetrators(X).
% ?- fully_solved.
% ?- partially_solved.
% ?- unsolved_elements(X).
% ?- weapons_used(X).
% ?- years_unsolved(X).
% ?- multiple_perpetrators.
% ?- execution_style_murder.
% ?- involves_sexual_assault.
% ?- victim_by_age(Name, age_20).
% ?- evidence_matches_suspect(blood_box, darnell_hartsfield).
% ?- techniques_by_era(year_1990s_technology, X).
% ============================================================================
% NOTES AND OBSERVATIONS
% ============================================================================
% Key insights from the case:
% 1. Early forensic science (fingernail analysis) led to wrong suspect
% 2. DNA technology eventually solved the case after 22 years
% 3. Multiple perpetrators but third person never identified
% 4. Sexual assault component adds complexity
% 5. Similar crime pattern helped identify suspects
% 6. Case demonstrates evolution of forensic techniques
% 7. One perpetrator died before revealing third accomplice
% 8. Case remains partially unsolved due to unidentified third person
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment