Angenommen, ich habe eine Satzart und eine konstante Definition dieser Art, wie:Entfaltung automatisch eine Aufzeichnung Definition, wenn Accessor verwendet wird
record r =
r_x :: int
r_y :: int
r_z :: int
definition "a ≡ ⦇r_x=1, r_y=2, r_z=3⦈"
Jetzt möchte ich etwas über ein beweisen, zum Beispiel:
lemma "r_x a + r_y a = 3"
Derzeit mache ich solche Beweise durch Vereinfachung Lemmata für die verschiedenen Zugriffsmethoden definieren:
schematic_goal [simp]: "r_x a = ?x" by (simp add: a_def)
schematic_goal [simp]: "r_y a = ?x" by (simp add: a_def)
schematic_goal [simp]: "r_z a = ?x" by (simp add: a_def)
Meine Frage ist: Kann ich diese Lemmas automatisch irgendwie ableiten? Oder gibt es eine Methode zum Entfalten von Definitionen, wenn sie mit einer Accessor-Funktion verwendet wird?
Ich möchte das ursprüngliche Lemma nicht beweisen, indem ich a_def hinzufüge, weil ich normalerweise nur die Verwendungen von a
entfalten möchte, wo ein Accessor verwendet wird.
Ich möchte keine Abkürzung verwenden, denn dann würde der Simplifier komplizierte Unterbegriffe innerhalb des Datensatzes bearbeiten.