fact: Definition construct_valuation (φ: nat -> nat) (n: nat): list nat := match unembed n with | (x, 0, 0) => repeat 0 (4^(φ x)) | (x, 1, 0) => seq 0 (φ x) | (x, 2, 0) => [(φ x)] | (x, 3, 0) => map (fun i => 2*i) (seq 0 (φ x)) | (x, 4, 0) => [2*(φ x)] | (x, 5, 0) => proj1_sig (unify_sat (φ x)) | (x, 6, 0) => tower 1 (φ x) | (x, 7, 0) => tower 2 (φ x) | (x, 0, 1) => repeat 0 (φ x) | (x, 1, 1) => repeat 0 (length (pyramid (φ x))) | (x, 2, 1) => repeat 0 (4^(φ x) - (φ x)) | (x, 3, 1) => repeat 0 (4^(φ x) - (length (pyramid (φ x)))) | (x, 4, 1) => seq 0 (φ x) | (x, 5, 1) => [(φ x)] | (x, 6, 1) => pyramid (φ x) | (x, 7, 1) => flat_map pyramid (seq 0 (φ x)) | _ => [] end.
imports: Arith Lia List Permutation Undecidability.SetConstraints.FMsetC Undecidability.SetConstraints.Util.Facts Undecidability.Synthetic.Definitions ssreflect ssrbool ssrfun