Theory Stimuli

(*  Title:        C2KA Stimulus Structure
    Author:       Maxime Buyse <maxime.buyse at polytechnique.edu>, 2019
    Maintainers:  Maxime Buyse <maxime.buyse at polytechnique.edu> and Jason Jaskolka <jason.jaskolka at carleton.ca>
*)

section ‹Stimulus Structure \label{sec:stimulus_structure}›

text ‹
A stimulus constitutes the basis for behaviour. Because of this, each discrete, observable event 
introduced to a system, such as that which occurs through the communication among agents or from the 
system environment, is considered to be a stimulus which invokes a response from each system agent.

A \emph{stimulus structure} is an idempotent semiring~$\STIMstructure$ with a multiplicatively 
absorbing~$\Dstim$ and identity~$\Nstim$. Within the context of stimuli,~$\STIMset$ is a set of 
stimuli which may be introduced to a system. The operator~$\STIMplus$ is interpreted as a choice 
between two stimuli and the operator~$\STIMdot$ is interpreted as a sequential composition of two 
stimuli. The element~$\Dstim$ represents the \emph{deactivation stimulus} which influences all agents 
to become inactive and the element~$\Nstim$ represents the \emph{neutral stimulus} which has no influence 
on the behaviour of all agents. The natural ordering relation~$\STIMle$ on a stimulus structure~$\stim$ 
is called the sub-stimulus relation. For stimuli~$s,t \in \STIMset$, we write~$s \STIMle t$ and say 
that~$s$ is a sub-stimulus of~$t$ if and only if~$s \STIMplus t = t$. 
›

theory Stimuli
  imports Main
begin

text ‹
The class \emph{stimuli} describes the stimulus structure for \CCKAabbrv. We do not use 
Isabelle's built-in theories for groups and orderings to allow a different notation for the operations 
on stimuli to be consistent with~cite"Jaskolka2015ab".
›

class plus_ord =
  fixes leq::"'a  'a  bool" ("(_/ 𝒮 _)"  [51, 51] 50)
  fixes add::"'a  'a  'a" (infixl "" 65)
  assumes leq_def: "x 𝒮 y  x  y = y"
  and add_assoc: "(x  y)  z = x  (y  z)"
  and add_comm: "x  y = y  x"
begin

notation
  leq  ("'(≤')") and
  leq ("(_/ 𝒮 _)"  [51, 51] 50)

end

class stimuli = plus_ord +
  fixes seq_comp::"'a  'a  'a" (infixl "" 70)
  fixes neutral :: 'a ("𝔫")
  and deactivation :: 'a ("𝔡")
  and basic :: "'a set" ("𝒮a")
  assumes stim_idem [simp]: "x  x = x"
  and seq_nl [simp]: "𝔫  x = x"
  and seq_nr [simp]: "x  𝔫 = x"
  and add_zero [simp]: "𝔡  x = x"
  and absorbingl [simp]: "𝔡  x = 𝔡"
  and absorbingr [simp]: "x  𝔡 = 𝔡"
  and zero_not_basic: "𝔡  𝒮a"
begin 

lemma inf_add_S_right: "x 𝒮 y  x 𝒮 y  z"
  unfolding leq_def
  by (simp add: add_assoc [symmetric])

lemma inf_add_S_left: "x 𝒮 y  x 𝒮 z  y"
  by (simp add: add_comm inf_add_S_right)

lemma leq_refl [simp]: "x 𝒮 x"
  unfolding leq_def
  by simp

end

end