class BaseDeConhecimento:
def init(self):
self.fatos = set()
self.regras = []
def adicionar_fato(self, fato):
self.fatos.add(fato)
def adicionar_regra(self, condicoes, conclusao):
# condicoes é uma lista de fatos necessários
# conclusao é o diagnóstico ou novo fato inferido
self.regras.append((condicoes, conclusao))
class SistemaEspecialista:
def init(self, base_conhecimento):
self.base = base_conhecimento
self.diagnosticos = []
def inferir(self):
mudou = True
while mudou:
mudou = False
for condicoes, conclusao in self.base.regras:
if all(c in self.base.fatos for c in condicoes) and conclusao not in self.base.fatos:
self.base.adicionar_fato(conclusao)
self.diagnosticos.append((condicoes, conclusao))
mudou = True
def mostrar_raciocinio(self):
for condicoes, conclusao in self.diagnosticos:
print(f"Se {', '.join(condicoes)}, então {conclusao}.")
base = BaseDeConhecimento()
base.adicionar_regra(["febre alta", "tosse"], "infecção respiratória")
base.adicionar_regra(["infecção respiratória", "dificuldade para respirar"], "pneumonia")
base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade para respirar")
sistema = SistemaEspecialista(base)
sistema.inferir()
print("Diagnósticos inferidos:")
print(base.fatos)
print("\nRaciocínio seguido:")
sistema.mostrar_raciocinio()