(define $Node Integer) (define $NodeInfo (type {[$var-match (lambda [$tgt] {tgt})] [$inductive-match (destructor {[node [Node (Multiset Node) (Multiset Node)] {[ {[n in out]}]}]})] [$= (lambda [$val $tgt] (match [val tgt] [NodeInfo NodeInfo] {[[ ] #t] [[_ _] #f]}))]})) (define $Graph (Multiset NodeInfo)) (define $hamilton-cycle (lambda [$g] (let {[$n (size g)]} (match-all g Graph [ _> (loop $l $i (between 3 n) _> l> _> _>)> [@(loop $l $i (between 1 n) {a_i @l} {})]])))) (define $hamilton-path (lambda [$g] (let {[$n (size g)]} (match-all g Graph [ _> (loop $l $i (between 3 n) _> l> >)> [@(loop $l $i (between 1 n) {a_i @l} {})]]))))