{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,20]],"date-time":"2025-06-20T17:26:18Z","timestamp":1750440378103},"reference-count":0,"publisher":"Cambridge University Press (CUP)","issue":"4-5","license":[{"start":{"date-parts":[[2002,7,26]],"date-time":"2002-07-26T00:00:00Z","timestamp":1027641600000},"content-version":"unspecified","delay-in-days":25,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Theory and Practice of Logic Programming"],"published-print":{"date-parts":[[2002,7]]},"abstract":"<jats:p>Existing refinement calculi provide frameworks for the stepwise development of imperative \nprograms from specifications. This paper presents a refinement calculus for deriving logic \nprograms. The calculus contains a wide-spectrum logic programming language, including \nexecutable constructs such as sequential conjunction, disjunction, and existential quantification, \nas well as specification constructs such as general predicates, assumptions and universal \nquantification. A declarative semantics is defined for this wide-spectrum language based on \nexecutions. Executions are partial functions from states to states, where a state is represented \nas a set of bindings. The semantics is used to define the meaning of programs and \nspecifications, including parameters and recursion. To complete the calculus, a notion of \ncorrectness-preserving refinement over programs in the wide-spectrum language is defined \nand refinement laws for developing programs are introduced. The refinement calculus is \nillustrated using example derivations and prototype tool support is discussed.<\/jats:p>","DOI":"10.1017\/s1471068402001448","type":"journal-article","created":{"date-parts":[[2002,9,11]],"date-time":"2002-09-11T15:11:14Z","timestamp":1031757074000},"page":"425-460","source":"Crossref","is-referenced-by-count":3,"title":["A refinement calculus for logic programs"],"prefix":"10.1017","volume":"2","author":[{"given":"IAN","family":"HAYES","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"ROBERT","family":"COLVIN","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"DAVID","family":"HEMER","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"PAUL","family":"STROOPER","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"RAY","family":"NICKSON","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"56","published-online":{"date-parts":[[2002,7,26]]},"container-title":["Theory and Practice of Logic Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S1471068402001448","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2019,3,31]],"date-time":"2019-03-31T18:55:32Z","timestamp":1554058532000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S1471068402001448\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2002,7]]},"references-count":0,"journal-issue":{"issue":"4-5","published-print":{"date-parts":[[2002,7]]}},"alternative-id":["S1471068402001448"],"URL":"https:\/\/doi.org\/10.1017\/s1471068402001448","relation":{},"ISSN":["1471-0684","1475-3081"],"issn-type":[{"value":"1471-0684","type":"print"},{"value":"1475-3081","type":"electronic"}],"subject":[],"published":{"date-parts":[[2002,7]]}}}