proposition: Lemma refine_forall_to_exists' : forall (n : resourceRecord) (R : @IndexedEnsemble resourceRecord), refine {b | decides b (forall tup' : IndexedTuple, R tup' -> (indexedElement tup')!sNAME = n!sNAME -> RDataTypeToRRecordType (indexedElement tup')!sRDATA <> CNAME)} (b <- {b | decides b (exists tup' : IndexedTuple, R tup' /\ n!sNAME = (indexedElement tup')!sNAME /\ RDataTypeToRRecordType (indexedElement tup')!sRDATA = CNAME)}; ret (negb b)).
proof: Proof. repeat match goal with | _ : _ ↝ _ |- _ => computes_to_inv | _ : negb ?v = _ |- _ => destruct v; simpl in *; subst | _ : ex _ |- _ => destruct_ex | _ => progress first [ intro | computes_to_econstructor | simpl; intuition; eauto ] end. 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