2016-11-18 2 views

Répondre

4

Le facile, mais pas gentil "comme je voudrais utiliser est replace (a + (b + (c + d)))) with (a + b + c + d) by now omega

+1

Pourquoi n'est-ce pas agréable? En outre, vous pouvez également faire 'par auto avec *'. –

+1

Si vous avez déjà regardé le terme de sortie créé par 'omega', vous comprendrez. La plupart du temps c'est trop compliqué, et une petite preuve utilisant la réécriture sera beaucoup plus petite. Mais c'est une question d'opinion personnelle;) – Vinz

+0

'par omega' fonctionnerait aussi bien; et 'by ring' résout également le problème. Le premier a besoin d'un module "Omega" à importer; ce dernier - 'Arith'. –

4

Vous pouvez utiliser le repeat tactique, qui répète une tactique jusqu'à ce qu'il ne peut pas être appliqué plus:

repeat rewrite Nat.add_assoc. 

ou plus concise Version:

rewrite !Nat.add_assoc. 

Il fonctionne même que la variante avec repeat.

L'inconvénient de cette approche est qu'elle se réécrit partout dans le but. Donc, vous pourriez vouloir sélectionner une partie de votre formule pour faire les réécritures sur elle seulement.