import streamlit as st from sat_parser import parse_sat from sat_to_3sat import convert_to_3sat from three_sat_to_clique import build_clique_graph from visualize import visualize_graph from examples import example_formulas st.set_page_config(layout="wide") st.title("Interactive Reduction Visualizer for NP-Complete Problems") st.markdown(""" This tool demonstrates: - SAT → 3-SAT - 3-SAT → CLIQUE """) formula = st.selectbox( "Choose example or write your own", example_formulas() + ["Custom"] ) if formula == "Custom": formula = st.text_input("Enter SAT formula:") if st.button("Run Reduction"): clauses = parse_sat(formula) st.subheader("SAT Clauses") st.write(clauses) clauses_3sat = convert_to_3sat(clauses) st.subheader("3-SAT Clauses") st.write(clauses_3sat) G = build_clique_graph(clauses_3sat) st.subheader("CLIQUE Graph") visualize_graph(G)