---
# System prepended metadata

title: Premise

---

# Premise
## SIMPLE

```
     procedure main {
01      flag = 0;
02      call computeCentroid;
03      call printResults;
     }
     procedure readPoint {
04        read x;
05        read y;
    }
    procedure printResults {
06        print flag;
07        print cenX;
08        print cenY;
09        print normSq;
    }
    procedure computeCentroid {
10        count = 0;
11        cenX = 0;
12        cenY = 0;
13        call readPoint;
14        while ((x != 0) && (y != 0)) {
15            count = count + 1;
16            cenX = cenX + x;
17            cenY = cenY + y;
18            call readPoint;
        }
19      if (count == 0) then {
20            flag = 1;
        } else {
21            cenX = cenX / count;
22            cenY = cenY / count;
        }
23        normSq = cenX \* cenX + cenY \* cenY;
    }
```

## PQL
```
assign a; variable v;

Select a such that Uses (a, v) pattern a (v, _)
```

## Initial PKB
```prolog
/* DESIGN ENTITIES */

procedure(main),
procedure(readPoint),
procedure(printResults),
procedure(computeCentroid),

stmt(1),stmt(2),stmt(3),stmt(4),stmt(5),stmt(6),stmt(7),stmt(8),stmt(9),
stmt(10),stmt(11),stmt(12),stmt(13),stmt(14),stmt(15),stmt(16),stmt(17),stmt(18),stmt(19),
stmt(20),stmt(21),stmt(22),stmt(23)

stmtLst(main,1),stmtLst(main,2),stmtLst(main,3),
stmtLst(readPoint,4),stmtLst(readPoint,5),
stmtLst(printResults,6),stmtLst(printResults,7),stmtLst(printResults,8),stmtLst(printResults,9),
stmtLst(computeCentroid,10),stmtLst(computeCentroid,11),stmtLst(computeCentroid,14

stmtLst(10,23),stmtLst(15,18),stmtLst(20,20),stmtLst(21,22),

read(4),read(5),

print(6),print(7),print(8),print(9),

assign(1),assign(10),assign(11),assign(12),assign(15),assign(16),assign(17),assign(20),assign(21),assign(22),assign(23),

/* call(s,p) :- stmt(s), procedure(p). */
call(2,computeCentroid),call(3,printResults),call(18,readPoint),

/* while(s,t1,t2) :- stmt(s), stmtLst(t1,t2). */
while(14,15,18)

/* if(s,t1,t2,f1,f2) :- stmt(s), stmtLst(t1,t2), stmtLst(f1,f2). */
if(19,20,20,21,22)

variable(flag),variable(x),variable(y),variable(flag),variable(cenX),variable(cenY),variable(normSq),variable(count),

constant(0), constant(1),

# DESIGN ABSTRACTIONS

follows(s1,s2) :- 
```