JavaCard p.1/41

Similar documents

=

「計算と論理」 Software Foundations その4

8 if switch for while do while 2

ALG ppt

アルゴリズムとデータ構造1

K227 Java 2

AWT setcolor, drawstring Java AWT Abstract Window Toolkit Graphics AWT import import java.awt.* ; // AWT Graphics import java.awt.graphics; // AWT Gra

AWT setcolor, drawstring Java AWT Abstract Window Toolkit Graphics AWT import import java.awt.* ; // AWT Graphics import java.awt.graphics; // AWT Gra

yamato_2016_0915_色校_CS3.indd

9_白銀志栄_Final.indd

ex01.dvi

Java Java Java Java Java 4 p * *** ***** *** * Unix p a,b,c,d 100,200,250,500 a*b = a*b+c = a*b+c*d = (a+b)*(c+d) = 225

ex01.dvi

VDM-SL VDM VDM-SL Toolbox VDM++ Toolbox 1 VDM-SL VDM++ Web bool

syuryoku


資料4-1 一時預かり事業について

土壌環境行政の最新動向(環境省 水・大気環境局土壌環境課)

明解Javaによるアルゴリズムとデータ構造

r02.dvi

ohp02.dvi

Parametric Polymorphism

Java演習(4) -- 変数と型 --

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

ALG2012-F.ppt

1P.PDF

2

01.PDF

<8EAD8CA48B B95B62E706466>

A B C



SystemC言語概論

陦ィ邏・2

: : : TSTank 2

Microsoft Word - keisankigairon.ch doc

PowerPoint Presentation

国際会館ICC冊子2013.indd

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

/ , ,908 4,196 2, ,842 38, / / 2 33 /

アルゴリズムとデータ構造1

r1.dvi

untitled

「計算と論理」 Software Foundations その3

- 1 -

%

2

ID010-2

untitled

Safari AppletViewer Web HTML Netscape Web Web 15-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web up

Java演習(6) -- 条件分岐 --

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

新・明解Javaで学ぶアルゴリズムとデータ構造

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i +=

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def


1. A0 A B A0 A : A1,...,A5 B : B1,...,B

新・明解Java入門

19 3!! (+) (>) (++) (+=) for while 3.1!! (20, 20) (1)(Blocks1.java) import javax.swing.japplet; import java.awt.graphics;

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

com.ibm.etools.egl.jsfsearch.tutorial.doc.ps

2.2 Java C main Java main 2 C 6 C Java 3 C Java ( ) G101Hello.java G101Hello main G101Hello.java /* G101Hello */ class G101Hello { /* main */ public s

haskell.gby

解きながら学ぶJava入門編

VB.NETコーディング標準

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

とても使いやすい Boost の serialization

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

main

listings-ext

情報処理学会研究報告 IPSJ SIG Technical Report Vol.2015-SE-187 No /3/12 Java 1,a) 1,b) 1,c) 1,d) Known Unknown Unknown Unknown 2 Known Unknown Archface-U

handout.dvi

() / (front end) (back end) (phase) (pass) 1 2

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1


TOEIC

1. 入力画面

Jacques Garrigue

D0050.PDF

オブジェクト脳のつくり方

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

問題1 以下に示すプログラムは、次の処理をするプログラムである

1


,,,,., C Java,,.,,.,., ,,.,, i

# let st1 = {name = "Taro Yamada"; id = };; val st1 : student = {name="taro Yamada"; id=123456} { 1 = 1 ;...; n = n } # let string_of_student {n

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

untitled


ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

( ) ( ) lex LL(1) LL(1)

2016 VOCALOID Group, Yamaha Corporation 2

コーディング基準.PDF

A B 1: Ex. MPICH-G2 C.f. NXProxy [Tanaka] 2:

PowerPoint Presentation

Transcription:

JavaCard Email : nagamiya@comp.cs.gunma-u.ac.jp p.1/41

Hoare Java p.2/41

(formal method) (formal specification) (formal) JML, D, VDM, (formal method) p.3/41

Hoare Java p.4/41

(precondition) (postcondition) p.5/41

Hoare [φ] P [ψ ] φ, ψ P φ P P ψ [φ] P [ψ ] P p.6/41

[ψ[e/x]] x = E [ψ ] ψ[e/x] ψ x E [x + 1 > 1] x = x + 1 [x > 1] p.7/41

[φ] C 1 [η ] [η ] C 2 [ψ ] [φ] C 1 ; C 2 [ψ ] φ C 1 η C 2 ψ p.8/41

AR φ φ [φ] C [ψ ] AR ψ ψ [φ ] C [ψ ] p.9/41

AR 0 = 0 [0 = 0 ] x = 0 [x = 0 ] [ ] x = 0 [x = 0 ] [x = 0 ] y = x [y = 0 ] [ ] x = 0; y = x [y = 0 ] p.10/41

AR 0 = 0 [0 = 0 ] x = 0 [x = 0 ] [ ] x = 0 [x = 0 ] [x = 0 ] y = x [y = 0 ] [ ] x = 0; y = x [y = 0 ] [ ] [0 = 0 ] x = 0; [x = 0 ] y = x; [y = 0 ] p.11/41

if [φ B ] C 1 [ψ ] [φ B ] C 2 [ψ ] [φ] if B {C 1 else {C 2 [ψ ] φ true false φ B B φ B C 1 C 2 ψ p.12/41

while [ψ B ] C [ψ ] [ψ ] while B {C [ψ B ] ψ (loop invariant) ψ ψ B true B false C ψ B p.13/41

y = 1; z = 0; l1: while (z!= x) { z = z + 1; y = y * z; l2: p.14/41

[ ] y = 1; z = 0; l1: while (z!= x) { z = z + 1; y = y * z; l2: [y = x!] p.15/41

x = 6 z at l1 y at l1 z x! at l1 0 0 1 true 1 1 1 true 2 2 2 true 3 3 6 true 4 4 24 true 5 5 120 true 6 6 720 false p.16/41

x = 6 z at l1 y at l1 z x! at l1 0 0 1 true 1 1 1 true 2 2 2 true 3 3 6 true 4 4 24 true 5 5 120 true 6 6 720 false y = z! p.16/41

while [[ ]] y = 1; z = 0; [[y = z!]] l1: while (z!= x) { [[y = z! z x]] z = z + 1; y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] p.17/41

[[ ]] y = 1; z = 0; [[y = z!]] l1: while (z!= x) { [[y = z! z x]] z = z + 1; [[y z = z!]] y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] p.18/41

[[ ]] y = 1; z = 0; [[y = z!]] l1: while (z!= x) { [[y = z! z x]] [[y (z + 1) = (z + 1)!]] z = z + 1; [[y z = z!]] y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] p.19/41

[[ ]] y = 1; [[y = 0!]] z = 0; [[y = z!]] l1: while (z!= x) { [[y = z! z x]] [[y (z + 1) = (z + 1)!]] z = z + 1; [[y z = z!]] y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] p.20/41

[[ ]] [[1 = 0!]] y = 1; [[y = 0!]] z = 0; [[y = z!]] l1: while (z!= x) { [[y = z! z x]] [[y (z + 1) = (z + 1)!]] z = z + 1; [[y z = z!]] y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] p.21/41

[[ ]] [[1 = 0!]] AR 1 = 0! y = 1; [[y = 0!]] z = 0; [[y = z!]] l1: while (z!= x) { [[y = z! z x]] AR (y = z! z x) [[y (z + 1) = (z + 1)!]] (y (z + 1) = (z + 1)!) z = z + 1; [[y z = z!]] y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] AR (y = z! z = x) (y = x!) p.22/41

[[ ]] [[1 = 0!]] AR 1 = 0! y = 1; [[y = 0!]] z = 0; [[y = z!]] Q.E.D l1: while (z!= x) { [[y = z! z x]] AR (y = z! z x) [[y (z + 1) = (z + 1)!]] (y (z + 1) = (z + 1)!) z = z + 1; [[y z = z!]] y = y * z; [[y = z!]] l2: [[y = z! z = x]] [[y = x!]] AR (y = z! z = x) (y = x!) p.23/41

Hoare Java p.24/41

(Design by contract) [φ] P [ψ ] (contract) φ P P ψ φ ψ p.25/41

(precondition) (postcondition) (invariant) p.26/41

Java Modeling Language Java Design by contract p.27/41

JML JML @ //@... /*@... *@... *@/ p.28/41

JML requires ensures //@ requires array.length >=1; //@ ensures \result >= x; invariant //@ public invariant balance >= 0; modefiable //@ modifiable array[x]; p.29/41

JML \result E \old(e) \forall, \exists p.30/41

Krakatoa+Coq Java + JML (Ocaml) proof obligation ( ) Krakatoa Why Coq Krakatoa: Java/JML Why: Hoare proof obligation Coq: proof obligation p.31/41

Krakatoa+Coq Java + JML (Ocaml) proof obligation ( ) Krakatoa Why Coq Krakatoa: Java/JML Why: Hoare proof obligation Coq: proof obligation proof obligation p.31/41

Gemplus JavaCard (ID ) p.32/41

Utils Jour Mois Annee Decimal Pcpcapinterfaces PurseLoyaltyInterface Loyalty TransactionInterface Shareable p.33/41

Utils Jour Mois Annee Decimal Pcpcapinterfaces PurseLoyaltyInterface Loyalty TransactionInterface Shareable p.33/41

Decimal 3.493 JavaCard int intpart, decpart short decpart 3 Decimal 0 <= decpart && decpart < PRECISION setvalue intpart = 3 decpart = 493 oppose PRECISION short 1000 sub add mul p.34/41

add private void add(short e, short f) { intpart += e; decpart += f; if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.35/41

add 3.493 Decimal Decimal intpart = 3 intpart = 4 setvalue decpart = 493 oppose setvalue decpart = 507 oppose sub mul add sub mul add intpart * PRECISION + decpart = 3493 p.36/41

add /*@ private normal_behavior @ requires -PRECISION < f && f < PRECISION && @ -MAX_DECIMAL_NUMBER <= e && e <= MAX_DECIMAL_NUMBER && @ -MAX_DECIMAL_NUMBER <= e + intpart - 1 && @ e + intpart + 1 <= MAX_DECIMAL_NUMBER; @ modifiable intpart, decpart; @ ensures intpart * PRECISION + decpart == @ (\old(intpart) + e) * PRECISION + \old(decpart) + f; @*/ private void all (short e, short f) {... p.37/41

add private void add(short e, short f) { intpart += e; decpart += f; if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add private void add(short e, short f) { intpart += e; decpart += f; intpart PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add private void add(short e, short f) { intpart += e; decpart += f; intpart PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f intpart PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add private void add(short e, short f) { intpart += e; decpart += f; intpart PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f (intpart + 1) PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add private void add(short e, short f) { intpart += e; decpart += f; intpart PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f (intpart + 1) PRECISION +(decpart PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add (intpart 1) PRECISION + decpart = (intpart 0 + e) PRECISION + decpart 0 + f (intpart + 1) PRECISION +(decpart PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f private void add(short e, short f) { intpart += e; decpart += f; if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add (intpart 1) PRECISION +(decpart + PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f (intpart + 1) PRECISION +(decpart PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f private void add(short e, short f) { intpart += e; decpart += f; if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add (decpart PRECISION ) (intpart 1) PRECISION +(decpart + PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f (decpart > PRECISION ) (decpart PRECISION ) (intpart + 1) PRECISION +(decpart PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f private void add(short e, short f) { intpart += e; decpart += f; if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

add (decpart PRECISION ) (intpart 1) PRECISION +(decpart + PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f Q.E.D (decpart > PRECISION ) (decpart PRECISION ) (intpart + 1) PRECISION +(decpart PRECISION ) = (intpart 0 + e) PRECISION + decpart 0 + f private void add(short e, short f) { intpart += e; decpart += f; if (decpart <= -PRECISION) { decpart += PRECISION; intpart--; else if (decpart >= PRECISION) { decpart -= PRECISION; intpart++; p.38/41

Hoare Java p.39/41

: Krakatoa add proof obligation = : mul p.40/41

Thank You! p.41/41