Des articles

4.1 : Prélude aux systèmes de représentants distincts


Supposons que les clubs étudiants d'un collège envoient chacun un représentant au gouvernement étudiant parmi les membres du club. La première question de fond est donc : y a-t-il quelque chose d'utile ou d'intéressant que nous puissions dire sur les conditions dans lesquelles il est possible de choisir de tels représentants.

Nous transformons cela en une situation plus mathématique :

Définition : système de représentants distincts (SDR)

Supposons que (A_1,A_2,ldots,A_n) sont des ensembles, que nous appelons un système de réglage. Complet) système de représentants distincts est un ensemble ({x_1, x_2, ldots x_n}) tel que (x_iin A_i) pour tous les (i), et aucun des (x_i) n'est identique. Un système (partiel) de représentants distincts est un ensemble d'éléments distincts ({x_1, x_2, ldots x_k}) tels que (x_iin A_{j_i}), où (j_1,j_2, ldots,j_k) sont des entiers distincts dans ([n]).

Dans l'usage courant, « système de représentants distincts » signifie « système complet de représentants distincts », mais il sera commode de laisser « système de représentants distincts » signifier un système complet ou partiel de représentants distincts selon le contexte. Nous abréger habituellement « système de représentants distincts » comme sdr.

Nous analyserons ce problème de deux manières : en combinatoire et en utilisant la théorie des graphes.


"Séparation des pouvoirs entre autorités" de Vanesag est sous licence CC BY SA 3.0

En théorie, le système de freins et contrepoids est conçu pour s'assurer qu'aucune branche n'a trop de pouvoir sur les autres branches. Comme James Madison l'a écrit dans Federalist Number 51 (1788), « le pouvoir cédé par le peuple est d'abord divisé entre deux gouvernements distincts [le gouvernement fédéral et les gouvernements des différents États], puis la partie attribuée à chacun est divisée entre des départements [l'exécutif, le législatif et le judiciaire].

Comment le système de freins et contrepoids fonctionne-t-il réellement au sein du gouvernement américain ? Les modules de cette norme explorent cette question en termes de contrôle entre les branches, de quels pouvoirs le Président et le Congrès disposent pour mener des guerres, et pour quoi un président peut et doit être destitué.

Les modules pour cette norme comprennent :


Enquête d'évaluation et de satisfaction sur l'utilisabilité de l'interface des logiciels de publication en ligne

L'édition numérique est l'un des programmes nationaux clés. À la différence des modèles de publication numérique traditionnels, les consommateurs pourraient créer des publications numériques personnelles avec le programme d'édition fourni par les entreprises et le combiner avec le Web-to-print pour produire des publications solides. Néanmoins, la convivialité des logiciels de publication en ligne est liée à l'acceptation ou à l'intention d'achat du produit par les consommateurs. Dans ce cas, Focus Group est utilisé pour sélectionner des logiciels de publication en ligne représentatifs (y compris TinTint, Photobook et Hypo) pour évaluer la convivialité de l'interface, enquêter sur la satisfaction subjective des utilisateurs et proposer d'autres suggestions pour la modification de l'interface. La capacité d'apprentissage et le nombre d'erreurs de l'utilisateur sont définis comme indicateurs d'évaluation de la convivialité. Au sein des indicateurs d'évaluation de la capacité d'apprentissage, les résultats montrent que neuf tâches typiques, à l'exception du stockage, présentent une différence significative entre les différents logiciels de publication en ligne. Les tâches typiques d'informations de base sur les œuvres, d'ajout d'images, d'ajustement d'images, de modification de la version du type et de modification des pages du nombre d'erreurs de l'utilisateur révèlent une différence significative sur différents logiciels de publication en ligne. En ce qui concerne l'évaluation de la satisfaction subjective globale avec l'interface, TinTint et Hypo surpassent Photobook, et aucune différence significative n'apparaît entre TinTint et Hypo. On s'attend à ce que le modèle de recherche soit la référence d'application du développement et de l'évaluation d'interfaces dans les industries de contenu numérique.

1. Introduction

L'industrie culturelle et créative a été incluse dans Challenge 2008, Programme national de développement, proposé par le gouvernement en mai 2002. Avec le concept de chaîne industrielle, la valeur des industries culturelles est redéfinie pour élargir le champ créatif, et l'humanité et l'économie sont combinées pour développer industries couvrant l'accumulation culturelle et les avantages économiques. La loi sur le développement de l'industrie culturelle et créative a été rendue publique par le ministère de la Culture en février 2010, dans laquelle l'industrie de l'édition est classée par le Bureau d'information du gouvernement, en 2007 Publishing Almanac, en édition de presse, édition de magazines, édition de livres audio, édition de livres et édition numérique. Les industries de l'édition et des archives numériques sont définies comme les industries couvrant l'édition, la circulation et les archives, appliquant Internet, les technologies de l'information et le mécanisme de gestion du droit d'auteur pour créer de nouveaux modèles d'exploitation pour de nouveaux marchés, améliorant la production, la circulation et la chaîne de service des connaissances numériques. . L'édition numérique couvre les livres électroniques, les magazines électroniques, le papier électronique, les bases de données électroniques et les contenus mobiles. L'édition numérique n'est pas simplement une partie des industries du contenu numérique, mais une nouvelle forme d'édition. Dans de nombreux articles d'édition numérique, l'industrie du livre électronique est au centre des préoccupations du public.

Ces dernières années, des entreprises ont fait la promotion de logiciels de publication en ligne, ce qui est différent des modèles de publication numérique traditionnels. Les éditeurs des industries de l'édition numérique traditionnelles servent de créateurs d'édition, tandis que ceux des industries de l'édition en ligne sont les consommateurs eux-mêmes. Les consommateurs appliquent le programme d'édition fourni par les entreprises pour créer des publications numériques uniques exclusives aux consommateurs individuels et combinant le Web à l'impression pour produire des publications solides. De tels modèles de publication en ligne ont été progressivement appliqués aux albums personnels, aux cartes postales, aux calendriers de bureau et aux cartes mémoire. L'utilisation de modèles de publication en ligne réduit non seulement l'investissement en ressources humaines et les coûts de relecture répétés, mais personnalise également les produits, résout les problèmes de communication entre la production et les consommateurs lors du processus d'édition passé et crée de nouveaux canaux et territoires pour la publication numérique. La publication en ligne est donc considérée comme un modèle de personnalisation standard.

Néanmoins, la science et la technologie hautement développées ont des produits qui ne sont plus demandés pour les fonctions des produits. Lorsque les fonctions entre les différents produits de marque ne sont pas remarquables et qu'il existe de nombreuses options, la convivialité de l'interface devient un facteur clé dans le choix du produit par les utilisateurs [2]. À l'ère du réseau, l'application d'un logiciel de publication en ligne au web-to-print est attendue. La convivialité de l'interface du logiciel de publication en ligne mérite donc d'être prise en compte. L'idée d'utilisabilité était appliquée à la recherche sur l'interaction homme-machine (IHM), en particulier l'utilisabilité pour l'interface d'amélioration logicielle [1, 3-5]. Le développement favorable et l'efficacité de l'utilisabilité dans HCI ont le concept d'utilisabilité appliqué à d'autres domaines, tels que l'amélioration de l'utilisabilité des produits de consommation [6] et l'évaluation de l'utilisabilité pour l'interface de sélection des couleurs des produits personnalisés par le client [7]. Dans ce cas, cette étude tend à évaluer le test et l'analyse de la convivialité de l'interface du logiciel de publication en ligne avec l'ingénierie de la convivialité et propose en outre des suggestions liées aux problèmes et à la conception de la convivialité de l'interface du logiciel de publication en ligne.

En conclusion, les littératures sur l'édition numérique, les logiciels de publication en ligne et l'utilisabilité sont explorées et organisées [8]. Le groupe de discussion est appliqué au dépistage à grande échelle et la convivialité de l'interface du logiciel de publication en ligne représentative est évaluée pour les utilisateurs, et les performances du logiciel de publication en ligne sont analysées. Dans le même temps, il devrait répondre aux demandes des utilisateurs de logiciels de publication en ligne et proposer en outre une interface conviviale pour les concepteurs ou les entreprises concernées, ainsi que la promotion de la convivialité des logiciels de publication en ligne. Les résultats de la recherche devraient fournir aux secteurs gouvernementaux ou à d'autres secteurs pertinents comme les entreprises de jeux en ligne et les éditeurs de livres électroniques des orientations pour la conception d'interfaces de contenu numérique. Le modèle de recherche devrait être appliqué à l'évaluation de l'utilisabilité du contenu numérique dans d'autres régions de Taïwan, fournissant une référence précieuse pour le contenu numérique ou d'autres industries.

2. Évaluation de l'interface utilisateur et de la convivialité

Une interface utilisateur favorable commence par la compréhension des personnes plutôt que des chiffres, car le logiciel n'est qu'un outil pour certains objectifs. Une meilleure satisfaction plairait davantage aux utilisateurs. Les systèmes conçus par les concepteurs sont souvent différents de l'imagination et de la compréhension des utilisateurs de tels systèmes. Il est considéré comme un modèle mental lors de la conception de l'interface utilisateur. Si le modèle mental de l'utilisateur est différent du système, l'interface utilisateur du système pose des problèmes d'utilisabilité. L'utilisabilité fait référence à un système accessible et accepté pour des utilisateurs spécifiques effectuant certaines tâches dans certains environnements [9]. L'ingénierie de l'utilisabilité est proposée par Nielsen [1], qui a considéré l'utilisabilité comme étant cohérente de plusieurs attributs et a proposé les indicateurs d'évaluation suivants.

(1) Apprentissage. Le système est facile à apprendre et à utiliser pour les débutants. Les utilisateurs novices sont mesurés pour comprendre la capacité d'apprentissage du système. Généralement, le temps passé par les utilisateurs novices à se familiariser avec le système ou le pourcentage de réussite des tâches désignées est mesuré pour le jugement.

(2) Efficacité d'utilisation. Une fois que les utilisateurs se sont familiarisés avec le système, une productivité élevée serait atteinte. Les experts ont également mesuré le temps nécessaire pour accomplir une tâche typique spécifique.

(3) Mémorabilité. Lorsque les utilisateurs généraux reviennent au système après un certain temps, ils ne réapprennent pas le système. De plus, les utilisateurs occasionnels sont testés pour la mémorisation avec le temps passé ou le nombre de fois de bonnes réponses.

(4) Taux d'erreur. Il permet aux utilisateurs de faire moins d'erreurs et de vérifier facilement les erreurs et les erreurs dramatiques n'apparaîtraient pas sur le système. Les erreurs sont normalement classées en erreurs mortelles, erreurs mineures et erreurs modifiées en temps réel.

(5) Satisfaction subjective. La satisfaction des utilisateurs vis-à-vis du système est souvent mesurée à l'aide de questionnaires afin de comprendre la préférence. Les exigences des utilisateurs, les avantages et les inconvénients de diverses évaluations d'utilisabilité sont présentés dans le tableau 1.

Le logiciel de publication en ligne présente des caractéristiques de divertissement que l'interface utilisateur met l'accent sur une capacité d'apprentissage élevée, un faible taux d'erreur et une satisfaction subjective élevée. La mesure des performances est donc utilisée pour évaluer la capacité d'apprentissage et le nombre d'erreurs des utilisateurs de l'interface du logiciel de publication en ligne, et une enquête par questionnaire est appliquée pour comprendre la satisfaction subjective des utilisateurs avec l'interface du logiciel.

3. Méthodes

3.1. Planification expérimentale

La méthode des groupes de discussion utilisée dans cette étude sélectionne le logiciel de publication en ligne représentatif. Le groupe de discussion est souvent utilisé pour évaluer les demandes des utilisateurs [10-12] pour des solutions objectives et représentatives. Les membres du groupe de discussion sont divisés en deux, avec six membres interrogés dans chaque groupe pour discuter du logiciel de publication en ligne représentatif comme échantillons de recherche. (Les trois premiers échantillons sont sélectionnés.) Les membres du groupe de discussion sont interrogés avec des questions semi-structurelles, tableau 2.

Les sujets sont invités à parcourir librement le contenu, les instructions du logiciel, la vidéo d'instruction ou le logiciel d'exploitation de chaque site Web de logiciel pendant trois minutes avant l'expérimentation, dans le but d'être proche des habitudes des utilisateurs. Le test d'utilisabilité de l'interface du logiciel de publication en ligne est approfondi après avoir terminé l'apprentissage de 3 minutes (total de neuf minutes). Les tests d'utilisabilité visent à tester les utilisateurs utilisant le système dans des laboratoires. Dans Usability Engineering Lifecycle, les tests d'utilisabilité de la mesure des performances sont importants pour évaluer la réalisation des objectifs d'utilisabilité et comparer les produits concurrents [1]. La mesure des performances des utilisateurs a tendance à collecter les données de temps et d'erreur d'un groupe de sujets effectuant un ensemble de tâches de test. L'apprentissage et le nombre d'erreurs de l'utilisateur sont donc fixés comme critères d'évaluation. Avec les données expérimentales, le logiciel de publication en ligne représentatif est évalué et comparé aux tests d'utilisabilité de l'interface.

De plus, la satisfaction subjective des utilisateurs vis-à-vis de l'interface du logiciel de publication en ligne est étudiée pour comprendre les demandes des utilisateurs en matière de logiciel de publication en ligne afin de proposer de meilleures suggestions d'amélioration de l'interface. Le questionnaire est référé à QUIS (Questionnaire for User Interface Satisfaction), développé par Chin et al. [13]. La satisfaction des utilisateurs avec l'interface est considérée comme le cœur du questionnaire, et le QUIS original est constitué de phrases légèrement modifiées pour les sujets de recherche. Le 0

9 échelles sont également modifiées en 1

7. Selon Miller [14], simplement

les unités pourraient être rapidement mémorisées dans la mémoire à court terme humaine, sinon la mémoire serait surchargée. « 7 » était donc appelé un nombre magique. Pour cette raison, les échelles 10 de QUIS sont modifiées à 7 afin de réduire la charge d'évaluation des sujets.

3.2. Sujets

Les sujets sont classés en deux parties. Une partie des participants au groupe de discussion est constituée de concepteurs, tandis que l'autre partie est constituée d'utilisateurs ayant une longue expérience des logiciels de publication en ligne. Au total, 30 sujets sont inclus dans l'évaluation de l'utilisabilité du logiciel. La plupart des sujets de cette étude sont âgés de 20 ans

29. Selon les données d'InsighXplorer Limited en juillet 2011, la fréquence moyenne d'utilisation du réseau du groupe d'âge de moins de 29 ans est supérieure à celle du groupe d'âge de plus de 30 ans. En outre, différents groupes d'âge parcourraient différents types de sites Web que les utilisateurs âgés 20

29 préfèrent les sites de réseaux sociaux, les vidéos en ligne, les actualités et les centres commerciaux. En outre, le groupe d'âge de 20

29 révèle un score plus élevé sur les logiciels, ce qui est mieux lié au sujet et aux logiciels de publication en ligne. La tranche d'âge des 20

29 est donc choisi comme sujet. Ces sujets présentent un niveau d'instruction élevé, une vue normale et aucun daltonisme.

3.3. Tâche type

Les tâches typiques sont révisées et définies à partir de l'interface du logiciel de publication en ligne de TinTint, tableau 3. Les albums sont sélectionnés comme le produit du logiciel dans cette expérience, car ils sont généralement promus par les entreprises d'édition en ligne. Les tâches typiques sélectionnées sont donc adaptées au logiciel mesuré.

4. Résultats et discussion

4.1. Entretien de groupe de discussion

Des entretiens de groupe de discussion sont organisés pour les concepteurs et les utilisateurs généraux. Chacun des six participants participerait aux discussions, visant à sélectionner des logiciels de publication en ligne représentatifs.

4.1.1. Entretien de groupe de discussion avec des concepteurs

Les participants à l'entretien du groupe de discussion sont sélectionnés parmi une entreprise de conception à Kaohsiung, qui prend en charge la conception d'entreprises et procède à la recherche et au développement de produits liés aux logiciels de publication en ligne. Les participants ci-après sont codés comme le tableau 4.


Membres

Leadership

Le président de la chambre est le président du corps. Les devoirs de l'orateur comprennent le maintien de l'ordre et du décorum, la décision sur les rappels au Règlement et la signature de tous les brefs, mandats, citations à comparaître et autres processus. La maison élit un speaker pro tempore pour présider le corps en son absence. ΐ] Α]

Direction et membres actuels

Les salaires

Prestation de serment

Les législateurs du Kentucky entrent en fonction le premier jour de janvier après leur élection. Β]

Qualités d'adhésion

Pour être éligible à siéger à la Chambre des représentants du Kentucky, un candidat doit être : Γ]

  • Au moins 24 ans au moment de l'élection
  • Un citoyen du Kentucky
  • Résidé dans l'état 2 ans avant l'élection
  • A résidé dans le quartier pour la dernière année

Identité par filiation

Ces calculs ne prennent pas en compte le LD. C'est généralement une bonne idée d'effectuer une certaine forme d'élagage basé sur LD avant de les invoquer.

--genome ['gz'] ['rel-check'] ['full'] ['unbounded'] ['nudge']
--ppc-gap <distance en kbs>
--min <valeur minimale PI_HAT>
--max <valeur maximale PI_HAT>

--génome invoque un calcul IBS/IBD, puis écrit un rapport avec les champs suivants pour plink .genome :

FID1ID de famille pour le premier échantillon
IID1ID individuel pour le premier échantillon
FID2ID de famille pour le deuxième échantillon
IID2ID individuel pour le deuxième échantillon
RTType de relation déduit du fichier .fam/.ped
EZIBD partageant la valeur attendue, basée uniquement sur la relation .fam/.ped
Z0P(IBD=0)
Z1P(IBD=1)
Z2P(IBD=2)
PI_HATProportion IBD, c'est-à-dire P(IBD=2) + 0,5*P(IBD=1)
EPSCode phénotypique par paire (1, 0, -1 = paires AA, AU et UU, respectivement)
Heure d'étéDistance IBS, c'est-à-dire (IBS2 + 0.5*IBS1) / (IBS0 + IBS1 + IBS2)
CPCTest binomial IBS
RAPPORTHETHET : Ratio IBS0 SNP (valeur attendue 2)

Notez qu'il y a une entrée par paire d'échantillons, ce fichier peut donc être très volumineux. Le 'gz' le modificateur fait que la sortie est compressée, tandis que 'rel-vérifier' supprime les paires d'échantillons avec des FID différents, et --min/--max supprime les lignes avec des valeurs PI_HAT inférieures/supérieures à la (les) coupure(s) donnée(s).

Le 'plein' le modificateur entraîne l'ajout des champs suivants :

IBS0Nombre d'IBS 0 variantes non manquantes
IBS1Nombre de variantes IBS 1 non manquantes
IBS2Nombre de variantes non manquantes d'IBS 2
HOMHOMNombre de paires IBS 0 SNP utilisées dans le test PPC
HETHETNombre de paires de SNP het/het IBS 2 utilisées dans le test PPC

Par défaut, la distance minimale entre les paires informatives de SNP utilisées dans le test de concordance de population par paires (PPC) est de 500 k paires de bases, vous pouvez la modifier avec le --ppc-gap drapeau.

L'estimateur sous-jacent P(IBD=0/1/2) donne parfois des nombres en dehors de la plage [0,1] par défaut, ceux-ci sont tronqués. Le 'sans bornes' le modificateur désactive ce découpage. Alors, si PI_HAT 2 < P(IBD=2), 'coup de coude' ajuste les estimations finales à P(IBD=0) := (1-p 2 ), P(IBD=1) := 2p(1-p), et P(IBD=2) := p 2 , où p est le PI_HAT actuel.

Cet estimateur nécessite des fréquences d'allèles mineurs assez précises pour fonctionner correctement. Utilisez --read-freq si vous pensez que les MAF empiriques de votre ensemble de données immédiat ne sont pas représentatifs.

--genome jobs peut être subdivisé avec --parallel, qui est considérablement plus facile à utiliser que PLINK 1.07 --genome-lists. (Comme nous ne connaissons pas d'autres applications pratiques de --genome-lists, cet indicateur a été provisoirement retiré, contactez-nous si vous en avez toujours besoin.)

Nous pourrions ajouter des routines d'estimation de l'IBD plus sophistiquées à l'avenir s'il y a un intérêt suffisant.

Pistes d'homozygotie

--homozyg [] ['consensus-match'] ['extend'] ['soustract-1-from-lengths']
--homozyg-snp <min nombre de SNP>
--homozyg-kb <min longueur>
--homozyg-density <max densité inverse (kb/SNP)>
--homozyg-gap <max écart interne ko longueur>

--homozyg-window-snp <taille de la fenêtre de numérisation>
--homozyg-window-het <max hets dans la fenêtre d'analyse hit>
--homozyg-window-missing <max appels manquants dans la fenêtre d'analyse hit>
--homozyg-window-threshold <min taux de réussite de la fenêtre d'analyse>

Si l'un de ces indicateurs est présent, un ensemble de rapports d'homozygotie est généré à l'aide de l'algorithme de balayage de PLINK 1.07. Voir la documentation originale pour plus de détails.

  • Vous pouvez également essayer 'bcftools roh', qui utilise une méthode de détection basée sur HMM. (Nous inclurons un port de base de cette commande dans PLINK 2.0 s'il y a un intérêt suffisant.)
  • Si vous êtes satisfait de tous les paramètres par défaut décrits ci-dessous, utilisez simplement --homozyg sans modificateurs. Sinon, --homozyg vous permet de modifier quelques paramètres binaires :
    • Le 'grouperLe modificateur [-verbose]' ajoute un rapport sur les pools de séquences d'homozygotie qui se chevauchent. (Ceci est également déclenché par --homozyg-match.) 'groupe-verbeux' produit également un rapport détaillé pour chaque pool.
    • Avec 'group[-verbose]', 'concordance-match' provoque l'appel des correspondances segmentaires par paires uniquement sur la base des SNP dans le segment de consensus de l'ensemble du pool, plutôt que sur tous les SNP de l'intersection par paires.
    • En raison du fonctionnement de l'algorithme de balayage, il est possible qu'une séquence d'homozygotie signalée soit adjacente à quelques variantes homozygotes non incluses. Ceci est généralement inoffensif, mais si vous souhaitez étendre le ROH pour les inclure, utilisez le 'se déployer' modificateur. (Notez que la limite --homozyg-density peut empêcher l'extension, et --homozyg-gap affecte quelles variantes sont considérées comme adjacentes.)
    • Par défaut, les longueurs de segment bp sont calculées comme (<tend bp position> - <start bp position> + 1). Il s'agit d'un changement mineur par rapport à PLINK 1.07, qui n'ajoute pas 1 à la fin. À des fins de test, vous pouvez utiliser le 'soustraire-1 des longueurs' modificateur pour appliquer l'ancienne formule.

    Dans une exécution "--homozyg group[-verbose]", des pools de ROH se chevauchant sont formés, puis des correspondances alléliques par paires au sein de chaque pool sont identifiées, puis des groupes de correspondance allélique sont formés sur la base de ces correspondances. (Plus précisément, chaque groupe a un membre de référence marqué d'un '*' ajouté dans la colonne .hom.overlap 'GRP', et tous les autres membres du groupe ont des correspondances alléliques par paires avec le membre de référence.) la correspondance est définie comme une concordance de 0,95 ou plus entre les segments de variantes homozygotes conjointes, vous pouvez modifier ce seuil avec --homozyg-match.

    --taille de la piscine exclut tous les pools avec moins que le nombre donné de segments du ou des rapports.


    4.1 Que sont les libertés civiles ?

    Gouvernement américain 2e 4.1 Que sont les libertés civiles ?

    1 Gouvernement américain et engagement civique

    2 La Constitution et ses origines

    Agence individuelle et action

    6 La politique de l'opinion publique

    Vers une action collective : les institutions médiatrices

    10 groupes d'intérêt et lobbying

    Mettre en œuvre une action collective : institutions formelles

    14 État et gouvernement local

    Les extrants du gouvernement

    Objectifs d'apprentissage

    À la fin de cette section, vous serez en mesure de :

    • Définir les libertés civiles et les droits civiques
    • Décrire l'origine des libertés civiles dans le contexte américain
    • Identifier les positions clés sur les libertés civiles prises à la Convention constitutionnelle
    • Expliquer l'origine de la guerre de Sécession selon laquelle les États doivent respecter les libertés civiles

    La Constitution des États-Unis, en particulier les dix premiers amendements qui forment la Déclaration des droits, protège les libertés et les droits des individus. Elle ne limite pas cette protection uniquement aux citoyens ou aux adultes, dans la plupart des cas, la Constitution fait simplement référence à des « personnes », ce qui, au fil du temps, s'est développé pour signifier que même les enfants, les visiteurs d'autres pays et les immigrants - permanents ou temporaires, légaux ou sans papiers - jouissent des mêmes libertés lorsqu'ils se trouvent aux États-Unis ou dans leurs territoires que les citoyens adultes. Ainsi, que vous soyez un touriste japonais visitant Disney World ou quelqu'un qui est resté au-delà de la limite de jours autorisée sur votre visa, vous ne sacrifiez pas vos libertés. Dans la conversation de tous les jours, nous avons tendance à traiter les libertés, les libertés et les droits comme étant effectivement la même chose, de la même manière que la séparation des pouvoirs et les freins et contrepoids sont souvent utilisés comme s'ils étaient interchangeables, alors qu'en fait ce sont des concepts distincts.

    DÉFINIR LES LIBERTÉS CIVILES

    Pour être plus précis dans leur langage, les politologues et les juristes font une distinction entre les libertés civiles et les droits civils, même si la Constitution a été interprétée pour protéger les deux. Nous envisageons généralement les libertés civiles comme des limitations au pouvoir du gouvernement, destinées à protéger les libertés que les gouvernements ne peuvent pas légalement empiéter. Par exemple, le premier amendement refuse au gouvernement le pouvoir d'interdire « le libre exercice » de la religion. Les États et le gouvernement national ne peuvent interdire aux gens de suivre une religion de leur choix, même si les politiciens et les juges pensent que la religion est erronée, blasphématoire, ou autrement inapproprié. Vous êtes libre de créer votre propre religion et de recruter des adeptes (sous réserve que la Cour suprême des États-Unis la considère comme une religion), même si la société et le gouvernement désapprouvent ses principes. Cela dit, la façon dont vous pratiquez votre religion peut être réglementée si elle empiète sur les droits d'autrui. De même, le huitième amendement stipule que le gouvernement ne peut pas imposer de « peines cruelles et inhabituelles » à des individus pour leurs actes criminels. Bien que les définitions de cruel et inhabituel ont pris de l'ampleur au fil des ans, comme nous le verrons plus loin dans ce chapitre, les tribunaux ont généralement et systématiquement interprété cette disposition comme rendant inconstitutionnelle le fait pour des représentants du gouvernement de torturer des suspects.

    Les droits civils, d'autre part, garantissent que les représentants du gouvernement traiteront les gens de manière égale et que les décisions seront prises sur la base du mérite plutôt que de la race, du sexe ou d'autres caractéristiques personnelles. En raison de la garantie des droits civils de la Constitution, il est illégal pour une école ou une université gérée par un gouvernement d'État de traiter les étudiants différemment en fonction de leur race, leur origine ethnique, leur âge, leur sexe ou leur origine nationale. Dans les années 1960 et 1970, de nombreux États avaient des écoles séparées où seuls les étudiants d'une certaine race ou sexe pouvaient étudier. Cependant, les tribunaux ont décidé que ces politiques violaient les droits civils des étudiants qui ne pouvaient pas être admis en raison de ces règles. 1

    L'idée que les Américains - en fait, les gens en général - ont des droits et des libertés fondamentaux était au cœur des arguments en faveur de leur indépendance. En écrivant la Déclaration d'indépendance en 1776, Thomas Jefferson s'est inspiré des idées de John Locke pour exprimer la conviction des colons qu'ils avaient certains droits inaliénables ou naturels qu'aucun dirigeant n'avait le pouvoir ou l'autorité de refuser à ses sujets. C'était un acte d'accusation cinglant contre le roi George III pour violation des libertés des colons. Bien que la Déclaration d'indépendance ne garantisse pas des libertés spécifiques, son langage a contribué à inspirer de nombreux États à adopter des protections pour les libertés et les droits civils dans leurs propres constitutions, et à exprimer les principes de l'ère fondatrice qui ont résonné aux États-Unis depuis son indépendance. En particulier, les mots de Jefferson « tous les hommes sont créés égaux » sont devenus la pièce maîtresse des luttes pour les droits des femmes et des minorités (figure 4.2).

    Lien vers l'apprentissage

    Fondée en 1920, l'American Civil Liberties Union (ACLU) est l'un des plus anciens groupes d'intérêt des États-Unis. La mission de cette organisation non partisane et à but non lucratif est de « défendre et préserver les droits et libertés individuels garantis à chaque personne dans ce pays par la Constitution et les lois des États-Unis ». De nombreux cas de la Cour suprême dans ce chapitre ont été plaidés par, ou avec le soutien de, l'ACLU. L'ACLU propose une liste des sections nationales et locales sur leur site Web.

    LIBERTES CIVILES ET LA CONSTITUTION

    La Constitution telle qu'elle a été rédigée en 1787 n'incluait pas de Déclaration des droits, bien que l'idée d'en inclure une ait été proposée et, après une brève discussion, rejetée lors de la dernière semaine de la Convention constitutionnelle. Les rédacteurs de la Constitution pensaient qu'ils étaient confrontés à des préoccupations beaucoup plus urgentes que la protection des droits et libertés civils, notamment en préservant l'union fragile à la lumière des troubles internes et des menaces externes.

    De plus, les rédacteurs pensaient qu'ils avaient suffisamment couvert les questions de droits dans le corps du document. En effet, les fédéralistes ont inclus dans la Constitution certaines protections contre les actes législatifs susceptibles de restreindre les libertés des citoyens, sur la base de l'histoire des abus réels et perçus par les rois et les parlements britanniques ainsi que par les gouverneurs royaux. À l'article I , section 9, la Constitution limite le pouvoir du Congrès de trois manières : en interdisant l'adoption de projets de loi, en interdisant les lois ex post facto et en limitant la capacité du Congrès à suspendre le bref d'habeas corpus.

    Un bill of reachder est une loi qui condamne ou punit quelqu'un pour un crime sans procès, une tactique utilisée assez fréquemment en Angleterre contre les ennemis du roi. L'interdiction de telles lois signifie que le Congrès américain ne peut pas simplement punir les personnes impopulaires ou qui semblent coupables de crimes. Une loi ex post facto a un effet rétroactif : elle peut être utilisée pour punir des crimes qui n'étaient pas des crimes au moment où ils ont été commis, ou elle peut être utilisée pour augmenter la sévérité de la peine après coup.

    Enfin, le bref d'habeas corpus est utilisé dans notre système juridique de common law pour exiger qu'un juge neutre décide si une personne a été légalement détenue. Particulièrement en temps de guerre, ou même en réponse à des menaces contre la sécurité nationale, le gouvernement a détenu des agents ennemis présumés sans accès aux tribunaux civils, souvent sans accès à des avocats ou à une défense, cherchant plutôt à les juger devant des tribunaux militaires ou à les détenir indéfiniment. sans procès. Par exemple, pendant la guerre civile, le président Abraham Lincoln a détenu des saboteurs et sympathisants confédérés présumés dans des États contrôlés par l'Union et a tenté de les faire juger par des tribunaux militaires, ce qui a conduit la Cour suprême à statuer en Ex parte Milligan que le gouvernement ne pouvait pas contourner le système judiciaire civil dans les États où il opérait. 2

    Pendant la Seconde Guerre mondiale, l'administration Roosevelt a interné des Américains d'origine japonaise et a fait juger d'autres agents ennemis présumés, y compris des citoyens américains, par des tribunaux militaires plutôt que par le système de justice civile, un choix que la Cour suprême a confirmé en Ex parte Quirin (Figure 4.3). 3 Plus récemment, à la suite des attentats du 11 septembre contre le World Trade Center et le Pentagone, les administrations Bush et Obama ont détenu des terroristes présumés capturés à l'intérieur et à l'extérieur des États-Unis et ont cherché, avec des résultats mitigés, à éviter des procès dans des tribunaux. Par conséquent, il y a eu des moments dans notre histoire où les questions de sécurité nationale ont pris le pas sur les libertés individuelles.

    Le débat a toujours eu lieu sur ces questions. Les fédéralistes ont estimé que l'ensemble limité des pouvoirs énumérés du Congrès, ainsi que les limitations de ces pouvoirs dans l'article I, section 9, suffiraient, et qu'aucune déclaration des droits distincte n'était nécessaire. Alexander Hamilton , écrivant sous le nom de Publius dans Fédéraliste No. 84, a fait valoir que la Constitution était « simplement destinée à réglementer les intérêts politiques généraux de la nation », plutôt que de se préoccuper de « la réglementation de toute espèce de préoccupations personnelles et privées ». Hamilton a poursuivi en affirmant que l'énumération de certains droits pourrait en fait être dangereuse, car cela fournirait un prétexte aux gens pour revendiquer que les droits ne pas inclus dans une telle liste n'étaient pas protégés. Plus tard, James Madison, dans son discours présentant les amendements proposés qui deviendraient la Déclaration des droits, a reconnu un autre argument fédéraliste : « Il a été dit qu'une déclaration des droits n'est pas nécessaire, car la mise en place de ce gouvernement n'a pas abrogé ces déclarations de droits qui sont ajoutées aux différentes constitutions des États. 4 D'ailleurs, les statuts de la Confédération n'avaient pas non plus inclus une liste spécifique des droits.

    Cependant, les anti-fédéralistes ont fait valoir que la position des fédéralistes était incorrecte et peut-être même peu sincère. Les anti-fédéralistes pensaient que des dispositions telles que la clause élastique de l'article I, section 8, de la Constitution permettraient au Congrès de légiférer sur des questions bien au-delà des limites prévues par les auteurs de la Constitution, ils ont donc estimé qu'une déclaration des droits était nécessaire. L'un des anti-fédéralistes, Brutus, que la plupart des érudits croient être Robert Yates, a écrit : « Les pouvoirs, droits et autorité, accordés au gouvernement général par cette Constitution, sont aussi complets, en ce qui concerne chaque objet auquel ils s'étendent, comme celui de n'importe quel gouvernement d'État — Il s'étend à tout ce qui concerne le bonheur humain — La vie, la liberté et la propriété sont sous son contrôle [sic]. Il y a donc la même raison que l'exercice du pouvoir, dans ce cas, devrait être restreint dans des limites appropriées, comme dans celui des gouvernements des États. » 5 L'expérience des deux derniers siècles a suggéré que les anti-fédéralistes avaient peut-être raison à cet égard alors que les États conservent une grande importance, la portée et les pouvoirs du gouvernement national sont beaucoup plus larges aujourd'hui qu'en 1787 - probablement au-delà même les imaginations des fédéralistes eux-mêmes.

    La lutte pour que les droits soient clairement délimités et la décision des rédacteurs d'omettre une déclaration des droits ont failli faire dérailler le processus de ratification. Alors que certains États étaient disposés à ratifier sans aucune autre garantie, dans certains des plus grands États – New York et la Virginie en particulier – l'absence de droits spécifiés dans la Constitution est devenue un grave sujet de discorde. La Constitution pouvait entrer en vigueur avec le soutien de seulement neuf États, mais les fédéralistes savaient qu'elle ne pourrait être efficace sans la participation des plus grands États. Pour obtenir des majorités en faveur de la ratification à New York et en Virginie, ainsi que dans le Massachusetts, ils ont convenu d'envisager d'incorporer les dispositions suggérées par les États ratifiants en tant qu'amendements à la Constitution.

    En fin de compte, James Madison a tenu cette promesse en proposant un ensemble d'amendements au premier Congrès, en s'inspirant de la Déclaration des droits de la constitution de l'État de Virginie, des suggestions des conventions de ratification et d'autres sources, qui ont été largement débattues dans les deux chambres du Congrès. et finalement proposé comme douze amendements séparés pour ratification par les États. Dix des amendements ont été ratifiés avec succès par les 75 pour cent requis des États et sont devenus connus sous le nom de Déclaration des droits (tableau 4.1).

    Droits et libertés protégés par les dix premiers amendements
    Premier amendement Droit à la liberté de religion et d'expression droit de réunion et de pétition auprès du gouvernement pour obtenir réparation des griefs
    Deuxième amendement Droit de détenir et de porter des armes pour maintenir une milice bien réglementée
    Troisième amendement Droit de ne pas loger de soldats en temps de guerre
    Quatrième amendement Droit d'être à l'abri des perquisitions et saisies abusives
    Cinquième amendement Droits dans les affaires pénales, y compris une procédure régulière et l'inculpation par un grand jury pour les crimes passibles de la peine de mort, ainsi que le droit de ne pas témoigner contre soi-même
    Sixième amendement Droit à un procès rapide par un jury impartial
    Septième amendement Droit à un procès devant jury dans les affaires civiles
    Huitième amendement Droit de ne pas faire face à une caution excessive, des amendes excessives ou des peines cruelles et inhabituelles
    Neuvième amendement Droits conservés par le peuple, même s'ils ne sont pas spécifiquement énumérés par la Constitution
    Dixième amendement Droits des États à des pouvoirs non spécifiquement délégués au gouvernement fédéral

    Trouver un juste milieu

    Débattre de la nécessité d'une déclaration des droits

    L'un des débats les plus sérieux entre les fédéralistes et les anti-fédéralistes concernait la nécessité de limiter le pouvoir du nouveau gouvernement fédéral par une déclaration des droits. Comme nous l'avons vu dans cette section, les fédéralistes pensaient qu'une déclaration des droits était inutile - et peut-être même dangereuse pour la liberté, car elle pourrait entraîner des violations de droits qui n'y étaient pas inclus - tandis que les anti-fédéralistes pensaient que le gouvernement national prouverait apte à étendre ses pouvoirs et son influence et que les citoyens ne pouvaient pas compter sur le bon jugement du Congrès seul pour protéger leurs droits.

    Comme le suggérait l'appel de George Washington à une déclaration des droits dans son premier discours d'investiture, alors que les fédéralistes ont finalement dû ajouter la déclaration des droits à la Constitution afin d'obtenir la ratification, et les anti-fédéralistes auraient bientôt raison de dire que le gouvernement national pourrait porter atteinte aux libertés civiles. En 1798, à la demande du président John Adams pendant la quasi-guerre avec la France, le Congrès a adopté une série de quatre lois collectivement connues sous le nom de lois sur les étrangers et sur la sédition. Celles-ci ont été rédigées pour permettre au président d'emprisonner ou d'expulser des citoyens étrangers qu'il jugeait « dangereux pour la paix et la sécurité des États-Unis » et pour restreindre les discours et les articles de journaux qui critiquaient le gouvernement fédéral ou ses fonctionnaires. Les lois étaient principalement utilisées. contre des membres et sympathisants du Parti démocrate-républicain d'opposition.

    Les lois et constitutions des États protégeant la liberté d'expression et la liberté de la presse se sont avérées inefficaces pour limiter ce nouveau pouvoir fédéral. Bien que les tribunaux ne se soient pas prononcés sur la constitutionnalité de ces lois à l'époque, la plupart des chercheurs pensent que la loi sur la sédition, en particulier, serait inconstitutionnelle si elle était restée en vigueur. Trois des quatre lois ont été abrogées sous l'administration Jefferson, mais une, l'Alien Enemies Act, est toujours en vigueur aujourd'hui. Deux siècles plus tard, la question de la liberté d'expression et de la liberté de la presse en période de conflit international reste un sujet de débat public.

    Le gouvernement devrait-il être en mesure de restreindre ou de censurer les discours antipatriotiques, déloyaux ou critiques en période de conflit international ? Quelle liberté les journalistes devraient-ils avoir pour rapporter des histoires du point de vue de leurs ennemis ou pour répéter la propagande des forces opposées ?

    ÉTENDRE LA DÉCLARATION DES DROITS AUX ÉTATS

    Dans les décennies qui ont suivi la ratification de la Constitution, la Cour suprême a refusé d'étendre la Déclaration des droits pour restreindre le pouvoir des États, notamment dans l'affaire de 1833. Barron c. Baltimore . 6 Dans cette affaire, qui portait sur les droits de propriété en vertu du cinquième amendement , la Cour suprême a décidé à l'unanimité que la Déclaration des droits ne s'appliquait qu'aux actions du gouvernement fédéral. Expliquant la décision de la cour, le juge en chef John Marshall a écrit qu'il était incorrect d'affirmer que « la Constitution visait à protéger le peuple de plusieurs États contre l'exercice indu du pouvoir par leurs gouvernements respectifs ainsi que contre ce qui pourrait être tenté. par leur gouvernement [fédéral].

    Dans le sillage de la guerre civile, cependant, la pensée dominante sur l'application de la Déclaration des droits aux États a changé. Peu de temps après l'abolition de l'esclavage par le treizième amendement, les gouvernements des États, en particulier ceux de l'ancienne Confédération, ont commencé à adopter des «codes noirs» qui restreignaient les droits des anciens esclaves et les reléguaient effectivement à une citoyenneté de seconde classe en vertu de leurs lois et constitutions nationales. Irrités par ces actions, les membres de la faction républicaine radicale au Congrès ont exigé que les lois soient annulées. À court terme, ils ont préconisé la suspension du gouvernement civil dans la plupart des États du sud et le remplacement des politiciens qui avaient promulgué les codes noirs. Leur solution à long terme consistait à proposer deux amendements à la Constitution pour garantir les droits des esclaves affranchis sur un pied d'égalité avec les Blancs. Ces droits sont devenus le quatorzième amendement, qui traitait des libertés et des droits civils en général, et le quinzième amendement, qui protégeait notamment le droit de vote (figure 4.4). Mais, le droit de vote ne s'appliquait pas encore aux femmes ou aux Amérindiens.

    Avec la ratification du quatorzième amendement en 1868, les libertés civiles ont été plus clarifiées. Tout d'abord, l'amendement dit : « aucun État ne fera ou n'appliquera de loi qui limiterait les privilèges ou immunités des citoyens des États-Unis », ce qui est une disposition qui fait écho à la clause sur les privilèges et immunités de l'article IV, section 2, de la Constitution originale garantissant que les États traitent les citoyens des autres États de la même manière que leurs propres citoyens. (Pour utiliser un exemple d'aujourd'hui, la punition pour excès de vitesse par un conducteur hors de l'État ne peut pas être plus sévère que la punition pour un conducteur dans l'État). Les juristes et les tribunaux ont longuement débattu de la signification de cette clause de privilèges ou d'immunités au fil des ans, certains ont fait valoir qu'elle était censée étendre l'intégralité de la Déclaration des droits (ou au moins les huit premiers amendements) aux États, tandis que d'autres ont soutenu que seuls certains droits sont étendus. En 1999, le juge John Paul Stevens, écrivant au nom de la majorité de la Cour suprême, a plaidé dans Saenz contre Roe que la clause protège le droit de voyager d'un État à un autre. 7 Plus récemment, le juge Clarence Thomas a soutenu dans le McDonald contre Chicago statuant que le droit individuel de porter des armes s'appliquait aux États en raison de cette clause. 8

    La deuxième disposition du quatorzième amendement qui se rapporte à l'application de la Déclaration des droits aux États est la clause de procédure régulière, qui dit: « aucun État ne doit priver une personne de la vie, de la liberté ou de la propriété, sans procédure légale régulière ». Cette disposition est similaire au cinquième amendement en ce qu'elle fait également référence à une « procédure régulière », un terme qui signifie généralement que les personnes doivent être traitées de manière équitable et impartiale par les représentants du gouvernement (ou avec ce que l'on appelle communément une procédure régulière substantielle). Bien que le texte de la disposition ne mentionne pas spécifiquement les droits, les tribunaux ont statué dans une série d'affaires qu'il indique qu'il existe certaines libertés fondamentales qui ne peuvent être niées par les États. Par exemple, dans Sherbert c. Verner (1963), la Cour suprême a statué que les États ne pouvaient pas refuser des allocations de chômage à une personne qui refusait un emploi parce qu'il exigeait de travailler le jour du sabbat. 9

    À partir de 1897, la Cour suprême a conclu que diverses dispositions de la Déclaration des droits protégeant ces libertés fondamentales doivent être respectées par les États, même si les constitutions et les lois de leurs États ne les protègent pas aussi pleinement que la Déclaration des droits le fait - ou à tous. Cela signifie qu'il y a eu un processus d'incorporation sélective de la Déclaration des droits dans les pratiques des États, en d'autres termes, la Constitution insère effectivement des parties de la Déclaration des droits dans les lois et constitutions des États, même si elle ne le fait pas explicitement. . Lorsque des cas surviennent pour clarifier des questions et des procédures particulières, la Cour suprême décide si les lois de l'État violent la Déclaration des droits et sont donc inconstitutionnelles.

    Par exemple, en vertu du cinquième amendement, une personne ne peut être jugée par un tribunal fédéral pour un crime – un crime grave – qu'après qu'un grand jury a émis un acte d'accusation indiquant qu'il est raisonnable de juger la personne pour le crime en question. (Un grand jury est un groupe de citoyens chargés de décider s'il y a suffisamment de preuves d'un crime pour poursuivre quelqu'un.) Mais la Cour suprême a statué que les États n'ont pas à utiliser de grands jurys tant qu'ils s'assurent que les personnes accusées de crimes sont inculpés selon un processus tout aussi équitable.

    L'incorporation sélective est un processus continu. Lorsque la Cour suprême a décidé initialement en 2008 que le deuxième amendement protégeait le droit d'un individu de détenir et de porter des armes, elle n'a pas décidé alors qu'il s'agissait d'une liberté fondamentale que les États doivent également respecter. Ce n'était que dans le McDonald contre Chicago deux ans plus tard, la Cour suprême a incorporé le deuxième amendement dans la loi de l'État. Un autre domaine dans lequel la Cour suprême s'est progressivement déplacé pour incorporer la Déclaration des droits concerne la censure et le quatorzième amendement. Dans Près de c. Minnesota (1931), la Cour n'était pas d'accord avec les tribunaux de l'État concernant la censure et l'a déclarée inconstitutionnelle, sauf dans de rares cas. dix


    4.1 : Prélude aux systèmes de représentants distincts

    Dans ce chapitre, nous décrivons la syntaxe et la sémantique informelle des déclarations Haskell.

    module &rarr module  modid   [ exporte ]   où ਋ody
    | corps
    corps &rarr
    |
    |
     
    topdécl &rarr topdecl 1     &hellip    topdecl m         ( n &ge 1)
    topdecl &rarr tapez  typesimple   =  type
    | données   [ contexte   => ]  typesimple   [ = ਌onstrs ]   [ dérivant ]
    | newtype   [ contexte   => ]  typesimple   =  newconstr   [ dérivant ]
    | classe   [ contexte   => ]  tycls  tyvar   [ où �ls ]
    | instance   [ contexte   => ]  qtycls  inst   [ où  idecls ]
    | par défaut   ( tapez 1   ,   &hellip   ,  type m )           ( n &ge 0)
    | étranger �l
    | decl
     
    décl. &rarr < 򠷬l 1     &hellip   򠷬l m   >         ( n &ge 0)
    decl &rarr Gendecl
    | (funlhs   |   pat )  rhs
     
    cdecls &rarr < �l 1     &hellip   �l m   >         ( n &ge 0)
    cdecl &rarr Gendecl
    | ( funlhs   |  var )  rhs
     
    idecls &rarr <  idecl 1     &hellip    idecl m   >         ( n &ge 0)
    idecl &rarr ( funlhs   |  var )  rhs
    |         ( vide )
     
    Gendecl &rarr vars   ::   [ contexte   => ]  type         ( tapez signature )
    | fixité   [ entier ]  ops         (déclaration de fixité )
    |         (déclaration vide )
     
    opérations &rarr op 1   ,   &hellip   ,  op m         ( n &ge 1)
    vars &rarr var 1   ,   &hellip   ,  var m         ( n &ge 1)
    fixité &rarr infixe   |   infixe   |   infixe

    Les déclarations dans la catégorie syntaxique topdecls ne sont autorisées qu'au niveau supérieur d'un module Haskell (voir le chapitreਅ ), alors que decls peut être utilisé soit au niveau supérieur, soit dans des portées imbriquées (c'est-à-dire dans une construction let ou where ).

    Pour l'exposition, nous divisons les déclarations en trois groupes : les types de données définis par l'utilisateur, constitués de déclarations de type , newtype et de données (Section਄.2) les classes de type et la surcharge, constituées de déclarations de classe , d'instance et par défaut (Section਄ .3 ) et des déclarations imbriquées, consistant en des liaisons de valeur, des signatures de type et des déclarations de fixité (Section਄.4 ).

    Haskell a plusieurs types de données primitifs qui sont “câblés” (tels que des entiers et des nombres à virgule flottante), mais la plupart des types de données “intégrés” sont définis avec du code Haskell normal, en utilisant des déclarations de type et de données normales. Ces types de données “intégrés” sont décrits en détail dans la sectionਆ.1 .

    4.1 Aperçu des types et des classes

    Haskell utilise un système de types polymorphe traditionnel Hindley-Milner pour fournir une sémantique de type statique [4,ਆ] , mais le système de types a été étendu avec des classes de types (ou simplement des classes ) qui fournissent un moyen structuré d'introduire des fonctions surchargées.

    Une déclaration de classe (Section਄.3.1 ) introduit une nouvelle classe de type et les opérations surchargées qui doivent être prises en charge par tout type qui est une instance de cette classe. Une déclaration d'instance (Section਄.3.2 ) déclare qu'un type est une instance d'une classe et inclut les définitions des opérations surchargées—appelées méthodes de classe —instanciées sur le type nommé.

    Par exemple, supposons que nous souhaitions surcharger les opérations (+) et annuler les types Int et Float . Nous introduisons une nouvelle classe de type appelée Num :

    Cette déclaration peut être lue “a type a est une instance de la classe Num s'il y a des méthodes de classe (+) et negate , des types donnés, définies dessus.”

    Nous pouvons alors déclarer Int et Float comme des instances de cette classe :

    où addInt , negateInt , addFloat et negateFloat sont supposés dans ce cas être des fonctions primitives, mais pourraient en général être n'importe quelle fonction définie par l'utilisateur. La première déclaration ci-dessus peut être lue “ Int est une instance de la classe Num comme en témoignent ces définitions (c'est-à-dire les méthodes਌lass) pour (+) et nier .”

    D'autres exemples de classes de types peuvent être trouvés dans les articles de Jones [8] ou de Wadler et Blott [13] . Le terme ‘type class’ a été utilisé pour décrire le système de types Haskell 1.0 d'origine ‘constructor class’ a été utilisé pour décrire une extension des classes de types d'origine. Il n'y a plus aucune raison d'utiliser deux termes différents : dans ce rapport, ‘type class’ inclut à la fois les classes de type Haskell d'origine et les classes de constructeur introduites par Jones.

    4.1.1 Types

    • Le symbole &lowast représente le type de tous les constructeurs de type nullaire.
    • Si &kappa 1 et &kappa 2 sont des types, alors &kappa 1 &rarr &kappa 2 est le genre de types qui prennent un type de genre &kappa 1 et renvoie un type de type &kappa 2 .

    L'inférence de type vérifie la validité des expressions de type de la même manière que l'inférence de type vérifie la validité des expressions de valeur. Cependant, contrairement aux types, les genres sont entièrement implicites et ne sont pas une partie visible du langage. L'inférence aimable est discutée dans la section਄.6 .

    4.1.2 Syntaxe des types

    taper &rarr btype   [ ->  type ]         ( fonction type )
     
    btype &rarr [ btype ] ਊtype         ( tapezਊpplication )
     
    un type &rarr gtycon
    | tyvar
    | (  type 1   ,   &hellip   ,  type k   )         ( type de tuple  ,  k &ge 2)
    | [  tapez   ]         ( liste type )
    | (  type   )         (constructeur  entre parenthèses )
     
    gtycon &rarr qtycon
    | ()         ( unité type )
    | []         ( liste਌onstructeur )
    | (->)         ( fonction਌onstructeur )
    | (, < , >)         (constructeurs tupling )

    La syntaxe des expressions de type Haskell est donnée ci-dessus. Tout comme les valeurs de données sont construites à l'aide de constructeurs de données, les valeurs de type sont construites à partir de constructeurs de type   . Comme pour les constructeurs de données, les noms des constructeurs de types commencent par des lettres majuscules. Contrairement aux constructeurs de données, les constructeurs de type infixe ne sont pas autorisés (autres que (->) ).

    1. Variables de type, écrites sous forme d'identifiants commençant par une lettre minuscule. Le type d'une variable est déterminé implicitement par le contexte dans lequel elle apparaît.
    2. Types de constructeurs. La plupart des constructeurs de type sont écrits sous forme d'identifiant commençant par une lettre majuscule. Par example:
      • Char , Int , Integer , Float , Double et Bool sont des constantes de type de type &lowast .
      • Maybe et IO sont des constructeurs de types unaires et traités comme des types avec kind &lowast&rarr&lowast .
      • Les données des déclarations  T  . ou newtype  T  . ajouter le constructeur de type T au vocabulaire de type. Le genre de T est déterminé par inférence de genre.

    • Le type trivial est écrit comme () et a le genre &lowast . Il désigne le type “nullary tuple” et a exactement une valeur, également écrite () (voir les sectionsਃ.9 etਆ.1.5 ).
    • Le type de fonction est écrit comme (->) et a le genre &lowast&rarr&lowast&rarr&lowast .
    • Le type de liste est écrit comme [] et a le genre &lowast&rarr&lowast .
    • Les types de tuple sont écrits sous la forme (,) , (,,) , et ainsi de suite. Leurs types sont &lowast&rarr&lowast&rarr&lowast, &lowast&rarr&lowast&rarr&lowast&rarr &lowast, et ainsi de suite.

    Par exemple, l'expression de type IO ਊ peut être comprise comme l'application d'une constante, IO , à la variable a . Étant donné que le constructeur de type IO a le genre &lowast&rarr&lowast , il s'ensuit que la variable a et l'expression entière, IO ਊ , doivent avoir le genre &lowast . En général, un processus d'inférence de genre (voir Section਄.6) est nécessaire pour déterminer les genres appropriés pour les types de données, les synonymes de types et les classes définis par l'utilisateur.

    1. Un type de fonction a la forme t 1   ->  t 2 , qui est équivalent au type (->)  t 1  t 2 . Les flèches de fonction s'associent à droite. Par exemple, Int  ->  Int  -> ਏloat signifie Int  ->  (Int  -> ਏloat) .
    2. Un type de tuple a la forme ( t 1 ,   &hellip   ,  t k ) où k &ge 2 , qui est équivalent au type (, &hellip ,)  t 1   &hellip  t k où il y a k &moins 1 virgules entre les parenthèses. Il désigne le type des k -uplets avec la première composante de type t 1 , le deuxième composant de type t 2 , et ainsi de suite (voir les sectionsਃ.8 et 6.1.4 ).
    3. Un type liste a la forme [ t ] , qui équivaut au type []  t . Il désigne le type des listes avec des éléments de type t (voir les sectionsਃ.7 et 6.1.3 ).

    Ces formes syntaxiques spéciales désignent toujours les constructeurs de types intégrés pour les fonctions, les tuples et les listes, quel que soit leur contenu. De la même manière, les constructeurs de type préfixe (->) , [] , () , (,) , et ainsi de suite, désignent toujours les constructeurs de type intégrés qu'ils ne peuvent pas être qualifiés, ni mentionnés dans les listes d'import ou d'export (Chapitreਅ). (D'où la production spéciale, “gtycon”, ci-dessus.)

    Bien que les types de liste et de tuple aient une syntaxe spéciale, leur sémantique est la même que les types de données algébriques équivalents définis par l'utilisateur.

    Notez que les expressions et les types ont une syntaxe cohérente. Si t je est le type d'expression ou de modèle e je , puis les expressions ( ਎ 1   -> ਎ 2 ) , [ e 1 ] , et ( e 1 ,e 2 ) ont les types ( t 1   ->  t 2 ) , [ t 1 ] , et T 1 ,t 2 ) , respectivement.

    À une exception près (celle de la variable de type distingué dans une déclaration de classe (Section਄.3.1 )), les variables de type dans une expression de type Haskell sont toutes supposées être quantifiées universellement, il n'y a pas de syntaxe explicite pour la quantification universelle  [4 ] . Par exemple, l'expression de type a  -> ਊ désigne le type &forall ਊ. ਊ   &rarr ਊ . Pour plus de clarté, cependant, nous écrivons souvent explicitement la quantification lorsque nous discutons des types de programmes Haskell. Lorsque nous écrivons un type explicitement quantifié, la portée de &forall s'étend aussi loin que possible vers la droite, par exemple, &forall ਊ. ਊ   &rarr ਊ signifie &pour tous ਊ.   ( un   &rarr ਊ ) .

    4.1.3 Syntaxe des assertions de classe et des contextes

    le contexte &rarr classer
    | ( ਌lasse 1   ,   &hellip   , ਌lasse m   )         ( n &ge 0)
    classer &rarr qtycls  tyvar
    | qtycls   (  tyvar ਊtype 1   &hellip ਊtype m   )         ( n &ge 1)
    qtycls &rarr [  modid   .   ]  tycls
    tycls &rarr conide
    tyvar &rarr variable

    Une assertion de classe a la forme qtycls  tyvar et indique l'appartenance du type tyvar à la classe qtycls . Un identifiant de classe commence par une lettre majuscule. Un contexte se compose de zéro ou plusieurs assertions de classe, et a la forme générale ( ਌ 1  u 1 ,   &hellip , ਌ m  u m   ) où C 1 ,   &hellip , ਌ m sont des identifiants de classe, et chacun des u 1 ,   &hellip ,  u m est soit une variable de type, soit l'application de la variable de type à un ou plusieurs types. Les parenthèses extérieures peuvent être omises lorsque n = 1 . En général, on utilise cx pour désigner un contexte et on écrit cx   =>  t pour indiquer le type t restreint par le contexte cx . Le contexte cx ne doit contenir que des variables de type référencées dans t . Pour plus de commodité, nous écrivons cx   =>  t même si le contexte cx est vide, bien que dans ce cas la syntaxe concrète ne contienne pas => .

    4.1.4 Sémantique des types et des classes

    Dans cette section, nous fournissons des détails informels sur le système de types. (Wadler et Blott [13] et Jones [8] discutent respectivement plus en détail des classes de type et de constructeur.)

    Le système de types Haskell attribue un type à chaque expression du programme. En général, un type est de la forme &forall   u . ਌x   &rArr  t , où u est un ensemble de variables de type u 1 ,   &hellip ,  u m . Dans un tel type, l'une des variables de type universellement quantifiées u je qui sont libres dans cx doivent aussi être libres dans t . De plus, le contexte cx doit être de la forme indiquée ci-dessus dans la section਄.1.3 . Par exemple, voici quelques types valides :

    Dans le troisième type, la contrainte Eq  (f ਊ) ne peut pas être simplifiée car f est quantifiée universellement.

    Le type d'une expression e dépend d'un environnement de type qui donne des types pour les variables libres dans e , et d'un environnement de classe qui déclare quels types sont des instances de quelles classes (un type ne devient une instance d'une classe que via la présence d'une instance déclaration ou une clause dérivée).

    Les types sont liés par un préordre de généralisation (spécifié ci-dessous) le type le plus général, jusqu'à l'équivalence induite par le préordre de généralisation, qui peut être affecté à une expression particulière (dans un environnement donné) est appelé son type principal. Le système de type Hindley-Milner étendu de Haskell peut déduire le type principal de toutes les expressions, y compris l'utilisation appropriée des méthodes de classe surchargées (bien que certaines surcharges ambiguës puissent survenir, comme décrit dans la section਄.3.4 ). Par conséquent, les typages explicites (appelés signatures de type ) sont généralement facultatifs (voir les sectionsਃ.16 et਄.4.1 ).

    • t 2 est identique à S ( t 1 ) .
    • Chaque fois que cx 2 tient dans l'environnement de classe, S ( cx 1 ) tient également.

    Une valeur de type &forall   u . ਌x   &rArr  t , peut être instancié aux types s si et seulement si le contexte cx [ s ∕ u ] est valide. Par exemple, considérons la fonction double :

    Le type de double le plus général est &forall ਊ.   Num ਊ   &rArr ਊ   &rarr ਊ . double peut être appliqué aux valeurs de type Int (instanciation de a à Int ), puisque Num  Int est valable, car Int est une instance de la classe Num . Cependant, double ne peut normalement pas être appliqué aux valeurs de type Char , car Char n'est normalement pas une instance de la classe Num . L'utilisateur peut choisir de déclarer une telle instance, auquel cas double peut en effet être appliqué à un Char .

    4.2 Types de données définis par l'utilisateur

    Dans cette section, nous décrivons les types de données algébriques (déclarations de données), les types de données renommés (déclarations de newtype) et les synonymes de types (déclarations de type). Ces déclarations ne peuvent apparaître qu'au niveau supérieur d'un module.

    4.2.1 Déclarations de types de données algébriques

    topdecl &rarr données   [ contexte   => ]  typesimple   [ = ਌onstrs ]   [ dérivant ]
     
    type simple &rarr tycon  tyvar 1   &hellip  tyvar k         ( k &ge 0)
     
    constr &rarr constr 1   |   &hellip   | ਌onstr m         ( n &ge 1)
    constr &rarr avec   [ ! ] ਊtype 1   &hellip   [ ! ] ਊtype k         ( arité ਌on   =  k,  k &ge 0)
    | ( typeb   |   ! ਊtype ) ਌onop   ( type b   |   ! ਊtype )         ( infixe ਌onop )
    | avec   < ਏielddecl 1   ,   &hellip   , ਏielddecl m   >         ( n &ge 0)
    champdecl &rarr vars   ::   ( tapez   |   ! ਊtype )
     
    dérivation &rarr dérivant   ( dclass   |   ( dclass 1 ,   &hellip   , ꃜlass m ) )         ( n &ge 0)
    déclasser &rarr qtycls

    La priorité de constr est la même que celle des expressions—normal constructeur application a une priorité plus élevée que l'application constructeur infix (ainsi un  : ਏoo ਊ analyse comme un  :  (Foo ਊ ) ).

    Une déclaration de type de données algébrique a la forme : data ਌x   =>  T  u 1   &hellip  u k   =  K 1  t 11   &hellip  t 1 kilo 1   |     |  K m  t n 1   &hellip  t nk m où cx est un contexte. Cette déclaration introduit un nouveau constructeur de type T avec zéro ou plusieurs constructeurs de données constitutifs K 1 ,   &hellip ,  K m . Dans ce rapport, le terme non qualifié “constructeur” signifie toujours “constructeur de données”.

    Les types des constructeurs de données sont donnés par : K je   ::   &pour tous  u 1   &hellip  u k .   ਌x je   &rArr  t je 1   &rarr     &rarr  t je je   &rarr   ( T  u 1   &hellip  u k ) où cx je est le plus grand sous-ensemble de cx qui ne contraint que les variables de type libres dans les types t je 1 ,   &hellip ,  t je je. Les variables de type u 1 à travers toi k doit être distinct et peut apparaître dans cx et le t je c'est une erreur statique pour toute autre variable de type d'apparaître dans cx ou sur le côté droit. La nouvelle constante de type T a une sorte de forme &kappa 1 &rarr &hellip &rarr &kappa k &rarr&lowast où les genres &kappa je des variables d'argument u je sont déterminés par inférence aimable comme décrit dans la section਄.6 . Cela signifie que T peut être utilisé dans des expressions de type avec n'importe où entre 0 et k arguments.

    Par exemple, la déclaration

    introduit un constructeur de type Set de kind &lowast&rarr&lowast , et les constructeurs NilSet et ConsSet avec les types

    la fonction f a inféré le type Eq ਊ  =>  Set ਊ  -> ਊ . Le contexte dans la déclaration de données n'a aucun autre effet.

    La visibilité des constructeurs d'un type de données (c'est-à-dire l'abstraction du type de données) en dehors du module dans lequel le type de données est défini est contrôlée par la forme du nom du type de données dans la liste d'exportation, comme décrit dans Sectionਅ.8 .

    La partie dérivée facultative d'une déclaration de données concerne les instances dérivées et est décrite dans la section਄.3.3 .

    Champs étiquetés Un constructeur de données d'arité k crée un objet avec k composants. Ces composants sont normalement accessibles positionnellement en tant qu'arguments du constructeur dans des expressions ou des modèles. Pour les types de données volumineux, il est utile d'attribuer des étiquettes de champ   aux composants d'un objet de données. Cela permet à un champ spécifique d'être référencé indépendamment de son emplacement dans le constructeur.

    Une définition de constructeur dans une déclaration de données peut affecter des étiquettes aux champs du constructeur, en utilisant la syntaxe d'enregistrement ( C   <  .  >). Les constructeurs utilisant des étiquettes de champ peuvent être librement mélangés avec des constructeurs sans eux. Un constructeur avec des étiquettes de champ associées peut toujours être utilisé comme un constructeur ordinaire. Les caractéristiques utilisant des étiquettes sont simplement un raccourci pour les opérations utilisant un constructeur positionnel sous-jacent. Les arguments du constructeur positionnel apparaissent dans le même ordre que les champs étiquetés. Par exemple, la déclaration

    définit un type et un constructeur identique à celui produit par

    Les opérations utilisant des étiquettes de champ sont décrites dans la sectionਃ.15 . Une déclaration de données peut utiliser la même étiquette de champ dans plusieurs constructeurs tant que le typage du champ est le même dans tous les cas après l'expansion du synonyme de type. Une étiquette ne peut pas être partagée par plusieurs types de portée. Les noms de champ partagent l'espace de noms de niveau supérieur avec les variables ordinaires et les méthodes de classe et ne doivent pas entrer en conflit avec d'autres noms de niveau supérieur dans la portée.

    Le modèle F  <> correspond à toute valeur construite avec le constructeur F , que F ait été déclaré ou non avec la syntaxe d'enregistrement .

    Drapeaux de rigueur Chaque fois qu'un constructeur de données est appliqué, chaque argument du constructeur est évalué si et seulement si le type correspondant dans la déclaration de type de données algébrique a un drapeau de rigueur, indiqué par un point d'exclamation, “ ! ”. Lexicalement, “ ! ” est un varsym ordinaire et non un réservéop, il n'a une signification particulière que dans le contexte des types d'arguments d'une déclaration de données.

    Traduction : Une déclaration des données du formulaire ਌x   =>  T  u 1   &hellip  u k   =   &hellip   |  K  s 1   &hellip  s m   |   &hellip où chaque s je est soit de la forme ! t je ou t je , remplace chaque occurrence de K dans une expression par (   x 1   &hellip  x m   ->   (   (( K  op 1  x 1 )  op 2  x 2 )   &hellip   )  op m  x m ) où op je est la fonction d'application non stricte $ si s je est de la forme t je , et op je est la fonction stricte d'application $! (voir Sectionਆ.2) si s je est de la forme !  t je . La correspondance de motif sur K n'est pas affectée par les drapeaux de rigueur.

    4.2.2 Déclarations de synonymes de type

    Une déclaration de synonyme de type introduit un nouveau type équivalent à un ancien type. Il a le type de forme  T  u 1   &hellip  u k   =  t qui introduit un nouveau constructeur de type, T . Le type ( T  t 1   &hellip t k ) est équivalent au type t [ t 1 ∕u 1 ,   &hellip ,  t k ∕u k ] . Les variables de type u 1 à travers toi k doivent être distincts et ne sont étendus que sur t c'est une erreur statique pour toute autre variable de type d'apparaître dans t . Le genre du nouveau constructeur de type T est de la forme &kappa 1 &rarr &hellip &rarr &kappa k &rarr &kappa où les genres &kappa je des arguments u je et &kappa du membre de droite t sont déterminés par inférence de type comme décrit dans la section਄.6 . Par exemple, la définition suivante peut être utilisée pour fournir une autre façon d'écrire le constructeur de type liste :

    Les symboles de constructeur de type T introduits par les déclarations de synonymes de type ne peuvent pas être appliqués partiellement, c'est une erreur statique d'utiliser T sans le nombre complet d'arguments.

    Bien que les types de données récursifs et mutuellement récursifs soient autorisés, ce n'est pas le cas pour les synonymes de types, à moins qu'un type de données algébrique n'intervienne . Par exemple,

    n'est pas. De même, tapez  Rec ਊ  =  [Rec ਊ] n'est pas autorisé.

    Les synonymes de type sont un mécanisme pratique, mais strictement syntaxique, pour rendre les signatures de type plus lisibles. Un synonyme et sa définition sont complètement interchangeables, sauf dans le type d'instance d'une déclaration d'instance (Section਄.3.2 ).

    4.2.3 Renommage des types de données

    topdecl &rarr newtype   [ contexte   => ]  typesimple   =  newconstr   [ dérivant ]
    nouvelleconstr &rarr avec ਊtype
    | con  
    type simple &rarr tycon  tyvar 1   &hellip  tyvar k         ( k &ge 0)

    Une déclaration de la forme newtype ਌x   =>  T  u 1   &hellip  u k   =  N  t introduit un nouveau type dont la représentation est la même qu'un type existant. Le type ( T  u 1 &hellip  u k ) renomme le type de données t . Il diffère d'un synonyme de type en ce qu'il crée un type distinct qui doit être explicitement forcé vers ou à partir du type d'origine. De plus, contrairement aux synonymes de type, newtype peut être utilisé pour définir des types récursifs. Le constructeur N dans une expression contraint une valeur du type t au type ( T  u 1   &hellip  u k ) . L'utilisation de N dans un motif force une valeur du type ( T  u 1   &hellip  u k ) pour taper t . Ces contraintes peuvent être implémentées sans temps d'exécution supplémentaire. newtype ne change pas la représentation sous-jacente d'un objet.

    De nouvelles instances (voir la section 4.3.2 ) peuvent être définies pour un type défini par newtype mais peuvent ne pas être définies pour un synonyme de type. Un type créé par newtype diffère d'un type de données algébrique en ce que la représentation d'un type de données algébrique a un niveau supplémentaire d'indirection. Cette différence peut rendre l'accès à la représentation moins efficace. La différence se reflète dans différentes règles pour la correspondance de modèle (voir la sectionਃ.17 ). Contrairement aux types de données algébriques, le constructeur newtype N n'est pas levé , de sorte que N   &perp est le même que &perp .

    Les exemples suivants clarifient les différences entre data (types de données algébriques), type (synonymes de type) et newtype (types de renommage.) Étant donné les déclarations

    les expressions (d1   &perp ) , (d2   &perp ) et (d2  (D2   &perp )) sont toutes équivalentes à &perp , alors que (n   &perp ) , (n &# x00A0(N   &perp )) , (d1  (D1   &perp )) et (s   &perp ) sont tous équivalents à 42 . En particulier, (N   &perp ) est équivalent à &perp tandis que (D1   &perp ) n'est pas équivalent à &perp .

    La partie dérivée facultative d'une déclaration newtype est traitée de la même manière que le composant dérivé d'une déclaration de données, voir Section਄.3.3 .

    Une déclaration newtype peut utiliser la syntaxe de nommage des champs, bien qu'il ne puisse bien sûr y avoir qu'un seul champ. Ainsi:


    La complexité et la robustesse des réseaux de métro

    Les systèmes de transport, en tant qu'exemples réels de réseaux, sont particulièrement intéressants à analyser du point de vue du domaine nouveau et émergent de la science des réseaux. Deux concepts particuliers semblent être particulièrement pertinents : les modèles sans échelle et les petits mondes. En examinant 33 systèmes de métro dans le monde, cet article adapte les méthodologies de la science des réseaux à la littérature sur les transports et propose une application à la robustesse des métros ici, le métro fait référence au transport ferroviaire urbain avec droit de passage exclusif, qu'il soit souterrain , au niveau ou surélevé. Nous constatons que la plupart des métros sont en effet sans échelle (avec des facteurs d'échelle allant de 2,10 à 5,52) et que les petits mondes présentent des comportements atypiques, cependant, avec une taille croissante. En particulier, la présence de centres de transfert (stations hébergeant plus de trois lignes) entraîne des facteurs d'échelle relativement importants. L'analyse fournit des informations/recommandations pour augmenter la robustesse des réseaux métropolitains. Les petits réseaux devraient se concentrer sur la création de stations de transfert, générant ainsi des cycles pour offrir des itinéraires alternatifs. Pour les réseaux plus importants, peu de gares semblent détenir un certain monopole sur le transfert, il est donc important de créer des transferts supplémentaires, éventuellement à la périphérie des centres-villes le système de Tokyo semble intégrer remarquablement ces propriétés.


    Barrangou, R. et al. CRISPR fournit une résistance acquise contre les virus chez les procaryotes. Science 315, 1709–1712 (2007)

    Sorek, R., Kunin, V. & Hugenholtz, P. CRISPR—un système répandu qui fournit une résistance acquise contre les phages chez les bactéries et les archées. Nat. Rév. Microbiol. 6, 181–186 (2008)

    Makarova, K.S. et al. Une classification évolutive mise à jour des systèmes CRISPR-Cas. Nat. Rév. Microbiol. 13, 722–736 (2015)

    Shmakov, S. et al. Découverte et caractérisation fonctionnelle de divers systèmes CRISPR–Cas de classe 2. Mol. Cellule 60, 385–397 (2015)

    Barrangou, R. & Doudna, J. A. Applications des technologies CRISPR dans la recherche et au-delà. Nat. Biotechnologie. 34, 933–941 (2016)

    Brown, C.T. et al. Biologie inhabituelle dans un groupe comprenant plus de 15 % des bactéries du domaine. La nature 523, 208–211 (2015)

    Sharon, I. & Banfield, J.F. Génomes issus de la métagénomique. Science 342, 1057–1058 (2013)

    Levy, A. et al. Les biais d'adaptation CRISPR expliquent la préférence pour l'acquisition d'ADN étranger. La nature 520, 505–510 (2015)

    Yosef, I., Goren, M. G. & Qimron, U. Protéines et éléments d'ADN essentiels pour le processus d'adaptation CRISPR dans Escherichia coli. Acides nucléiques Res. 40, 5569–5576 (2012)

    Nuñez, J. K., Lee, A. S. Y., Engelman, A. & Doudna, J. A. Acquisition d'espaceurs médiée par l'intégrase pendant l'immunité adaptative CRISPR-Cas. La nature 519, 193–198 (2015)

    Chylinski, K., Makarova, K. S., Charpentier, E. & Koonin, E. V. Classification et évolution des systèmes CRISPR-Cas de type II. Acides nucléiques Res. 42, 6091–6105 (2014)

    Baker, B.J. et al. Archaea énigmatique, ultrapetite et inculte. Proc. Natl Acad. Sci. Etats-Unis 107, 8806–8811 (2010)

    Baker, B.J. et al. Lignées d'archées acidophiles révélées par l'analyse génomique de la communauté. Science 314, 1933–1935 (2006)

    Comolli, L. R. & Banfield, J. F. Interconnexions inter-espèces dans les communautés microbiennes de drainage minier acide. De face. Microbiole. 5, 367 (2014)

    Yelton, A.P. et al.La génomique comparative dans les communautés de biofilms de drainage minier acide révèle une différenciation métabolique et structurelle des archées coexistantes. BMC Génomique 14, 485 (2013)

    Vagin, V.V. et al. Une petite voie d'ARN distincte fait taire les éléments génétiques égoïstes dans la lignée germinale. La science 313, 320–324 (2006)

    Stern, A., Keren, L., Wurtzel, O., Amitai, G. & Sorek, R. Auto-ciblage par CRISPR : régulation génique ou auto-immunité ? Tendances Genet. 26, 335–340 (2010)

    Zegans, M.E. et al. L'interaction entre le bactériophage DMS3 et la région hôte CRISPR inhibe les comportements de groupe de Pseudomonas aeruginosa. J. Bactériol. 191, 210–219 (2009)

    Shah, S.A., Erdmann, S., Mojica, F.J.M. & Garrett, R.A. Motifs de reconnaissance de protospacer : identités mixtes et diversité fonctionnelle. ARN Biol. 10, 891–899 (2013)

    Anders, C., Niewoehner, O., Duerst, A. & amp Jinek, M. Base structurelle de la reconnaissance d'ADN cible dépendante de PAM par l'endonucléase Cas9. Nature 513, 569–573 (2014)

    Jinek, M. et al. Une endonucléase d'ADN guidée à double ARN programmable dans l'immunité bactérienne adaptative. La science 337, 816–821 (2012)

    Deltcheva, E. et al. Maturation de l'ARN CRISPR par un petit ARN codé en trans et le facteur hôte RNase III. Nature 471, 602–607 (2011)

    Zhang, Y., Rajan, R., Seifert, H. S., Mondragón, A. & Sontheimer, E. J. DNase H Activité de Neisseria meningitidis Cas9. Mol. Cellule 60, 242–255 (2015)

    Zetsche, B. et al. Cpf1 est une endonucléase guidée par ARN unique d'un système CRISPR-Cas de classe 2. Cellule 163, 759–771 (2015)

    Abudayyeh, O.O. et al. C2c2 est un effecteur CRISPR de ciblage d'ARN guidé par ARN programmable à un seul composant. La science 353, aaf5573 (2016)

    Anantharaman, K. et al. Des milliers de génomes microbiens mettent en lumière les processus biogéochimiques interconnectés dans un système aquifère. Nat. Commun. 7, 13219 (2016)

    Godde, J. S. & Bickerton, A. Les éléments répétitifs de l'ADN appelés CRISPR et leurs gènes associés : preuve de transfert horizontal entre les procaryotes. J. Mol. Évol. 62, 718–729 (2006)

    Burstein, D. et al. Les principales lignées bactériennes sont essentiellement dépourvues de systèmes de défense virale CRISPR-Cas. Nat. Commun. 7, 10613 (2016)

    Hug, L.A. et al. Une nouvelle vision de l'arbre de vie. Nat. Microbiole. 1, 16048 (2016)

    Luef, B. et al. Diverses cellules bactériennes ultra-petites non cultivées dans les eaux souterraines. Nat. Commun. 6, 6372 (2015)

    Kantor, R.S. et al. Petits génomes et métabolismes épars de bactéries associées aux sédiments de quatre phylums candidats. MBio 4, e00708–e00713 (2013)

    Nelson, W. C. & Stegen, J. C. Les génomes réduits de Parcubacteria (OD1) contiennent des signatures d'un mode de vie symbiotique. De face. Microbiole. 6, 713 (2015)

    Rinke, C. et al. Aperçu de la phylogénie et du potentiel de codage de la matière noire microbienne. Nature 499, 431–437 (2013)

    Finn, R. D., Clements, J. & Eddy, S. R. Serveur Web HMMER : recherche de similarité de séquence interactive. Acides nucléiques Res. 39, S29–S37 (2011)

    Nuñez, J.K. et al. La formation du complexe Cas1-Cas2 médie l'acquisition de l'espaceur pendant l'immunité adaptative CRISPR-Cas. Nat. Structurer. Mol. Biol. 21, 528–534 (2014)

    Denef, V.J. & Banfield, J.F. In situ les mesures du taux d'évolution montrent le succès écologique des hybrides bactériens récemment apparus. La science 336, 462–466 (2012)

    Miller, C. S., Baker, B. J., Thomas, B. C., Singer, S. W. & Banfield, J. F. EMIRGE : reconstruction de gènes ribosomiques complets à partir de données de séquençage à lecture courte de la communauté microbienne. Génome Biol. 12, R44 (2011)

    Probst, A.J. et al. La résolution génomique d'une communauté d'aquifères souterrains froids fournit des informations métaboliques pour de nouveaux microbes adaptés aux concentrations élevées de CO2. Environ. Microbiole. http://dx.doi.org/10.1111/1462-2920.13362 (2016)

    Emerson, J. B., Thomas, B. C., Alvarez, W. & Banfield, J. F. Analyse métagénomique d'une communauté microbienne souterraine à forte teneur en dioxyde de carbone peuplée de chimolithoautotrophes, de bactéries et d'archées des phylums candidats. Environ. Microbiole. 18, 1686–1703 (2016)

    Peng, Y., Leung, H. C. M., Yiu, S. M. & Chin, F. Y. L. IDBA-UD : a de novo assembleur pour les données de séquençage monocellulaire et métagénomique avec une profondeur très inégale. Bioinformatique 28, 1420–1428 (2012)

    Langmead, B. & Salzberg, S. L. Alignement rapide à lecture espacée avec Bowtie 2. Nat. Méthodes 9, 357–359 (2012)

    Hyatt, D. et al. Prodigal : reconnaissance de gènes procaryotes et identification du site d'initiation de la traduction. BMC Bioinformatique 11, 119 (2010)

    Wu, Y.-W., Simmons, B. A. & Singer, S. W. MaxBin 2.0 : un algorithme de binning automatisé pour récupérer des génomes à partir de plusieurs ensembles de données métagénomiques. Bioinformatique 32, 605–607 (2016)

    Dick, G.J. et al. Analyse à l'échelle de la communauté des signatures de séquences du génome microbien. Génome Biol. 10, R85 (2009)

    Grissa, I., Vergnaud, G. & Pourcel, C. CRISPRFinder : un outil web pour identifier de courtes répétitions palindromiques groupées régulièrement espacées. Acides nucléiques Res. 35, S52–S57 (2007)

    Enright, A. J., Van Dongen, S. & Ouzounis, C. A. Un algorithme efficace pour la détection à grande échelle des familles de protéines. Acides nucléiques Res. 30, 1575–1584 (2002)

    Camacho, C. et al. BLAST+ : architecture et applications. BMC Bioinformatique 10, 421 (2009)

    Le Consortium UniProt. UniProt : un hub pour les informations sur les protéines. Acides nucléiques Res. 43, D204–D212 (2015)

    Remmert, M., Biegert, A., Hauser, A. & Söding, J. HHblits : recherche itérative ultra-rapide de séquences de protéines par alignement HMM-HMM. Nat. Méthodes 9, 173–175 (2011)

    Dong, D. et al. La structure cristalline de Cpf1 en complexe avec l'ARN CRISPR. Nature 532, 522–526 (2016)

    Yamano, T. et al. Structure cristalline de Cpf1 en complexe avec ARN guide et ADN cible. Cellule 165, 949–962 (2016)

    Drozdetskiy, A., Cole, C., Procter, J. & Barton, G. J. JPred4 : un serveur de prédiction de structure secondaire de protéine. Acides nucléiques Res. 43 (W1), W389–W394 (2015)

    Kelley, L. A., Mezulis, S., Yates, C. M., Wass, M. N. & Sternberg, M. J. E. Le portail Web Phyre2 pour la modélisation, la prédiction et l'analyse des protéines. Nat. Protocoles 10, 845–858 (2015)

    Skennerton, C. T., Imelfort, M. & Tyson, G. W. Crass : identification et reconstruction de CRISPR à partir de données métagénomiques non assemblées. Acides nucléiques Res. 41, e105 (2013)

    Crooks, G.E., Hon, G., Chandonia, J.-M. & Brenner, S. E. WebLogo : un générateur de logo de séquence. Génome Res. 14, 1188–1190 (2004)

    Zuker, serveur Web M. Mfold pour la prédiction du repliement des acides nucléiques et de l'hybridation. Acides nucléiques Res. 31, 3406–3415 (2003)

    Kurtz, S. et al. Logiciel polyvalent et ouvert pour comparer de grands génomes. Génome Biol. 5, R12 (2004)

    Fu, L., Niu, B., Zhu, Z., Wu, S. & Li, W. CD-HIT : accéléré pour regrouper les données de séquençage de nouvelle génération. Bioinformatique 28, 3150–3152 (2012)

    Katoh, K. & Standley, D. M. MAFFT logiciel d'alignement de séquences multiples version 7 : améliorations des performances et de la convivialité. Mol. Biol. Évol. 30, 772–780 (2013)

    Stamatakis, A. RAxML version 8 : un outil pour l'analyse phylogénétique et la post-analyse de grandes phylogénies. Bioinformatique 30, 1312–1313 (2014)

    Letunic, I. & Bork, P. Arbre de vie interactif (iTOL) v3 : un outil en ligne pour l'affichage et l'annotation d'arbres phylogénétiques et autres. Acides nucléiques Res. 44 (W1), W242–W245 (2016)

    Gibson, D.G. et al. Assemblage enzymatique de molécules d'ADN jusqu'à plusieurs centaines de kilobases. Nat. Méthodes 6, 343–345 (2009)

    Esvelt, K.M. et al. Protéines Cas9 orthogonales pour la régulation et l'édition de gènes guidées par l'ARN. Nat. Méthodes 10, 1116–1121 (2013)

    Zhang, Y. et al. Les ARN CRISPR indépendants du traitement limitent la transformation naturelle dans Neisseria meningitidis. Mol. Cellule 50, 488–503 (2013)

    Sternberg, S. H., Haurwitz, R. E. & Doudna, J. A. Mécanisme de sélection de substrat par une endoribonucléase CRISPR hautement spécifique. ARN 18, 661–672 (2012)

    Oakes, B.L. et al. Le profilage des points chauds d'ingénierie identifie un commutateur allostérique CRISPR-Cas9. Nat. Biotechnologie. 34, 646–651 (2016)

    Jinek, M. et al. Les structures des endonucléases Cas9 révèlent une activation conformationnelle médiée par l'ARN. La science 343, http://dx.doi.org/10.1126/science.1247997 (2014)


    Diffusion: un prélude de streaming élémentaire et un type de flux général.

    Ce package contient deux modules, Streaming et Streaming.Prelude. Le module principal, Streaming.Prelude, exporte un prélude de streaming élémentaire centré sur un simple type "source" ou "producteur", à savoir Stream (Of a) m r . C'est une sorte de version efficace de ([a],r) dans laquelle les éléments successifs de type a résultent d'une sorte d'action monadique avant que la succession ne se termine par une valeur de type r . Tout dans la bibliothèque est organisé pour rendre la programmation avec ce type aussi simple que possible, par le simple expédient de la rendre aussi proche que possible de Prelude et Data.List. Ainsi par exemple le programme trivial

    additionne les trois premiers entiers valides de l'entrée utilisateur. De même,

    met en majuscules les deux premières lignes de stdin au fur et à mesure qu'elles apparaissent et les envoie à stdout. Et ainsi de suite, avec le filtrage, le mappage, la rupture, le découpage, la compression, la décompression, la réplication, etc. : nous programmons directement avec des flux d'Int ou de String comme s'ils constituaient quelque chose comme une liste. C'est parce que les flux constituent vraiment quelque chose comme une liste, et les opérations associées peuvent pour la plupart avoir les mêmes noms. (Quelques-uns, comme reverse , ne diffusent pas et disparaissent ainsi, d'autres comme unzip reçoivent ici une formulation correctement diffusée pour la première fois.) Et nous nous opposons partout à "extraire une liste pure de IO", qui est à l'origine des catastrophes typiques de la mémoire Haskell. Fondamentalement, dans tous les cas où vous êtes tenté d'utiliser mapM , replicateM , traverse ou sequence avec des listes Haskell, vous feriez mieux d'utiliser quelque chose comme Stream (Of a) m r . Les signatures de type sont un peu plus sophistiquées, mais les programmes eux-mêmes sont pour la plupart les mêmes. En fait, ils sont pour la plupart plus simples. Ainsi, considérez le programme de démonstration trivial mentionné dans cette question SO

    Le nouvel utilisateur remarque que cela épuise la mémoire et s'inquiète de l'efficacité de Haskell IORefs . Mais bien sûr, cela épuise la mémoire ! Regardez ce qu'il dit ! Le problème est immédiatement résolu en écrivant

    qui fait vraiment ce que l'autre programme était censé faire, n'utilise pas plus de mémoire que hello-world , et c'est quand même plus simple, car cela n'implique pas le détour de "extraire une liste de IO". Presque chaque utilisation de la liste mapM , replicateM , traverse et sequence produit ce problème à plus petite échelle. Les gens s'y habituent, comme s'il était caractéristique des programmes Haskell d'utiliser beaucoup de mémoire. Mais en vérité "extraire une liste ou une séquence d'E/S" n'est généralement qu'une mauvaise pratique pure et simple. Bien sûr, mapM , replicateM , traverse et sequence ont du sens pour les listes, sous certaines conditions ! Mais unsafePerformIO a également du sens dans certaines conditions.

    Le module Streaming exporte le type général, Stream f m r , qui peut être utilisé pour streamer des étapes distinctes successives caractérisées par quelconque foncteur f , bien que nous nous intéressions surtout à l'organisation de calculs de la forme Stream (Of a) m r . Les bibliothèques streaming-IO disposent de divers dispositifs pour traiter des variantes efficaces de [a] ou ([a],r) dans lesquelles l'émergence d'éléments successifs dépend en quelque sorte de l'IO. Mais ce n'est qu'avec le type général Stream f m r , ou quelque équivalent, que l'on peut envisager (par exemple) le streaming connecté de leurs sortes de flux - comme on fait des listes de listes dans les Haskell Prelude et Data.List . On a besoin d'un tel type si nous voulons exprimer correctement les équivalents en continu de, par exemple.

    pour ne citer que quelques opérations manifestement souhaitables. (Ceci est expliqué plus en détail dans le fichier readme ci-dessous.)

    On pourrait bien sûr ajouter quelque chose comme le type Stream actuel au-dessus d'un concept de flux antérieur : c'est ainsi que les pipes et les pipes-group (qui sont en grande partie notre modèle ici) utilisent FreeT . Mais une fois que l'on saisit le concept de flux itérable nécessaire pour exprimer ces fonctions, alors on verra aussi que, avec lui, on est déjà en possession d'une bibliothèque de streaming élémentaire complète - puisque l'on possède Stream ((,) a) m r ou de manière équivalente Stream (Of a) m r . C'est le type d'un « générateur » ou « producteur » ou « source » ou ce que vous appelez un flux efficace d’éléments. Le présent Streaming.Prelude est donc la bibliothèque de streaming la plus simple qui peut répliquer n'importe quoi comme l'API du Prelude et Data.List.

    L'accent de la bibliothèque est sur l'interopérabilité pour le reste ses avantages sont : une extrême simplicité, la réutilisation des intuitions que l'utilisateur a recueillies grâce à la maîtrise de Prelude et Data.List , et un rejet total et systématique des synonymes de type. Les deux pré-requis conceptuels sont une certaine compréhension des transformateurs de monades et une certaine familiarité avec les « types de rang 2 ». On espère que l'expérimentation de ce matériel simple, en commençant par les exemples de ghci dans Streaming.Prelude, donnera aux personnes novices dans ces concepts une intuition de leur importance. L'objectif le plus fondamental de la bibliothèque est d'exprimer des idées de streaming élémentaires sans recourir à un cadre complexe, mais d'une manière qui s'intègre de manière transparente avec le reste de Haskell, en utilisant des idées - par ex. types de rang 2, qui sont ici implicites ou explicites dans la plupart des mappages - que l'utilisateur peut emporter ailleurs, plutôt que d'enchaîner sa compréhension aux curiosités d'un cadre d'E/S en streaming (aussi nécessaire que cela soit à certaines fins.)

    Voir le fichier readme ci-dessous pour plus d'explications, y compris les exemples qui y sont liés. L'utilisation élémentaire peut être devinée à partir des exemples ghci dans Streaming.Prelude et peut-être à partir de ce début approximatif d'un didacticiel. Notez également les packages de streaming bytestring et streaming utils. Des questions sur l'utilisation peuvent être posées sur StackOverflow avec la balise [haskell-streaming] , ou comme un problème sur Github, ou sur la liste des tuyaux (le paquet se comprend comme faisant partie de l'écosystème des tuyaux.)

    La forme la plus simple d'interopérabilité avec les tuyaux est accomplie avec cet isomorphisme :

    L'interopérabilité avec les io-streams est donc :

    Ces conversions ne devraient jamais être plus chères qu'un seul >-> ou =$= . L'interopérabilité la plus simple avec les listes Haskell régulières est fournie par, disons

    Ce dernier accumule bien sûr toute la liste en mémoire, et c'est surtout ce que nous essayons d'éviter. Chaque utilisation de Prelude.mapM f doit être repensée comme utilisant la composition Streaming.toList_ . Streaming.mapM f . Streaming.each en vue d'examiner si l'accumulation requise par Streaming.toList_ est vraiment nécessaire.

    Voici les résultats de quelques microbenchmarks basés sur les benchmarks inclus dans le package de machines :

    Parce qu'il s'agit de microbenchmarks pour des fonctions individuelles, ils représentent une sorte de "pire des cas", de nombreux autres facteurs peuvent influencer la vitesse d'un programme complexe.


    Voir la vidéo: La zone de libre-échange continentale (Décembre 2021).