gs : thm list -> tactic
Assumptions are simplified first, with assumption terms simplified in turn in a context that includes all of the other assumptions. After simplification, if an assumption has been reduced to T (truth), it is dropped. Otherwise, it is added back to the assumption list using STRIP_ASSUME_TAC. After this process of assumption simplification produces no further change (assessed using CHANGED_TAC), the goal’s conclusion is also simplified, in a context that assumes all of the (now simplified) asssumptions.
Theorems with restrictions (Once, Ntimes) passed to the gs tactic will not have those restrictions refreshed as invocations of the base simplification procedure are repeated. This means that the restricted theorems will likely only be applied to the first assumption where the left-hand-sides match.
> arithmeticTheory.SUB_CANCEL; val it = ⊢ ∀p n m. n ≤ p ∧ m ≤ p ⇒ (p − n = p − m ⇔ n = m): thm
x ≤ b, b - x = b - y, y ≤ b ?- x * y < 10 ============================================== gs[SUB_CANCEL] y ≤ b, x = y ?- y ** 2 < 10
The rgs variant attacks the assumptions in the reverse order to gs. The latter simplifies older assumptions using newer assumptions, but rgs uses the opposite order. If, for example, the assumption list includes both 0 < n and n ≠ 0, then gs will preserve one of these and rgs will preserve the other.