Sei ein Vektor boolescher Variablen. Sei zwei boolesche Schaltungen auf . Sagen Sie, dass ähnlich ist, wenn:
ist exponentiell klein, wenn gleichmäßig zufällig aus \ {0,1 \} ^ n gezeichnet wird (mit anderen Worten, sie haben eine nahezu identische Funktionalität); und,
unterscheiden sich in der Grafikbearbeitungsentfernung um einen winzigen Betrag (ihre Bearbeitungsentfernung ist viel kleiner als die Größe der Schaltung, z. B. oder eine kleine Konstante), was bedeutet, dass fast alle Gates und Drähte von übereinstimmen ein entsprechendes Gate und Draht in , wobei nur wenige Gates hinzugefügt / gelöscht / geändert wurden.
Mein Problem: Ich bekomme eine Schaltung und möchte wissen, ob es eine Schaltung gibt, die C ähnlich, aber nicht identisch mit (dh wo es x gibt, so dass ).
Kann jemand einen Algorithmus vorschlagen, um dieses Problem zu lösen?
Wenn es hilft, können wir die Aufmerksamkeit auf Schaltungen , die kleiner als die gegebene Schaltung (dh wir möchten wissen, ob es eine Schaltung so dass kleiner als , ähnlich zu ist und x existiert so dass ).
Wenn es hilft, können Sie zusätzlich annehmen, dass wir bekanntermaßen gute Testfälle so dass für all , und wir können die Aufmerksamkeit weiter auf nur Schaltungen so dass für alle .
Dies ergibt sich aus einer praktischen Anwendung. Wenn Sie dieses Problem nicht lösen können, können Sie jede Variante oder jeden interessanten Sonderfall lösen. Sie können beispielsweise einen der Parameter oder Schwellenwerte auf eine für Sie geeignete Weise instanziieren. Sie können davon ausgehen, dass die Schaltkreise nicht zu groß sind (Polynomgröße oder ähnliches). Sie können die Bearbeitungsentfernung für Diagramme durch ein anderes Maß für die nahezu übereinstimmende Implementierung ersetzen. In der Praxis sind SAT-Löser in den in der Praxis auftretenden strukturierten Schaltkreisen häufig überraschend effektiv. Daher ist es wahrscheinlich in Ordnung, einen SAT-Löser als Subroutine / Orakel aufzurufen (zumindest, wenn Sie ihn in einer abgeleiteten SAT-Instanz aufrufen von einem Stromkreis wie ).
Wenn mir keine Algorithmen fehlen, würde mich auch die Existenzfrage interessieren: Wie groß ist für eine "durchschnittliche" Schaltung die Wahrscheinlichkeit, dass existiert , das alle Kriterien erfüllt? (Ich hoffe, diese Wahrscheinlichkeit ist sehr gering, aber ich habe keine Ahnung, ob dies der Fall ist.)
Die praktische Anwendung besteht darin, zu testen, ob eine Schaltung eine böswillige Hintertür / ein verstecktes Osterei enthalten könnte. Die Hypothese, wie so etwas eingefügt werden könnte, lautet wie folgt. Wir beginnen mit einer "goldenen" Schaltung , die die gewünschte Funktionalität berechnet und keine versteckte Hintertür hat. Dann nimmt der Gegner eine kleine Änderung an , um die verborgene Hintertür einzuführen und eine modifizierte Schaltung . Der Zweck der Hintertür besteht darin, die von berechnete Funktion auf irgendeine Weise zu ändern . Wenn nicht zu klein ist, kann die Änderung plausibel durch zufällige Tests erkannt werden, sodass ein Gegner wahrscheinlich versuchen wird,sehr klein. Wenn sich an zu vielen Stellen von unterscheidet , kann dies durch zufällige Inspektion der Schaltung bemerkt werden, sodass ein Gegner wahrscheinlich versuchen wird, die Anzahl der Änderungen zu minimieren. (Und es kann eine Testsuite von Paaren geben, die Instanzen der gewünschten Funktionalität darstellen, so dass wir wissen, dass unabhängig von der "goldenen" Schaltung erfüllt ist für alle .) Letztendlich erhalten wir die Schaltung (aber nicht die "goldene" Schaltung ), und wir wollen wissen, ob eine modifizierte Version von einigen, wo die Änderung vorgenommen wurde, um eine versteckte Hintertür dieser Art einzuführen.