Spaces:
Sleeping
Sleeping
| 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() |