Verification of Parameterised FPGA Circuit Descriptions with Layout ...

Verification of Parameterised FPGA Circuit Descriptions with Layout ... Verification of Parameterised FPGA Circuit Descriptions with Layout ...

24.04.2013 Views

APPENDIX C. PLACED COMBINATOR LIBRARIES 242 section {* Additional simplification rules for different representations *} theorem height_ge0: "!! (R::((int=>int=>(’t180*’t180)=>(’t180*’t180)=>bool,int=>int =>(’t180*’t180)=>(’t180*’t180)=>int)block)) (n::int) (i::int) (l::(’t180)vector) (t::’t180) (b::’t180) (r::(’t180)vector). [| ALL (qs389::int) (qs390::int) ( qs391::(’t180*’t180)) (qs392::(’t180*’t180)). 0 (’t180*’t180)=>bool,int=>int =>(’t180*’t180)=>(’t180*’t180)=>int)block)) (n::int) (i::int) (l::(’t180)vector) (t::’t180) (b::’t180) (r::(’t180)vector). [| ALL (qs389::int) (qs390::int) ( qs391::(’t180*’t180)) (qs392::(’t180*’t180)). 0 (’t180*’t180)=>bool,int=>int=>(’t180*’t180 )=>(’t180*’t180)=>int)block)) (n::int) (i::int) (l::(’t180)vector) (t::’t180) (b ::’t180) (r::(’t180)vector). [| Def ((l, t) ;;; icol $ (n, R $ i) ;;; (b, r)) ; ALL (qs389::int) (qs390::int) (qs391::(’t180*’t180)) (qs392::(’t180*’t180)). 0 (’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’ t313)vector*(’t313)vector)=>bool"

APPENDIX C. PLACED COMBINATOR LIBRARIES 243 height:: "(int*int*(((int*int)=>(’t313*’t313)=>(’t313*’t313)=>bool,(int*int)=>(’ t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’ t313)vector*(’t313)vector)=>int" width:: "(int*int*(((int*int)=>(’t313*’t313)=>(’t313*’t313)=>bool,(int*int)=>(’ t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’ t313)vector*(’t313)vector)=>int" igrid:: "((int*int*(((int*int)=>(’t313*’t313)=>(’t313*’t313)=>bool,(int*int)=>(’ t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’ t313)vector*(’t313)vector)=>bool, (int*int*(((int*int)=>(’t313*’t313)=>(’t313 *’t313)=>bool,(int*int)=>(’t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313) vector*(’t313)vector)=>((’t313)vector*(’t313)vector)=>int)block" defs struct_def: "struct == % (m, n, R) (l, t) (b, r). Def ((l, t) ;;; irow $ (m, igrid1 $ (curry $ (R)) $ n) ;;; (b, r))" height_def: "height == % (m, n, R) (l, t) (b, r). Height ((l, t) ;;; irow $ (m, igrid1 $ (curry $ (R)) $ n) ;;; (b, r))" width_def: "width == % (m, n, R) (l, t) (b, r). Width ((l, t) ;;; irow $ (m, igrid1 $ (curry $ (R)) $ n) ;;; (b, r))" igrid_def: "igrid == (| Def = struct, Height = height, Width = width |)" declare width_def [simp] declare height_def [simp] declare struct_def [simp] section {* Validity of width and height functions *} theorem height_ge0_int: "!! (m::int) (n::int) (R::(((int*int)=>(’t313*’t313)=>(’t313 *’t313)=>bool,(int*int)=>(’t313*’t313)=>(’t313*’t313)=>int)block)) (l::(’t313) vector) (t::(’t313)vector) (b::(’t313)vector) (r::(’t313)vector). [| ALL (qs396 ::(int*int)) (qs397::(’t313*’t313)) (qs398::(’t313*’t313)). 0 (’t313*’t313)=>(’t313*’t313)=>int)block)) (l::(’t313) vector) (t::(’t313)vector) (b::(’t313)vector) (r::(’t313)vector). [| ALL (qs396 ::(int*int)) (qs397::(’t313*’t313)) (qs398::(’t313*’t313)). 0 (’t313*’t313)=>(’t313*’t313)=>int)block)) (l::(’t313)

APPENDIX C. PLACED COMBINATOR LIBRARIES 243<br />

height:: "(int*int*(((int*int)=>(’t313*’t313)=>(’t313*’t313)=>bool,(int*int)=>(’<br />

t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’<br />

t313)vector*(’t313)vector)=>int"<br />

width:: "(int*int*(((int*int)=>(’t313*’t313)=>(’t313*’t313)=>bool,(int*int)=>(’<br />

t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’<br />

t313)vector*(’t313)vector)=>int"<br />

igrid:: "((int*int*(((int*int)=>(’t313*’t313)=>(’t313*’t313)=>bool,(int*int)=>(’<br />

t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)vector*(’t313)vector)=>((’<br />

t313)vector*(’t313)vector)=>bool, (int*int*(((int*int)=>(’t313*’t313)=>(’t313<br />

*’t313)=>bool,(int*int)=>(’t313*’t313)=>(’t313*’t313)=>int)block))=>((’t313)<br />

vector*(’t313)vector)=>((’t313)vector*(’t313)vector)=>int)block"<br />

defs<br />

struct_def: "struct == % (m, n, R) (l, t) (b, r). Def ((l, t) ;;; irow $ (m,<br />

igrid1 $ (curry $ (R)) $ n) ;;; (b, r))"<br />

height_def: "height == % (m, n, R) (l, t) (b, r). Height ((l, t) ;;; irow $ (m,<br />

igrid1 $ (curry $ (R)) $ n) ;;; (b, r))"<br />

width_def: "width == % (m, n, R) (l, t) (b, r). Width ((l, t) ;;; irow $ (m,<br />

igrid1 $ (curry $ (R)) $ n) ;;; (b, r))"<br />

igrid_def: "igrid == (| Def = struct, Height = height, Width = width |)"<br />

declare width_def [simp]<br />

declare height_def [simp]<br />

declare struct_def [simp]<br />

section {* Validity <strong>of</strong> width and height functions *}<br />

theorem height_ge0_int: "!! (m::int) (n::int) (R::(((int*int)=>(’t313*’t313)=>(’t313<br />

*’t313)=>bool,(int*int)=>(’t313*’t313)=>(’t313*’t313)=>int)block)) (l::(’t313)<br />

vector) (t::(’t313)vector) (b::(’t313)vector) (r::(’t313)vector). [| ALL (qs396<br />

::(int*int)) (qs397::(’t313*’t313)) (qs398::(’t313*’t313)). 0 (’t313*’t313)=>(’t313*’t313)=>int)block)) (l::(’t313)<br />

vector) (t::(’t313)vector) (b::(’t313)vector) (r::(’t313)vector). [| ALL (qs396<br />

::(int*int)) (qs397::(’t313*’t313)) (qs398::(’t313*’t313)). 0 (’t313*’t313)=>(’t313*’t313)=>int)block)) (l::(’t313)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!