proposition: Lemma refine_is_CNAME__forall_to_exists : forall (n : resourceRecord) (R : @IndexedEnsemble resourceRecord), RDataTypeToRRecordType (n!sRDATA) = CNAME -> refine {b | decides b (forall tup' : IndexedTuple, R tup' -> n!sNAME = (indexedElement tup')!sNAME -> RDataTypeToRRecordType (n!sRDATA) <> CNAME)} (b <- {b | decides b (exists tup' : IndexedTuple, R tup' /\ n!sNAME = (indexedElement tup')!sNAME)}; ret (negb b)).
proof: Proof. intros; eapply (@refine_forall_to_exists_independent _ n (fun n => RDataTypeToRRecordType (n!sRDATA) = CNAME) (fun n => RDataTypeToRRecordType (n!sRDATA) <> CNAME) (fun tup' => n!sNAME = tup'!sNAME) R); eauto. Qed.
imports: Coq.Vectors.Vector Coq.Strings.Ascii Coq.Bool.Bool Coq.Bool.Bvector Coq.Lists.List Fiat.Computation.ListComputations Fiat.QueryStructure.Automation.AutoDB Fiat.QueryStructure.Implementation.DataStructures.BagADT.BagADT Fiat.QueryStructure.Automation.IndexSelection Fiat.QueryStructure.Specification.SearchTerms.ListPrefix Fiat.QueryStructure.Automation.SearchTerms.FindPrefixSearchTerms Fiat.QueryStructure.Automation.QSImplementation Fiat.Narcissus.Formats.DomainNameOpt Fiat.Narcissus.Examples.DNS.SimpleDnsOpt Fiat.Narcissus.Examples.DNS.SimpleDNSPacket Fiat.Examples.DnsServer.DecomposeSumField Fiat.Computation.FoldComp Fiat.Examples.DnsServer.SimpleAuthoritativeDNSSchema