// Block world, with 8 blocks A, B, C, D, E, F, G, H and two tables
// First table : a,b,c,d    Second table : e,f,g,h

// Facts meanings
// ta = onTable(a)
// oab = on(a, b)   a is on block b
// na = nothingOnTopOf(a)
//
//								|D|	|H|
//								|C|	|G|
//							--> |B|	|F|
//	|A||B||C||D||E||F||G||H|	|A|	|E|
//   Initial state                Goal
//
//
// Operators meanings
// sAB = stack a on b
// uAB = remove a from b and put a on table.

#facts
(ta, tb, tc, td, na, nb, nc, nd, te, tf, tg, th, ne, nf, ng, nh)

#goal
(ta, oba, ocb, odc, nd, te, ofe, ogf, ohg, nh)

#operator
//(op <name> <precond-list> <pos-effect-list> <neg-effect-list>)

//Move action
(
(op sAB
	(nb, ta, na)
	(oab)
	(nb, ta))
	
(op sAC
	(nc, ta, na)
	(oac)
	(nc, ta))

(op sAD
	(nd, ta, na)
	(oad)
	(nd, ta))
	
	
(op sBA
	(na, tb, nb)
	(oba)
	(na, tb))
	
(op sBC
	(nc, tb, nb)
	(obc)
	(nc, tb))

(op sBD
	(nd, tb, nb)
	(obd)
	(nd, tb))


(op sCA
	(na, tc, nc)
	(oca)
	(na, tc))

(op sCB
	(nb, tc, nc)
	(ocb)
	(nb, tc))
	
(op sCD
	(nd, tc, nc)
	(ocd)
	(nd, tc))


(op sDA
	(na, td, nd)
	(oda)
	(na, td))

(op sDB
	(nb, td, nd)
	(odb)
	(nb, td))
	
(op sDC
	(nc, td, nd)
	(odc)
	(nc, td))


(op sEF
	(nf, te, ne)
	(oef)
	(nf, te))

(op sEG
	(ng, te, ne)
	(oeg)
	(ng, te))

(op sEH
	(nh, te, ne)
	(oeh)
	(nh, te))


(op sFE
	(ne, tf, nf)
	(ofe)
	(ne, tf))

(op sFG
	(ng, tf, nf)
	(ofg)
	(ng, tf))

(op sFH
	(nh, tf, nf)
	(ofh)
	(nh, tf))


(op sGE
	(ne, tg, ng)
	(oge)
	(ne, tg))

(op sGF
	(nf, tg, ng)
	(ogf)
	(nf, tg))

(op sGH
	(nh, tg, ng)
	(ogh)
	(nh, tg))


(op sHE
	(ne, th, nh)
	(ohe)
	(ne, th))

(op sHF
	(nf, th, nh)
	(ohf)
	(nf, th))

(op sHG
	(ng, th, nh)
	(ohg)
	(ng, th))



(op uAB
	(na, oab)
	(ta, nb)
	(oab))
	
(op uAC
	(na, oac)
	(ta, nc)
	(oac))

(op uAD
	(na, oad)
	(ta, nd)
	(oad))		


(op uBA
	(nb, oba)
	(tb, na)
	(oba))
	
(op uBC
	(nb, obc)
	(tb, nc)
	(obc))

(op uBD
	(nb, obd)
	(tb, nd)
	(obd))		
	
		
(op uCA
	(nc, oca)
	(tc, na)
	(oca))

(op uCB
	(nc, ocb)
	(tc, nb)
	(ocb))

(op uCD
	(nc, ocd)
	(tc, nd)
	(ocd))

(op uDA
	(nd, oda)
	(td, na)
	(oda))
	
(op uDB
	(nd, odb)
	(td, nb)
	(odb))

(op uDC
	(nd, odc)
	(td, nc)
	(odc))

	
	
(op uEF
	(ne, oef)
	(te, nf)
	(oef))

(op uEG
	(ne, oeg)
	(te, ng)
	(oeg))

(op uEH
	(ne, oeh)
	(te, nh)
	(oeh))
	

(op uFE
	(nf, ofe)
	(tf, ne)
	(ofe))
	
(op uFG
	(nf, ofg)
	(tf, ng)
	(ofg))

(op uFH
	(nf, ofh)
	(tf, nh)
	(ofh))
	
(op uGE
	(ng, oge)
	(tg, ne)
	(oge))

(op uGF
	(ng, ogf)
	(tg, nf)
	(ogf))

(op uGH
	(ng, ogh)
	(tg, nh)
	(ogh))

(op uHE
	(nh, ohe)
	(th, ne)
	(ohe))

(op uHF
	(nh, ohf)
	(th, nf)
	(ohf))

(op uHG
	(nh, ohg)
	(th, ng)
	(ohg))
)
