Theory Gesetze

theory Gesetze
imports Gesetz AllgemeinesGesetz Aenderung
begin

section‹Gesetze›
text‹Wir implementieren Strategien um typ('welt, 'a, 'b) allgemeines_gesetz_ableiten
zu implementieren.›

subsection‹Case Law Absolut›

text‹
Gesetz beschreibt: wenn (vorher, nachher) dann Erlaubt/Verboten,
                    wobei vorher/nachher die Welt beschreiben.
Paragraphen sind einfache natürliche Zahlen.›
type_synonym 'welt case_law = (nat, ('welt × 'welt), sollensanordnung) gesetz

text‹
Überträgt einen Tatbestand wörtlich ins Gesetz.
Nicht sehr allgemein.›
definition case_law_ableiten_absolut
    :: ('welt, ('welt × 'welt), sollensanordnung) allgemeines_gesetz_ableiten
  where
    case_law_ableiten_absolut handlung sollensanordnung =
        Rechtsnorm
            (Tatbestand (vorher handlung, nachher handlung))
            (Rechtsfolge sollensanordnung)

definition printable_case_law_ableiten_absolut
  :: ('welt 'printable_world) 
     ('welt, ('printable_world × 'printable_world), sollensanordnung) allgemeines_gesetz_ableiten
  where
  printable_case_law_ableiten_absolut print_world h 
      case_law_ableiten_absolut (map_handlung print_world h)

subsection‹Case Law Relativ›

text‹Case Law etwas besser, wir zeigen nur die Änderungen der Welt.›
fun case_law_ableiten_relativ
    :: ('welt handlung  (('person, 'etwas) aenderung) list)
         ('welt, (('person, 'etwas) aenderung) list, sollensanordnung)
              allgemeines_gesetz_ableiten
  where
    case_law_ableiten_relativ delta handlung erlaubt =
      Rechtsnorm (Tatbestand (delta handlung)) (Rechtsfolge erlaubt)

end