Imports
Honest serialized HAM-CYCLE language
namespace CLRS.Chapter34
Canonical graph-only HAM-CYCLE instances use the shared graph encoding
with targetSize = vertexCount.
def GeneralHAMCYCLE : Language HamiltonianCycleSym :=
{ input |
∃ I, decodeHamiltonianCycleInstance input = some I ∧
I.WellFormed ∧ I.targetSize = I.vertexCount ∧
I.HasHamiltonianCycle }theorem mem_generalHAMCYCLE_iff (input : List HamiltonianCycleSym) :
input ∈ GeneralHAMCYCLE ↔
∃ I, decodeHamiltonianCycleInstance input = some I ∧
I.WellFormed ∧ I.targetSize = I.vertexCount ∧
I.HasHamiltonianCycle := by
rfl
theorem encodeHamiltonianCycleInstance_mem_iff (I : HamiltonianCycleInstance) :
encodeHamiltonianCycleInstance I ∈ GeneralHAMCYCLE ↔
I.WellFormed ∧ I.targetSize = I.vertexCount ∧
I.HasHamiltonianCycle := by
constructor
· rintro ⟨J, hdecode, hJ, htarget, hcycle⟩
have hJI : J = I := by
have : some J = some I := hdecode.symm.trans
(decode_encodeCliqueInstance I)
exact Option.some.inj this
subst J
exact ⟨hJ, htarget, hcycle⟩
· rintro ⟨hI, htarget, hcycle⟩
exact ⟨I, decode_encodeCliqueInstance I, hI, htarget, hcycle⟩abbrev HAMCYCLE : Language HamiltonianCycleSym := GeneralHAMCYCLEend CLRS.Chapter34