Parcoursup / Calcul de l'ordre d'appel des candidats index
module RuntimeVerificationSpecP5 use seq.Seq use int.Int use mach.java.lang.Integer use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse use fr.parcoursup.whyml.ordreappel.algo.groupe_classement_valide.GroupeClassementValide predicate p5a_aux (s : seq VoeuClasse.t) (i k : int) = get_rang s[k] >= get_rang s[i] || get_rang_appel s[k] <= get_rang_appel s[i] predicate p5a_loc (s : seq VoeuClasse.t) (i : int) = (not (est_boursier s[i]) && not (est_du_secteur s[i])) -> (forall k. 0 <= k < length s -> p5a_aux s i k) predicate rang_appel_correct_p (q_b q_r rang rang_appel : int) = (100 - (q_b + q_r)) * (rang_appel-1) <= 100 * (1 + rang) predicate p5b_loc (s : seq VoeuClasse.t) (tx_b tx_r : int) (i : int) = (not (est_boursier s[i]) && not (est_du_secteur s[i])) -> tx_b + tx_r < 100 -> rang_appel_correct_p tx_b tx_r (get_rang s[i]) (get_rang_appel s[i]) predicate spec (grp : GroupeClassementValide.t) = let s = get_ordre_appel_list grp in let tx_b = get_taux_min_boursiers_pourcents grp in let tx_r = get_taux_min_du_secteur_pourcents grp in forall k. 0 <= k < length s -> (p5a_loc s k && p5b_loc s tx_b tx_r k) end module RuntimeVerificationSpecP5_LocalLemmas use mach.java.lang.Integer use int.Int use seq.Seq use proofs.ordre_appel.seq_voeux.SeqVoeux use proofs.ordre_appel.properties.q3.Q3 use proofs.ordre_appel.properties.q4_1.Q4_1 use proofs.ordre_appel.properties.q4_2.Q4_2 use proofs.ordre_appel.properties.q5.Q5 use fr.parcoursup.whyml.ordreappel.algo.taux.Taux use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse_Props use fr.parcoursup.whyml.ordreappel.algo.groupe_classement_valide.GroupeClassementValide use proofs.ordre_appel.specs.GroupeClassementValideProperties use RuntimeVerificationSpecP5 let lemma l1 (grp : GroupeClassementValide.t) (s : seq_voeu) (tx_b tx_ds : Taux.t) (i : int) requires { ordre_appel_properties grp } requires { ordre_appel_contiguous grp } requires { s == get_ordre_appel_list grp } requires { 0 <= i < length s } requires { est_non_boursier_hors_secteur s[i] } requires { tx_b = get_taux_min_boursiers grp } requires { tx_ds = get_taux_min_du_secteur grp } ensures { p5a_loc s i } = assert { q3 s }; assert { q4_1a s }; assert { q4_2a s }; assert { q5a s }; for k = i+1 to length s - 1 do invariant { forall j. 0 <= j < k -> p5a_aux s i j } assert { get_rang_appel s[k] > get_rang_appel s[i] }; if get_rang s[k] >= get_rang s[i] then continue; if est_boursier_du_secteur s[k] then begin assert { q3a_loc s k }; absurd; end; if est_non_boursier_du_secteur s[k] then begin assert { q4_1a_loc s k }; assert { est_boursier s[i] }; absurd; end; if est_boursier_hors_secteur s[k] then begin assert { q4_2a_loc s k }; assert { est_du_secteur s[i] }; absurd; end; assert { est_non_boursier_hors_secteur s[k] }; assert { q5a_loc s k }; assert { est_boursier s[i] \/ est_du_secteur s[i] }; absurd; done let lemma l2 (grp : GroupeClassementValide.t) (s : seq_voeu) (tx_b tx_ds : Taux.t) (i : int) requires { ordre_appel_properties grp } requires { ordre_appel_contiguous grp } requires { s == get_ordre_appel_list grp } requires { 0 <= i < length s } requires { est_non_boursier_hors_secteur s[i] } requires { tx_b = get_taux_min_boursiers grp } requires { tx_ds = get_taux_min_du_secteur grp } requires { tx_b + tx_ds < 100 } ensures { p5b_loc s tx_b tx_ds i } = assert { q5b tx_b tx_ds s }; assert { q5b_loc tx_b tx_ds s i }; assert { rang_appel_correct_p tx_b tx_ds (get_rang s[i]) (get_rang_appel s[i]) } end module RuntimeVerificationSpecP5_Lemmas use mach.java.lang.Integer use int.Int use mach.java.util.UnmodifiableList as UL use seq.Seq use proofs.ordre_appel.seq_voeux.SeqVoeux use fr.parcoursup.whyml.ordreappel.algo.taux.Taux use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse_Props use fr.parcoursup.whyml.ordreappel.algo.groupe_classement_valide.GroupeClassementValide use proofs.ordre_appel.specs.GroupeClassementValideProperties use RuntimeVerificationSpecP5_LocalLemmas use export RuntimeVerificationSpecP5 let lemma spec_imply_rv_p5 (grp : GroupeClassementValide.t) requires { ordre_appel_properties grp } requires { ordre_appel_contiguous grp } ensures { spec grp } = let tx_b = get_taux_min_boursiers grp in let tx_ds = get_taux_min_du_secteur grp in let s = UL.content (get_ordre_appel_list grp) in for i = 0 to Seq.length s - 1 do invariant { forall j. 0 <= j < i -> p5a_loc s j } invariant { forall j. 0 <= j < i -> p5b_loc s tx_b tx_ds j } if est_boursier s[i] then continue; if est_du_secteur s[i] then continue; assert { p5a_loc s i }; if Taux.tx tx_ds + Taux.tx tx_b >= 100 then continue; assert { p5b_loc s tx_b tx_ds i }; done end (* generated on Mon Dec 2 02:04:28 UTC 2024 from rev: *)
Generated by why3doc 1.7.2+git