(*<*)
theory Main_Doc
imports Main
begin
setup ‹
Document_Output.antiquotation_pretty_source 🍋 ‹ term_type_only› (
(fn ctxt => fn (t, T) =>
(if fastype_of t = Sign.certify_typ (Proof_Context.theory_of ctxt) T then ()
else error "term_type_only: type mismatch" ;
Syntax .pretty_typ ctxt T))
›
setup ‹
Document_Output.antiquotation_pretty_source 🍋 ‹ expanded_typ› A
Syntax .pretty_typ
›
(*>*)
text ‹
\begin {abstract}
This document lists the main types, functions and syntax provided by theory 🍋 ‹ Main › .
\end {abstract}
\section *{HOL}
The basic logic: 🍋 ‹ x = y› , 🍋 ‹ True› , 🍋 ‹ False› , 🍋 ‹ ¬ P› , 🍋 ‹ P ∧ Q› ,
🍋 ‹ P ∨ Q› , 🍋 ‹ P ⟶ Q› , 🍋 ‹ ∀ x. P› , 🍋 ‹ ∃ x. P› , 🍋 ‹ ∃ ! x. P› ,
🍋 ‹ THE x. P› .
🪙
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ HOL.undefined› & 🪙 ‹ HOL.undefined› \java.lang.NullPointerException
🍋 ‹ HOL.default› & 🪙 ‹ HOL.default› \java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
🍋 ‹ ¬ (x = y)› & @{term [source]"¬ (x = y)" } & (🍋 ‹ ~=› )java.lang.NullPointerException
@{term [source]"P ⟷ Q" } & 🍋 ‹ P ⟷ Q› java.lang.NullPointerException
🍋 ‹ If x y z› & @{term [source]"If x y z" }java.lang.NullPointerException
🍋 ‹ Let e🪙 1 (λx. e🪙 2)› & @{term [source]"Let e🪙 1 (λx. e🪙 2)" }java.lang.NullPointerException
\end {tabular}
\section *{Orderings}
A collection of classes defining basic orderings:
preorder, partial order, linear order, dense linear order and wellorder.
🪙
\begin {tabular}{@ {} l @ {~::~} l l @ {}}
🍋 ‹ Orderings.less_eq› & 🪙 ‹ Orderings.less_eq› & (🍋 ‹ 🚫 › )java.lang.NullPointerException
🍋 ‹ Orderings.less› & 🪙 ‹ Orderings.less› \java.lang.NullPointerException
🍋 ‹ Orderings.Least› & 🪙 ‹ Orderings.Least› \java.lang.NullPointerException
🍋 ‹ Orderings.Greatest› & 🪙 ‹ Orderings.Greatest› \java.lang.NullPointerException
🍋 ‹ Orderings.min› & 🪙 ‹ Orderings.min› \java.lang.NullPointerException
🍋 ‹ Orderings.max› & 🪙 ‹ Orderings.max› \java.lang.NullPointerException
@{const[source] top} & 🪙 ‹ Orderings.top› \java.lang.NullPointerException
@{const[source] bot} & 🪙 ‹ Orderings.bot› \java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
@{term [source]"x ≥ y" } & 🍋 ‹ x ≥ y› & (🍋 ‹ >=› )java.lang.NullPointerException
@{term [source]"x > y" } & 🍋 ‹ x > y› \java.lang.NullPointerException
🍋 ‹ ∀ x≤ y. P› & @{term [source]"∀ x. x ≤ y ⟶ P" }java.lang.NullPointerException
🍋 ‹ ∃ x≤ y. P› & @{term [source]"∃ x. x ≤ y ∧ P" }java.lang.NullPointerException
\multicolumn {2}{@ {}l@ {}}{Similarly for $<$, $\ge $ and $>$}java.lang.NullPointerException
🍋 ‹ LEAST x. P› & @{term [source]"Least (λx. P)" }java.lang.NullPointerException
🍋 ‹ GREATEST x. P› & @{term [source]"Greatest (λx. P)" }java.lang.NullPointerException
\end {tabular}
\section *{Lattices}
Classes semilattice, lattice, distributive lattice and complete lattice (the
latter in theory 🍋 ‹ HOL.Set› ).
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Lattices.inf› & 🪙 ‹ Lattices.inf› \java.lang.NullPointerException
🍋 ‹ Lattices.sup› & 🪙 ‹ Lattices.sup› \java.lang.NullPointerException
🍋 ‹ Complete_Lattices.Inf› & @{term_type_only Complete_Lattices.Inf "'a set ==> 'a::Inf" }java.lang.NullPointerException
🍋 ‹ Complete_Lattices.Sup› & @{term_type_only Complete_Lattices.Sup "'a set ==> 'a::Sup" }java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
Available via 🪙 ‹ unbundle lattice_syntax› .
\begin {supertabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
@{text [source]"x ⊑ y" } & 🍋 ‹ x ≤ y› \java.lang.NullPointerException
@{text [source]"x ⊏ y" } & 🍋 ‹ x 🚫 › \java.lang.NullPointerException
@{text [source]"x ⊓ y" } & 🍋 ‹ inf x y› \java.lang.NullPointerException
@{text [source]"x ⊔ y" } & 🍋 ‹ sup x y› \java.lang.NullPointerException
@{text [source]"⊓ A" } & 🍋 ‹ Inf A› \java.lang.NullPointerException
@{text [source]"⊔ A" } & 🍋 ‹ Sup A› \java.lang.NullPointerException
@{text [source]"⊤ " } & @{term [source] top}java.lang.NullPointerException
@{text [source]"⊥ " } & @{term [source] bot}java.lang.NullPointerException
\end {supertabular}
\section *{Set}
\begin {tabular}{@ {} l @ {~::~} l l @ {}}
🍋 ‹ Set.empty› & @{term_type_only "Set.empty" "'a set" }java.lang.NullPointerException
🍋 ‹ Set.insert› & @{term_type_only insert "'a==> 'a set==> 'a set" }java.lang.NullPointerException
🍋 ‹ Collect› & @{term_type_only Collect "('a==> bool)==> 'a set" }java.lang.NullPointerException
🍋 ‹ Set.member› & @{term_type_only Set.member "'a==> 'a set==> bool" } & (🍋 ‹ :› )java.lang.NullPointerException
🍋 ‹ Set.union› & @{term_type_only Set.union "'a set==> 'a set ==> 'a set" } & (?? ‹ Un› )java.lang.NullPointerException
🍋 ‹ Set.inter› & @{term_type_only Set.inter "'a set==> 'a set ==> 'a set" } & (?? ‹ Int› )java.lang.NullPointerException
🍋 ‹ Union› & @{term_type_only Union "'a set set==> 'a set" }java.lang.NullPointerException
🍋 ‹ Inter› & @{term_type_only Inter "'a set set==> 'a set" }java.lang.NullPointerException
🍋 ‹ Pow› & @{term_type_only Pow "'a set ==> 'a set set" }java.lang.NullPointerException
🍋 ‹ UNIV› & @{term_type_only UNIV "'a set" }java.lang.NullPointerException
🍋 ‹ image› & @{term_type_only image "('a==> 'b)==> 'a set==> 'b set" }java.lang.NullPointerException
🍋 ‹ Ball› & @{term_type_only Ball "'a set==> ('a==> bool)==> bool" }java.lang.NullPointerException
🍋 ‹ Bex› & @{term_type_only Bex "'a set==> ('a==> bool)==> bool" }java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
‹ {a🪙 1,… ,a🪙 n}› & ‹ insert a🪙 1 (… (insert a🪙 n {})… )› \java.lang.NullPointerException
🍋 ‹ a ∉ A› & @{term [source]"¬ (x ∈ A)" }java.lang.NullPointerException
🍋 ‹ A ⊆ B› & @{term [source]"A ≤ B" }java.lang.NullPointerException
🍋 ‹ A ⊂ B› & @{term [source]"A < B" }java.lang.NullPointerException
@{term [source]"A 🪙 B" } & @{term [source]"B ≤ A" }java.lang.NullPointerException
@{term [source]"A 🪙 B" } & @{term [source]"B < A" }java.lang.NullPointerException
🍋 ‹ {x. P}› & @{term [source]"Collect (λx. P)" }java.lang.NullPointerException
‹ {t | x🪙 1 … x🪙 n. P}› & ‹ {v. ∃ x🪙 1 … x🪙 n. v = t ∧ P}› \java.lang.NullPointerException
@{term [source]"∪ x∈ I. A" } & @{term [source]"∪ ((λx. A) ` I)" } & (\texttt {UN})java.lang.NullPointerException
@{term [source]"∪ x. A" } & @{term [source]"∪ ((λx. A) ` UNIV)" }java.lang.NullPointerException
@{term [source]"∩ x∈ I. A" } & @{term [source]"∩ ((λx. A) ` I)" } & (\texttt {INT})java.lang.NullPointerException
@{term [source]"∩ x. A" } & @{term [source]"∩ ((λx. A) ` UNIV)" }java.lang.NullPointerException
🍋 ‹ ∀ x∈ A. P› & @{term [source]"Ball A (λx. P)" }java.lang.NullPointerException
🍋 ‹ ∃ x∈ A. P› & @{term [source]"Bex A (λx. P)" }java.lang.NullPointerException
🍋 ‹ range f› & @{term [source]"f ` UNIV" }java.lang.NullPointerException
\end {tabular}
\section *{Fun }
\begin {tabular}{@ {} l @ {~::~} l l @ {}}
🍋 ‹ Fun.id› & 🪙 ‹ Fun.id› \java.lang.NullPointerException
🍋 ‹ Fun.comp› & 🪙 ‹ Fun.comp› & (\texttt {o})java.lang.NullPointerException
🍋 ‹ Fun.inj_on› & @{term_type_only Fun .inj_on "('a==> 'b)==> 'a set==> bool" }java.lang.NullPointerException
🍋 ‹ Fun.inj› & 🪙 ‹ Fun.inj› \java.lang.NullPointerException
🍋 ‹ Fun.surj› & 🪙 ‹ Fun.surj› \java.lang.NullPointerException
🍋 ‹ Fun.bij› & 🪙 ‹ Fun.bij› \java.lang.NullPointerException
🍋 ‹ Fun.bij_betw› & @{term_type_only Fun .bij_betw "('a==> 'b)==> 'a set==> 'b set==> bool" }java.lang.NullPointerException
🍋 ‹ Fun.monotone_on› & 🪙 ‹ Fun.monotone_on› \java.lang.NullPointerException
🍋 ‹ Fun.monotone› & 🪙 ‹ Fun.monotone› \java.lang.NullPointerException
🍋 ‹ Fun.mono_on› & 🪙 ‹ Fun.mono_on› \java.lang.NullPointerException
🍋 ‹ Fun.mono› & 🪙 ‹ Fun.mono› \java.lang.NullPointerException
🍋 ‹ Fun.strict_mono_on› & 🪙 ‹ Fun.strict_mono_on› \java.lang.NullPointerException
🍋 ‹ Fun.strict_mono› & 🪙 ‹ Fun.strict_mono› \java.lang.NullPointerException
🍋 ‹ Fun.antimono› & 🪙 ‹ Fun.antimono› \java.lang.NullPointerException
🍋 ‹ Fun.fun_upd› & 🪙 ‹ Fun.fun_upd› \java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ fun_upd f x y› & @{term [source]"fun_upd f x y" }java.lang.NullPointerException
‹ f(x🪙 1:=y🪙 1,… ,x🪙 n:=y🪙 n)› & ‹ f(x🪙 1:=y🪙 1)… (x🪙 n:=y🪙 n)› \java.lang.NullPointerException
\end {tabular}
\section *{Hilbert\_ Choice}
Hilbert's selection ($\varepsilon $) operator: 🍋 ‹ SOME x. P› .
🪙
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Hilbert_Choice.inv_into› & @{term_type_only Hilbert_Choice.inv_into "'a set ==> ('a ==> 'b) ==> ('b ==> 'a)" }
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ inv› & @{term [source]"inv_into UNIV" }
\end {tabular}
\section *{Fixed Points}
Theory : 🍋 ‹ HOL.Inductive› .
Least and greatest fixed points in a complete lattice 🍋 ‹ 'a› :
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Inductive.lfp› & 🪙 ‹ Inductive.lfp› \java.lang.NullPointerException
🍋 ‹ Inductive.gfp› & 🪙 ‹ Inductive.gfp› \java.lang.NullPointerException
\end {tabular}
Note that in particular sets (🍋 ‹ 'a ==> bool› ) are complete lattices.
\section *{Sum\_ Type}
Type constructor ‹ +› .
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Sum_Type.Inl› & 🪙 ‹ Sum_Type.Inl› \java.lang.NullPointerException
🍋 ‹ Sum_Type.Inr› & 🪙 ‹ Sum_Type.Inr› \java.lang.NullPointerException
🍋 ‹ Sum_Type.Plus› & @{term_type_only Sum_Type.Plus "'a set==> 'b set==> ('a+'b)set" }
\end {tabular}
\section *{Product\_ Type}
Types 🍋 ‹ unit› and ‹ × › .
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Product_Type.Unity› & 🪙 ‹ Product_Type.Unity› \java.lang.NullPointerException
🍋 ‹ Pair› & 🪙 ‹ Pair› \java.lang.NullPointerException
🍋 ‹ fst› & 🪙 ‹ fst› \java.lang.NullPointerException
🍋 ‹ snd› & 🪙 ‹ snd› \java.lang.NullPointerException
🍋 ‹ case_prod› & 🪙 ‹ case_prod› \java.lang.NullPointerException
🍋 ‹ curry› & 🪙 ‹ curry› \java.lang.NullPointerException
🍋 ‹ Product_Type.Sigma› & @{term_type_only Product_Type.Sigma "'a set==> ('a==> 'b set)==> ('a*'b)set" }java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } ll @ {}}
🍋 ‹ Pair a b› & @{term [source]"Pair a b" }java.lang.NullPointerException
🍋 ‹ case_prod (λx y. t)› & @{term [source]"case_prod (λx y. t)" }java.lang.NullPointerException
🍋 ‹ A × B› & ‹ Sigma A (λ🍋 ‹ \_ › . B)›
\end {tabular}
Pairs may be nested. Nesting to the right is printed as a tuple,
e.g.\ \mbox {🍋 ‹ (a,b,c)› } is really \mbox {‹ (a, (b, c))› .}
Pattern matching with pairs and tuples extends to all binders,
e.g.\ \mbox {🍋 ‹ ∀ (x,y)∈ A. P› ,} 🍋 ‹ {(x,y). P}› , etc.
\section *{Relation}
\begin {supertabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Relation.converse› & @{term_type_only Relation.converse "('a * 'b)set ==> ('b*'a)set" }java.lang.NullPointerException
🍋 ‹ Relation.relcomp› & @{term_type_only Relation.relcomp "('a*'b)set==> ('b*'c)set==> ('a*'c)set" }java.lang.NullPointerException
🍋 ‹ Relation.Image› & @{term_type_only Relation.Image "('a*'b)set==> 'a set==> 'b set" }java.lang.NullPointerException
🍋 ‹ Relation.inv_image› & @{term_type_only Relation.inv_image "('a*'a)set==> ('b==> 'a)==> ('b*'b)set" }java.lang.NullPointerException
🍋 ‹ Relation.Id_on› & @{term_type_only Relation.Id_on "'a set==> ('a*'a)set" }java.lang.NullPointerException
🍋 ‹ Relation.Id› & @{term_type_only Relation.Id "('a*'a)set" }java.lang.NullPointerException
🍋 ‹ Relation.Domain› & @{term_type_only Relation.Domain "('a*'b)set==> 'a set" }java.lang.NullPointerException
🍋 ‹ Relation.Range› & @{term_type_only Relation.Range "('a*'b)set==> 'b set" }java.lang.NullPointerException
🍋 ‹ Relation.Field› & @{term_type_only Relation.Field "('a*'a)set==> 'a set" }java.lang.NullPointerException
🍋 ‹ Relation.refl_on› & @{term_type_only Relation.refl_on "'a set==> ('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.refl› & @{term_type_only Relation.refl "('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.sym› & @{term_type_only Relation.sym "('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.antisym› & @{term_type_only Relation.antisym "('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.trans› & @{term_type_only Relation.trans "('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.irrefl› & @{term_type_only Relation.irrefl "('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.total_on› & @{term_type_only Relation.total_on "'a set==> ('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Relation.total› & @{term_type_only Relation.total "('a*'a)set==> bool" }java.lang.NullPointerException
\end {supertabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
🍋 ‹ converse r› & @{term [source]"converse r" } & (🍋 ‹ ^-1› )
\end {tabular}
🪙
\noindent
Type synonym \ 🍋 ‹ 'a rel› ‹ =› @{expanded_typ "'a rel" }
\section *{Equiv\_ Relations}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Equiv_Relations.equiv› & @{term_type_only Equiv_Relations.equiv "'a set ==> ('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ Equiv_Relations.quotient› & @{term_type_only Equiv_Relations.quotient "'a set ==> ('a × 'a) set ==> 'a set set" }java.lang.NullPointerException
🍋 ‹ Equiv_Relations.congruent› & @{term_type_only Equiv_Relations.congruent "('a*'a)set==> ('a==> 'b)==> bool" }java.lang.NullPointerException
🍋 ‹ Equiv_Relations.congruent2› & @{term_type_only Equiv_Relations.congruent2 "('a*'a)set==> ('b*'b)set==> ('a==> 'b==> 'c)==> bool" }java.lang.NullPointerException
%@ {const Equiv_Relations.} & @ {term_type_only Equiv_Relations. "" }java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ congruent r f› & @{term [source]"congruent r f" }java.lang.NullPointerException
🍋 ‹ congruent2 r r f› & @{term [source]"congruent2 r r f" }java.lang.NullPointerException
\end {tabular}
\section *{Transitive\_ Closure}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Transitive_Closure.rtrancl› & @{term_type_only Transitive_Closure.rtrancl "('a*'a)set==> ('a*'a)set" }java.lang.NullPointerException
🍋 ‹ Transitive_Closure.trancl› & @{term_type_only Transitive_Closure.trancl "('a*'a)set==> ('a*'a)set" }java.lang.NullPointerException
🍋 ‹ Transitive_Closure.reflcl› & @{term_type_only Transitive_Closure.reflcl "('a*'a)set==> ('a*'a)set" }java.lang.NullPointerException
🍋 ‹ Transitive_Closure.acyclic› & @{term_type_only Transitive_Closure.acyclic "('a*'a)set==> bool" }java.lang.NullPointerException
🍋 ‹ compower› & @{term_type_only "(^^) :: ('a*'a)set==> nat==> ('a*'a)set" "('a*'a)set==> nat==> ('a*'a)set" }java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
🍋 ‹ rtrancl r› & @{term [source]"rtrancl r" } & (🍋 ‹ ^*› )java.lang.NullPointerException
🍋 ‹ trancl r› & @{term [source]"trancl r" } & (🍋 ‹ ^+› )java.lang.NullPointerException
🍋 ‹ reflcl r› & @{term [source]"reflcl r" } & (🍋 ‹ ^=› )
\end {tabular}
\section *{Algebra}
Theories 🍋 ‹ HOL.Groups› , 🍋 ‹ HOL.Rings› ,
🍋 ‹ HOL.Euclidean_Rings› and 🍋 ‹ HOL.Fields›
define a large collection of classes describing common algebraic
structures from semigroups up to fields. Everything is done in terms of
overloaded operators:
\begin {tabular}{@ {} l @ {~::~} l l @ {}}
‹ 0› & 🪙 ‹ zero› \java.lang.NullPointerException
‹ 1› & 🪙 ‹ one› \java.lang.NullPointerException
🍋 ‹ plus› & 🪙 ‹ plus› \java.lang.NullPointerException
🍋 ‹ minus› & 🪙 ‹ minus› \java.lang.NullPointerException
🍋 ‹ uminus› & 🪙 ‹ uminus› & (🍋 ‹ -› )java.lang.NullPointerException
🍋 ‹ times› & 🪙 ‹ times› \java.lang.NullPointerException
🍋 ‹ inverse› & 🪙 ‹ inverse› \java.lang.NullPointerException
🍋 ‹ divide› & 🪙 ‹ divide› \java.lang.NullPointerException
🍋 ‹ abs› & 🪙 ‹ abs› \java.lang.NullPointerException
🍋 ‹ sgn› & 🪙 ‹ sgn› \java.lang.NullPointerException
🍋 ‹ Rings.dvd› & 🪙 ‹ Rings.dvd› \java.lang.NullPointerException
🍋 ‹ divide› & 🪙 ‹ divide› \java.lang.NullPointerException
🍋 ‹ modulo› & 🪙 ‹ modulo› \java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax }
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ ∣ x∣ › & @{term [source] "abs x" }
\end {tabular}
\section *{Nat}
🪙 ‹ nat›
🪙
\begin {tabular}{@ {} lllllll @ {}}
🍋 ‹ (+) :: nat ==> nat ==> nat› &
🍋 ‹ (-) :: nat ==> nat ==> nat› &
🍋 ‹ (*) :: nat \ nat \ nat\ &
🍋 ‹ (^) :: nat ==> nat ==> nat› &
🍋 ‹ (div) :: nat ==> nat ==> nat› &
🍋 ‹ (mod) :: nat ==> nat ==> nat› &
🍋 ‹ (dvd) :: nat ==> nat ==> bool› \java.lang.NullPointerException
🍋 ‹ (≤ ) :: nat ==> nat ==> bool› &
🍋 ‹ (🚫 :: nat ==> nat ==> bool› &
🍋 ‹ min :: nat ==> nat ==> nat› &
🍋 ‹ max :: nat ==> nat ==> nat› &
🍋 ‹ Min :: nat set ==> nat› &
🍋 ‹ Max :: nat set ==> nat› \java.lang.NullPointerException
\end {tabular}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Nat.of_nat› & 🪙 ‹ Nat.of_nat› \java.lang.NullPointerException
🍋 ‹ (^^) :: ('a ==> 'a) ==> nat ==> 'a ==> 'a› &
@{term_type_only "(^^) :: ('a ==> 'a) ==> nat ==> 'a ==> 'a" "('a ==> 'a) ==> nat ==> 'a ==> 'a" }
\end {tabular}
\section *{Int}
Type 🍋 ‹ int›
🪙
\begin {tabular}{@ {} llllllll @ {}}
🍋 ‹ (+) :: int ==> int ==> int› &
🍋 ‹ (-) :: int ==> int ==> int› &
🍋 ‹ uminus :: int ==> int› &
🍋 ‹ (*) :: int \ int \ int\ &
🍋 ‹ (^) :: int ==> nat ==> int› &
🍋 ‹ (div) :: int ==> int ==> int› &
🍋 ‹ (mod) :: int ==> int ==> int› &
java.lang.NullPointerException
🍋 ‹ (≤ ) :: int ==> int ==> bool› &
🍋 ‹ (🚫 :: int ==> int ==> bool› &
🍋 ‹ min :: int ==> int ==> int› &
🍋 ‹ max :: int ==> int ==> int› &
🍋 ‹ Min :: int set ==> int› &
java.lang.NullPointerException
🍋 ‹ abs :: int ==> int› &
java.lang.NullPointerException
\end {tabular}
\begin {tabular}{@ {} l @ {~::~} l l @ {}}
java.lang.NullPointerException
java.lang.NullPointerException
🍋 ‹ Int.Ints› & @{term_type_only Int.Ints "'a::ring_1 set"} & (🍋 ‹ Ints› )
\end {tabular}
\subsubsection *{Syntax}
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ of_nat::nat==> int› & @{term[source]"of_nat"}\\
\end {tabular}
\section *{Finite\_ Set}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Finite_Set.finite› & @{term_type_only Finite_Set.finite "'a set==> bool"}\\
🍋 ‹ Finite_Set.card› & @{term_type_only Finite_Set.card "'a set ==> nat"}\\
🍋 ‹ Finite_Set.fold› & @{term_type_only Finite_Set.fold "('a ==> 'b ==> 'b) ==> 'b ==> 'a set ==> 'b"}\\
\end {tabular}
\section *{Lattices\_ Big}
\begin {tabular}{@ {} l @ {~::~} l l @ {}}
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax}
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
🍋 ‹ ARG_MIN f x. P› & @{term[source]"arg_min f (λx. P)"}\\
🍋 ‹ ARG_MAX f x. P› & @{term[source]"arg_max f (λx. P)"}\\
\end {tabular}
\section *{Groups\_ Big}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Groups_Big.sum› & @{term_type_only Groups_Big.sum "('a ==> 'b) ==> 'a set ==> 'b::comm_monoid_add"}\\
🍋 ‹ Groups_Big.prod› & @{term_type_only Groups_Big.prod "('a ==> 'b) ==> 'a set ==> 'b::comm_monoid_mult"}\\
\end {tabular}
\subsubsection *{Syntax}
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l l @ {}}
🍋 ‹ sum (λx. x) A› & @{term[source]"sum (λx. x) A"} & (🍋 ‹ SUM› )\\
🍋 ‹ sum (λx. t) A› & @{term[source]"sum (λx. t) A"}\\
java.lang.NullPointerException
\multicolumn {2}{@ {}l@ {}}{Similarly for ‹ ∏ › instead of ‹ ∑ › } & (🍋 ‹ PROD› )\\
\end {tabular}
\section *{Wellfounded}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Wellfounded.wf› & @{term_type_only Wellfounded.wf "('a*'a)set==> bool"}\\
🍋 ‹ Wellfounded.acc› & @{term_type_only Wellfounded.acc "('a*'a)set==> 'a set"}\\
🍋 ‹ Wellfounded.measure› & @{term_type_only Wellfounded.measure "('a==> nat)==> ('a*'a)set"}\\
🍋 ‹ Wellfounded.lex_prod› & @{term_type_only Wellfounded.lex_prod "('a*'a)set==> ('b*'b)set==> (('a*'b)*('a*'b))set"}\\
🍋 ‹ Wellfounded.mlex_prod› & @{term_type_only Wellfounded.mlex_prod "('a==> nat)==> ('a*'a)set==> ('a*'a)set"}\\
🍋 ‹ Wellfounded.less_than› & @{term_type_only Wellfounded.less_than "(nat*nat)set"}\\
🍋 ‹ Wellfounded.pred_nat› & @{term_type_only Wellfounded.pred_nat "(nat*nat)set"}\\
\end {tabular}
\section *{Set\_ Interval} % 🍋 ‹ HOL.Set_Interval›
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ lessThan› & @{term_type_only lessThan "'a::ord ==> 'a set"}\\
🍋 ‹ atMost› & @{term_type_only atMost "'a::ord ==> 'a set"}\\
🍋 ‹ greaterThan› & @{term_type_only greaterThan "'a::ord ==> 'a set"}\\
🍋 ‹ atLeast› & @{term_type_only atLeast "'a::ord ==> 'a set"}\\
🍋 ‹ greaterThanLessThan› & @{term_type_only greaterThanLessThan "'a::ord ==> 'a ==> 'a set"}\\
🍋 ‹ atLeastLessThan› & @{term_type_only atLeastLessThan "'a::ord ==> 'a ==> 'a set"}\\
🍋 ‹ greaterThanAtMost› & @{term_type_only greaterThanAtMost "'a::ord ==> 'a ==> 'a set"}\\
🍋 ‹ atLeastAtMost› & @{term_type_only atLeastAtMost "'a::ord ==> 'a ==> 'a set"}\\
\end {tabular}
\subsubsection *{Syntax}
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ lessThan y› & @{term[source] "lessThan y"}\\
🍋 ‹ atMost y› & @{term[source] "atMost y"}\\
🍋 ‹ greaterThan x› & @{term[source] "greaterThan x"}\\
🍋 ‹ atLeast x› & @{term[source] "atLeast x"}\\
🍋 ‹ greaterThanLessThan x y› & @{term[source] "greaterThanLessThan x y"}\\
🍋 ‹ atLeastLessThan x y› & @{term[source] "atLeastLessThan x y"}\\
🍋 ‹ greaterThanAtMost x y› & @{term[source] "greaterThanAtMost x y"}\\
🍋 ‹ atLeastAtMost x y› & @{term[source] "atLeastAtMost x y"}\\
@{term[source] "∪ i≤ n. A"} & @{term[source] "∪ i ∈ {..n}. A"}\\
@{term[source] "∪ i🚫 A"} & @{term[source] "∪ i ∈ {..🚫 . A"}\\
\multicolumn {2}{@ {}l@ {}}{Similarly for ‹ ∩ › instead of ‹ ∪ › }\\
🍋 ‹ sum (λx. t) {a..b}› & @{term[source] "sum (λx. t) {a..b}"}\\
🍋 ‹ sum (λx. t) {a..🚫 › & @{term[source] "sum (λx. t) {a..🚫 "}\\
🍋 ‹ sum (λx. t) {..b}› & @{term[source] "sum (λx. t) {..b}"}\\
🍋 ‹ sum (λx. t) {..🚫 › & @{term[source] "sum (λx. t) {..🚫 "}\\
\multicolumn {2}{@ {}l@ {}}{Similarly for ‹ ∏ › instead of ‹ ∑ › }\\
\end {tabular}
\section *{Power}
\begin {tabular}{@ {} l @ {~::~} l @ {}}
🍋 ‹ Power.power› & 🪙 ‹ Power.power›
\end {tabular}
\section *{Option}
🪙 ‹ option›
🪙
\begin {tabular}{@ {} l @ {~::~} l @ {}}
java.lang.NullPointerException
🍋 ‹ map_option› & @{typ[source]"('a ==> 'b) ==> 'a option ==> 'b option"}\\
🍋 ‹ set_option› & @{term_type_only set_option "'a option ==> 'a set"}\\
🍋 ‹ Option.bind› & @{term_type_only Option.bind "'a option ==> ('a ==> 'b option) ==> 'b option"}
\end {tabular}
\section *{List}
🪙 ‹ list›
🪙
\begin {supertabular}{@ {} l @ {~::~} l @ {}}
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
🍋 ‹ List.lenlex› & @{term_type_only List.lenlex "('a*'a)set==> ('a list * 'a list)set"}\\
🍋 ‹ List.lex› & @{term_type_only List.lex "('a*'a)set==> ('a list * 'a list)set"}\\
🍋 ‹ List.lexn› & @{term_type_only List.lexn "('a*'a)set==> nat==> ('a list * 'a list)set"}\\
🍋 ‹ List.lexord› & @{term_type_only List.lexord "('a*'a)set==> ('a list * 'a list)set"}\\
🍋 ‹ List.listrel› & @{term_type_only List.listrel "('a*'b)set==> ('a list * 'b list)set"}\\
🍋 ‹ List.listrel1› & @{term_type_only List.listrel1 "('a*'a)set==> ('a list * 'a list)set"}\\
🍋 ‹ List.lists› & @{term_type_only List.lists "'a set==> 'a list set"}\\
🍋 ‹ List.listset› & @{term_type_only List.listset "'a set list ==> 'a list set"}\\
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
🍋 ‹ List.measures› & @{term_type_only List.measures "('a==> nat)list==> ('a*'a)set"}\\
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
🍋 ‹ List.set› & @{term_type_only List.set "'a list ==> 'a set"}\\
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
\end {supertabular}
\subsubsection *{Syntax}
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
java.lang.NullPointerException
🍋 ‹ [m..🚫 › & @{term[source]"upt m n"}\\
🍋 ‹ [i..j]› & @{term[source]"upto i j"}\\
🍋 ‹ xs[n := x]› & @{term[source]"list_update xs n x"}\\
🍋 ‹ ∑ x← xs. e› & @{term[source]"listsum (map (λx. e) xs)"}\\
\end {tabular}
🪙
Filter input syntax ‹ [pat ← e. b]› , where
‹ pat› is a tuple pattern, which stands for 🍋 ‹ filter (λpat. b) e› .
List comprehension input syntax: ‹ [e. q🪙 1, … , q🪙 n]› where each
qualifier ‹ q🪙 i› is either a generator \mbox {‹ pat ← e› } or a
guard, i.e.\ boolean expression.
\section *{Map}
Maps model partial functions and are often used as finite tables. However,
the domain of a map may be infinite.
\begin {tabular}{@ {} l @ {~::~} l @ {}}
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
🍋 ‹ Map.restrict_map› & @{term_type_only Map.restrict_map "('a==> 'b option)==> 'a set==> ('a==> 'b option)"}\\
🍋 ‹ Map.dom› & @{term_type_only Map.dom "('a==> 'b option)==> 'a set"}\\
🍋 ‹ Map.ran› & @{term_type_only Map.ran "('a==> 'b option)==> 'b set"}\\
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
\end {tabular}
\subsubsection *{Syntax}
\begin {tabular}{@ {} l @ {\quad $\equiv $\quad } l @ {}}
🍋 ‹ Map.empty› & @{term[source] "λ_. None"}\\
🍋 ‹ m(x:=Some y)› & @{term[source]"m(x:=Some y)"}\\
‹ m(x🪙 1↦ y🪙 1,… ,x🪙 n↦ y🪙 n)› & @{text[source]"m(xlick='alert("unbekannte/s Formatierung/Symbol sub");' ontouchend='alert("unbekannte/s Formatierung/Symbol sub");' >🪙 1↦ y🪙 1)… (x🪙 n↦ y🪙 n)"}\\
‹ [x🪙 1↦ y🪙 1,… ,x🪙 n↦ y🪙 n]› & @{text[source]"Map.empty(xick='alert("unbekannte/s Formatierung/Symbol sub");' ontouchend='alert("unbekannte/s Formatierung/Symbol sub");' >🪙 1↦ y🪙 1,… ,x🪙 n↦ y🪙 n)"}\\
🍋 ‹ map_upds m xs ys› & @{term[source]"map_upds m xs ys"}\\
\end {tabular}
\section *{Infix operators in Main} % 🍋 ‹ Main›
\begin {center}
\begin {tabular}{llll}
& Operator & precedence & associativity \\
\hline
Meta-logic & ‹ ==> › & 1 & right \\
& ‹ ≡ › & 2 \\
\hline
Logic & ‹ ∧ › & 35 & right \\
&‹ ∨ › & 30 & right \\
&‹ ⟶ › , ‹ ⟷ › & 25 & right\\
&‹ =› , ‹ ≠ › & 50 & left\\
\hline
Orderings & ‹ ≤ › , ‹ 🚫 close>, ‹ ≥ › , ‹ >› & 50 \\
\hline
Sets & ‹ ⊆ › , ‹ ⊂ › , ‹ 🪙 › , ‹ 🪙 › & 50 \\
&‹ ∈ › , ‹ ∉ › & 50 \\
&‹ ∩ › & 70 & left \\
&‹ ∪ › & 65 & left \\
\hline
Functions and Relations & ‹ ∘ › & 55 & left\\
&‹ `› & 90 & right\\
&‹ O› & 75 & right\\
&‹ ``› & 90 & right\\
&‹ ^^› & 80 & right\\
\hline
Numbers & ‹ +› , ‹ -› & 65 & left \\
&‹ *› , ‹ /› & 70 & left \\
&‹ div› , ‹ mod› & 70 & left\\
&‹ ^› & 80 & right\\
&‹ dvd› & 50 \\
\hline
Lists & ‹ #› , ‹ @› & 65 & right\\
&‹ !› & 100 & left
\end {tabular}
\end {center}
›
(*<*)
end
(*>*)
Messung V0.5 in Prozent C=-10 H=-880 G=622
¤ Dauer der Verarbeitung: 0.24 Sekunden
(vorverarbeitet am 2026-04-28)
¤
*© Formatika GbR, Deutschland