Parcoursup / Calcul de l'ordre d'appel des candidats index
module AlgoOrdreAppel [@java:package:fr.parcoursup.whyml.ordreappel.algo] use int.Int use seq.Seq use mach.java.lang.Integer use mach.java.util.List use mach.java.util.UnmodifiableList use proofs.ordre_appel.specs.GroupeClassementValideProperties use proofs.ordre_appel.rv_specs.RuntimeVerificationSpec_Lemmas as RVSpec use fr.parcoursup.whyml.ordreappel.algo.groupe_classement_valide.GroupeClassementValide use fr.parcoursup.whyml.ordreappel.algo.algo_ordre_appel_entree.AlgoOrdreAppelEntree as AOAE use fr.parcoursup.whyml.ordreappel.algo.algo_ordre_appel_sortie.AlgoOrdreAppelSortie as AOAS use fr.parcoursup.whyml.ordreappel.algo.calcul_ordre_appel_groupe.CalculOrdreAppelGroupe use fr.parcoursup.whyml.exceptions.verification_exception.VerificationException use fr.parcoursup.whyml.verification.verifications_resultats_algo_ordre_appel.VerificationsResultatsAlgoOrdreAppel let calculerOrdresAppels (entree : AOAE.t) : (r : AOAS.t) ensures { AOAS.algo_ordre_appel_entree_sortie_ok entree r } ensures { AOAS.algo_ordre_appel_sortie_ok r } = try let resultat = AOAS.algo_ordre_appel_sortie () in let len = AOAE.get_nb_groupes entree in for i = 0 to len - 1 do invariant { AOAS.get_nb_groupes resultat = i } invariant { forall k. 0 <= k < i -> get_c_gp_cod resultat[k] = get_c_gp_cod entree[k] } invariant { forall k. 0 <= k < i -> 0 <= k < i -> ordre_appel_properties resultat[k] } invariant { forall k. 0 <= k < i -> RVSpec.grp_eq_up_to_rang_appel entree[k] resultat[k] } invariant { forall k. 0 <= k < i -> RVSpec.group_satisfies_specs resultat[k] } let grp = AOAE.get_ith_groupe_safe entree i in let oa = CalculOrdreAppelGroupe.calculer_ordre_appel grp in assert { get_c_gp_cod grp = get_c_gp_cod oa }; AOAS.add_groupe_valide resultat oa; RVSpec.spec_imply_rv (AOAS.get_ith_groupe_safe resultat i); done; assert { RVSpec.donnees_entree_eq_sortie entree resultat }; assert { RVSpec.groups_satisfy_specs resultat }; VerificationsResultatsAlgoOrdreAppel.verifier entree resultat; resultat with | VerificationException.E _ -> absurd end; end (* generated on Thu Nov 21 02:04:27 UTC 2024 from rev: *)
Generated by why3doc 1.7.2+git