Etude dune bibliothèque: Permutations sur les listes
IntroductionPermutationPropriétésListesConclusion 1234 Les permutations standard: - permutations sur un ensemble d entiers naturels. - permutations sur un ensemble de la forme [0,n[ où n est un entier naturel. - généralisation aux ensembles de la forme [0, n[ où n peut être infini. Les permutations appliquées aux listes
IntroductionPermutationPropriétésListesConclusion 2134 Permutation: sigma: [ nat -> nat] Définie sur nat ou un ensemble de nat (setof[nat]) 2 fonctions définissent le domaine dapplication de la permutation o support?(ns: setof[nat])(sigma:[nat -> nat]) :bool o below?(n:nat): [nat->bool]
IntroductionPermutationPropriétésListesConclusion 2134 Support? Prédicat définit o sur un ensemble dentiers naturels ns o sur une fonction de permutation sigma: [nat-> nat] si k nappartient pas ns alors la permutation de lélément à lindice k na aucun effet => sigma(k) =k si k nappartient pas ns, car k ne fait pas partie de lensemble des éléments à permuter. support?(ns: setof[nat])(sigma:[nat -> nat]) :bool
IntroductionPermutationPropriétésListesConclusion 2134 Below? Prédicat définit o sur un entier n o qui retourne un sous-ensemble de nat Ce prédicat retourne lensemble des entiers inférieurs à n, elle permet deffectuer une restriction de lensemble des nat, en le bornant par n. below? (n:nat): [nat->bool]
IntroductionPermutationPropriétésListesConclusion 2134 Permutation? Deux définitions de la permutation, cest à dire surcharge de la fonction permutation?(ns:setof[nat])(sigma: [nat->nat]) :bool permutation?(n:nat)(sigma: [nat->nat]) :bool
IntroductionPermutationPropriétésListesConclusion 2134 Permutation? permutation?(ns:setof[nat])(sigma: [nat->nat]) :bool sigma est une permutation sur ns si: sigma est bijective et si support?(ns)(sigma) est vrai sigma bijective signifie: o Pour tout x appartenant à nat, il existe y appartenant à nat / sigma(x) = y o Pour tout y appartenant à nat, il existe un unique x nat / sigma(x) = y
IntroductionPermutationPropriétésListesConclusion 2134 Permutation? permutation?(ns:setof[nat])(sigma: [nat->nat]) :bool support?(ns)(sigma) est vrai signifie que pour tout élément k nappartenant pas à ns, sigma(k)=k Ce qui veut dire que sigma est une permutation sur lensemble ns.
IntroductionPermutationPropriétésListesConclusion 2134 Permutation? permutation?(n:nat)(sigma: [nat->nat]) :bool la permutation nest plus définie sur un ensemble dentiers infini mais sur un ensemble finis dentiers borné par n. sigma est une permutation si permutation?(below?(n))(sigma) est vrai On fait ici appel à la définition de la permutation sur un ensemble dentiers définie précédemment.
IntroductionPermutationPropriétésListesConclusion 2143 Les différents lemmes : On retrouve pour les deux types de permutations (finies et sur un ensemble de naturels) les lemmes suivants : L identité est une permutation. L inverse d une permutation est une permutation. La composition d une permutation est une permutation.
IntroductionPermutationPropriétésListesConclusion 2143 La permutation préserve le support. Toute permutation sur un ensemble est une bijection sur cet ensemble. Les différents lemmes :
IntroductionPermutationPropriétésListesConclusion 2143 Généralisation à des permutations finies ou infinies : Prédicat initial?(ns :setof[nat]) : indique si ns est de la forme [0, r[. Jugement below_n_initial_segment : indique que (below?) et (initial?) ont le même type.
IntroductionPermutationPropriétésListesConclusion 2143 Lemme initial_segment_cases : explique la signification de initial?, c est à dire quun ensemble est de type (initial?) s il est infini où de la forme [0, r[. Prédicat initial_permutation? : c est la même chose que finite_permutation? Généralisé à des ensembles infinis.
IntroductionPermutationPropriétésListesConclusion 4123 Contexte fini Théorie paramétrée par le type des éléments des listes On se rapporte au cas de permutations sur des intervalles entiers en assimilant un élément de la liste à son rang dans la liste
IntroductionPermutationPropriétésListesConclusion 4123 Prédicat principal : permute? permute? : L1 : list[T] x L2 : list[T] x : [nat -> nat] : bool Renvoie VRAI si (L1) = L2 –Longueur(L1) = Longueur(L2) = L – est une permutation de support [1,L] –Pour tout i < L, L1[i] = L2[ (i)]
IntroductionPermutationPropriétésListesConclusion 4123 Une extension de permute? On surcharge permute? : ce nouveau prédicat prend deux listes et renvoie vrai si lune est une permutation de lautre permute? : L1 : list[T] x L2 : list[T] : bool Utilisation du prédicat permute? original : permute?(L1,L2) il existe : (nat -> nat) tq permute?(L1,L2, )
IntroductionPermutationPropriétésListesConclusion 4123 Lemmes permute? présente plusieurs propriétés intéressantes : –Réflexive –Symétrique –Transitive
IntroductionPermutationPropriétésListesConclusion 4123 Démonstrations: réflexive Démonstrations : réflexive Démontrer quune liste est une permutation delle-même par lidentité Démonstration triviale
IntroductionPermutationPropriétésListesConclusion 4123 Démonstrations : symétrique permute?(L1,L2, ) => permute?(L2,L1, -1 ) 3 buts : –Longueur(L2) = Longueur(L1) : trivial – -1 est une permutation : on utilise le lemme inverse_permutation –Pour tout i : L1[i] = L2[ (i)] On applique le lemme permutation_preserve_support et un peu de calcul
IntroductionPermutationPropriétésListesConclusion 4123 Démonstrations : transitive permute?(L1,L2, 12) & permute?(L2,L3, 23) => permute?(L1,L3, 12 o 23) Longueurs : trivial 12 o 23 est une permutation daprès le lemme compose_finite_permutation Calcul avec utilisation du lemme permutation_preserve_support
IntroductionPermutationPropriétésListesConclusion 4123 Une propriété : permute?_equivalence Ce jugement affirme léquivalence entre : –permute?(L1,L2) –equivalence?(L1,L2) Equivalence?
IntroductionPermutationPropriétésListesConclusion 4213 Cette bibliothèque permet une définition simple de la permutation appliquée à n importe quel ensemble d entiers On peut lutiliser par exemple pour la définition d un algorithme de tri par permutation.