Relational Virology

Fork me on GitHub

Quine: Self-Reproduction

[[Q]] = Q

(run 1 (q) (evalo q q))

Backdoored Self-Reproduction

(run 1 (q-fun) (absento 'x q-fun) (fresh (e) (== q-fun `(lambda (arg) ,e))) (evalo `(,q-fun 'x) `(,q-fun x)))
(run 1 (q-fun) (absento 'x q-fun) (fresh (e) (== q-fun `(lambda (arg) ((lambda (in) ,e) ',e)))) (evalo `(,q-fun 'x) `(,q-fun x)))
(run 1 (q-fun) (absento 'x q-fun) (fresh (e good evil) (== e `(if (equal? arg 'backdoor) ,evil ,good)) (== q-fun `(lambda (arg) ((lambda (in) ,e) ',e)))) (evalo `(,q-fun 'x) `(,q-fun x)))
(run 1 (q-fun q-fun^) (absento 'x q-fun) (fresh (e good evil) (== e `(if (equal? arg 'backdoor) ,evil ,good)) (== q-fun `(lambda (arg) ((lambda (in) ,e) ',e)))) (evalo `(,q-fun 'x) `(,q-fun x)) (evalo `(,q-fun 'backdoor) `(,q-fun^ a)))

This is it!

(run 1 (q-fun q-fun^) (absento 'x q-fun) (fresh (e good evil) (== e `(if (equal? arg 'backdoor) ,evil ,good)) (== q-fun `(lambda (arg) ((lambda (in) ,e) ',e)))) (evalo `(,q-fun 'x) `(,q-fun x)) (evalo `(,q-fun 'backdoor) `(,q-fun^ a)) (evalo `(,q-fun^ 'x) `(,q-fun^ b)))

The Axioms of Virus Life

(run 1 (Q) (absento 'x Q) (evalo `(,Q 'x) `(,Q 'x)))

in state 1: [[Q V]]=V

(run 1 (Q V) (absento 'x Q) (absento 'x V) (evalo `(,Q 'x) `(,Q 'x)) (evalo `(,Q ',V) `(quote ,V)))

Backdoor trigger is #f!

in state 2: [[Q V]]=QV (and [[QV x]]=QV x)

(run 1 (Q V QV) (absento 'x Q) (absento 'x V) (evalo `(,Q 'x) `(,Q 'x)) (evalo `(,Q ',V) `(quote ,QV)))

in state 2: [[Q V]]=QV and [[QV x]]=QV x

(run 1 (Q V QV) (absento 'x Q) (absento 'x V) (evalo `(,Q 'x) `(,Q 'x)) (evalo `(,Q ',V) `(quote ,QV)) (evalo `(,QV 'x) `(,QV 'x)))

Lifecycle analogy

(run 1 (Q V QV1 QV2) (absento 'x Q) (absento 'x V) (absento 'x QV1) (absento 'x QV2) (evalo `(,Q 'x) `(,Q 'x)) (evalo `(,Q ',V) `(quote ,QV1)) (evalo `(,QV1 'x) `(,QV2 'x)) (evalo `(,QV2 'x) `(quote ,V)))
(run 1 (Q V QV1 QV2) (absento 'x Q) (absento 'x V) (absento 'x QV1) (absento 'x QV2) (fresh (e1 e2 c) (== c `(equal? z 'backdoor)) (== Q `((lambda (y) (lambda (z) (if ,c ,e1 ,e2))) '(lambda (y) (lambda (z) (if ,c ,e1 ,e2)))))) (evalo `(,Q 'x) `(,Q 'x)) (evalo `(,Q ',V) `(quote ,QV1)) (evalo `(,QV1 'x) `(,QV2 'x)) (evalo `(,QV2 'x) `(quote ,V)))