# Decision procedure - sufficient condition and decidability #

We give a sufficient condition for a string to be derivable in the MIU language. Together with the
necessary condition, we use this to prove that `Derivable`

is an instance of `DecidablePred`

.

Let `count I st`

and `count U st`

denote the number of `I`

s (respectively `U`

s) in `st : Miustr`

.

We'll show that `st`

is derivable if it has the form `M::x`

where `x`

is a string of `I`

s and `U`

s
for which `count I x`

is congruent to 1 or 2 modulo 3.

To prove this, it suffices to show `Derivable M::y`

where `y`

is any `Miustr`

consisting only of
`I`

s such that the number of `I`

s in `y`

is `a+3b`

, where `a = count I x`

and `b = count U x`

.
This suffices because Rule 3 permits us to change any string of three consecutive `I`

s into a `U`

.

As `count I y = (count I x) + 3*(count U x) ≡ (count I x) [MOD 3]`

, it suffices to show
`Derivable M::z`

where `z`

is an `Miustr`

of `I`

s such that `count I z`

is congruent to
1 or 2 modulo 3.

Let `z`

be such an `Miustr`

and let `c`

denote `count I z`

, so `c ≡ 1 or 2 [MOD 3]`

.
To derive such an `Miustr`

, it suffices to derive an `Miustr`

`M::w`

, where again `w`

is an
`Miustr`

of only `I`

s with the additional conditions that `count I w`

is a power of 2, that
`count I w ≥ c`

and that `count I w ≡ c [MOD 3]`

.

To see that this suffices, note that we can remove triples of `I`

s from the end of `M::w`

,
creating `U`

s as we go along. Once the number of `I`

s equals `m`

, we remove `U`

s two at a time
until we have no `U`

s. The only issue is that we may begin the removal process with an odd number
of `U`

s.

Writing `d = count I w`

, we see that this happens if and only if `(d-c)/3`

is odd.
In this case, we must apply Rule 1 to `z`

, prior to removing triples of `I`

s. We thereby
introduce an additional `U`

and ensure that the final number of `U`

s will be even.

## Tags #

miu, decision procedure, decidability, decidable_pred, decidable

## Converting `I`

s to `U`

s #

For any given natural number `c ≡ 1 or 2 [MOD 3]`

, we need to show that can derive an `Miustr`

`M::w`

where `w`

consists only of `I`

s, where `d = count I w`

is a power of 2, where `d ≥ c`

and
where `d ≡ c [MOD 3]`

.

Given the above lemmas, the desired result reduces to an arithmetic result, given in the file
`arithmetic.lean`

.

We'll use this result to show we can derive an `Miustr`

of the form `M::z`

where `z`

is a string
consisting only of `I`

s such that `count I z ≡ 1 or 2 [MOD 3]`

.

As an intermediate step, we show that derive `z`

from `zt`

, where `t`

is an `Miustr`

consisting of
an even number of `U`

s and `z`

is any `Miustr`

.

Any number of successive occurrences of `"UU"`

can be removed from the end of a `Derivable`

`Miustr`

to produce another `Derivable`

`Miustr`

.

In fine-tuning my application of `simp`

, I issued the following command to determine which lemmas
`simp`

uses.

`set_option trace.simplify.rewrite true`

We may replace several consecutive occurrences of `"III"`

with the same number of `"U"`

s.
In application of the following lemma, `xs`

will either be `[]`

or `[U]`

.

### Arithmetic #

We collect purely arithmetic lemmas: `add_mod2`

is used to ensure we have an even number of `U`

s
while `le_pow2_and_pow2_eq_mod3`

treats the congruence condition modulo 3.

`der_replicate_I_of_mod3`

states that `M::y`

is `Derivable`

if `y`

is any `Miustr`

consisiting just
of `I`

s, where `count I y`

is 1 or 2 modulo 3.

`Decstr`

is a sufficient condition #

The remainder of this file sets up the proof that `Decstr en`

is sufficient to ensure
`Derivable en`

. Decidability of `Derivable en`

is an easy consequence.

The proof proceeds by induction on the `count U`

of `en`

.

We tackle first the base case of the induction. This requires auxiliary results giving
conditions under which `count I ys = length ys`

.

If an `Miustr`

has a zero `count U`

and contains no `M`

, then its `count I`

is its length.

`base_case_suf`

is the base case of the sufficiency result.

Before continuing to the proof of the induction step, we need other auxiliary results that
relate to `count U`

.

`ind_hyp_suf`

is the inductive step of the sufficiency result.

`der_of_decstr`

states that `Derivable en`

follows from `Decstr en`

.

### Decidability of `Derivable`

#

Finally, we have the main result, namely that `Derivable`

is a decidable predicate.

## Equations

By decidability, we can automatically determine whether any given `Miustr`

is `Derivable`

.