"C++11"
include "c11_cos.cat"
include "c11_los.cat"
let asw = IW * (M \ IW)
let sb = po
let mo = co
let cacq = ACQ | (SC & (R | F)) | ACQ_REL | (F & CON)
let crel = REL | (SC & (W | F)) | ACQ_REL
let ccon = R & CON
let fr = rf^-1 ; mo
let dd = (data | addr)+
let fsb = sb & (F *
_)
let sbf = sb & (
_ * F)
let rs_prime = int | (
_ * (R & W))
let rs = mo & rs_prime \ ((mo \ rs_prime) ; mo)
let swra =
ext &
(toid(crel) ; fsb? ; toid(A & W) ; rs? ; rf ;
toid(R & A) ; sbf? ; toid(cacq))
let swul = ext & (toid(UL) ; lo ; toid(LK))
let pp_asw = asw \ (asw ; sb)
let sw = pp_asw | swul | swra
let cad = ((rf & sb) | dd)+
let dob =
(ext &
(toid(W & crel) ; fsb? ; toid(A & W) ;
rs?; rf; toid(ccon)));
cad?
let ithbr = sw | dob | (sw ; sb)
let ithb = (ithbr | (sb ; ithbr))+
let hb = sb | ithb
acyclic hb
as Hb
show (hb \ (IW *
_)) & ext
as hb
let hbl = hb & loc
irreflexive ((rf^-1)? ; mo ; rf? ; hb)
as Coh
let vis = (hbl & (W * R)) \ (hbl; toid(W) ; hbl)
irreflexive (rf ; hb)
as Rf
empty ((rf ; [R\A]) \ vis)
as NaRf
empty [FW\A];hbl;[W]
as NaRf
irreflexive (rf | (mo ; mo ; rf^-1) | (mo ; rf))
as Rmw
irreflexive (lo ; hb)
as Lo1
irreflexive
(toid(LS) ; lo^-1 ; toid(LS) ; ~(lo ; toid(UL) ; lo))
as Lo2
let Mutex = UL|LS
let cnf = (((W *
_) | (
_ * W)) & loc) \ ((Mutex *
_) | (
_ * Mutex))
let dr = ext & (cnf \ hb \ (hb^-1) \ (A * A))
let ur = int & ((W * M) | (M * W)) &
loc & ~id & ~(sb+) & ~((sb+)^-1)
let bl = (toid(LS); (sb & lo); toid(LK)) & ~(lo; toid(UL); lo)
let losbwoul = (sb & lo & ~(lo; toid(UL); lo))
let lu = toid(UL) &
~(toid(UL) ; losbwoul^-1 ; toid(LS) ; losbwoul ; toid(UL))