[{"name":"RefinementProofs","comment":" This library allows for stronger types in Elm for both library writer and end users\n\n# Definition\n@docs Proven\n\n# Logic operator types\n@docs And, Or, Not, XOr, Implies\n\n# Basic function\n@docs axiom, or, and, not\n\n# Logic operators\n@docs introOrR, introOrL, elimOrR, elimOrL, makeOr, makeAnd, provenOrInversed, inverse, elimAndL, elimAndR, exorcise, modusPonens, since, modusTollens, sinceNot, imply, absurd\n\n","unions":[{"name":"And","comment":" Both \"a\" and \"b\" holds\n","args":["a","b"],"cases":[]},{"name":"Implies","comment":" Implies that if \"a\" holds than \"b\" holds\n","args":["a","b"],"cases":[]},{"name":"Not","comment":" A negation of a proof\n","args":["a"],"cases":[]},{"name":"Or","comment":" \"a\" or \"b\" holds\n","args":["a","b"],"cases":[]},{"name":"Proven","comment":" A value \"a\" that is proven to hold the property \"b\"\n","args":["a","b"],"cases":[]}],"aliases":[{"name":"XOr","comment":" Exlusive or\n","args":["a","b"],"type":"RefinementProofs.Or (RefinementProofs.And a (RefinementProofs.Not b)) (RefinementProofs.And (RefinementProofs.Not a) b)"}],"values":[{"name":"absurd","comment":" Used by library writers to carefully ignore \"impossible\" states\n","type":"a"},{"name":"and","comment":" Used by library writers to create build a And proof\n","type":"p1 -> p2 -> RefinementProofs.And p1 p2"},{"name":"axiom","comment":" Used by library writers to create axioms with non-exported constructors\n","type":"p -> a -> RefinementProofs.Proven a p"},{"name":"elimAndL","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.And b c) -> RefinementProofs.Proven a b"},{"name":"elimAndR","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.And b c) -> RefinementProofs.Proven a c"},{"name":"elimOrL","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.Or b c) -> RefinementProofs.Proven a c"},{"name":"elimOrR","comment":" Basic logic\n","type":"RefinementProofs.Proven a (RefinementProofs.Or b c) -> RefinementProofs.Proven a b"},{"name":"exorcise","comment":" Extract the actual value and remove the proof\n","type":"RefinementProofs.Proven a b -> a"},{"name":"imply","comment":" Used by library writers to imply proof relations\n","type":"p1 -> p2 -> RefinementProofs.Implies p1 p2"},{"name":"introOrL","comment":" Basic logic\n","type":"RefinementProofs.Proven a p1 -> RefinementProofs.Proven a (RefinementProofs.Or p2 p1)"},{"name":"introOrR","comment":" Basic logic\n","type":"RefinementProofs.Proven a p1 -> RefinementProofs.Proven a (RefinementProofs.Or p1 p2)"},{"name":"inverse","comment":" Basic logic\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a p1)) -> a -> Maybe.Maybe (RefinementProofs.Proven a (RefinementProofs.Not p1))"},{"name":"makeAnd","comment":" A convience method to check two proofs at once\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a b)) -> (a -> Maybe.Maybe (RefinementProofs.Proven a c)) -> a -> Maybe.Maybe (RefinementProofs.Proven a (RefinementProofs.And b c))"},{"name":"makeOr","comment":" A convience method to check two proofs\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a b)) -> (a -> Maybe.Maybe (RefinementProofs.Proven a c)) -> a -> Maybe.Maybe (RefinementProofs.Proven a (RefinementProofs.Or b c))"},{"name":"modusPonens","comment":" Basic logic\n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a p1 -> RefinementProofs.Proven a p2"},{"name":"modusTollens","comment":" Basic logic\n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a (RefinementProofs.Not p1) -> RefinementProofs.Proven a (RefinementProofs.Not p2)"},{"name":"not","comment":" Used by library writers to create build a Not proof\n","type":"p1 -> RefinementProofs.Not p1"},{"name":"or","comment":" Used by library writers to create build a Or proof\n","type":"p1 -> p2 -> RefinementProofs.Or p1 p2"},{"name":"provenOrInversed","comment":" Basic logic\n","type":"(a -> Maybe.Maybe (RefinementProofs.Proven a p1)) -> a -> Result.Result (RefinementProofs.Proven a (RefinementProofs.Not p1)) (RefinementProofs.Proven a p1)"},{"name":"since","comment":" Synonym for \"modus ponens\"\n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a p1 -> RefinementProofs.Proven a p2"},{"name":"sinceNot","comment":" Synonym for \"modus tollens\" \n","type":"RefinementProofs.Implies p1 p2 -> RefinementProofs.Proven a (RefinementProofs.Not p1) -> RefinementProofs.Proven a (RefinementProofs.Not p2)"}],"binops":[]}]