Parcoursup / Calcul de l'ordre d'appel des candidats index
module RuntimeVerificationSpecP1 use int.Int use seq.Seq use proofs.ordre_appel.seq_voeux.SeqVoeux use mach.java.util.Set 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 tx_boursiers_ok (s : seq_voeu) (tx_b : int) = tx_b * (length s) <= 100 * (nb_boursiers s) predicate candidats_is_s (s : seq_voeu) (candidats : set integer) = (length s = Set.size candidats) /\ ( (forall c : integer. Set.contains candidats c -> exists k:integer. (0 <= k < length s && c = get_g_cn_cod s[k])) /\ (forall k:integer. 0 <= k < length s -> Set.contains candidats (get_g_cn_cod s[k]))) predicate p1_loc (s : seq_voeu) (tx_b : int) (i : int) = forall k. 0 <= k < i -> (tx_boursiers_ok s[..k] tx_b \/ non_boursiers_seulement s[k..]) predicate spec (grp : GroupeClassementValide.t) = let s = get_ordre_appel_list grp in let tx_b = get_taux_min_boursiers_pourcents grp in p1_loc s tx_b (length s) end module RuntimeVerificationSpecP1_Lemmas use int.Int use seq.Seq use mach.java.util.Set use mach.java.lang.Integer use proofs.ordre_appel.seq_voeux.SeqVoeux use proofs.ordre_appel.seq_voeux.SeqVoeuxTaux use proofs.ordre_appel.properties.q1.Q1 use proofs.ordre_appel.specs.GroupeClassementValideProperties use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse use fr.parcoursup.whyml.ordreappel.algo.groupe_classement_valide.GroupeClassementValide use export RuntimeVerificationSpecP1 let lemma candidats_is_s_snoc (s : seq_voeu) (ocandidats candidats: set integer) (v : VoeuClasse.t) requires { Set.size ocandidats < max_integer } requires { 0 <= length (snoc s v) <= max_integer } requires { candidats_is_s s ocandidats } requires { Set.is_add ocandidats candidats (get_g_cn_cod v) } ensures { candidats_is_s (snoc s v) candidats } = let sp = snoc s v in let cv = get_g_cn_cod v in assert { forall c : integer. Set.contains candidats c -> c <> cv -> exists k:integer. (0 <= k < length sp && c = get_g_cn_cod sp[k]) }; assert { exists k:integer. (0 <= k < length sp && cv = get_g_cn_cod sp[k]) } let lemma candidats_is_s_l1 (s : seq_voeu) (candidats: set integer) (v : VoeuClasse.t) requires { candidats_is_s s candidats } requires { forall k : integer. 0 <= k < length s -> get_g_cn_cod s[k] <> get_g_cn_cod v } ensures { not Set.contains candidats (get_g_cn_cod v) } = () let lemma candidats_is_s_l2 (s : seq_voeu) (ocandidats candidats: set integer) (i : int) requires { Set.size ocandidats < max_integer } requires { 0 <= i < length s } requires { candidats_is_s s[..i] ocandidats } requires { Set.is_add ocandidats candidats (get_g_cn_cod s[i]) } ensures { candidats_is_s s[.. i+1] candidats } = candidats_is_s_snoc s[..i] ocandidats candidats s[i] let lemma nb_boursiers_snoc (s : seq_voeu) (oboursiers boursiers : set integer) (i : int) requires { 0 <= i < length s } requires { Set.size oboursiers < max_integer } requires { nb_boursiers s[..i] = Set.size oboursiers } requires { Set.is_add oboursiers boursiers (get_g_cn_cod s[i]) } requires { est_boursier s[i] } ensures { nb_boursiers s[..i+1] = Set.size boursiers } = () let lemma tx_boursiers_ok_snoc (s : seq_voeu) (tx_b : integer) (i : int) requires { 0 <= i < length s } requires { 0 <= tx_b <= 100 } requires { tx_boursiers_ok s[..i] tx_b } requires { est_boursier s[i] } ensures { tx_boursiers_ok s[..i+1] tx_b } = assert { s[..i+1] = snoc s[..i] s[i] } let lemma tx_boursiers_ok_equiv_seq_respecte_taux_b (s : seq_voeu) (tx_b : Taux.t) ensures { tx_boursiers_ok s tx_b <-> seq_respecte_taux_b tx_b s } = () let lemma spec_imply_rv_p1 (grp : GroupeClassementValide.t) requires { ordre_appel_properties grp } ensures { spec grp } = let s = get_ordre_appel_list grp in let tx_b = get_taux_min_boursiers grp in assert { q1 tx_b s } end (* generated on Thu Nov 21 02:04:27 UTC 2024 from rev: *)
Generated by why3doc 1.7.2+git