pure-validity / backends /prolog_backend.pl
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/pure-validity
56de343 verified
Raw
History Blame Contribute Delete
1.5 kB
% prolog_backend.pl — Topology checker
% Preservation, reachability, floating ports, conduction soundness
:- module(topology_checker, [
check_preservation/1,
check_reachability/3,
check_floating/1,
check_conduction/1
]).
% Preservation: state before → state after (invariant holds)
check_preservation(Kernel) :-
atom(Kernel),
\+ \+ (
state_before(S1),
execute_kernel(Kernel, S1, S2),
state_after(S2),
invariant_holds(S2)
).
% Reachability: can reach goal from start?
check_reachability(Graph, Start, Goal) :-
reachable(Graph, Start, Goal, []).
reachable(_, Goal, Goal, _) :- !.
reachable(Graph, Current, Goal, Visited) :-
edge(Graph, Current, Next),
\+ member(Next, Visited),
reachable(Graph, Next, Goal, [Current|Visited]).
% Floating ports: all ports connected or grounded
check_floating(Circuit) :-
forall(
port(Circuit, Port),
(connected(Port) ; grounded(Port))
).
% Conduction soundness: voltage transitions valid
check_conduction(Levels) :-
forall(
transition(Levels, From, To),
valid_transition(From, To)
).
valid_transition(low, high).
valid_transition(high, low).
valid_transition(X, X).
% Dynamic facts
:- dynamic state_before/1.
:- dynamic state_after/1.
:- dynamic invariant_holds/1.
:- dynamic edge/3.
:- dynamic port/2.
:- dynamic connected/1.
:- dynamic grounded/1.
:- dynamic transition/4.
% Stub implementations
execute_kernel(_, State, State).