chapter ‹Generated by Lem from ‹function.lem›.› theory "Lem_function" imports Main "Lem_bool" "Lem_basic_classes" begin ― ‹‹****************************************************************************›› ― ‹‹ A library for common operations on functions ›› ― ‹‹****************************************************************************›› ― ‹‹open import Bool Basic_classes›› ― ‹‹open import {coq} `Program.Basics`›› ― ‹‹ ----------------------- ›› ― ‹‹ identity function ›› ― ‹‹ ----------------------- ›› ― ‹‹val id : forall 'a. 'a -> 'a›› ― ‹‹let id x= x›› ― ‹‹ ----------------------- ›› ― ‹‹ constant function ›› ― ‹‹ ----------------------- ›› ― ‹‹val const : forall 'a 'b. 'a -> 'b -> 'a›› ― ‹‹ ----------------------- ›› ― ‹‹ function composition ›› ― ‹‹ ----------------------- ›› ― ‹‹val comb : forall 'a 'b 'c. ('b -> 'c) -> ('a -> 'b) -> ('a -> 'c)›› ― ‹‹let comb f g= (fun x -> f (g x))›› ― ‹‹ ----------------------- ›› ― ‹‹ function application ›› ― ‹‹ ----------------------- ›› ― ‹‹val $ [apply] : forall 'a 'b. ('a -> 'b) -> ('a -> 'b)›› ― ‹‹let $ f= (fun x -> f x)›› ― ‹‹val $> [rev_apply] : forall 'a 'b. 'a -> ('a -> 'b) -> 'b›› ― ‹‹let $> x f= f x›› ― ‹‹ ----------------------- ›› ― ‹‹ flipping argument order ›› ― ‹‹ ----------------------- ›› ― ‹‹val flip : forall 'a 'b 'c. ('a -> 'b -> 'c) -> ('b -> 'a -> 'c)›› ― ‹‹let flip f= (fun x y -> f y x)›› ― ‹‹ currying / uncurrying ›› ― ‹‹val curry : forall 'a 'b 'c. (('a * 'b) -> 'c) -> 'a -> 'b -> 'c›› definition curry :: "('a*'b ⇒ 'c)⇒ 'a ⇒ 'b ⇒ 'c " where " curry f = ( (λ a b . f (a, b)))" ― ‹‹val uncurry : forall 'a 'b 'c. ('a -> 'b -> 'c) -> ('a * 'b -> 'c)›› fun uncurry :: "('a ⇒ 'b ⇒ 'c)⇒ 'a*'b ⇒ 'c " where " uncurry f (a,b) = ( f a b )" end