Definition is_cipher_of f a :=
l+1 < q
/\ (forall i, i < l -> f i < power q 2)
/\ a = ∑ l (fun i => f i * power (power (S i) 2) r).
Fact is_cipher_of_0 f a : l = 0 -> is_cipher_of f a <-> 1 < q /\ a = 0.
Fact is_cipher_of_inj f1 f2 a : is_cipher_of f1 a -> is_cipher_of f2 a -> forall i, i < l -> f1 i = f2 i.
Fact is_cipher_of_fun f1 f2 a b :
(forall i, i < l -> f1 i = f2 i)
-> is_cipher_of f1 a
-> is_cipher_of f2 b
-> a = b.

(* Specifications: *)
Lemma is_cipher_of_equiv f1 f2 a b :
is_cipher_of f1 a
-> is_cipher_of f2 b
-> a = b <-> forall i, i < l -> f1 i = f2 i.
Lemma is_cipher_of_const_1 u : 0 < l -> is_cipher_of (fun _ => 1) u
<-> l+1 < q /\ exists u1, seqs_of_ones u u1.