import gradio as gr # ------------------------------- # Knowledge Base # ------------------------------- facts = [] rules = [] # ------------------------------- # Functions # ------------------------------- def add_fact(fact): fact = fact.strip() if fact: facts.append(fact) return f"✅ Fact added: {fact}" return "⚠️ Please enter a valid fact" def add_rule(rule): rule = rule.strip() if rule: rules.append(rule) return f"✅ Rule added: {rule}" return "⚠️ Please enter a valid rule" def infer(query): query = query.strip() # Direct fact check if query in facts: return "✅ TRUE (Found in facts)" # Rule-based inference for rule in rules: if "->" in rule: left, right = rule.split("->") left = left.strip() right = right.strip() for fact in facts: if "(" in fact: name = fact.split("(")[1].replace(")", "") if left.replace("x", name) == fact: if right.replace("x", name) == query: return "✅ TRUE (Derived using rule)" return "❌ FALSE (Not proven)" # ------------------------------- # UI Functions # ------------------------------- def ui_add_fact(fact): return add_fact(fact) def ui_add_rule(rule): return add_rule(rule) def ui_query(query): return infer(query) # ------------------------------- # Gradio UI (HCI Friendly) # ------------------------------- with gr.Blocks(theme=gr.themes.Soft()) as app: gr.Markdown("# 🧠 Predicate Logic Simulator") gr.Markdown("Add facts, rules, and test queries easily") with gr.Tab("➕ Add Fact"): fact_input = gr.Textbox(label="Enter Fact (e.g., Human(Socrates))") fact_output = gr.Textbox(label="Output") fact_btn = gr.Button("Add Fact") fact_btn.click(ui_add_fact, inputs=fact_input, outputs=fact_output) with gr.Tab("📜 Add Rule"): rule_input = gr.Textbox(label="Enter Rule (e.g., Human(x) -> Mortal(x))") rule_output = gr.Textbox(label="Output") rule_btn = gr.Button("Add Rule") rule_btn.click(ui_add_rule, inputs=rule_input, outputs=rule_output) with gr.Tab("🔍 Query"): query_input = gr.Textbox(label="Enter Query (e.g., Mortal(Socrates))") query_output = gr.Textbox(label="Result") query_btn = gr.Button("Check") query_btn.click(ui_query, inputs=query_input, outputs=query_output) # ------------------------------- # Launch App # ------------------------------- app.launch()