<!-- Title:      Pure/pgip_isar.xml
     ID:         $Id: pgip_isar.xml,v 1.7 2005/09/30 16:18:34 aspinall Exp $
     Author:     David Aspinall, University of Edinburgh
		 Christoph Lüth, University of Bremen

This file contains the configuration messages which configure 
PGIP interfaces for Isabelle/Isar, in particular, explaining
internal types of objects and operations available on them.

See http://proofgeneral.inf.ed.ac.uk/kit for more details.

This file is a contributed part of the Isabelle Distribution.

STATUS: incomplete and experimental.
-->

<displayconfig>

  <welcomemsg>Welcome to Isabelle/Isar 2005.</welcomemsg>

  <!-- Icon for Isabelle interface -->
  <icon>
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAHG0lEQVRIx7VW
    WY9cRxU+p6ru0tvtnp7NmRl7PBqPPU5sB8l2FgS2EwVkeEFEQYp4gggJeIEn
    JB4RfwQeeEFikTAIBHFMYiFsBi9x7FnaM+Oe1bP29HZv33ur6hwe2pqMLGOk
    oJzHKlV95/vqnPMVMjN8niHgcw71/O00TfFAAMBBxkKI7uJnBNBaR1FkrQUA
    KaUQAgCsNWmaErHjOEEQOI7zzLP7wP+DQRSuLyz8Oo5rAoVyPACUIn4w89Aa
    U+4dv3DhR4cOnXg+CfV8faKwtblxt9FYIiLf99NUB0FuqbrKzEnCcdz57I/M
    zMyMQgLbI0cOM+mxscNad4hSZsvMlgyRfaoID77W8xgwc5qmQgilXEuir6/P
    dR1jALgLDIDARPu3P0elZwAQUavVImIphVRKSn9rawuRNzbWmckSAAAypLrT
    6bS11lLKg+k/VVpPAxhjWq22tRYRARjRQxAry9WLb7z1cG4OpWAmBCDgOG4t
    LlbqddnTU/R9Rynf97O+72ezWdd19zHwoIha6zAMrSVEZKY0TZeq8w/nflav
    L/m+SmKNQgTF3PTMLhEYA9c/hImRnuFR38lASrZYzL766ndeeeWdfD6/T0sd
    VAYAlHIqlZXp6eWHlUeVyuLq2jrZei6T6etNSqWO72E2oLm5xN1j2lAvaVts
    bTsVkTuetyfae3tZZlBK/VeJpJQAfO2D6Q+uzrZb2tqccke++Nouw2Od1pst
    aoZkt1LXQW9ElF+WQcHV9200bcia1HAu3zcyMul5HiJ20xVCqP30u0sAQMz1
    ersTpwgYuI2jo3NKCqnyjisQpTGkDdVqnTA0UWLi1Cpg6RpjOJspBEFZCGGt
    SVNNZKVUan+qhGHIzEQ2m3UvXDjfU/K3d5rLyw/IUq4YuK6/vbUJiEIKY1Vt
    LwUAJm4nrAznJAODMZZZWGvTNO1WFxGpg/VjjCEiRIqidrW6niYaEMkCEzmO
    ywAIwPZJ+TMxALCFpuFBydZSrbY1f/8TBzLSy0glHUcJgZ9KpJQCAK1TBKhU
    lodeGDg5OTo7d8cyWquHRw5HUbO2V38yUJlRAFm2hi1zbHFn3uDS1p/++fOP
    yr1+Pj84Nj557vyJt76uAMBa28398fru1NTMR9fvbW3vbWzu3r47I6U9f5aN
    tY1mvafUF7bDVJsnLfykn9Vmamb/uvuT44MiwNS04412DLC0WGk2mhNvXlYA
    UKs1pqYqV9+/dffuQr3eabVb1hCikCrjsmcItBFRmFQfzQtgRGRiZgYEJqhG
    YGTxdBnHz79cHh2++ds/H5sY3V1Y+nsj6s/lVVeWf91c/OUvbiyv1DodTBIj
    MHB8BczaRJ24Uauxo/TO9hZZJIESusMIyHJzhV5MsBSECPLK1ZtHRwaPTo4P
    nzy2WqmykMX+AcdxFAAQG2P1iYnhO3dng8IIM6Q6MiYSQgmhrvzxUiG/PTzc
    GBrWQ4NhJies5bU1c3hZHW25BtkCOIiBI9bWNocnJ27+7i8JEQiRKQTMrIi4
    UMi0Wq2+3j5LOk6aREZKx/dLAhWx1To0ZrhapdnZ3URXfe8TKcPdR/qnx/o9
    T7gCETE0tBh2Qku3qmteJ807jpfLB/39RCQAuFDwlRLZTDYIAmYrUDLZUy8e
    Hh/vMzrK+KU42Ys628Sk5EhPM2dW7KmCZ5gjY+upaWqz2kkiSyjEb6Zm10hi
    vnjqja+cufgmAChEzOf8wcHy9Mz06JGh+w8qDNzXW0o1HRrom56eT9OQyOy3
    y+sjA5dPT8ZJuvKwmiap5zppnFhmAvT87A/ee69Xx/353Jlvf9f1PGZWAFAs
    5cbHX1hYeFzI+8wkpVco5IOC/3hzi5gEEzMxm679NZqtf99cyfne6PGxQiF7
    /NyZv/3q93Z9GxGk533tG2+XBga6rsDM1loFAOVy8M63zhVLYqna6unJh6Eu
    FfOfPJg9fWqSmRio21yIjGiFlIAijNOZe7Oe64RRbFKtGQiEdD0/n0MUiE8c
    N5vNKkSUUk5MjIyNHdrcrF19f/DatdmB/qDe7F1d3UZEZkYUUopCITs0VDp7
    YggWb+tGPWk1kji5f2faRSQUTiZ76Xs/dP3M/tcJEX3fxy4Ra4kZrLVaJ41G
    dONG5cofpqrVnXaYMCkh4qGh4EtfPvnuu5d6e4tJu7V2786jf3y4/eDjaGdb
    Wb2O7sXv//gLX73c/T51vTOTybiui8xMRNZaRGGMYSYhJJFtNNq3bs1fvz67
    slwfGMh88+3Xz549JqXsmkn3SGt7a+3j2+3lR+Wzrx156bQQQimllJJSfmrU
    +5bJzMYYIkZEIRAAtDZa09raThBkyuWgK5cQAoABGBEBkIiIGACIrFLScZz9
    q5/hyftIB1wImAkREMW+SRERInSHd/eFmJmZlHKkFAfTlVJho9HI5XJPwf6f
    EUWdOO4gimIx+A/pRoFAWyKheQAAAABJRU5ErkJggg==
  </icon>

  <helpdoc name="Isabelle/HOL Tutorial" 
	   descr="A gentle introduction to Isabelle/HOL"
           url="http://isabelle.in.tum.de/dist/Isabelle/doc/tutorial.pdf"
  >tutorial</helpdoc>
  <helpdoc name="Isabelle HOL Logic Reference" 
	   descr="The Isabelle HOL Logic in detail"
           url="http://isabelle.in.tum.de/dist/Isabelle/doc/logics-HOL.pdf"
  >logics-HOL</helpdoc>
  <helpdoc name="Isar Tutorial" 
	   descr="An Introduction to the Isar proof language"
           url="http://isabelle.in.tum.de/dist/Isabelle/doc/isar-overview.pdf"
  >isar-overview</helpdoc>
  <helpdoc name="Isabelle/Isar Reference" 
	   descr="Reference Manual for Isabelle/Isar"
           url="http://isabelle.in.tum.de/dist/Isabelle/doc/isar-ref.pdf"
  >isar-ref</helpdoc>
  <helpdoc name="Isabelle Reference manual"
	   descr="Reference Manual for Isabelle"
           url="http://isabelle.in.tum.de/dist/Isabelle/doc/ref.pdf"
  >ref</helpdoc>
  <helpdoc name="Isabelle System manual"
	   descr="System Manual: interfaces, output, building logics."
           url="http://isabelle.in.tum.de/dist/Isabelle/doc/system.pdf"
  >system</helpdoc>
  
 
  <!-- objtypes -->
  <objtype name="toplevel" descr="top-level context (PGIP internal)">
  <contains objtype="theory"/>
  </objtype>
  <objtype name="theory" descr="Isabelle theory">
  <contains objtype="theorem"/>
  <contains objtype="theory"/>
  </objtype>
  <objtype name="theorem" descr="Isabelle theorem">
    <hasprefs prefcategory="Theorem attributes">
      <haspref name="thm-kind" descr="Theorem kind">
	<pgipchoice>
	  <pgipconst name="Theorem">theorem</pgipconst>
	  <pgipconst name="Lemma">lemma</pgipconst>
	  <pgipconst name="Corollary">corollary</pgipconst>
	</pgipchoice>
      </haspref>
      <haspref name="thm-simp" descr="Include in simplifier set">
	<pgipbool/>
      </haspref>
      <haspref name="thm-intro" descr="Flag as introduction rule">
	<pgipbool/>
      </haspref>
      <haspref name="thm-elim" descr="Flag as elimination rule">
	<pgipbool/>
      </haspref>
      <haspref name="thm-dest" descr="Flag as destruction rule">
	<pgipbool/>
      </haspref>
    </hasprefs>
  </objtype>
  <objtype name="term"      descr="Isabelle term">
    <icon>
      R0lGODlhJgAgAIQAAP////r6+uDg4Nra2tnZ2fn5+WFhYUJCQkFBQWBgYMnO
      91xq6K208wsg3XiD7OTm+0FR5CY54Pb29t3d3dfX119fX/T09NbW1tjY2AAA
      AAAAAAAAAAAAAAAAAAAAAAAAACH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh
      +QQBCgAfACwAAAAAJgAgAAAFnCAgjmRpnqgYCAPhvnAsz7BQAIJxIHzv/8Cg
      LyHA6YTI5I8IWLVo0Gjtlqpar9istqRYLBTbMIDRaDDEW7IZrVWf2VYGw1F2
      yBkP+KnM77/1Jm6AcWV/gyeChyiJioGFjYiPkCWMkyKVlpiTmpBqEJYlEWUR
      XgugDBCjDnmgrZMSExQUUrQ0NgADFUq7SUy5vMBATBYDFxi1yFMAIQA7
    </icon>
  </objtype>
  <objtype name="type"      descr="Isabelle type">
    <icon>
      R0lGODlhJgAgAIQAAP////r6+uDg4Nra2tnZ2fn5+WFhYUJCQkFBQWBgYOTm
      +62080FR5Asg3SY54Fxq6MnO95Kc73iD7Pb29t3d3dfX119fX/T09NbW1tjY
      2AAAAAAAAAAAAAAAAAAAAAAAACH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh
      +QQBCgAfACwAAAAAJgAgAAAFsyAgjmRpnqgYCAPhvnAsz7BQAIJxIHzv/8Cg
      LyHA6YTI5I8IWLVo0Gjtlqpar9istqRYeL9exbaqYDTOaPRijFI40vDGmm16
      NB74NwOPh9C5DWIidn9VERIkb4UpEYIiZ4tZkJFWEA0MlFYLd5lVmw+dKZ8k
      fqEim4GnoKYAlndiDIisAG9ppawSaauzALkNsrzBwsPEIxMUFRVSyzQ2AAMW
      StJJTNDT10BMFwMYGczfUwAhADs=
    </icon>
  </objtype>
  <objtype name="thmset"    descr="Set of Isabelle theorems">
    <contains objtype="theorem"/>
  </objtype>
<!-- possible objtypes not yet supported:
  <objtype name="oopsgoal"  descr="Abandoned proof"></objtype>
  <objtype name="sorrygoal" descr="Postponed proof"></objtype>
  <objtype name="proof"	    descr="Completed proof"></objtype>
  <objtype name="method"    descr="Isar method or proof step"></objtype>
-->

  <!-- object operations -->

  <opn name="add to simpset">
    <opsrc>theorem</opsrc>
    <optrg></optrg>
    <opcmd>declare %1 [simp]</opcmd>
  </opn>

  <opn name="remove from simpset">
    <opsrc>theorem</opsrc>
    <optrg></optrg>
    <opcmd>declare %1 [simp del]</opcmd>
  </opn>

  <opn name="instantiatevar">
    <opsrc>theorem term</opsrc>
    <optrg>theorem</optrg>
    <opcmd>%1 [OF %2]</opcmd>
  </opn>

  <!-- interactive operations -->
  <!-- da: this isn't really a good example.  
       Isar doesn't have cterms, the "term" command just checks & prints
       a term in the current context. -->
  <opn name="checkterm">
    <inputform>
      <field name="term"><pgipstring/><prompt>Input a term:</prompt></field>
    </inputform>
    <opsrc></opsrc>
    <optrg>term</optrg>
    <opcmd>term %term</opcmd>
  </opn>

  <!-- proof operations -->
  <opn name="applyrule">
    <opsrc>ruleset</opsrc>
    <opcmd>apply (rule %1)</opcmd>
  </opn>
  <opn name="applyerule">
    <opsrc>ruleset</opsrc>
    <opcmd>apply (erule %1)</opcmd>
  </opn>
  <opn name="applydrule">
    <opsrc>ruleset</opsrc>
    <opcmd>apply (drule %1)</opcmd>
  </opn>

  <!-- introduce new goal -->
  <!-- [FIXME: ideally need to generalise substitution for options? in pgipchoice] -->
  <opn name="openlemma">
    <inputform>
      <field name="name"><pgipstring/><prompt>Input a name:</prompt></field>
      <field name="term"><pgipstring/><prompt>Input a term:</prompt></field>
      <field name="attributes">
	<pgipchoice>
	<pgipconst name="none"></pgipconst>
	<pgipconst name="use in global simplifier context">[simp]</pgipconst>
	</pgipchoice>
	<prompt>Attributes:</prompt></field>
    </inputform>
    <opsrc></opsrc>
    <opcmd>lemma %attributes %name : "%term"</opcmd>
  </opn>

</displayconfig>

