Theory Main

section ‹Main HOL›

text ‹
  Classical Higher-order Logic -- only ``Main'', excluding real and
  complex numbers etc.
›

theory Main
  imports
    Predicate_Compile
    Quickcheck_Narrowing
    Mirabelle
    Extraction
    Nunchaku
    BNF_Greatest_Fixpoint
    Filter
    Conditionally_Complete_Lattices
    Binomial
    GCD
begin

subsection ‹Namespace cleanup›

hide_const (open)
  czero cinfinite cfinite csum cone ctwo Csum cprod cexp image2 image2p vimage2p Gr Grp collect
  fsts snds setl setr convol pick_middlep fstOp sndOp csquare relImage relInvImage Succ Shift
  shift proj id_bnf

hide_fact (open) id_bnf_def type_definition_id_bnf_UNIV


subsection ‹Syntax cleanup›

no_notation
  ordLeq2 (infix <=o 50) and
  ordLeq3 (infix ≤o 50) and
  ordLess2 (infix <o 50) and
  ordIso2 (infix =o 50) and
  card_of ((‹open_block notation=‹mixfix card_of››|_|)) and
  BNF_Cardinal_Arithmetic.csum (infixr +c 65) and
  BNF_Cardinal_Arithmetic.cprod (infixr *c 80) and
  BNF_Cardinal_Arithmetic.cexp (infixr ^c 90) and
  BNF_Def.convol ((‹indent=1 notation=‹mixfix convol››_,/ _))

bundle cardinal_syntax
begin

notation
  ordLeq2 (infix <=o 50) and
  ordLeq3 (infix ≤o 50) and
  ordLess2 (infix <o 50) and
  ordIso2 (infix =o 50) and
  card_of ((‹open_block notation=‹mixfix card_of››|_|)) and
  BNF_Cardinal_Arithmetic.csum (infixr +c 65) and
  BNF_Cardinal_Arithmetic.cprod (infixr *c 80) and
  BNF_Cardinal_Arithmetic.cexp (infixr ^c 90)

alias cinfinite = BNF_Cardinal_Arithmetic.cinfinite
alias czero = BNF_Cardinal_Arithmetic.czero
alias cone = BNF_Cardinal_Arithmetic.cone
alias ctwo = BNF_Cardinal_Arithmetic.ctwo

end


subsection ‹Lattice syntax›

bundle lattice_syntax
begin

notation
  bot  () and
  top  () and
  inf  (infixl  70) and
  sup  (infixl  65) and
  Inf  ((‹open_block notation=‹prefix ⨅›› _) [900] 900) and
  Sup  ((‹open_block notation=‹prefix ⨆›› _) [900] 900)

syntax
  "_INF1"     :: "pttrns  'b  'b"           ((‹indent=3 notation=‹binder ⨅››_./ _) [0, 10] 10)
  "_INF"      :: "pttrn  'a set  'b  'b"  ((‹indent=3 notation=‹binder ⨅››__./ _) [0, 0, 10] 10)
  "_SUP1"     :: "pttrns  'b  'b"           ((‹indent=3 notation=‹binder ⨆››_./ _) [0, 10] 10)
  "_SUP"      :: "pttrn  'a set  'b  'b"  ((‹indent=3 notation=‹binder ⨆››__./ _) [0, 0, 10] 10)

end

unbundle no lattice_syntax

end