2017-10-06 6 views
1

J'ai deux expressions arithmétiques entières impliquant un tableau dans un fichier. Quelle est la meilleure façon de stocker chaque expression en mémoire. de sorte que la formule équivalente devienne syntaxiquement équivalente. En comparant la structure, nous pouvons trouver l'équivalence. Pour vérifier l'équivalence, comparez d'abord la structure si elle est la même que si elle est équivalente, sinon utilisez le solveur SMT.analyse et stockage d'expression impliquant un tableau

Ex. a [i + 2] +5 et a [i + 3-1] + 4 + 1 sont équivalents. Actuellement, je représente a [i] = b [i] + z est comme wr (a, i, rd (b, i) + z). Où Write (wr) et Read (rd) sont des fonctions.

+0

Je n'ai pas lu l'article parce que c'est trop cher. –

Répondre

1

Il est un peu difficile de comprendre ce que vous demandez. Mais la théorie des tableaux supporte déjà les opérations de lecture/écriture. L'égalité que vous mettez comme exemple peut être codé comme celui-ci:

(set-logic AUFLIA) 

(declare-const i Int) 
(declare-const a (Array Int Int)) 

(define-fun eq() Bool (= (+ (select a (+ i 2))  5) 
          (+ (select a (+ i (- 3 1))) (+ 4 1)))) 

; To prove equivalence, assert the negation and make sure the result is unsat: 
(assert (not eq)) 

(check-sat) 

Cela se traduira par unsat ce qui prouve que l'égalité est vrai pour tous les tableaux a. (Notez que nous affirmons la négation de l'égalité.)

Est-ce ce que vous cherchez?

+0

Pouvons-nous stocker ces équations en mémoire de telle sorte que la formule équivalente devienne syntaxiquement équivalente. En comparant la structure, nous pouvons trouver l'équivalence. – user2468460

+0

Non, pas en général. Il n'y a aucune forme normale évidente de telles expressions peuvent être réduites à ce qui peut alors être comparé pour l'égalité structurelle. Au moins pas dans le contexte de la résolution SMT. –

+0

Oui En général, ce n'est pas possible. Mais pour un sous-ensemble d'expressions possibles de son travail, il n'est pas nécessaire d'appeler le solveur SMT à chaque fois et je peux aussi gagner du temps. Puis-je savoir comment stocker l'expression de tableau en mémoire. – user2468460