Skip to content
Browse chapters
Imports

Correctness of the serialized SUBSET-SUM construction

namespace CLRS.Chapter34.SubsetSumReduction theorem cnfToSubsetSumData_correct {formula : CNF} (hthree : IsThreeCNF formula) : CnfSatisfiable formula ↔ (cnfToSubsetSumData formula).HasSubsetSum := by rw [cnfToSubsetSumData, SubsetSumInstance.toDataFromList_hasSubsetSum_iff (cnfToSubsetSum formula) (reductionItemList formula) (reductionItemList_nodup formula) (mem_reductionItemList_iff formula)] exact cnfToSubsetSum_correct hthree theorem encodeCnfToSubsetSum_mem_iff {formula : CNF} (hthree : IsThreeCNF formula) : encodeCnfToSubsetSum formula ∈ GeneralSUBSETSUM ↔ CnfSatisfiable formula := by rw [encodeCnfToSubsetSum, encodeSubsetSumData_mem_iff] exact (cnfToSubsetSumData_correct hthree).symm theorem subsetSumNoData_not_hasSubsetSum : ¬ subsetSumNoData.HasSubsetSum := by rintro ⟨indices, _, hrange, _⟩ cases indices with | nil => simp [subsetSumNoData, SubsetSumData.selectedSum] at * | cons index rest => have := hrange index (by simp) simp [subsetSumNoData] at thistheorem rawThreeCNFToSubsetSum_correct (input : List CNFSym) : input ∈ ThreeCNFSat ↔ rawThreeCNFToSubsetSum input ∈ GeneralSUBSETSUM := by by_cases hthree : IsThreeCNF (decodeCNF input) · simp only [ThreeCNFSat, Set.mem_setOf_eq, hthree, true_and, rawThreeCNFToSubsetSum, if_pos] exact (encodeCnfToSubsetSum_mem_iff hthree).symm · simp [ThreeCNFSat, rawThreeCNFToSubsetSum, hthree, encodeSubsetSumData_mem_iff, subsetSumNoData_not_hasSubsetSum]end CLRS.Chapter34.SubsetSumReduction