diff --git a/_CoqProject b/_CoqProject index 619240c9868996a2a89282c338e89e3bfe3a1b7b..1fd7ee3119b3eae601e10513f2b41f06400e8fad 100644 --- a/_CoqProject +++ b/_CoqProject @@ -15,5 +15,6 @@ propagation.v fifo.v static_priority.v examples/case_study/arbitrary_flows.v +examples/case_study/case.v COQDOCFLAGS = "-g -interpolate -utf8 --external https://math-comp.github.io/htmldoc/ mathcomp -R . NCCoq" diff --git a/examples/case_study/CaseStudy.nc b/examples/case_study/CaseStudy.nc index 78d8277be19d042054965c0efebff03b769c4231..63e2cc8d0ee50cb62c819e538389ad16e73a458f 100644 --- a/examples/case_study/CaseStudy.nc +++ b/examples/case_study/CaseStudy.nc @@ -174,7 +174,7 @@ f3_E2E_delay ################################### ### f4 -f4_E2E_service:= beta_S3 * beta_S5_1 +f4_E2E_service:= beta_S3 * beta_S5_2 f4_E2E_service f4_E2E_delay:= hdev(alpha4, f4_E2E_service) @@ -183,7 +183,7 @@ f4_E2E_delay ################################### ### f5 -f5_E2E_service:= beta_S4 * beta_S5_1 +f5_E2E_service:= beta_S4 * beta_S5_2 f5_E2E_delay:= hdev(alpha5, f5_E2E_service) f5_E2E_delay diff --git a/examples/case_study/case.v b/examples/case_study/case.v new file mode 100644 index 0000000000000000000000000000000000000000..424e04b36cd1472091a885fc6aa850386612ed07 --- /dev/null +++ b/examples/case_study/case.v @@ -0,0 +1,504 @@ +From mathcomp Require Import all_ssreflect. +From minerve Require Import tactic. + +Definition d0 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, +oo%E))) ] |}%bigQ. + +(* Contrainte *) + +Definition alpha1 := F_of_sequpp {| + sequpp_T := 2; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 8_000%:E)))] |}%bigQ. + +Definition alpha2 := alpha1. +Definition alpha3 := alpha1. +Definition alpha4 := alpha1. +Definition alpha5 := alpha1. + +Definition beta1 := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 100_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (100_000, 0%:E)))] |}%bigQ. + +Definition beta2 := beta1. +Definition beta3 := beta1. +Definition beta4 := beta1. +Definition beta5 := beta1. + +(***********************************************) +(* Serveur S1 *) +(***********************************************) + +Definition alpha_S1 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 60_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (60_000, 24_000%:E)))] |}%bigQ. + +(* alpha_S1:= alpha1 + alpha2 + alpha3 *) +Goal alpha_S1 = alpha1 + alpha2 + alpha3. +Proof. nccoq. Qed. + +(* beta_S1_delay:= hdev(alpha_S1, beta1) *) +Goal hDev_bounded alpha_S1 beta1 (6/25). +Proof. nccoq. Qed. + +(* beta_S1:= delay( beta_S1_delay ) *) +Definition beta_S1 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (6/25, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(* alpha1_S1':= alpha1 / beta_S1 *) +Definition alpha1_S1' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (12_800%:E, (20_000, 12_800%:E))) ] |}%bigQ. + +Goal alpha1 / beta_S1 <= alpha1_S1'. +Proof. nccoq. Qed. + +(* alpha1_S1:= alpha1_S1 /\ d0 *) +Definition alpha1_S1 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 12_800%:E))) ] |}%bigQ. + +Goal F_min alpha1_S1' d0 = alpha1_S1. +Proof. nccoq. Qed. + +(* Pareil pour alpha2 et alpha3 *) +Definition alpha2_S1 := alpha1_S1. +Definition alpha3_S1 := alpha1_S1. + +(***********************************************) +(* Serveur S2 1 *) +(***********************************************) + +(* beta_S2_1_delay:= hdev( alpha1_S1, beta2 ) *) +Goal hDev_bounded alpha1_S1 beta2 (16/125)%bigQ. +Proof. nccoq. Qed. + +(* beta_S2_1:= delay( beta_S2_1_delay ) *) +Definition beta_S2_1 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (16/125, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(* alpha1_S2' := ( alpha1_S1 / beta_S2_1 ) *) +Definition alpha1_S2' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (15_360%:E, (20_000, 15_360%:E))) ] |}%bigQ. + +Goal alpha1_S1 / beta_S2_1 <= alpha1_S2'. +Proof. nccoq. Qed. + +(* alpha1_S2 := alpha1_S2' /\ d0 *) +Definition alpha1_S2 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 15_360%:E))) ] |}%bigQ. + +Goal F_min alpha1_S2' d0 = alpha1_S2. +Proof. nccoq. Qed. + +(***********************************************) +(* Serveur S2 1 *) +(***********************************************) + +(* beta_S2_2_delay:= hdev( alpha2_S1, beta2 ) *) +Goal hDev_bounded alpha2_S1 beta2 (16/125)%bigQ. +Proof. nccoq. Qed. + +(* beta_S2_2:= delay( beta_S2_2_delay ) *) +Definition beta_S2_2 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (16/125, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(* alpha2_S2' := ( alpha1_S1 / beta_S2_1 ) *) +Definition alpha2_S2' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (15_360%:E, (20_000, 15_360%:E))) ] |}%bigQ. + +Goal alpha2_S1 / beta_S2_2 <= alpha2_S2'. +Proof. nccoq. Qed. + +(* alpha2_S2 := alpha2_S2' /\ d0 *) +Definition alpha2_S2 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 15_360%:E))) ] |}%bigQ. + +Goal F_min alpha2_S2' d0 = alpha2_S2. +Proof. nccoq. Qed. + +(***********************************************) +(* Serveur S2 3 *) +(***********************************************) + +(* beta_S2_3_delay:= hdev( alpha1_S1, beta2 ) *) +Goal hDev_bounded alpha1_S1 beta2 (16/125)%bigQ. +Proof. nccoq. Qed. + +(* beta_S2_3:= delay( beta_S2_3_delay ) *) +Definition beta_S2_3 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (16/125, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(* alpha1_S2' := ( alpha1_S1 / beta_S2_3 ) *) +Definition alpha3_S2' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (15_360%:E, (20_000, 15_360%:E))) ] |}%bigQ. + +Goal alpha3_S1 / beta_S2_3 <= alpha3_S2'. +Proof. nccoq. Qed. + +(* alpha1_S2 := alpha1_S2' /\ d0 *) +Definition alpha3_S2 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 15_360%:E))) ] |}%bigQ. + +Goal F_min alpha3_S2' d0 = alpha3_S2. +Proof. nccoq. Qed. + +(***********************************************) +(* Serveur S3 *) +(***********************************************) + +(* alpha_S3 := alpha1_S2 + alpha4 *) +Definition alpha_S3 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 40_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (40_000, 23_360%:E)))] |}%bigQ. + +(* beta_S3_delay:= hdev( alpha_S3 , beta2 ) *) +Goal hDev_bounded alpha_S3 beta2 (146/625)%bigQ. +Proof. nccoq. Qed. + +(* beta_S3 := delay( beta_S3_delay ) *) +Definition beta_S3 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (146/625, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(* alpha1_S3':= (alpha1_S2 / beta_S3 ) *) +Definition alpha1_S3' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (20_032%:E, (20_000, 20_032%:E))) ] |}%bigQ. + +Goal alpha1_S2 / beta_S3 <= alpha1_S3'. +Proof. nccoq. Qed. + +(* alpha4_S3':= (alpha4 / beta_S3 ) *) +Definition alpha4_S3' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (12_672%:E, (20_000, 12_672%:E))) ] |}%bigQ. + +Goal alpha4 / beta_S3 <= alpha4_S3'. +Proof. nccoq. Qed. + +(* alpha1_S3 := alpha1_S3' /\ d0 *) +Definition alpha1_S3 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 20_032%:E))) ] |}%bigQ. + +Goal F_min alpha1_S3' d0 = alpha1_S3. +Proof. nccoq. Qed. + +(* alpha4_S3 := alpha4_S3' /\ d0 *) +Definition alpha4_S3 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 12_672%:E))) ] |}%bigQ. + +Goal F_min alpha4_S3' d0 = alpha4_S3. +Proof. nccoq. Qed. + +(***********************************************) +(* Serveur S4 *) +(***********************************************) + +(* alpha_S4 := alpha3_S2 + alpha5 *) +Definition alpha_S4 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 40_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (40_000, 23_360%:E)))] |}%bigQ. + +(* beta_S4_delay:= hdev( alpha_S4 , beta4 ) *) +Goal hDev_bounded alpha_S4 beta4 (146/625)%bigQ. +Proof. nccoq. Qed. + +(* beta_S4 := delay( beta_S4_delay ) *) +Definition beta_S4 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (146/625, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(* alpha1_S4':= (alpha3_S2 / beta_S4 ) *) +Definition alpha3_S4' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (20_032%:E, (20_000, 20_032%:E))) ] |}%bigQ. + +Goal alpha3_S2 / beta_S4 <= alpha3_S4'. +Proof. nccoq. Qed. + +(* alpha5_S4':= (alpha5 / beta_S4 ) *) +Definition alpha5_S4' := F_of_sequpp {| + sequpp_T := 0; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (12_672%:E, (20_000, 12_672%:E))) ] |}%bigQ. + +Goal alpha5 / beta_S4 <= alpha5_S4'. +Proof. nccoq. Qed. + +(* alpha3_S4:= alpha3_S4 /\ d0 *) +Definition alpha3_S4 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 20_032%:E))) ] |}%bigQ. + +Goal F_min alpha3_S4' d0 = alpha3_S4. +Proof. nccoq. Qed. + +(* alpha5_S4:= alpha5_S4 /\ d0 *) +Definition alpha5_S4 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 20_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (20_000, 12_672%:E))) ] |}%bigQ. + +Goal F_min alpha5_S4' d0 = alpha5_S4. +Proof. nccoq. Qed. + +(***********************************************) +(* Serveur S5_1 *) +(***********************************************) + +(* alpha_S5_1:= alpha1_S3 + alpha2_S2 + alpha3_S4 *) +Definition alpha_S5_1 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 60_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (60_000, 55424%:E)))] |}%bigQ. + +(* beta_S5_1_delay:= hdev( alpha_S5_1 , beta5 ) *) +Goal hDev_bounded alpha_S5_1 beta5 (1732/3125)%bigQ. +Proof. nccoq. Qed. + +(* beta_S5_1 := delay( beta_S5_1_delay ) *) +Definition beta_S5_1 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (1732/3125, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +(***********************************************) +(* Serveur S5_2 *) +(***********************************************) + +(* alpha_S5_2:= alpha4_S3 + alpha5_S4 *) +Definition alpha_S5_2 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 40_000; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (40_000, 25344%:E)))] |}%bigQ. + +(* beta_S5_2_delay:= hdev( alpha_S5_2 , beta5 ) *) +Goal hDev_bounded alpha_S5_2 beta5 (792/3125)%bigQ. +Proof. nccoq. Qed. + +(* beta_S5_2 := delay( beta_S5_2_delay ) *) +Definition beta_S5_2 := F_of_sequpp {| + sequpp_T := 1; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (792/3125, (0%:E, (0, +oo%E))) + ] |}%bigQ. + + +(******************************************************) +(* End to end delay *) +(******************************************************) + +(* f1 *) + +(* beta1_E2E:= ( beta_S1 * beta_S2_1 * beta_S3 * beta_S5_1 *) +Definition beta1_E2E := F_of_sequpp {| + sequpp_T := 2; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := (* list of (x, (y, (rho, sigma))) *) + [:: (0, (0%:E, (0, 0%:E))); + (3612/3125, (0%:E, (0, +oo%E))) + ] |}%bigQ. + +Goal beta1_E2E = (beta_S1 * beta_S2_1 * beta_S3 * beta_S5_1). +Proof. nccoq. Qed. + +(* f1_E2E_delay:= hdev(alpha1, f1_E2E_service) *) +Goal hDev_bounded alpha1 beta1_E2E (3612/3125)%bigQ. +Proof. +nccoq. +Qed. + +(* f2 *) + +(* beta2_E2E:= (beta_S1 * beta_S2_2 * beta_S5_1 *) +Definition beta2_E2E := F_of_sequpp {| + sequpp_T := 2; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := [:: (0, (0%:E, (0, 0%:E))); + (2882/3125, (0%:E, (0, +oo%E))) ] |}%bigQ. + +Goal beta2_E2E = (beta_S1 * beta_S2_2 * beta_S5_1). +Proof. nccoq. Qed. + +(* f2_E2E_delay:= hdev(alpha2, f2_E2E_service) *) +Goal hDev_bounded alpha2 beta2_E2E (2882/3125)%bigQ. +Proof. +nccoq. +Qed. + +(* f3 *) + +(* beta3_E2E:= ( beta_S1 * beta_S2_3 * beta_S4 * beta_S5_1 *) +Definition beta3_E2E := F_of_sequpp {| + sequpp_T := 2; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := [:: (0, (0%:E, (0, 0%:E))); + (3612/3125, (0%:E, (0, +oo%E))) ] |}%bigQ. + +Goal beta3_E2E = (beta_S1 * beta_S2_3 * beta_S4 * beta_S5_1). +Proof. nccoq. Qed. + +(* f3_E2E_delay:= hdev(alpha3, f3_E2E_service) *) +Goal hDev_bounded alpha3 beta3_E2E (3612/3125)%bigQ. +Proof. +nccoq. +Qed. + +(* f4 *) + +(* beta4_E2E:= ( beta_S3 * beta_S5_2 *) +Definition beta4_E2E := F_of_sequpp {| + sequpp_T := 2; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := [:: (0, (0%:E, (0, 0%:E))); + (1522/3125, (0%:E, (0, +oo%E))) ] |}%bigQ. + +Goal beta4_E2E = (beta_S3 * beta_S5_2). +Proof. nccoq. Qed. + +(* f4_E2E_delay:= hdev(alpha4, f4_E2E_service) *) +Goal hDev_bounded alpha4 beta4_E2E (1522/3125)%bigQ. +Proof. +nccoq. +Qed. + +(* f5 *) + +(* beta5_E2E:= ( beta_S4 * beta_S5_2 *) +Definition beta5_E2E := F_of_sequpp {| + sequpp_T := 2; + sequpp_d := 1; + sequpp_c := 0; + sequpp_js := [:: (0, (0%:E, (0, 0%:E))); + (1522/3125, (0%:E, (0, +oo%E))) ] |}%bigQ. + +Goal beta5_E2E = (beta_S4 * beta_S5_2). +Proof. nccoq. Qed. + +(* f5_E2E_delay:= hdev(alpha4, f4_E2E_service) *) +Goal hDev_bounded alpha5 beta5_E2E (1522/3125)%bigQ. +Proof. +nccoq. +Qed.