Generalize concat conflict for sequences in LFSC (#8625)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 19 Apr 2022 17:15:33 +0000 (12:15 -0500)
committerGitHub <noreply@github.com>
Tue, 19 Apr 2022 17:15:33 +0000 (17:15 +0000)
commit35c67d1d8aed4633c1c814f4196d2e328f015476
treec753556e0d7f2810eb3bf659f348698a6946a925
parent427d38c14eb23026e6866ad4b2663e3d6e82399e
Generalize concat conflict for sequences in LFSC (#8625)

This ensures LFSC proofs are correct when using CONCAT_CONFLICT for sequences.

In detail, to justify why (seq.++ (seq.unit c1) t1) = (seq.++ (seq.unit c2) t2) is a conflict, where c1 and c2 are constants, we require an explicit step to evalute (seq.unit c1) = (seq.unit c2) to false, since c1 and c2 are theory-specific constants.

Note this is different from (str.++ (char n1) t1) = (str.++ (char n2) t2) where a syntactic check of n1 and n2 suffices.

This fixes proof checking for regress0/seq/seq-types.smt2.
proofs/lfsc/signatures/strings_programs.plf
proofs/lfsc/signatures/strings_rules.plf
src/proof/lfsc/lfsc_post_processor.cpp
src/proof/lfsc/lfsc_printer.cpp
src/proof/lfsc/lfsc_util.cpp
src/proof/lfsc/lfsc_util.h