predicatelogic / app.py
Ashiii01's picture
Create app.py
9d94f72 verified
Raw
History Blame Contribute Delete
2.7 kB
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()