This library allows for stronger and more refined types in Elm for both library writer and end users.
Both "p1" and "p2" holds
"p1" or "p2" holds
A negation of a proof
Implies that if "p1" holds than "p2" holds
Used by library writers to create axioms with non-exported constructors. Remember, the library/module RefinementProofs.constructors must not be exported!
If a is proven to hold property p1 then classic logic gives that a holds either p1 or p2
Same as introOrR but introduces the p2 on the other side
A convience method to check two proofs for Or
A convience method to check two proofs at once for And
Used by library writers to show that when p1 does not hold for a then Not p1 holds.
Extract the actual value and remove the proof. This is always safe and a library writer should always expect and allow its users to do this.
If a library implies that when p1 holds the p2 holds then you have proven p2 by prove p1
Synonym for "modus ponens". If a library implies that when p1 holds the p2 holds then you have proven p2 by prove p1
If a library implies that when p1 holds the p2 holds then you have proven (Not p2) by prove (Not p1)
Synonym for "modus tollens". If a library implies that when p1 holds the p2 holds then you have proven (Not p2) by prove (Not p1)
A value "a" that is proven to hold the property "b"