LogicLogic in Coq
Set Warnings "-notation-overridden,-parsing".
Require Export Tactics.
In previous chapters, we have seen many examples of factual
claims (propositions) and ways of presenting evidence of their
truth (proofs). In particular, we have worked extensively with
equality propositions of the form e1 = e2, with
implications (P → Q), and with quantified propositions (∀
x, P). In this chapter, we will see how Coq can be used to carry
out other familiar forms of logical reasoning.
Before diving into details, let's talk a bit about the status of
mathematical statements in Coq. Recall that Coq is a typed
language, which means that every sensible expression in its world
has an associated type. Logical claims are no exception: any
statement we might try to prove in Coq has a type, namely Prop,
the type of propositions. We can see this with the Check
command:
Check 3 = 3.
(* ===> Prop *)
Check ∀ n m : nat, n + m = m + n.
(* ===> Prop *)
Note that all syntactically well-formed propositions have type
Prop in Coq, regardless of whether they are true or not.
Simply being a proposition is one thing; being provable is
something else!
Check 2 = 2.
(* ===> Prop *)
Check ∀ n : nat, n = 2.
(* ===> Prop *)
Check 3 = 4.
(* ===> Prop *)
Indeed, propositions don't just have types: they are
first-class objects that can be manipulated in the same ways as
the other entities in Coq's world.
So far, we've seen one primary place that propositions can appear:
in Theorem (and Lemma and Example) declarations.
Theorem plus_2_2_is_4 :
2 + 2 = 4.
Proof. reflexivity. Qed.
But propositions can be used in many other ways. For example, we
can give a name to a proposition using a Definition, just as we
have given names to expressions of other sorts.
Definition plus_fact : Prop := 2 + 2 = 4.
Check plus_fact.
(* ===> plus_fact : Prop *)
We can later use this name in any situation where a proposition is
expected — for example, as the claim in a Theorem declaration.
Theorem plus_fact_is_true :
plus_fact.
Proof. reflexivity. Qed.
We can also write parameterized propositions — that is,
functions that take arguments of some type and return a
proposition.
For instance, the following function takes a number
and returns a proposition asserting that this number is equal to
three:
Definition is_three (n : nat) : Prop :=
n = 3.
Check is_three.
(* ===> nat -> Prop *)
In Coq, functions that return propositions are said to define
properties of their arguments.
For instance, here's a (polymorphic) property defining the
familiar notion of an injective function.
Definition injective {A B} (f : A → B) :=
∀ x y : A, f x = f y → x = y.
Lemma succ_inj : injective S.
Proof.
intros n m H. inversion H. reflexivity.
Qed.
The equality operator = is also a function that returns a
Prop.
The expression n = m is syntactic sugar for eq n m, defined
using Coq's Notation mechanism. Because eq can be used with
elements of any type, it is also polymorphic:
Check @eq.
(* ===> forall A : Type, A -> A -> Prop *)
(Notice that we wrote @eq instead of eq: The type
argument A to eq is declared as implicit, so we need to turn
off implicit arguments to see the full type of eq.)
Logical Connectives
Conjunction
Example and_example : 3 + 4 = 7 ∧ 2 * 2 = 4.
To prove a conjunction, use the split tactic. It will generate
two subgoals, one for each part of the statement:
Proof.
(* WORKED IN CLASS *)
split.
- (* 3 + 4 = 7 *) reflexivity.
- (* 2 + 2 = 4 *) reflexivity.
Qed.
For any propositions A and B, if we assume that A is true
and we assume that B is true, we can conclude that A ∧ B is
also true.
Lemma and_intro : ∀ A B : Prop, A → B → A ∧ B.
Proof.
intros A B HA HB. split.
- apply HA.
- apply HB.
Qed.
Since applying a theorem with hypotheses to some goal has the
effect of generating as many subgoals as there are hypotheses for
that theorem, we can apply and_intro to achieve the same effect
as split.
Example and_example' : 3 + 4 = 7 ∧ 2 * 2 = 4.
Proof.
apply and_intro.
- (* 3 + 4 = 7 *) reflexivity.
- (* 2 + 2 = 4 *) reflexivity.
Qed.
Example and_exercise :
∀ n m : nat, n + m = 0 → n = 0 ∧ m = 0.
Proof.
(* FILL IN HERE *) Admitted.
☐
∀ n m : nat, n + m = 0 → n = 0 ∧ m = 0.
Proof.
(* FILL IN HERE *) Admitted.
Lemma and_example2 :
∀ n m : nat, n = 0 ∧ m = 0 → n + m = 0.
Proof.
(* WORKED IN CLASS *)
intros n m H.
destruct H as [Hn Hm].
rewrite Hn. rewrite Hm.
reflexivity.
Qed.
As usual, we can also destruct H right when we introduce it,
instead of introducing and then destructing it:
Lemma and_example2' :
∀ n m : nat, n = 0 ∧ m = 0 → n + m = 0.
Proof.
intros n m [Hn Hm].
rewrite Hn. rewrite Hm.
reflexivity.
Qed.
You may wonder why we bothered packing the two hypotheses n = 0
and m = 0 into a single conjunction, since we could have also
stated the theorem with two separate premises:
Lemma and_example2'' :
∀ n m : nat, n = 0 → m = 0 → n + m = 0.
Proof.
intros n m Hn Hm.
rewrite Hn. rewrite Hm.
reflexivity.
Qed.
For this theorem, both formulations are fine. But it's important
to understand how to work with conjunctive hypotheses because
conjunctions often arise from intermediate steps in proofs,
especially in bigger developments. Here's a simple example:
Lemma and_example3 :
∀ n m : nat, n + m = 0 → n * m = 0.
Proof.
intros n m H.
assert (H' : n = 0 ∧ m = 0).
{ apply and_exercise. apply H. }
destruct H' as [Hn Hm].
rewrite Hn. reflexivity.
Qed.
Another common situation with conjunctions is that we know
A ∧ B but in some context we need just A (or just B).
The following lemmas are useful in such cases:
Lemma proj1 : ∀ P Q : Prop,
P ∧ Q → P.
Proof.
intros P Q [HP HQ].
apply HP. Qed.
Lemma proj2 : ∀ P Q : Prop,
P ∧ Q → Q.
Proof.
(* FILL IN HERE *) Admitted.
☐
P ∧ Q → Q.
Proof.
(* FILL IN HERE *) Admitted.
Theorem and_commut : ∀ P Q : Prop,
P ∧ Q → Q ∧ P.
Proof.
(* WORKED IN CLASS *)
intros P Q [HP HQ].
split.
- (* left *) apply HQ.
- (* right *) apply HP. Qed.
Exercise: 2 stars (and_assoc)
(In the following proof of associativity, notice how the nested intro pattern breaks the hypothesis H : P ∧ (Q ∧ R) down into HP : P, HQ : Q, and HR : R. Finish the proof from there.)Theorem and_assoc : ∀ P Q R : Prop,
P ∧ (Q ∧ R) → (P ∧ Q) ∧ R.
Proof.
intros P Q R [HP [HQ HR]].
(* FILL IN HERE *) Admitted.
Check and.
(* ===> and : Prop -> Prop -> Prop *)
Disjunction
Lemma or_example :
∀ n m : nat, n = 0 ∨ m = 0 → n * m = 0.
Proof.
(* This pattern implicitly does case analysis on
n = 0 ∨ m = 0 *)
intros n m [Hn | Hm].
- (* Here, n = 0 *)
rewrite Hn. reflexivity.
- (* Here, m = 0 *)
rewrite Hm. rewrite <- mult_n_O.
reflexivity.
Qed.
Conversely, to show that a disjunction holds, we need to show that
one of its sides does. This is done via two tactics, left and
right. As their names imply, the first one requires
proving the left side of the disjunction, while the second
requires proving its right side. Here is a trivial use...
Lemma or_intro : ∀ A B : Prop, A → A ∨ B.
Proof.
intros A B HA.
left.
apply HA.
Qed.
... and a slightly more interesting example requiring both left
and right:
Lemma zero_or_succ :
∀ n : nat, n = 0 ∨ n = S (pred n).
Proof.
intros [|n].
- left. reflexivity.
- right. reflexivity.
Qed.
Lemma mult_eq_0 :
∀ n m, n * m = 0 → n = 0 ∨ m = 0.
Proof.
(* FILL IN HERE *) Admitted.
☐
∀ n m, n * m = 0 → n = 0 ∨ m = 0.
Proof.
(* FILL IN HERE *) Admitted.
Theorem or_commut : ∀ P Q : Prop,
P ∨ Q → Q ∨ P.
Proof.
(* FILL IN HERE *) Admitted.
☐
P ∨ Q → Q ∨ P.
Proof.
(* FILL IN HERE *) Admitted.
Falsehood and Negation
Module MyNot.
Definition not (P:Prop) := P → False.
Notation "¬ x" := (not x) : type_scope.
Check not.
(* ===> Prop -> Prop *)
End MyNot.
Since False is a contradictory proposition, the principle of
explosion also applies to it. If we get False into the proof
context, we can use destruct (or inversion) on it to complete
any goal:
Theorem ex_falso_quodlibet : ∀ (P:Prop),
False → P.
Proof.
(* WORKED IN CLASS *)
intros P contra.
destruct contra. Qed.
The Latin ex falso quodlibet means, literally, "from falsehood
follows whatever you like"; this is another common name for the
principle of explosion.
Exercise: 2 stars, optional (not_implies_our_not)
Show that Coq's definition of negation implies the intuitive one mentioned above:Fact not_implies_our_not : ∀ (P:Prop),
¬ P → (∀ (Q:Prop), P → Q).
Proof.
(* FILL IN HERE *) Admitted.
Theorem zero_not_one : ~(0 = 1).
Proof.
intros contra. inversion contra.
Qed.
Such inequality statements are frequent enough to warrant a
special notation, x ≠ y:
Check (0 ≠ 1).
(* ===> Prop *)
Theorem zero_not_one' : 0 ≠ 1.
Proof.
intros H. inversion H.
Qed.
It takes a little practice to get used to working with negation in
Coq. Even though you can see perfectly well why a statement
involving negation is true, it can be a little tricky at first to
get things into the right configuration so that Coq can understand
it! Here are proofs of a few familiar facts to get you warmed
up.
Theorem not_False :
¬ False.
Proof.
unfold not. intros H. destruct H. Qed.
Theorem contradiction_implies_anything : ∀ P Q : Prop,
(P ∧ ¬P) → Q.
Proof.
(* WORKED IN CLASS *)
intros P Q [HP HNA]. unfold not in HNA.
apply HNA in HP. destruct HP. Qed.
Theorem double_neg : ∀ P : Prop,
P → ~~P.
Proof.
(* WORKED IN CLASS *)
intros P H. unfold not. intros G. apply G. apply H. Qed.
Exercise: 2 stars, advanced, recommendedM (double_neg_inf)
Write an informal proof of double_neg:(* FILL IN HERE *)
Theorem contrapositive : ∀ (P Q : Prop),
(P → Q) → (¬Q → ¬P).
Proof.
(* FILL IN HERE *) Admitted.
☐
(P → Q) → (¬Q → ¬P).
Proof.
(* FILL IN HERE *) Admitted.
Theorem not_both_true_and_false : ∀ P : Prop,
¬ (P ∧ ¬P).
Proof.
(* FILL IN HERE *) Admitted.
☐
¬ (P ∧ ¬P).
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 1 star, advancedM (informal_not_PNP)
Write an informal proof (in English) of the proposition ∀ P : Prop, ~(P ∧ ¬P).(* FILL IN HERE *)
Theorem not_true_is_false : ∀ b : bool,
b ≠ true → b = false.
Proof.
intros [] H.
- (* b = true *)
unfold not in H.
apply ex_falso_quodlibet.
apply H. reflexivity.
- (* b = false *)
reflexivity.
Qed.
Since reasoning with ex_falso_quodlibet is quite common, Coq
provides a built-in tactic, exfalso, for applying it.
Theorem not_true_is_false' : ∀ b : bool,
b ≠ true → b = false.
Proof.
intros [] H.
- (* b = false *)
unfold not in H.
exfalso. (* <=== *)
apply H. reflexivity.
- (* b = true *) reflexivity.
Qed.
Truth
Lemma True_is_true : True.
Proof. apply I. Qed.
Unlike False, which is used extensively, True is used quite
rarely, since it is trivial (and therefore uninteresting) to prove
as a goal, and it carries no useful information as a hypothesis.
But it can be quite useful when defining complex Props using
conditionals or as a parameter to higher-order Props. We will
see examples of such uses of True later on.
The handy "if and only if" connective, which asserts that two
propositions have the same truth value, is just the conjunction of
two implications.
Logical Equivalence
Module MyIff.
Definition iff (P Q : Prop) := (P → Q) ∧ (Q → P).
Notation "P ↔ Q" := (iff P Q)
(at level 95, no associativity)
: type_scope.
End MyIff.
Theorem iff_sym : ∀ P Q : Prop,
(P ↔ Q) → (Q ↔ P).
Proof.
(* WORKED IN CLASS *)
intros P Q [HAB HBA].
split.
- (* -> *) apply HBA.
- (* <- *) apply HAB. Qed.
Lemma not_true_iff_false : ∀ b,
b ≠ true ↔ b = false.
Proof.
(* WORKED IN CLASS *)
intros b. split.
- (* -> *) apply not_true_is_false.
- (* <- *)
intros H. rewrite H. intros H'. inversion H'.
Qed.
Exercise: 1 star, optional (iff_properties)
Using the above proof that ↔ is symmetric (iff_sym) as a guide, prove that it is also reflexive and transitive.Theorem iff_refl : ∀ P : Prop,
P ↔ P.
Proof.
(* FILL IN HERE *) Admitted.
Theorem iff_trans : ∀ P Q R : Prop,
(P ↔ Q) → (Q ↔ R) → (P ↔ R).
Proof.
(* FILL IN HERE *) Admitted.
Theorem or_distributes_over_and : ∀ P Q R : Prop,
P ∨ (Q ∧ R) ↔ (P ∨ Q) ∧ (P ∨ R).
Proof.
(* FILL IN HERE *) Admitted.
☐
P ∨ (Q ∧ R) ↔ (P ∨ Q) ∧ (P ∨ R).
Proof.
(* FILL IN HERE *) Admitted.
Require Import Coq.Setoids.Setoid.
Here is a simple example demonstrating how these tactics work with
iff. First, let's prove a couple of basic iff equivalences...
Lemma mult_0 : ∀ n m, n * m = 0 ↔ n = 0 ∨ m = 0.
Proof.
split.
- apply mult_eq_0.
- apply or_example.
Qed.
Lemma or_assoc :
∀ P Q R : Prop, P ∨ (Q ∨ R) ↔ (P ∨ Q) ∨ R.
Proof.
intros P Q R. split.
- intros [H | [H | H]].
+ left. left. apply H.
+ left. right. apply H.
+ right. apply H.
- intros [[H | H] | H].
+ left. apply H.
+ right. left. apply H.
+ right. right. apply H.
Qed.
We can now use these facts with rewrite and reflexivity to
give smooth proofs of statements involving equivalences. Here is
a ternary version of the previous mult_0 result:
Lemma mult_0_3 :
∀ n m p, n * m * p = 0 ↔ n = 0 ∨ m = 0 ∨ p = 0.
Proof.
intros n m p.
rewrite mult_0. rewrite mult_0. rewrite or_assoc.
reflexivity.
Qed.
The apply tactic can also be used with ↔. When given an
equivalence as its argument, apply tries to guess which side of
the equivalence to use.
Lemma apply_iff_example :
∀ n m : nat, n * m = 0 → n = 0 ∨ m = 0.
Proof.
intros n m H. apply mult_0. apply H.
Qed.
Existential Quantification
Lemma four_is_even : ∃ n : nat, 4 = n + n.
Proof.
∃ 2. reflexivity.
Qed.
Conversely, if we have an existential hypothesis ∃ x, P in
the context, we can destruct it to obtain a witness x and a
hypothesis stating that P holds of x.
Theorem exists_example_2 : ∀ n,
(∃ m, n = 4 + m) →
(∃ o, n = 2 + o).
Proof.
(* WORKED IN CLASS *)
intros n [m Hm]. (* note implicit destruct here *)
∃ (2 + m).
apply Hm. Qed.
Exercise: 1 star (dist_not_exists)
Prove that "P holds for all x" implies "there is no x for which P does not hold."Theorem dist_not_exists : ∀ (X:Type) (P : X → Prop),
(∀ x, P x) → ¬ (∃ x, ¬ P x).
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 2 stars (dist_exists_or)
Prove that existential quantification distributes over disjunction.Theorem dist_exists_or : ∀ (X:Type) (P Q : X → Prop),
(∃ x, P x ∨ Q x) ↔ (∃ x, P x) ∨ (∃ x, Q x).
Proof.
(* FILL IN HERE *) Admitted.
Programming with Propositions
- If l is the empty list, then x cannot occur on it, so the property "x appears in l" is simply false.
- Otherwise, l has the form x' :: l'. In this case, x occurs in l if either it is equal to x' or it occurs in l'.
Fixpoint In {A : Type} (x : A) (l : list A) : Prop :=
match l with
| [] ⇒ False
| x' :: l' ⇒ x' = x ∨ In x l'
end.
When In is applied to a concrete list, it expands into a
concrete sequence of nested disjunctions.
Example In_example_1 : In 4 [1; 2; 3; 4; 5].
Proof.
(* WORKED IN CLASS *)
simpl. right. right. right. left. reflexivity.
Qed.
Example In_example_2 :
∀ n, In n [2; 4] →
∃ n', n = 2 * n'.
Proof.
(* WORKED IN CLASS *)
simpl.
intros n [H | [H | []]].
- ∃ 1. rewrite <- H. reflexivity.
- ∃ 2. rewrite <- H. reflexivity.
Qed.
(Notice the use of the empty pattern to discharge the last case
en passant.)
We can also prove more generic, higher-level lemmas about In.
Note, in the next, how In starts out applied to a variable and
only gets expanded when we do case analysis on this variable:
Lemma In_map :
∀ (A B : Type) (f : A → B) (l : list A) (x : A),
In x l →
In (f x) (map f l).
Proof.
intros A B f l x.
induction l as [|x' l' IHl'].
- (* l = nil, contradiction *)
simpl. intros [].
- (* l = x' :: l' *)
simpl. intros [H | H].
+ rewrite H. left. reflexivity.
+ right. apply IHl'. apply H.
Qed.
This way of defining propositions recursively, though convenient
in some cases, also has some drawbacks. In particular, it is
subject to Coq's usual restrictions regarding the definition of
recursive functions, e.g., the requirement that they be "obviously
terminating." In the next chapter, we will see how to define
propositions inductively, a different technique with its own set
of strengths and limitations.
Exercise: 2 stars (In_map_iff)
Lemma In_map_iff :
∀ (A B : Type) (f : A → B) (l : list A) (y : B),
In y (map f l) ↔
∃ x, f x = y ∧ In x l.
Proof.
(* FILL IN HERE *) Admitted.
☐
∀ (A B : Type) (f : A → B) (l : list A) (y : B),
In y (map f l) ↔
∃ x, f x = y ∧ In x l.
Proof.
(* FILL IN HERE *) Admitted.
Lemma in_app_iff : ∀ A l l' (a:A),
In a (l++l') ↔ In a l ∨ In a l'.
Proof.
(* FILL IN HERE *) Admitted.
☐
In a (l++l') ↔ In a l ∨ In a l'.
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 3 stars, recommended (All)
Recall that functions returning propositions can be seen as properties of their arguments. For instance, if P has type nat → Prop, then P n states that property P holds of n.Fixpoint All {T : Type} (P : T → Prop) (l : list T) : Prop
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
Lemma All_In :
∀ T (P : T → Prop) (l : list T),
(∀ x, In x l → P x) ↔
All P l.
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 3 stars (combine_odd_even)
Complete the definition of the combine_odd_even function below. It takes as arguments two properties of numbers, Podd and Peven, and it should return a property P such that P n is equivalent to Podd n when n is odd and equivalent to Peven n otherwise.Definition combine_odd_even (Podd Peven : nat → Prop) : nat → Prop
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
To test your definition, prove the following facts:
Theorem combine_odd_even_intro :
∀ (Podd Peven : nat → Prop) (n : nat),
(oddb n = true → Podd n) →
(oddb n = false → Peven n) →
combine_odd_even Podd Peven n.
Proof.
(* FILL IN HERE *) Admitted.
Theorem combine_odd_even_elim_odd :
∀ (Podd Peven : nat → Prop) (n : nat),
combine_odd_even Podd Peven n →
oddb n = true →
Podd n.
Proof.
(* FILL IN HERE *) Admitted.
Theorem combine_odd_even_elim_even :
∀ (Podd Peven : nat → Prop) (n : nat),
combine_odd_even Podd Peven n →
oddb n = false →
Peven n.
Proof.
(* FILL IN HERE *) Admitted.
Applying Theorems to Arguments
Check plus_comm.
(* ===> forall n m : nat, n + m = m + n *)
Coq prints the statement of the plus_comm theorem in the same
way that it prints the type of any term that we ask it to
Check. Why?
The reason is that the identifier plus_comm actually refers to a
proof object — a data structure that represents a logical
derivation establishing of the truth of the statement ∀ n m
: nat, n + m = m + n. The type of this object is the statement
of the theorem that it is a proof of.
Intuitively, this makes sense because the statement of a theorem
tells us what we can use that theorem for, just as the type of a
computational object tells us what we can do with that object —
e.g., if we have a term of type nat → nat → nat, we can give
it two nats as arguments and get a nat back. Similarly, if we
have an object of type n = m → n + n = m + m and we provide it
an "argument" of type n = m, we can derive n + n = m + m.
Operationally, this analogy goes even further: by applying a
theorem, as if it were a function, to hypotheses with matching
types, we can specialize its result without having to resort to
intermediate assertions. For example, suppose we wanted to prove
the following result:
Lemma plus_comm3 :
∀ n m p, n + (m + p) = (p + m) + n.
It appears at first sight that we ought to be able to prove this
by rewriting with plus_comm twice to make the two sides match.
The problem, however, is that the second rewrite will undo the
effect of the first.
Proof.
intros n m p.
rewrite plus_comm.
rewrite plus_comm.
(* We are back where we started... *)
Abort.
One simple way of fixing this problem, using only tools that we
already know, is to use assert to derive a specialized version
of plus_comm that can be used to rewrite exactly where we
want.
Lemma plus_comm3_take2 :
∀ n m p, n + (m + p) = (p + m) + n.
Proof.
intros n m p.
rewrite plus_comm.
assert (H : m + p = p + m).
{ rewrite plus_comm. reflexivity. }
rewrite H.
reflexivity.
Qed.
A more elegant alternative is to apply plus_comm directly to the
arguments we want to instantiate it with, in much the same way as
we apply a polymorphic function to a type argument.
Lemma plus_comm3_take3 :
∀ n m p, n + (m + p) = (p + m) + n.
Proof.
intros n m p.
rewrite plus_comm.
rewrite (plus_comm m).
reflexivity.
Qed.
You can "use theorems as functions" in this way with almost all
tactics that take a theorem name as an argument. Note also that
theorem application uses the same inference mechanisms as function
application; thus, it is possible, for example, to supply
wildcards as arguments to be inferred, or to declare some
hypotheses to a theorem as implicit by default. These features
are illustrated in the proof below.
Example lemma_application_ex :
∀ {n : nat} {ns : list nat},
In n (map (fun m ⇒ m * 0) ns) →
n = 0.

Qed.
We will see many more examples of the idioms from this section in
later chapters.
Coq vs. Set Theory
Functional Extensionality
Example function_equality_ex1 : plus 3 = plus (pred 4).
Proof. reflexivity. Qed.
In common mathematical practice, two functions f and g are
considered equal if they produce the same outputs:
Informally speaking, an "extensional property" is one that
pertains to an object's observable behavior. Thus, functional
extensionality simply means that a function's identity is
completely determined by what we can observe from it — i.e., in
Coq terms, the results we obtain after applying it.
Functional extensionality is not part of Coq's basic axioms. This
means that some "reasonable" propositions are not provable.
(∀ x, f x = g x) → f = g
This is known as the principle of functional extensionality.
Example function_equality_ex2 :
(fun x ⇒ plus x 1) = (fun x ⇒ plus 1 x).
Proof.
(* Stuck *)
Abort.
However, we can add functional extensionality to Coq's core logic
using the Axiom command.
Axiom functional_extensionality : ∀ {X Y: Type}
{f g : X → Y},
(∀ (x:X), f x = g x) → f = g.
Using Axiom has the same effect as stating a theorem and
skipping its proof using Admitted, but it alerts the reader that
this isn't just something we're going to come back and fill in
later!
We can now invoke functional extensionality in proofs:
Example function_equality_ex2 :
(fun x ⇒ plus x 1) = (fun x ⇒ plus 1 x).
Proof.
apply functional_extensionality. intros x.
apply plus_comm.
Qed.
Naturally, we must be careful when adding new axioms into Coq's
logic, as they may render it inconsistent — that is, they may
make it possible to prove every proposition, including False!
Unfortunately, there is no simple way of telling whether an axiom
is safe to add: hard work is generally required to establish the
consistency of any particular combination of axioms.
However, it is known that adding functional extensionality, in
particular, is consistent.
To check whether a particular proof relies on any additional
axioms, use the Print Assumptions command.
Print Assumptions function_equality_ex2.
(* ===>
Axioms:
functional_extensionality :
forall (X Y : Type) (f g : X -> Y),
(forall x : X, f x = g x) -> f = g *)
Exercise: 4 stars (tr_rev)
One problem with the definition of the list-reversing function rev that we have is that it performs a call to app on each step; running app takes time asymptotically linear in the size of the list, which means that rev has quadratic running time. We can improve this with the following definition:Fixpoint rev_append {X} (l1 l2 : list X) : list X :=
match l1 with
| [] ⇒ l2
| x :: l1' ⇒ rev_append l1' (x :: l2)
end.
Definition tr_rev {X} (l : list X) : list X :=
rev_append l [].
This version is said to be tail-recursive, because the recursive
call to the function is the last operation that needs to be
performed (i.e., we don't have to execute ++ after the recursive
call); a decent compiler will generate very efficient code in this
case. Prove that the two definitions are indeed equivalent.
Lemma tr_rev_correct : ∀ X, @tr_rev X = @rev X.
(* FILL IN HERE *) Admitted.
Propositions and Booleans
- (1) that evenb n returns true, or
- (2) that there exists some k such that n = double k. Indeed, these two notions of evenness are equivalent, as can easily be shown with a couple of auxiliary lemmas.
Theorem evenb_double : ∀ k, evenb (double k) = true.
Proof.
intros k. induction k as [|k' IHk'].
- reflexivity.
- simpl. apply IHk'.
Qed.
Theorem evenb_double_conv : ∀ n,
∃ k, n = if evenb n then double k
else S (double k).
Proof.
(* Hint: Use the evenb_S lemma from Induction.v. *)
(* FILL IN HERE *) Admitted.
☐
∃ k, n = if evenb n then double k
else S (double k).
Proof.
(* Hint: Use the evenb_S lemma from Induction.v. *)
(* FILL IN HERE *) Admitted.
Theorem even_bool_prop : ∀ n,
evenb n = true ↔ ∃ k, n = double k.
Proof.
intros n. split.
- intros H. destruct (evenb_double_conv n) as [k Hk].
rewrite Hk. rewrite H. ∃ k. reflexivity.
- intros [k Hk]. rewrite Hk. apply evenb_double.
Qed.
Similarly, to state that two numbers n and m are equal, we can
say either (1) that beq_nat n m returns true or (2) that n =
m. These two notions are equivalent.
Theorem beq_nat_true_iff : ∀ n1 n2 : nat,
beq_nat n1 n2 = true ↔ n1 = n2.
Proof.
intros n1 n2. split.
- apply beq_nat_true.
- intros H. rewrite H. rewrite <- beq_nat_refl. reflexivity.
Qed.
However, even when the boolean and propositional formulations of a
claim are equivalent from a purely logical perspective, they need
not be equivalent operationally. Equality provides an extreme
example: knowing that beq_nat n m = true is generally of little
direct help in the middle of a proof involving n and m;
however, if we convert the statement to the equivalent form n =
m, we can rewrite with it.
The case of even numbers is also interesting. Recall that,
when proving the backwards direction of even_bool_prop (i.e.,
evenb_double, going from the propositional to the boolean
claim), we used a simple induction on k. On the other hand, the
converse (the evenb_double_conv exercise) required a clever
generalization, since we can't directly prove (∃ k, n =
double k) → evenb n = true.
For these examples, the propositional claims are more useful than
their boolean counterparts, but this is not always the case. For
instance, we cannot test whether a general proposition is true or
not in a function definition; as a consequence, the following code
fragment is rejected:
Fail Definition is_even_prime n :=
if n = 2 then true
else false.
Coq complains that n = 2 has type Prop, while it expects an
elements of bool (or some other inductive type with two
elements). The reason for this error message has to do with the
computational nature of Coq's core language, which is designed
so that every function that it can express is computable and
total. One reason for this is to allow the extraction of
executable programs from Coq developments. As a consequence,
Prop in Coq does not have a universal case analysis operation
telling whether any given proposition is true or false, since such
an operation would allow us to write non-computable functions.
Although general non-computable properties cannot be phrased as
boolean computations, it is worth noting that even many
computable properties are easier to express using Prop than
bool, since recursive function definitions are subject to
significant restrictions in Coq. For instance, the next chapter
shows how to define the property that a regular expression matches
a given string using Prop. Doing the same with bool would
amount to writing a regular expression matcher, which would be
more complicated, harder to understand, and harder to reason
about.
Conversely, an important side benefit of stating facts using
booleans is enabling some proof automation through computation
with Coq terms, a technique known as proof by
reflection. Consider the following statement:
Example even_1000 : ∃ k, 1000 = double k.
The most direct proof of this fact is to give the value of k
explicitly.
Proof. ∃ 500. reflexivity. Qed.
On the other hand, the proof of the corresponding boolean
statement is even simpler:
Example even_1000' : evenb 1000 = true.
Proof. reflexivity. Qed.
What is interesting is that, since the two notions are equivalent,
we can use the boolean formulation to prove the other one without
mentioning the value 500 explicitly:
Example even_1000'' : ∃ k, 1000 = double k.
Proof. apply even_bool_prop. reflexivity. Qed.
Although we haven't gained much in terms of proof size in this
case, larger proofs can often be made considerably simpler by the
use of reflection. As an extreme example, the Coq proof of the
famous 4-color theorem uses reflection to reduce the analysis of
hundreds of different cases to a boolean computation. We won't
cover reflection in great detail, but it serves as a good example
showing the complementary strengths of booleans and general
propositions.
Exercise: 2 stars (logical_connectives)
The following lemmas relate the propositional connectives studied in this chapter to the corresponding boolean operations.Lemma andb_true_iff : ∀ b1 b2:bool,
b1 && b2 = true ↔ b1 = true ∧ b2 = true.
Proof.
(* FILL IN HERE *) Admitted.
Lemma orb_true_iff : ∀ b1 b2,
b1 || b2 = true ↔ b1 = true ∨ b2 = true.
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 1 star (beq_nat_false_iff)
The following theorem is an alternate "negative" formulation of beq_nat_true_iff that is more convenient in certain situations (we'll see examples in later chapters).Theorem beq_nat_false_iff : ∀ x y : nat,
beq_nat x y = false ↔ x ≠ y.
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 3 stars (beq_list)
Given a boolean operator beq for testing equality of elements of some type A, we can define a function beq_list beq for testing equality of lists with elements in A. Complete the definition of the beq_list function below. To make sure that your definition is correct, prove the lemma beq_list_true_iff.Fixpoint beq_list {A : Type} (beq : A → A → bool)
(l1 l2 : list A) : bool
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
Lemma beq_list_true_iff :
∀ A (beq : A → A → bool),
(∀ a1 a2, beq a1 a2 = true ↔ a1 = a2) →
∀ l1 l2, beq_list beq l1 l2 = true ↔ l1 = l2.
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 2 stars, recommended (All_forallb)
Recall the function forallb, from the exercise forall_exists_challenge in chapter Tactics:Fixpoint forallb {X : Type} (test : X → bool) (l : list X) : bool :=
match l with
| [] ⇒ true
| x :: l' ⇒ andb (test x) (forallb test l')
end.
Prove the theorem below, which relates forallb to the All
property of the above exercise.
Theorem forallb_true_iff : ∀ X test (l : list X),
forallb test l = true ↔ All (fun x ⇒ test x = true) l.
Proof.
(* FILL IN HERE *) Admitted.
Are there any important properties of the function forallb which
are not captured by this specification?
(* FILL IN HERE *)
Classical vs. Constructive Logic
Definition excluded_middle := ∀ P : Prop,
P ∨ ¬ P.
To understand operationally why this is the case, recall
that, to prove a statement of the form P ∨ Q, we use the left
and right tactics, which effectively require knowing which side
of the disjunction holds. But the universally quantified P in
excluded_middle is an arbitrary proposition, which we know
nothing about. We don't have enough information to choose which
of left or right to apply, just as Coq doesn't have enough
information to mechanically decide whether P holds or not inside
a function.
However, if we happen to know that P is reflected in some
boolean term b, then knowing whether it holds or not is trivial:
we just have to check the value of b.
Theorem restricted_excluded_middle : ∀ P b,
(P ↔ b = true) → P ∨ ¬ P.
Proof.
intros P [] H.
- left. rewrite H. reflexivity.
- right. rewrite H. intros contra. inversion contra.
Qed.
In particular, the excluded middle is valid for equations n = m,
between natural numbers n and m.
Theorem restricted_excluded_middle_eq : ∀ (n m : nat),
n = m ∨ n ≠ m.
Proof.
intros n m.
apply (restricted_excluded_middle (n = m) (beq_nat n m)).
symmetry.
apply beq_nat_true_iff.
Qed.
It may seem strange that the general excluded middle is not
available by default in Coq; after all, any given claim must be
either true or false. Nonetheless, there is an advantage in not
assuming the excluded middle: statements in Coq can make stronger
claims than the analogous statements in standard mathematics.
Notably, if there is a Coq proof of ∃ x, P x, it is
possible to explicitly exhibit a value of x for which we can
prove P x — in other words, every proof of existence is
necessarily constructive.
Logics like Coq's, which do not assume the excluded middle, are
referred to as constructive logics.
More conventional logical systems such as ZFC, in which the
excluded middle does hold for arbitrary propositions, are referred
to as classical.
The following example illustrates why assuming the excluded middle
may lead to non-constructive proofs:
Claim: There exist irrational numbers a and b such that a ^
b is rational.
Proof: It is not difficult to show that sqrt 2 is irrational.
If sqrt 2 ^ sqrt 2 is rational, it suffices to take a = b =
sqrt 2 and we are done. Otherwise, sqrt 2 ^ sqrt 2 is
irrational. In this case, we can take a = sqrt 2 ^ sqrt 2 and
b = sqrt 2, since a ^ b = sqrt 2 ^ (sqrt 2 * sqrt 2) = sqrt 2 ^
2 = 2. ☐
Do you see what happened here? We used the excluded middle to
consider separately the cases where sqrt 2 ^ sqrt 2 is rational
and where it is not, without knowing which one actually holds!
Because of that, we wind up knowing that such a and b exist
but we cannot determine what their actual values are (at least,
using this line of argument).
As useful as constructive logic is, it does have its limitations:
There are many statements that can easily be proven in classical
logic but that have much more complicated constructive proofs, and
there are some that are known to have no constructive proof at
all! Fortunately, like functional extensionality, the excluded
middle is known to be compatible with Coq's logic, allowing us to
add it safely as an axiom. However, we will not need to do so in
this book: the results that we cover can be developed entirely
within constructive logic at negligible extra cost.
It takes some practice to understand which proof techniques must
be avoided in constructive reasoning, but arguments by
contradiction, in particular, are infamous for leading to
non-constructive proofs. Here's a typical example: suppose that
we want to show that there exists x with some property P,
i.e., such that P x. We start by assuming that our conclusion
is false; that is, ¬ ∃ x, P x. From this premise, it is not
hard to derive ∀ x, ¬ P x. If we manage to show that this
intermediate fact results in a contradiction, we arrive at an
existence proof without ever exhibiting a value of x for which
P x holds!
The technical flaw here, from a constructive standpoint, is that
we claimed to prove ∃ x, P x using a proof of
¬ ¬ (∃ x, P x). Allowing ourselves to remove double
negations from arbitrary statements is equivalent to assuming the
excluded middle, as shown in one of the exercises below. Thus,
this line of reasoning cannot be encoded in Coq without assuming
additional axioms.
Exercise: 3 stars (excluded_middle_irrefutable)
The consistency of Coq with the general excluded middle axiom requires complicated reasoning that cannot be carried out within Coq itself. However, the following theorem implies that it is always safe to assume a decidability axiom (i.e., an instance of excluded middle) for any particular Prop P. Why? Because we cannot prove the negation of such an axiom; if we could, we would have both ¬ (P ∨ ¬P) and ¬ ¬ (P ∨ ¬P), a contradiction.Theorem excluded_middle_irrefutable: ∀ (P:Prop),
¬ ¬ (P ∨ ¬ P).
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 3 stars, advanced (not_exists_dist)
It is a theorem of classical logic that the following two assertions are equivalent:
¬ (∃ x, ¬ P x)
∀ x, P x
The dist_not_exists theorem above proves one side of this
equivalence. Interestingly, the other direction cannot be proved
in constructive logic. Your job is to show that it is implied by
the excluded middle.
∀ x, P x
Theorem not_exists_dist :
excluded_middle →
∀ (X:Type) (P : X → Prop),
¬ (∃ x, ¬ P x) → (∀ x, P x).
Proof.
(* FILL IN HERE *) Admitted.
Exercise: 5 stars, optional (classical_axioms)
For those who like a challenge, here is an exercise taken from the Coq'Art book by Bertot and Casteran (p. 123). Each of the following four statements, together with excluded_middle, can be considered as characterizing classical logic. We can't prove any of them in Coq, but we can consistently add any one of them as an axiom if we wish to work in classical logic.Definition peirce := ∀ P Q: Prop,
((P→Q)→P)→P.
Definition double_negation_elimination := ∀ P:Prop,
~~P → P.
Definition de_morgan_not_and_not := ∀ P Q:Prop,
~(~P ∧ ¬Q) → P∨Q.
Definition implies_to_or := ∀ P Q:Prop,
(P→Q) → (¬P∨Q).
(* FILL IN HERE *)


Home - Develomentor Develomentor provides advice and services on careers in technology and managing technical people and processes.
The Cliffs of Inanity A year or so ago I was asked to debug a crash in the Firefox devtools. Crashes are easy! I fired up gdb and reproduced the crash… which turned out to be in some code JITted by SpiderMonkey. I was immediately lost; even a simple bt did not work. Someon...
golang/go The Go programming language. Contribute to golang/go development by creating an account on GitHub.
danistefanovic/build-your-own-x 🤓 Build your own (insert technology here). Contribute to danistefanovic/build-your-own-x development by creating an account on GitHub.
Nintendo Support: What Are the Differences Between a Primary and Non-Primary Nintendo Switch Console? The first time you use your Nintendo Account to connect to the Nintendo Switch eShop, the Nintendo Switch console you use will be activated as the primary console for your Nintendo Account. After you have designated your Nintendo Account's primary console...
Piece of My Heart but it's in 7/8 Big Brother and the Holding Company (Janis Joplin) Piece of My Heart but it's in 7/8 time
dotnet/coreclr CoreCLR is the runtime for .NET Core. It includes the garbage collector, JIT compiler, primitive data types and low-level classes. - dotnet/coreclr
ASP.NET Core 3 signatures · Issue #207 · CarterCommunity/Carter I have been thinking about what we have in #112 and what we can do there. I have been thinking Carter could expose the ASP.NET Core APIs yet still offer its own features. This means we could offer ...
Microsoft Announces It's Ready to Contribute to OpenJDK - Slashdot "In a message to the OpenJDK community, Bruno Borges announced that Microsoft has now formally signed the Oracle Contributor Agreement and has been welcomed to the Java community," reports JAXenter: He went on to reaffirm Microsoft's commitment to Java a...


Meet Our Team
Akshay Sharma
Front End Developer
Bangalore, Karnataka, India
Akshay Sharma
Front End Developer
Bangalore, Karnataka, India
Akshay Sharma
Front End Developer
Bangalore, Karnataka, India
Akshay Sharma
Front End Developer
Bangalore, Karnataka, India


A reserach data personel who is working in Infectious disease for last 5 years.
Learning data Analytics.


Company Employees
Bob
Manager
ID: 001
Email<EMAIL_ADDRESS>Office Number: 12
Steve
Engineer
ID: 002
Email<EMAIL_ADDRESS>GitHub: githubsteve
Alice
Intern
ID: 003
Email<EMAIL_ADDRESS>School: UCLA


Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lore Ipsum has been the eloi industry's standard dummy text ever since the 1500s,
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lore Ipsum has been the eloi industry's standard dummy text ever since the 1500s,
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lore Ipsum has been the eloi industry's standard dummy text ever since the 1500s,
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lore Ipsum has been the eloi industry's standard dummy text ever since the 1500s,
Apropos de l auteur
{{ page.author }}
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lore Ipsum has been the eloi industry's standard dummy text ever since the 1500s,


I welcome feedback about the application, whether that's in the form of bug reports, feature suggestions, or just what you think about it. I can be reached in the following ways:
Email<EMAIL_ADDRESS>Twitter: @bradlarson.
Website: www.sunsetlakesoftware.com


by @briantford
I work on AngularJS at Google
Lately I've been working on a totally new 2.0 version of Angular
Brian, why aren't you talking about Angular?
<ng-rant>
(there's a panel on this later btw)
false
dichotomy
100+ distinct components that do one thing
Because Angular started ~5 years ago before we had nice tools and module systems, it:
Angular is a strictly Model View Whatever.
Angular is a framewhatever and moduwhatever for building web apps.
it's a tool to get the job done
You can use as much or as little of Angular as you want.
Published on npm. Works with Browserify, RequireJS, or whatever.
Everyone wins
</ng-rant>
Brian, why aren't you talking about Angular?
I am! I'm just focusing on one of the tiger leg robots.
Stand-alone ES5 library (~500 LOC)
Implements a new primative – Zone – for browsers
Zone.js is a generalized solution; lets you compose behaviors
There's also zone
(npm module), which implements zones for node.
At the end of each task, we detect changes to observed objects. This is how we know whether or not to re-render a view.
In AngularJS 1.x, you had to call $rootScope.$apply
if you
changed some model outside of Angular's lifecycle. Now you won't have to!
http://github.com/angular/zone.js


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 4
Place the lemongrass, ginger and garlic into the base of a large steamer.
Season the chicken breasts with salt and freshly ground black pepper and place on top of the flavourings.
Place the lid on the steamer and place over a large pan of gently boiling water to steam for 25 minutes, or until the chicken is completely cooked through. Set aside to rest in a warm place.
For the walnuts, place the water and sugar into a wok and bring to the boil. Cook for 5-6 minutes, or until thickened to a syrup, then add the walnuts. Stir well for 30 seconds, then drain off the liquid and set the walnuts aside.
For the vegetables, place the stock in a pan and bring to the boil. Add the pak choi and broccoli and cook for 1-2 minutes. Drain the vegetables and plunge into ice cold water to stop the cooking process.
In a separate pan, melt the butter. Add the pak choi and broccoli and fry for one minute, then add the soy sauce and sesame seeds.
To serve, slice the chicken breasts.  Sprinkle with some caramelised walnuts and serve.


Double quotes must be outside ${}: ${"invalid"} vs "${valid}".
echo ${"USER"}
echo "${USER}"
ShellCheck found a parameter expansion containing what appears to be a quoted variable name.
While the parameter expansion itself must be quoted, as in "${valid}"
, the quotes may not appear inside the {}
as in ${"invalid"}
.
Also note that translated strings like $"Hello"
may not use curly braces.
None


| Classes Summary | |
|---|---|
| cropnail | Crops an image into any size - keeping the aspect ratio. Rather it will crop the best largest size possible within the image to maintain the ratio. So, it is practically possible to create thumbnails of any size from the original image of any size. |
| cropper | Image cropping interface |
| cropper_quick | Image cropping interface - Quicker verrsion |


Browse Collections A list of annotated collections of web sites. Browse Targets A list of annotated web sites, identified by URL(s).


Rexster is started and stopped through a command line interface exposed via the rexster.sh
. When Rexster is started, it listens on a configurable port (port 8183 by default) for shutdown and status requests.
When starting Rexster from the command line using:
./bin/rexster.sh --start
or with:
./bin/rexster.sh -s
there are several options available:
-rp
, --rexsterport
– Overrides the rexster-server-port
configuration value in rexster.xml
. This value is 8182 by default.-wr
, --webroot
– Overrides the web-root
configuration value in rexster.xml
.-c
, --configuration
– Specify the location of a specific rexster.xml
file to use for configuration. If this argument is not specified, Rexster will first try to read a file called rexster.xml
from the root of the working directory. If it can’t find that it will use the com.tinkerpop.rexster.rexster.xml
resource.-d
, --debug
– When this flag is included on the command line, log messages from Jersey are no longer suppressed. May be useful when developing Rexster itself or building Extensions. Read more about the debug mode in the context of logging configuration.-h
, --help
– When this flag is supplied on the command line, Rexster outputs a description of the command line options available. Rexster will not start when help is requested.The following command will start Rexster on port 7788 with a configuration file called my-rexster.xml
:
./bin/rexster.sh --start -rp 7788 -c my-rexster.xml
When stopping Rexster from the command line using:
./bin/rexster.sh --stop
or with the shorthand:
./bin/rexster.sh -x
there are several options available:
-rh
, --rexsterhost
– The host/IP address to which the shutdown command will be issued. Shutdown will assume <IP_ADDRESS>
if the parameter is not specified.-rp
, --rexsterport
– The port of the host to which the shutdown command will be issued. Shutdown will assume 8183
if the parameter is not specified.-w
, --wait
– Wait for the server to confirm that shutdown was performed.-h
, --help
– When this flag is supplied on the command line, a description of the command line options is displayed. A command to stop Rexster will not be issued when help is requested.The following command would issue a stop message to a Rexster server listening on <IP_ADDRESS>
and port 7788
.
./bin/rexster.sh --stop -rh <IP_ADDRESS> -rp 7788
Aside from starting and stopping Rexster, there are several other commands that can be executed against Rexster.
-u
, --status
– Gets the status of the Rexster server (running or not). Use -h
with it for a list of command parameters.-v
, --version
– Shows the version of Rexster.-h
, --help
– When this flag is supplied on the command line, a description of the command options is displayed.


|
Hi ARAFA, Asperiores, tenetur, blanditiis, quaerat odit ex exercitatiem pariatur quibusdam veritatis quisquam laboriosam esse beatae hic perferendis velit deserunt soluta iste repellendus officia in,
|
|
|
|
consectetur adipisicing elit.


TODO
Read a lot
Watch a lot
Practice a lot
(Cross-check information)
Wrong subject ?
Failed in finding or understanding the resources ?
Lost motivation ?
Your company
Yourself
Everyone you meet
Powered by reveal.js


About Sayfe-Sying
Safe Saying is application which is identify spam comment on our site and delete
those. The purpose of this project is to find out the comments of those spam users.
In this work, different techniques used for classification of spam comments with
those of normal user comments to improve the classification.


Exposure to volatile organic compounds (VOCs) is ubiquitous. Chronic exposure to extremely high levels of some VOCs can lead to cancer and neurocognitive dysfunction. Urinary metabolites of VOCs can be detectable in urine for a longer period of time than the parent VOCs can be detected in blood.
Nearly 200 air toxicants have been associated with adverse health effects in occupational studies or laboratory studies, but have not been monitored in general population groups. Information on levels of exposure to these compounds, as measured by their metabolite levels in urine, is essential to determine the need for regulatory mechanisms to reduce the levels of hazardous air pollutants to which the general population is exposed.
All examined participants aged 3 to 5 years were eligible, and participants aged 6 years and older from a one-third subsample were eligible.
This method is a quantitative procedure for the measurement of VOC metabolites in human urine using ultra performance liquid chromatography coupled with electrospray tandem mass spectrometry (UPLC-ESI/MSMS) as described by Alwis et al (2012). Chromatographic separation is achieved using an Acquity UPLC® HSS T3 (Part no. 186003540, 1.8 µm x 2.1 mm x 150 mm, Waters Inc.) column with 15 mM ammonium acetate and acetonitrile as the mobile phases. The eluent from the column is ionized using an electrospray interface to generate and transmit negative ions into the mass spectrometer. Comparison of relative response factors (ratio of native analyte to stable isotope labeled internal standard) with known standard concentrations yields individual analyte concentrations.
Refer to the Laboratory Method Files section for a detailed description of the laboratory methods used.
Refer to the Laboratory Method Files section for a detailed description of the laboratory methods used.
Urinary VOC Metabolites Laboratory Procedure Manual (November 2018)
Urine specimens are processed, stored, and shipped to the Division of Laboratory Sciences, National Center for Environmental Health, Centers for Disease Control and Prevention, Atlanta GA for analysis.
Detailed instructions on specimen collection and processing are discussed in the NHANES Laboratory Procedures Manual (LPM). Vials are stored under appropriate frozen (–20°C) conditions until they are shipped to National Center for Environmental Health for testing.
The NHANES QA/QC protocols meet the 1988 Clinical Laboratory Improvement Act mandates. Detailed QA/QC instructions are discussed in the NHANES LPM.
Mobile Examination Centers (MECs)
Laboratory team performance is monitored using several techniques. NCHS and contract consultants use a structured competency assessment evaluation during visits to evaluate both the quality of the laboratory work and the quality-control procedures. Each laboratory staff member is observed for equipment operation, specimen collection and preparation; testing procedures and constructive feedback are given to each staff member. Formal retraining sessions are conducted annually to ensure that required skill levels were maintained.
Analytical Laboratories
NHANES uses several methods to monitor the quality of the analyses performed by the contract laboratories. In the MEC, these methods include performing blind split samples collected during “dry run” sessions. In addition, contract laboratories randomly perform repeat testing on 2% of all specimens.
NCHS developed and distributed a quality control protocol for all CDC and contract laboratories, which outlined the use of Westgard rules (Westgard, et al. 1981) when running NHANES specimens. Progress reports containing any problems encountered during shipping or receipt of specimens, summary statistics for each control pool, QC graphs, instrument calibration, reagents, and any special considerations are submitted to NCHS quarterly. The reports are reviewed for trends or shifts in the data. The laboratories are required to explain any identified areas of concern.
All QC procedures recommended by the manufacturers were followed. Reported results for all assays meet the Division of Laboratory Sciences’ quality control and quality assurance performance criteria for accuracy and precision, similar to the Westgard rules (Caudill et al., 2008).
The data were reviewed. Incomplete data or improbable values were sent to the performing laboratory for confirmation.
Refer to the 2015-2016 Laboratory Data Overview for general information on NHANES laboratory data.
Subsample Weights
VOC metabolites in urine were measured in a one-third subsample of participants aged 6 years and older. Special sample weights are required to analyze these data properly. Specific sample weights for this subsample are included in this data file and should be used when analyzing these data.
Demographic and Other Related Variables
The analysis of NHANES laboratory data must be conducted using the appropriate survey design and demographic variables. The NHANES 2015-2016 Demographics File contains demographic data, health indicators, and other related information collected during household interviews as well as the sample design variables. The recommended procedure for variance estimation requires use of stratum and PSU variables (SDMVSTRA and SDMVPSU, respectively) in the demographic data file.
This laboratory data file can be linked to the other NHANES data files using
the unique survey participant identifier (i.e., SEQN).
Detection limits
The detection limits were constant for the analytes in the data set. Two variables are provided for each of these analytes. The variable named ending in “LC” (ex., URDAAMLC) indicates whether the result was below the limit of detection: the value “0” means that the result was at or above the limit of detection, “1” indicates that the result was below the limit of detection. For analytes with analytic results below the lower limit of detection (ex., URDAAMLC=1), an imputed fill value was placed in the analyte results field. This value is the lower limit of detection divided by the square root of 2 (LLOD/sqrt [2]). The other variable prefixed URX (ex., URXAAM) provides the analytic result for the analyte. All data are rounded to three significant figures or three decimal places, whichever is less precise.
The lower limit of detection (LLOD, in ng/mL) for urinary VOC metabolites:
|
VARIABLE NAME |
SAS LABEL |
LLOD |
|
URXAAM |
N-Acetyl-S-(2-carbamoylethyl)-L-cysteine (ng/mL) |
2.20 |
|
URXAMC |
N-Acetyl-S-(N-methylcarbamoyl)-L-cysteine (ng/mL) |
6.26 |
|
URXATC |
2-Aminothiazoline-4-carboxylic acid (ng/mL) |
15.0 |
|
URXBMA |
N-Acetyl-S-(benzyl)-L-cysteine (ng/mL) |
0.500 |
|
URXBPM |
N-Acetyl-S-(n-propyl)-L-cysteine (ng/mL) |
1.20 |
|
URXCEM |
N-Acetyl-S-(2-carboxyethyl)-L-cysteine (ng/mL) |
6.96 |
|
URXCYHA |
N-Acetyl-S-(1-cyano-2-hydroxyethyl)-L-cysteine (ng/mL) |
2.60 |
|
URXCYM |
N-Acetyl-S-(2-cyanoethyl)-L-cysteine (ng/mL) |
0.500 |
|
URX1DC |
N-Acetyl-S-(1,2-dichlorovinyl)-L-cysteine (ng/mL) |
12.6 |
|
URX2DC |
N-Acetyl-S-(2,2-dichlorovinyl)-L-cysteine (ng/mL) |
13.9 |
|
URXDHB |
N-Acetyl-S-(3,4-dihydroxybutyl)-L-cysteine (ng/mL) |
5.25 |
|
URXDPM |
N-Acetyl-S-(dimethylphenyl)-L-cysteine (ng/mL) |
0.500 |
|
URXGAM |
N-Acetyl-S-(2-carbamoyl-2-hydroxyethyl)-L-cysteine (ng/mL) |
9.40 |
|
URXHEM |
N-Acetyl-S-(2-hydroxyethyl)-L-cysteine (ng/mL) |
0.791 |
|
URXHPM |
N-Acetyl-S-(3-hydroxypropyl)-L-cysteine (ng/mL) |
13.0 |
|
URXHP2 |
N-Acetyl-S-(2-hydroxypropyl)-L-cysteine (ng/mL) |
5.30 |
|
URXIPM1 |
N-Acetyl-S-(2-hydroxy-3-methyl-3-butenyl)-L-cysteine + N-Acetyl-S-(2-hydroxy-2-methyl-3-butenyl)-L-cysteine |
1.43 |
|
URXIPM3 |
N-Acetyl- S- (4- hydroxy- 2- methyl- 2- butenyl)- L- cysteine (ng/mL) |
1.20 |
|
URXMAD |
Mandelic acid (ng/mL) |
12.0 |
|
URX2MH |
2-Methylhippuric acid (ng/mL) |
5.00 |
|
URX34M |
3- and 4-Methylhippuric acid (ng/mL) |
8.00 |
|
URXMB1 |
N-Acetyl-S-(1-hydroxymethyl-2-propenyl)-L-cysteine (ng/mL) |
0.700 |
|
URXMB2 |
N-Acetyl-S-(2-hydroxy-3-butenyl)-L-cysteine (ng/mL) |
0.700 |
|
URXMB3 |
N-Acetyl-S-(4-hydroxy-2-butenyl)-L-cysteine (ng/mL) |
0.600 |
|
URXPHE |
N-Acetyl-S-(phenyl-2-hydroxyethyl)-L-cysteine (ng/mL) |
0.700 |
|
URXPHG |
Phenylglyoxylic acid (ng/mL) |
12.0 |
|
URXPMA |
N-Acetyl-S-(phenyl)-L-cysteine (ng/mL) |
0.600 |
|
URXPMM |
N-Acetyl-S-(3-hydroxypropyl-1-methyl)-L-cysteine (ng/mL) |
3.00 |
|
URXTCV |
N-Acetyl-S-(trichlorovinyl)-L-cysteine (ng/mL) |
3.00 |
Please refer to the NHANES Analytic Guidelines and the on-line NHANES Tutorial further details on the use of sample weights and other analytic issues.
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 6552.119284 to<PHONE_NUMBER>8 | Range of Values | 3231 | 3231 | |
| 0 | Participants 6+ years with no lab specimen | 48 | 3279 | |
| . | Missing | 0 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 8.9 | 8.9 | 2886 | 2886 | |
| . | Missing | 393 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 0 | 0 | |
| 1 | Below lower detection limit | 2886 | 2886 | |
| . | Missing | 393 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 9.8 | 9.8 | 2831 | 2831 | |
| . | Missing | 448 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 0 | 0 | |
| 1 | Below lower detection limit | 2831 | 2831 | |
| . | Missing | 448 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 3.54 to 2330 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2727 | 2727 | |
| 1 | Below lower detection limit | 288 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 5.66 to 30700 | Range of Values | 3014 | 3014 | |
| . | Missing | 265 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 3001 | 3001 | |
| 1 | Below lower detection limit | 13 | 3014 | |
| . | Missing | 265 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 1.56 to 1640 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 3012 | 3012 | |
| 1 | Below lower detection limit | 3 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 4.43 to 3350 | Range of Values | 2965 | 2965 | |
| . | Missing | 314 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2949 | 2949 | |
| 1 | Below lower detection limit | 16 | 2965 | |
| . | Missing | 314 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 10.6 to 2390 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2938 | 2938 | |
| 1 | Below lower detection limit | 77 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.354 to 1330 | Range of Values | 3014 | 3014 | |
| . | Missing | 265 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 3003 | 3003 | |
| 1 | Below lower detection limit | 11 | 3014 | |
| . | Missing | 265 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.85 to 707 | Range of Values | 2952 | 2952 | |
| . | Missing | 327 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2220 | 2220 | |
| 1 | Below lower detection limit | 732 | 2952 | |
| . | Missing | 327 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 4.92 to 3570 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 3003 | 3003 | |
| 1 | Below lower detection limit | 12 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 1.84 to 452 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 440 | 440 | |
| 1 | Below lower detection limit | 2575 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.354 to 1480 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2369 | 2369 | |
| 1 | Below lower detection limit | 646 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 16.1 to 3140 | Range of Values | 2691 | 2691 | |
| . | Missing | 588 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2691 | 2691 | |
| 1 | Below lower detection limit | 0 | 2691 | |
| . | Missing | 588 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.354 to 6.38 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 5 | 5 | |
| 1 | Below lower detection limit | 3010 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 6.65 to 114 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 1197 | 1197 | |
| 1 | Below lower detection limit | 1818 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.559 to 49.4 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 1546 | 1546 | |
| 1 | Below lower detection limit | 1469 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 3.75 to 9830 | Range of Values | 3014 | 3014 | |
| . | Missing | 265 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2862 | 2862 | |
| 1 | Below lower detection limit | 152 | 3014 | |
| . | Missing | 265 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 9.2 to 11900 | Range of Values | 2821 | 2821 | |
| . | Missing | 458 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2816 | 2816 | |
| 1 | Below lower detection limit | 5 | 2821 | |
| . | Missing | 458 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 1.01 to 80.3 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2225 | 2225 | |
| 1 | Below lower detection limit | 790 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.85 to 492 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2419 | 2419 | |
| 1 | Below lower detection limit | 596 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 8.5 to 4330 | Range of Values | 3008 | 3008 | |
| . | Missing | 271 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2971 | 2971 | |
| 1 | Below lower detection limit | 37 | 3008 | |
| . | Missing | 271 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.495 to 1.54 | Range of Values | 2987 | 2987 | |
| . | Missing | 292 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 14 | 14 | |
| 1 | Below lower detection limit | 2973 | 2987 | |
| . | Missing | 292 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.495 to 94.9 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 279 | 279 | |
| 1 | Below lower detection limit | 2736 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.424 to 407 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2843 | 2843 | |
| 1 | Below lower detection limit | 172 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.495 to 48.6 | Range of Values | 2947 | 2947 | |
| . | Missing | 332 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 1480 | 1480 | |
| 1 | Below lower detection limit | 1467 | 2947 | |
| . | Missing | 332 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 8.5 to 5320 | Range of Values | 3013 | 3013 | |
| . | Missing | 266 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 2991 | 2991 | |
| 1 | Below lower detection limit | 22 | 3013 | |
| . | Missing | 266 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0.424 to 28 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 1426 | 1426 | |
| 1 | Below lower detection limit | 1589 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 14.1 to 25100 | Range of Values | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 3015 | 3015 | |
| 1 | Below lower detection limit | 0 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 2.12 | 2.12 | 3015 | 3015 | |
| . | Missing | 264 | 3279 |
| Code or Value | Value Description | Count | Cumulative | Skip to Item |
|---|---|---|---|---|
| 0 | At or above the detection limit | 0 | 0 | |
| 1 | Below lower detection limit | 3015 | 3015 | |
| . | Missing | 264 | 3279 |


Student | Front End Developer
Hi there! My name is Muhammad Faiq you can call me Faiq, I am a programmer from Indonesia, I am currently learning the programming language Javascript, HTML, CSS. And I have several projects that I am working on, see below here!
Renzyh Bots List | Organizations
Discord Bot Oredon Clienter - 2 and Insomniac a multipurpose bot.
My portfolio here!


---
layout: default
published: true
---
Research Assistant Professor2022 - Present
Center for Spatial Information Science and Systems, George Mason University, USA
George Mason University2022
Doctor of Philosophy (PhD), Earth System and Geoinformation Sciences
Ohio University2014
Bachelor of Science (BSc), Geographic Information Science / Economics
Outstanding PhD Student Award2022
George Mason University
First-Prize Award in Best Student Paper Competition2017
The Sixth International Conference on Agro-Geoinformatics (Agro-Geoinformatics 2017)
Safe Neighborhoods won one of the twenty cash awards in the Hexagon IGNITE Challenge2016
Hexagon Geospatial
Regina L. Bloemer Scholarship in Geography2013
Department of Geography, Ohio University
Scholarship for U.S.-Sino Agro-geoinformatics summer schools2012 - 2014
George Mason University


VIDEO: How ANAS’ cover was blown in TseAdo land-guards operation & MORE details CONFIRMED
by MyNewsGHKennedy Agyapong’s Net 2 TV has confirmed that the young man captured in a viral video is indeed Anas Aremeyaw Anas with shocking revelations.
In the video attached, Net2 TV revealed that the land originally belonged to a La stool lawyer called Kojo Graham who also sold the land to another person. The new buyer had to fight with Anas because Anas was also laying claim to the said land.
The new owner of the land realizing Anas had been using armed landguards on the land also hired his own landguards who clashed with Anas and overpowered him forcing him to disclose himself as Anas.
Details of how the video leaked can be watched in the full Net2 TV Revelation below:
Source: MyNewsGh.com


{% extends '_base.html' %} {% block head %} {% endblock %} {% block body %}
Your email address has been verified by the KD:M API!
You can safely close this window and return to your application.
You may need to refresh/reload the app to see your current verification status.
Thank you!
{% else %}The KD:M API was unable to verify your email address.
This can occur if:


[§103D-320] Retention of procurement records. All procurement records shall be retained and disposed of in accordance with chapter 94 and records retention guidelines and schedules approved by the comptroller. [L Sp 1993, c 8, pt of §2]


Sending functions to remote processes can be wasteful of resources because they carry their environments with them. With the carrier package, it is easy to create functions that are isolated from their environment. These isolated functions, also called crates, print at the console with their total size and can be easily tested locally before being sent to a remote.
| Version: | 0.1.0 |
| Depends: | R (≥ 3.1.0) |
| Imports: | pryr, rlang (≥ 0.2.2) |
| Suggests: | testthat, covr |
| Published: | 2018-10-16 |
| Author: | Lionel Henry [aut, cre], RStudio [cph] |
| Maintainer: | Lionel Henry <lionel at rstudio.com> |
| BugReports: | https://github.com/r-lib/carrier/issues |
| License: | GPL-3 |
| URL: | https://github.com/r-lib/carrier |
| NeedsCompilation: | no |
| Materials: | README NEWS |
| CRAN checks: | carrier results |
| Reference manual: | carrier.pdf |
| Package source: | carrier_0.1.0.tar.gz |
| Windows binaries: | r-devel: carrier_0.1.0.zip, r-release: carrier_0.1.0.zip, r-oldrel: carrier_0.1.0.zip |
| OS X binaries: | r-release: carrier_0.1.0.tgz, r-oldrel: carrier_0.1.0.tgz |
Please use the canonical form https://CRAN.R-project.org/package=carrier to link to this page.


You understand that this listing may be removed if it:
You further assert that you are solely responsible for the content of this listing.
Listings are valid for 30 days only and are automatically removed from the home page after that period, but will continue to appear at the permanent link unless manually withdrawn or removed by a moderator as per the conditions specified above.
HasGeek Media LLP (henceforth “HasGeek”) may change the nature of the job board service, revise the terms of service, or discontinue the service without prior notice at any time. By listing on the job board, you assign to HasGeek perpetual worldwide rights to use all submitted data for any purpose whatsoever, including assigning such rights to third parties and successors. HasGeek will endeavour to protect your privacy and use your data for your good, but you agree to indemnify HasGeek from all liabilities that may arise now or in future in relation to this data.
If the listing is removed, and involved a payment, a credit note will be issued.


A user experience design project for my capstone course that began by defining the problem, followed by preliminary research, interviews, and surveys. From the data gathered, we developed personas to better represent our user group. After the research portion of this project was completed, we began sketching and wireframing. We conducted usability testing on both our sketches and our wireframes to ensure our design choices. After our wireframes were approved we moved into designing our low-fidelity product and followed that up with more usability testing to continue to validate our design. Finally we moved on to designing our final high-fidelity product, and followed this up with one more round of usability testing. We used InVision to develop our functional prototype. More information regarding this project will be added in the near future.


Want to share your paintings or
Discover new artists and their ideas
Comment and share your thoughts on the paintings displayed.
Join our family!


public abstract class RandomEvent
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
protected int |
duration |
| Modifier and Type | Method and Description |
|---|---|
protected void |
decDuration()
Method which decrements the duration of the event by 1.
|
abstract void |
eventEffect(boolean doOrUndo)
Abstract method which implements the back-end effects of a random event.
|
void |
eventHappen(boolean doOrUndo)
Method which calls eventEffect() and eventMessage() in sequence, and displays the message
in the GUI.
|
abstract java.lang.String |
eventMessage(boolean doOrUndo)
Abstract method which generates a string to display in the random event message
overlay during gameplay.
|
protected int |
getDuration()
Method which gets the duration remaining of the current random event.
|
protected int |
getEventCooldown()
Method which returns the value that the duration of an event must decrement to in
order for it to be removed from the game.
|
public abstract void eventEffect(boolean doOrUndo)
doOrUndo:
- boolean determining whether to cause the event effect, or
reverse it. True -> Cause, False -> Reverse.public abstract java.lang.String eventMessage(boolean doOrUndo)
doOrUndo:
- boolean determining whether to cause the event effect, or
reverse it. True -> Cause, False -> Reverse.protected int getEventCooldown()
public void eventHappen(boolean doOrUndo)
doOrUndo:
- boolean determining whether to cause the event effect, or
reverse it. True -> Cause, False -> Reverse.protected int getDuration()
protected void decDuration()


National Curry Week begins today with events taking place across the country to celebrate one of Britain's most popular dishes.
In order to inspire us, the chef and food writer Maunika Gowardhan has shared her top 10 recipes for the perfect Indian feast. She has included classics such as Tandoori and butter chicken, as well as vegetarian options and plenty of side dishes for an amazing, spicy spread.
Awesome experience always 365 days .
pice it up: fragrant curry recipes for an Indian feast Many of these recipes are simple to follow, quick and healthy, so what's stopping you? Invite your friends round and cook up an authentic curry dinner with all the trimmings.
Duck egg
This is one of our most luxurious breakfast dishes, perfect at the endof a hard night or as a treat on a Sunday morning. You can play about with the ingredients you use – a layer of spinach at the bottom of the dish is a good addition, as is diced smoked haddock in place of the mushrooms. It also makes a nice starter..
Method
Butter the insides of two 100ml ramekins or individual cocottes. Heat the olive oil in a saucepan and cook the shallots with the thyme, garlic and bay leaf until softened. Add the mushrooms and cook for 5 minutes more, then add the wine and simmer until reduced by three-quarters. Add the cream and continue to cook until reduced by half, then season with salt and pepper. When ready to serve, preheat your oven to 180°/gas mark 4..
Past
Back in March 2012, when I was working at our sister restaurant Sugarcane, in Midtown Miami, one of the Colombian chefs was making breakfast to aid his tender feeling after quite a heavy night. He told us about a dish called ‘perico’, based on scrambled eggs, spring onions and tomatoes, which he loves to eat when hungover. I loved the lightness of it – in the UK we tend to go heavy when in need of some TLC, but this was light, and vegetarian..


{% extends "layout.html" %} {% block page_title %} Where you live {% endblock %} {% block content %} {% include "../includes/phase_banner_beta.html" %} Back Shared ownership Does anyone else pay towards your property? Yes No What do they pay towards? Mortgage Rent Both Do you have any loans secured against your property for home improvements or repairs? Yes No {% include "../includes/help.html" %} {% endblock %}


| Trees | Indices | Help |
|
|---|
|
|
Main configuration file for the application
On deployment, desired configuration can be overridden by the provision of a local.cfg file
|
|||
DEBUG = True is the web server in debug mode |
|||
PORT = 5998 port to start the webserver on |
|||
SSL = False support SSL requests |
|||
THREADED = False is the web server in threaded mode |
|||
ELASTIC_SEARCH_HOST = "http://gateway:9200" base url to access elasticsearch |
|||
ELASTIC_SEARCH_INDEX = "jper" index name in elasticsearch where our types are stored |
|||
ELASTIC_SEARCH_VERSION = "1.5.2" version of elasticsearch which we're using - matters for certain semantics of requests |
|||
ELASTIC_SEARCH_MAPPINGS = [] type-specific mappings to be used when initialising - currently there are none |
|||
ELASTIC_SEARCH_EXAMPLE_DOCS = ["service.dao.UnroutedNotificati types which have their mappings initialised by example when initialising |
|||
ESDAO_TIME_BOX_ROUTED = "month" time period in which to box routed notifications in the index |
|||
ESDAO_TIME_BOX_LOOKBACK_ROUTED = 3 number of time-boxes to use for lookback when retrieving/deleting routed notifications |
|||
MAIL_FROM_ADDRESS =<EMAIL_ADDRESS>address from which system emails will appear to come |
|||
MAIL_SUBJECT_PREFIX = "[router] " subject prefix for any emails that come from the system |
|||
ACCOUNT_ENABLE = True Enable user accounts |
|||
SECRET_KEY = "super-secret-key" secret key for session management |
|||
BASE_URL = "https://pubrouter.jisc.ac.uk/" base url at which the service is deployed |
|||
API_BASE_URL = BASE_URL+ "api/v1/" base url for the service API |
|||
DEFAULT_LIST_PAGE_START = 1 default page number at which list requsts start, if the api request does not contain a parameter |
|||
DEFAULT_LIST_PAGE_SIZE = 25 default page size for list requests, if the api request does not contain a parameter |
|||
MAX_LIST_PAGE_SIZE = 100 largest allowable page size on list requests |
|||
PACKAGE_HANDLERS = {"http://router.jisc.ac.uk/packages/FilesAn map from format identifiers to PackageHandler plugins that should be used in those cases |
|||
USERDIR = '/home/sftpusers'
|
|||
API_URL = "https://pubrouter.jisc.ac.uk/api/v1/notification"
|
|||
TMP_DIR = "/home/mark/ftptmp"
|
|||
RUN_SCHEDULE = True
|
|||
MOVEFTP_SCHEDULE = 10
|
|||
PROCESSFTP_SCHEDULE = 10
|
|||
CHECKUNROUTED_SCHEDULE = 10
|
|||
DELETE_ROUTED = True
|
|||
DELETE_UNROUTED = True
|
|||
LOGLEVEL = 'debug'
|
|||
LOGFILE = '/home/mark/jperlog'
|
|||
STORE_TMP_IMPL = "octopus.modules.store.store.TempStore" implementation class of the temporary local filestore |
|||
STORE_IMPL = "octopus.modules.store.store.StoreJper" implementation class of the main fielstore |
|||
STORE_JPER_URL = 'http://store' StoreJper's base url |
|||
STORE_LOCAL_DIR = paths.rel2abs(__file__, "..", "service", "te path to local directory for local file store (principally used for testing) - specified relative to this file |
|||
STORE_TMP_DIR = paths.rel2abs(__file__, "..", "service", "test path to local directory for temp file store - specified relative to this file |
|||
FUNCTIONAL_TEST_MODE = False start the app in functional test mode - only do this in testing |
|||
KEEP_FAILED_NOTIFICATIONS = False keep notifications which do not route, for review/debugging later |
|
ELASTIC_SEARCH_EXAMPLE_DOCStypes which have their mappings initialised by example when initialising
|
PACKAGE_HANDLERSmap from format identifiers to PackageHandler plugins that should be used in those cases
|
STORE_LOCAL_DIRpath to local directory for local file store (principally used for testing) - specified relative to this file
|
STORE_TMP_DIRpath to local directory for temp file store - specified relative to this file
|
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Tue Dec 1 17:26:35 2015 | http://epydoc.sourceforge.net |


FitNav automatically collapses site menus when they’ve outgrown their containers. Developed primarily for CMS driven sites, FitNav allows menus to remain responsive even when you don’t know how many links they’ll contain.
Resize your browser window. I collapse only when I need to!


|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object javax.swing.ProgressMonitor
public class ProgressMonitor
A class to monitor the progress of some operation. If it looks like the operation will take a while, a progress dialog will be popped up. When the ProgressMonitor is created it is given a numeric range and a descriptive string. As the operation progresses, call the setProgress method to indicate how far along the [min,max] range the operation is. Initially, there is no ProgressDialog. After the first millisToDecideToPopup milliseconds (default 500) the progress monitor will predict how long the operation will take. If it is longer than millisToPopup (default 2000, 2 seconds) a ProgressDialog will be popped up.
From time to time, when the Dialog box is visible, the progress bar will be updated when setProgress is called. setProgress won't always update the progress bar, it will only be done if the amount of progress is visibly significant.
For further documentation and examples see How to Monitor Progress, a section in The Java Tutorial.
ProgressMonitorInputStream
| Nested Class Summary | |
|---|---|
protected class |
ProgressMonitor.AccessibleProgressMonitor
AccessibleProgressMonitor implements accessibility
support for the ProgressMonitor class. |
| Field Summary | |
|---|---|
protected AccessibleContext |
accessibleContext
|
| Constructor Summary | |
|---|---|
ProgressMonitor(Component parentComponent,
Object message,
String note,
int min,
int max)
Constructs a graphic object that shows progress, typically by filling in a rectangular bar as the process nears completion. |
| Method Summary | |
|---|---|
void |
close()
Indicate that the operation is complete. |
AccessibleContext |
getAccessibleContext()
Gets the AccessibleContext for the
ProgressMonitor |
int |
getMaximum()
Returns the maximum value -- the higher end of the progress value. |
int |
getMillisToDecideToPopup()
Returns the amount of time this object waits before deciding whether or not to popup a progress monitor. |
int |
getMillisToPopup()
Returns the amount of time it will take for the popup to appear. |
int |
getMinimum()
Returns the minimum value -- the lower end of the progress value. |
String |
getNote()
Specifies the additional note that is displayed along with the progress message. |
boolean |
isCanceled()
Returns true if the user hits the Cancel button in the progress dialog. |
void |
setMaximum(int m)
Specifies the maximum value. |
void |
setMillisToDecideToPopup(int millisToDecideToPopup)
Specifies the amount of time to wait before deciding whether or not to popup a progress monitor. |
void |
setMillisToPopup(int millisToPopup)
Specifies the amount of time it will take for the popup to appear. |
void |
setMinimum(int m)
Specifies the minimum value. |
void |
setNote(String note)
Specifies the additional note that is displayed along with the progress message. |
void |
setProgress(int nv)
Indicate the progress of the operation being monitored. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected AccessibleContext accessibleContext
| Constructor Detail |
|---|
public ProgressMonitor(Component parentComponent, Object message, String note, int min, int max)
parentComponent
- the parent component for the dialog boxmessage
- a descriptive message that will be shown
to the user to indicate what operation is being monitored.
This does not change as the operation progresses.
See the message parameters to methods in
JOptionPane.message
for the range of values.note
- a short note describing the state of the
operation. As the operation progresses, you can call
setNote to change the note displayed. This is used,
for example, in operations that iterate through a
list of files to show the name of the file being processes.
If note is initially null, there will be no note line
in the dialog box and setNote will be ineffectivemin
- the lower bound of the rangemax
- the upper bound of the rangeJDialog
,
JOptionPane
| Method Detail |
|---|
public void setProgress(int nv)
nv
- an int specifying the current value, between the
maximum and minimum specified for this componentsetMinimum(int)
,
setMaximum(int)
,
close()
public void close()
public int getMinimum()
setMinimum(int)
public void setMinimum(int m)
m
- an int specifying the minimum valuegetMinimum()
public int getMaximum()
setMaximum(int)
public void setMaximum(int m)
m
- an int specifying the maximum valuegetMaximum()
public boolean isCanceled()
public void setMillisToDecideToPopup(int millisToDecideToPopup)
millisToDecideToPopup
- an int specifying the time to wait,
in millisecondsgetMillisToDecideToPopup()
public int getMillisToDecideToPopup()
setMillisToDecideToPopup(int)
public void setMillisToPopup(int millisToPopup)
millisToPopup
- an int specifying the time in millisecondsgetMillisToPopup()
public int getMillisToPopup()
setMillisToPopup(int)
public void setNote(String note)
note
- a String specifying the note to displaygetNote()
public String getNote()
setNote(java.lang.String)
public AccessibleContext getAccessibleContext()
AccessibleContext
for the
ProgressMonitor
getAccessibleContext
in interface Accessible
AccessibleContext
for the
ProgressMonitor
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 2004, 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.


|
MoveToCode
|
Abstract component to encapsulate common functionality around outline components. More...
Protected Member Functions | |
| virtual void | OnValidate () |
| Enables users to modify inspector properties while playing in the editor. More... | |
| abstract void | ApplyOutlineMaterial () |
| abstract void | ApplyOutlineWidth () |
Protected Attributes | |
| Material | outlineMaterial = null |
| float | outlineWidth = 0.01f |
Properties | |
| Material | OutlineMaterial [get, set] |
| The material used to render the outline. More... | |
| float | OutlineWidth [get, set] |
| How thick (in meters) should the outline be. More... | |
Abstract component to encapsulate common functionality around outline components.
|
protectedpure virtual |
|
protectedpure virtual |
|
protectedvirtual |
Enables users to modify inspector properties while playing in the editor.
|
protected |
|
protected |
|
getset |
The material used to render the outline.
Outline materials should normal have "Depth Write" set to Off and "Vertex Extrusion" enabled. Most MRTK/Standard features should work as an outline material, but it is recommended to keep the outline material as simple as possible.
|
getset |
How thick (in meters) should the outline be.
Overrides the "Extrusion Value" in the MRTK/Standard material.


| $1674.08 | expenses:business:services |
| $1674.25 | expenses:personal:cash |
| $1815.71 | expenses:personal:clothing |
| $567.69 | expenses:personal:discretionary |
| $58.00 | expenses:personal:donations |
| $787.81 | expenses:personal:gifts |
| $3991.42 | expenses:personal:groceries |
| $1686.44 | expenses:personal:healthcare |
| $231.64 | expenses:personal:household |
| $343.91 | expenses:personal:misc |
| $448.81 | expenses:personal:pet |
| $8600.00 | expenses:personal:rent |
| $1495.55 | expenses:personal:restaurants |
| $166.11 | expenses:personal:utilities |
| $1380.08 | expenses:personal:utilities:phone |
| $461.00 | expenses:personal:vacation |
| $21240.00 | expenses:taxes:federal |
| $7426.00 | expenses:taxes:ny |
| $217.84 | expenses:taxes:services |
| $473.92 | expenses:transit |


Eric Budd
About Me
- I’ve worked in software development for the past 15 years, mostly in project or product management
- I spend a lot of time outdoors and riding bikes, am very into politics and urban development, and really enjoy social media and meeting people.
- I grew up in Missouri and have been in the Boulder area for the past 10 years


To claim Employment and Support Allowance you’ll need to get a sick note from your doctor.
When you get it you can either post it in, or DWP can be access it directly from your NHS records.
No other information will be accessed other than what’s on the sick note.
When you have a sick note, post it to:
Mail Handling Site A
Wolverhampton
WV98 2AJ


capooldi
Radio One star Arielle Free reveals Lewis Capaldi interview went down the pan because pair started joking about poo
by Beverley LyonsRADIO One star Arielle Free revealed 15 minutes of an interview she did with Lewis Capaldi went down the pan — as the pair started joking about poo.
The Stirling-born DJ grilled Someone You Loved singer Lewis, 23, for her Weekend Early Breakfast Show.
But the Scots pair’s toilet banter proved too mucky for station bosses and the segment had to be censored.
Arielle, 31, said: “We did this interview and they had to cut out 15 minutes of it because it was pure filth.
“We talked about poos and jobbies. I introduced Lewis to the term ‘thunderjobby’ and he couldn’t believe it.
“I feel I’ve done something really good in my life because I’ve educated Lewis Capaldi on what a thunderjobby is.
“My mum’s going to be like, ‘I can’t believe you talked about jobbies’.”
London-based Arielle regularly returns to Scotland for DJ dates and will perform at Edinburgh’s Hogmanay street party.
She’s also working on a secret BBC Scotland show about romance, hot on the heels of her role co-hosting the Love Island: The Morning After podcast with former winner Kem Cetinay, 23.
Arielle also told how her Scots roots are going down a treat with her new colleagues at Radio One — as she’s turned them on to the joys of tattie scones.
She said: “I fill my suitcase with them every time I’m home — it’s become a thing at the station and I have orders from people to bring them back.
And she added: “Aside from tattie scones I miss my family. Every time I come back my grandpa picks me up from the airport.
“We go for a wee scran and I get to catch up with my niece.”
Trained ballerina Arielle said she still can’t believe her luck after landing the Radio One gig in September.
She said: “I pinch myself every time I walk into that building. Every day I’m waiting for it all to go Pete Tong.”


You are seeing this page
because you are using an unsupported browser
Here are the browsers we recommend:
Firefox
Download
Chrome
Download
Edge
Download
Opera
Download


LatvianRoadsStation
public struct LatvianRoadsStation: Codable
Latvian roads weather station
-
Name of station
Declaration
Swift
public var name: String
-
Road name where station is located
Declaration
Swift
public var road: String
-
Km on the road
Declaration
Swift
public var km: Int
-
Latitude
Declaration
Swift
public var latitude: Double
-
Longitude
Declaration
Swift
public var longitude: Double
-
Current temperature
Declaration
Swift
public var temperature: String?
-
Current weather data
Declaration
Swift
public var weatherData: [RoadStationWeatherData]


My names are Margaret.W.Mwangi.Am currently a student at Moringa School,
Studying for full stack web development.
Am an introvert by nature, thus loves indoors and coolness mostly. I love
watching Movies,Comedy(mostly Locally) and cool music.
Well, my donts is
dont like partying so much.


ZEN
Focus Point: Crown Chakra
Concept: The Human Completely Relents Itself To The Spirit With Only The Consciousness Aspect Of The Human Remaining Active
Mantra Meaning: I am the void and the light
Possible Effects: Completely Relenting Into Spirit Results In Englightenment, Completeness, Suggestive Invisibility
Steps
- Focus Only On Breathing For A Few Minutes
- Focus On Your Entire Physical Body For Another Few Minutes
- Focus On Your Feelings And Emotions For Another Few Minutes
- Concentrating Your Attention On The Process Of Feeling Your Mental Body (3rd Person Perspective Of The Mind Mechanisms) For A Few Minutes
- Finally, Pay Attention To Your Consciousness, Your Spirit Or Your Soul Or Whatever Notion Of Your Spiritual Existence You Can Grasp (Rather Than The Energy In Your Body)
- Then Slowly Drop Each Aspect Of The Kuji-In Technique, One After The Other
Visualization
Visualize an infinite vast light filling an infinite vast void and feel yourself being a part of it.
Gods In Religion For Added Visualization
Shinto:
Marishi-Ten, the guardian of warriors, said to cloak even to render invisible.
Buddhists:
Monju Bosatsu or Manjushri Bodhisattva, the Buddha of Wisdom.
Fixity Meditation
- Practice Fixity, Eyes Opened, No Mantra, From 5-45 Minutes. No Mind, No Word, No Image
- Maintain Yourself In This Spiritual Attitude As Long As Possible, While, At The Same Time, Remaining Totally Conscious Of Your Physical Reality
- Attempt To Maintain A Spiritual Attitude In All Of Your Actions, At Every Moment
Mudra
The Human Completely Relents Itself To The Spirit With The Only Aspect That Remaining Active In The Human Hand Is The Thumb Of Consciousness, So That It Can Touch The Consciousness Of The Spirit.
Other Than That, The Left Hand Lies Over The Bed Laid By The Spirit. The Spirit Hand Receives The Resting Human Hand, To Care For It.
Meaning
- In Front Or Before (In Reference To The Concept Of Obviousness. It Takes A Calm Mind To Perceive The Most Obvious Essence Of Reality In A World Filled With Fantasy, Dreams And Fears)


--- imgsrc: "will_deutsch_judaism_jews_israeli_soldier_israel.jpg" buylink: "http://store.notesfromthetribe.com/product/jewish-art-8-5-x11-israeli-soldier-print" postDate: "02.06.12" layout: post ---
There is a place where the archetypal metropolitan Jewish man is not immediately stereotyped as a cerebral, well read, socially liberal, fiscally gifted, online dating, fashion conscious, slightly balding or semitically afroed, maternally inclined iteration of Woody Allen.
No.
Rather, they are thought of as tanned, toned, gun carrying, smoking but in that sexy foreign way, bred athletically from birth, vertically blessed, chiseled to the point that you could grate cheese on their abdominals, krav maga practicing warriors.
If you’ve been to Israel, you know this for a fact.
If not, you’ve seen the pictures tourists bring back.


- Use the following line to figure out how to add alternate text that will only show up on public profiles.
- Use a different fontawesome icon that fits a 'public/viewable' meaning.
This profile is not visible to other users.
-
Add a 'request' value to four of the profiles.
-
Display the text ONLY if that request exists.
This profile wants {{alias.request}}.
-
Add a class to the following div that'll be profile-specific. (You'll want to use two classes: one for the profile, one for the shape.)
-
Pick a css3 shape for that profile.
-
Open the profile's corresponding .less file, and add the new class definition.
-
Do this for at least three of the profiles in users.json, and edit the json file to include the new class(es).
-
Hide the div if a profile doesn't have an assigned shape.


fix bug in epiweek computation in ilinet() thanks to a bug report by @jturtle (#19)
included cloc metrics and refreshed README
cdcfluview 0.7.0 2017-11-14
The CDC changed most of their API endpoints to support a new HTML interface and re-jiggered the back-end API. Craig McGowan updated the old cdcfluview API function to account for the changes. However, the new API endpoints provided additional data features and it seemed to make sense to revamp the package to fit more in line with the way the APIs were structured. Legacy cdcfluview functions have been deprecated and will display deprecation messages when run. The new cdcfluview package API changes a few things about how you work with the data but the README and examples show how to work with it.
cdcfluview 0.5.2 Unreleased
Modified behavior of get_flu_data() to actually grab current flu season year if a single year was specified and it is the current year and the return is a 0 length data frame (fixes #7)
Added code coverage tests for all API functions.
cdcfluview 0.5.1 2016-12-07
Replaced http URLs with https as http ones no longer work (fixes #6)
Fixed State data download (CDC changed the hidden API)
cdcfluview 0.5.0 Unreleased
Fixed issue with WHO data format change
Added Mortality Surveillance Data retrieval function
Switched to readr::read_csv() and since it handles column names better this will break your scripts until you use the new column names.


Switch component by userId
userId is an odd number => component1
userId is an even number => component2