Parcoursup / Calcul de l'ordre d'appel des candidats index


(*
 https://framagit.org/parcoursup/algorithmes-de-parcoursup/-/tree/master/src/main/java/fr/parcoursup/algos/ordreappel/algo/GroupeClassement.java
 *)
module GroupeClassementClone
  [@java:package:fr.parcoursup.whyml.ordreappel.algo]

  use int.Int
  use seq.Seq
  use seq.Distinct
  use mach.java.lang.Integer
  use mach.java.util.Set
  use mach.java.util.List
  use proofs.lib.seq.Seq
  use fr.parcoursup.whyml.ordreappel.algo.taux.Taux
  use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse
  use proofs.ordre_appel.seq_voeux.SeqVoeux
  use proofs.ordre_appel.seq_voeux.SeqVoeuxGroupe
  use proofs.ordre_appel.seq_voeux.SeqVoeuxTaux
  use fr.parcoursup.whyml.ordreappel.algo.voeu_classe.VoeuClasse_Props
  use fr.parcoursup.whyml.exceptions.invalid_argument_exception.InvalidArgumentException
  use fr.parcoursup.whyml.exceptions.verification_exception.VerificationException
  use fr.parcoursup.whyml.exceptions.verification_exception_message.VerificationExceptionMessage

  type t

  val ghost function seq_voeux_classes[@java:ignore] (_ : t) : Seq.seq VoeuClasse.t

  meta coercion function seq_voeux_classes

  val function get_c_gp_cod (self : t) : integer

  val function get_nb_voeux_classes (self : t) : integer
    ensures { result = Integer.enforced_integer (Seq.length self) }

  val get_ith_voeu_classe_safe [@java:visibility:package] (self : t) (i : integer) : VoeuClasse.t
    requires { 0 <= i < get_nb_voeux_classes self }
    ensures { result = self[i] }

  let get_ith_voeu_classe (self : t) (i : integer) : VoeuClasse.t
    ensures { result = self[i] }
    raises { InvalidArgumentException.E _ -> not (0 <= i < get_nb_voeux_classes self)}
  =
    if (not (0 <= i && i < get_nb_voeux_classes self) ) then
      raise InvalidArgumentException.E (index_out_of_bounds i);
    get_ith_voeu_classe_safe self i

  let get_ith_rang_safe [@java:visibility:package] (self : t) (i : integer) : integer
    requires { 0 <= i < get_nb_voeux_classes self }
    ensures { result = get_rang self[i] }
  =
    VoeuClasse.get_rang (get_ith_voeu_classe_safe self i)

  let get_ith_rang (self : t) (i : integer) : integer
    ensures { result = get_rang self[i] }
    raises { InvalidArgumentException.E _ -> not (0 <= i < get_nb_voeux_classes self) }
  =
    VoeuClasse.get_rang (get_ith_voeu_classe self i)

  let get_ith_rang_appel_safe [@java:visibility:package] (self : t) (i : integer) : integer
    requires { 0 <= i < get_nb_voeux_classes self }
    ensures { result = get_rang_appel self[i] }
  =
    VoeuClasse.get_rang_appel (get_ith_voeu_classe_safe self i)

  let get_ith_rang_appel (self : t) (i : integer) : integer
    ensures { result = get_rang_appel self[i] }
    raises { InvalidArgumentException.E _ -> not (0 <= i < get_nb_voeux_classes self) }
  =
    VoeuClasse.get_rang_appel (get_ith_voeu_classe self i)

  let get_ith_g_cn_cod_safe [@java:visibility:package] (self : t) (i : integer) : integer
    requires { 0 <= i < get_nb_voeux_classes self }
    ensures { result = get_g_cn_cod self[i] }
  =
    VoeuClasse.get_g_cn_cod (get_ith_voeu_classe_safe self i)

  let get_ith_g_cn_cod (self : t) (i : integer) : integer
    ensures { result = get_g_cn_cod self[i] }
    raises { InvalidArgumentException.E _ -> not (0 <= i < get_nb_voeux_classes self) }
  =
    VoeuClasse.get_g_cn_cod (get_ith_voeu_classe self i)

  val function get_taux_min_boursiers_pourcents (self : t) : integer

  val function get_taux_min_du_secteur_pourcents (self : t) : integer

  predicate field_in_set (self : t) (s : set integer) (get_r : VoeuClasse.t -> integer) (i : int) =
    forall k. 0 <= k < i -> Set.contains s (get_r self[k])

  predicate set_in_field (self : t) (s : set integer) (get_r : VoeuClasse.t -> integer) (i : int) =
    forall r : integer. Set.contains s r ->
      (exists k. 0 <= k < i && r = get_r self[k])

  predicate groupe_ok (self : t) =
       0 <= get_taux_min_boursiers_pourcents self <= 100
    /\ 0 <= get_taux_min_du_secteur_pourcents self <= 100
    /\ seq_groupe_ok self
end

(* generated on Mon Dec  2 02:04:28 UTC 2024 from rev:  *)

Generated by why3doc 1.7.2+git