53 % |
53 % |
54 \endisadelimquoteme |
54 \endisadelimquoteme |
55 % |
55 % |
56 \isatagquoteme |
56 \isatagquoteme |
57 \isacommand{lemma}\isamarkupfalse% |
57 \isacommand{lemma}\isamarkupfalse% |
58 \ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\isanewline |
58 \ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\isanewline |
59 \ \ {\isachardoublequoteopen}dequeue\ {\isacharparenleft}Queue\ xs\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\ {\isacharequal}\isanewline |
59 \ \ {\isachardoublequoteopen}dequeue\ {\isacharparenleft}Queue\ xs\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\ {\isacharequal}\isanewline |
60 \ \ \ \ \ {\isacharparenleft}if\ xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}\ then\ {\isacharparenleft}None{\isacharcomma}\ Queue\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\isanewline |
60 \ \ \ \ \ {\isacharparenleft}if\ xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}\ then\ {\isacharparenleft}None{\isacharcomma}\ Queue\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\isanewline |
61 \ \ \ \ \ \ \ else\ dequeue\ {\isacharparenleft}Queue\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline |
61 \ \ \ \ \ \ \ else\ dequeue\ {\isacharparenleft}Queue\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline |
62 \ \ {\isachardoublequoteopen}dequeue\ {\isacharparenleft}Queue\ xs\ {\isacharparenleft}y\ {\isacharhash}\ ys{\isacharparenright}{\isacharparenright}\ {\isacharequal}\isanewline |
62 \ \ {\isachardoublequoteopen}dequeue\ {\isacharparenleft}Queue\ xs\ {\isacharparenleft}y\ {\isacharhash}\ ys{\isacharparenright}{\isacharparenright}\ {\isacharequal}\isanewline |
63 \ \ \ \ \ {\isacharparenleft}Some\ y{\isacharcomma}\ Queue\ xs\ ys{\isacharparenright}{\isachardoublequoteclose}\isanewline |
63 \ \ \ \ \ {\isacharparenleft}Some\ y{\isacharcomma}\ Queue\ xs\ ys{\isacharparenright}{\isachardoublequoteclose}\isanewline |
69 \isadelimquoteme |
69 \isadelimquoteme |
70 % |
70 % |
71 \endisadelimquoteme |
71 \endisadelimquoteme |
72 % |
72 % |
73 \begin{isamarkuptext}% |
73 \begin{isamarkuptext}% |
74 \noindent The annotation \isa{{\isacharbrackleft}code\ func{\isacharbrackright}} is an \isa{Isar} |
74 \noindent The annotation \isa{{\isacharbrackleft}code{\isacharbrackright}} is an \isa{Isar} |
75 \isa{attribute} which states that the given theorems should be |
75 \isa{attribute} which states that the given theorems should be |
76 considered as defining equations for a \isa{fun} statement -- |
76 considered as defining equations for a \isa{fun} statement -- |
77 the corresponding constant is determined syntactically. The resulting code:% |
77 the corresponding constant is determined syntactically. The resulting code:% |
78 \end{isamarkuptext}% |
78 \end{isamarkuptext}% |
79 \isamarkuptrue% |
79 \isamarkuptrue% |
285 \verb|class (Semigroup a) => Monoid a where {|\newline% |
285 \verb|class (Semigroup a) => Monoid a where {|\newline% |
286 \verb| neutral :: a;|\newline% |
286 \verb| neutral :: a;|\newline% |
287 \verb|};|\newline% |
287 \verb|};|\newline% |
288 \newline% |
288 \newline% |
289 \verb|pow :: forall a. (Monoid a) => Nat -> a -> a;|\newline% |
289 \verb|pow :: forall a. (Monoid a) => Nat -> a -> a;|\newline% |
|
290 \verb|pow Zero_nat a = neutral;|\newline% |
290 \verb|pow (Suc n) a = mult a (pow n a);|\newline% |
291 \verb|pow (Suc n) a = mult a (pow n a);|\newline% |
291 \verb|pow Zero_nat a = neutral;|\newline% |
|
292 \newline% |
292 \newline% |
293 \verb|plus_nat :: Nat -> Nat -> Nat;|\newline% |
293 \verb|plus_nat :: Nat -> Nat -> Nat;|\newline% |
294 \verb|plus_nat (Suc m) n = plus_nat m (Suc n);|\newline% |
294 \verb|plus_nat (Suc m) n = plus_nat m (Suc n);|\newline% |
295 \verb|plus_nat Zero_nat n = n;|\newline% |
295 \verb|plus_nat Zero_nat n = n;|\newline% |
296 \newline% |
296 \newline% |
297 \verb|neutral_nat :: Nat;|\newline% |
297 \verb|neutral_nat :: Nat;|\newline% |
298 \verb|neutral_nat = Suc Zero_nat;|\newline% |
298 \verb|neutral_nat = Suc Zero_nat;|\newline% |
299 \newline% |
299 \newline% |
300 \verb|mult_nat :: Nat -> Nat -> Nat;|\newline% |
300 \verb|mult_nat :: Nat -> Nat -> Nat;|\newline% |
|
301 \verb|mult_nat Zero_nat n = Zero_nat;|\newline% |
301 \verb|mult_nat (Suc m) n = plus_nat n (mult_nat m n);|\newline% |
302 \verb|mult_nat (Suc m) n = plus_nat n (mult_nat m n);|\newline% |
302 \verb|mult_nat Zero_nat n = Zero_nat;|\newline% |
|
303 \newline% |
303 \newline% |
304 \verb|instance Semigroup Nat where {|\newline% |
304 \verb|instance Semigroup Nat where {|\newline% |
305 \verb| mult = mult_nat;|\newline% |
305 \verb| mult = mult_nat;|\newline% |
306 \verb|};|\newline% |
306 \verb|};|\newline% |
307 \newline% |
307 \newline% |
348 \newline% |
348 \newline% |
349 \verb|type 'a monoid = {Program__semigroup_monoid : 'a semigroup, neutral : 'a};|\newline% |
349 \verb|type 'a monoid = {Program__semigroup_monoid : 'a semigroup, neutral : 'a};|\newline% |
350 \verb|fun semigroup_monoid (A_:'a monoid) = #Program__semigroup_monoid A_;|\newline% |
350 \verb|fun semigroup_monoid (A_:'a monoid) = #Program__semigroup_monoid A_;|\newline% |
351 \verb|fun neutral (A_:'a monoid) = #neutral A_;|\newline% |
351 \verb|fun neutral (A_:'a monoid) = #neutral A_;|\newline% |
352 \newline% |
352 \newline% |
353 \verb|fun pow A_ (Suc n) a = mult (semigroup_monoid A_) a (pow A_ n a)|\newline% |
353 \verb|fun pow A_ Zero_nat a = neutral A_|\newline% |
354 \verb| |\verb,|,\verb| pow A_ Zero_nat a = neutral A_;|\newline% |
354 \verb| |\verb,|,\verb| pow A_ (Suc n) a = mult (semigroup_monoid A_) a (pow A_ n a);|\newline% |
355 \newline% |
355 \newline% |
356 \verb|fun plus_nat (Suc m) n = plus_nat m (Suc n)|\newline% |
356 \verb|fun plus_nat (Suc m) n = plus_nat m (Suc n)|\newline% |
357 \verb| |\verb,|,\verb| plus_nat Zero_nat n = n;|\newline% |
357 \verb| |\verb,|,\verb| plus_nat Zero_nat n = n;|\newline% |
358 \newline% |
358 \newline% |
359 \verb|val neutral_nat : nat = Suc Zero_nat;|\newline% |
359 \verb|val neutral_nat : nat = Suc Zero_nat;|\newline% |
360 \newline% |
360 \newline% |
361 \verb|fun mult_nat (Suc m) n = plus_nat n (mult_nat m n)|\newline% |
361 \verb|fun mult_nat Zero_nat n = Zero_nat|\newline% |
362 \verb| |\verb,|,\verb| mult_nat Zero_nat n = Zero_nat;|\newline% |
362 \verb| |\verb,|,\verb| mult_nat (Suc m) n = plus_nat n (mult_nat m n);|\newline% |
363 \newline% |
363 \newline% |
364 \verb|val semigroup_nat = {mult = mult_nat} : nat semigroup;|\newline% |
364 \verb|val semigroup_nat = {mult = mult_nat} : nat semigroup;|\newline% |
365 \newline% |
365 \newline% |
366 \verb|val monoid_nat =|\newline% |
366 \verb|val monoid_nat =|\newline% |
367 \verb| {Program__semigroup_monoid = semigroup_nat, neutral = neutral_nat} :|\newline% |
367 \verb| {Program__semigroup_monoid = semigroup_nat, neutral = neutral_nat} :|\newline% |
573 % |
573 % |
574 \endisadelimquoteme |
574 \endisadelimquoteme |
575 % |
575 % |
576 \isatagquoteme |
576 \isatagquoteme |
577 \isacommand{lemma}\isamarkupfalse% |
577 \isacommand{lemma}\isamarkupfalse% |
578 \ plus{\isacharunderscore}Dig\ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\isanewline |
578 \ plus{\isacharunderscore}Dig\ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\isanewline |
579 \ \ {\isachardoublequoteopen}{\isadigit{0}}\ {\isacharplus}\ n\ {\isacharequal}\ n{\isachardoublequoteclose}\isanewline |
579 \ \ {\isachardoublequoteopen}{\isadigit{0}}\ {\isacharplus}\ n\ {\isacharequal}\ n{\isachardoublequoteclose}\isanewline |
580 \ \ {\isachardoublequoteopen}m\ {\isacharplus}\ {\isadigit{0}}\ {\isacharequal}\ m{\isachardoublequoteclose}\isanewline |
580 \ \ {\isachardoublequoteopen}m\ {\isacharplus}\ {\isadigit{0}}\ {\isacharequal}\ m{\isachardoublequoteclose}\isanewline |
581 \ \ {\isachardoublequoteopen}{\isadigit{1}}\ {\isacharplus}\ Dig{\isadigit{0}}\ n\ {\isacharequal}\ Dig{\isadigit{1}}\ n{\isachardoublequoteclose}\isanewline |
581 \ \ {\isachardoublequoteopen}{\isadigit{1}}\ {\isacharplus}\ Dig{\isadigit{0}}\ n\ {\isacharequal}\ Dig{\isadigit{1}}\ n{\isachardoublequoteclose}\isanewline |
582 \ \ {\isachardoublequoteopen}Dig{\isadigit{0}}\ m\ {\isacharplus}\ {\isadigit{1}}\ {\isacharequal}\ Dig{\isadigit{1}}\ m{\isachardoublequoteclose}\isanewline |
582 \ \ {\isachardoublequoteopen}Dig{\isadigit{0}}\ m\ {\isacharplus}\ {\isadigit{1}}\ {\isacharequal}\ Dig{\isadigit{1}}\ m{\isachardoublequoteclose}\isanewline |
583 \ \ {\isachardoublequoteopen}{\isadigit{1}}\ {\isacharplus}\ Dig{\isadigit{1}}\ n\ {\isacharequal}\ Dig{\isadigit{0}}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\isanewline |
583 \ \ {\isachardoublequoteopen}{\isadigit{1}}\ {\isacharplus}\ Dig{\isadigit{1}}\ n\ {\isacharequal}\ Dig{\isadigit{0}}\ {\isacharparenleft}n\ {\isacharplus}\ {\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\isanewline |
627 % |
627 % |
628 \endisadelimquoteme |
628 \endisadelimquoteme |
629 % |
629 % |
630 \isatagquoteme |
630 \isatagquoteme |
631 \isacommand{lemma}\isamarkupfalse% |
631 \isacommand{lemma}\isamarkupfalse% |
632 \ Suc{\isacharunderscore}Dig\ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\isanewline |
632 \ Suc{\isacharunderscore}Dig\ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\isanewline |
633 \ \ {\isachardoublequoteopen}Suc\ n\ {\isacharequal}\ n\ {\isacharplus}\ {\isadigit{1}}{\isachardoublequoteclose}\isanewline |
633 \ \ {\isachardoublequoteopen}Suc\ n\ {\isacharequal}\ n\ {\isacharplus}\ {\isadigit{1}}{\isachardoublequoteclose}\isanewline |
634 \ \ \isacommand{by}\isamarkupfalse% |
634 \ \ \isacommand{by}\isamarkupfalse% |
635 \ simp\isanewline |
635 \ simp\isanewline |
636 \isanewline |
636 \isanewline |
637 \isacommand{declare}\isamarkupfalse% |
637 \isacommand{declare}\isamarkupfalse% |
638 \ One{\isacharunderscore}nat{\isacharunderscore}def\ {\isacharbrackleft}code\ inline\ del{\isacharbrackright}\isanewline |
638 \ One{\isacharunderscore}nat{\isacharunderscore}def\ {\isacharbrackleft}code\ inline\ del{\isacharbrackright}\isanewline |
639 \isacommand{declare}\isamarkupfalse% |
639 \isacommand{declare}\isamarkupfalse% |
640 \ add{\isacharunderscore}Suc{\isacharunderscore}shift\ {\isacharbrackleft}code\ func\ del{\isacharbrackright}% |
640 \ add{\isacharunderscore}Suc{\isacharunderscore}shift\ {\isacharbrackleft}code\ del{\isacharbrackright}% |
641 \endisatagquoteme |
641 \endisatagquoteme |
642 {\isafoldquoteme}% |
642 {\isafoldquoteme}% |
643 % |
643 % |
644 \isadelimquoteme |
644 \isadelimquoteme |
645 % |
645 % |
713 % |
713 % |
714 \isataginvisible |
714 \isataginvisible |
715 \isacommand{code{\isacharunderscore}datatype}\isamarkupfalse% |
715 \isacommand{code{\isacharunderscore}datatype}\isamarkupfalse% |
716 \ {\isachardoublequoteopen}{\isadigit{0}}{\isacharcolon}{\isacharcolon}nat{\isachardoublequoteclose}\ Suc\isanewline |
716 \ {\isachardoublequoteopen}{\isadigit{0}}{\isacharcolon}{\isacharcolon}nat{\isachardoublequoteclose}\ Suc\isanewline |
717 \isacommand{declare}\isamarkupfalse% |
717 \isacommand{declare}\isamarkupfalse% |
718 \ plus{\isacharunderscore}Dig\ {\isacharbrackleft}code\ func\ del{\isacharbrackright}\isanewline |
718 \ plus{\isacharunderscore}Dig\ {\isacharbrackleft}code\ del{\isacharbrackright}\isanewline |
719 \isacommand{declare}\isamarkupfalse% |
719 \isacommand{declare}\isamarkupfalse% |
720 \ One{\isacharunderscore}nat{\isacharunderscore}def\ {\isacharbrackleft}code\ inline{\isacharbrackright}\isanewline |
720 \ One{\isacharunderscore}nat{\isacharunderscore}def\ {\isacharbrackleft}code\ inline{\isacharbrackright}\isanewline |
721 \isacommand{declare}\isamarkupfalse% |
721 \isacommand{declare}\isamarkupfalse% |
722 \ add{\isacharunderscore}Suc{\isacharunderscore}shift\ {\isacharbrackleft}code\ func{\isacharbrackright}\ \isanewline |
722 \ add{\isacharunderscore}Suc{\isacharunderscore}shift\ {\isacharbrackleft}code{\isacharbrackright}\ \isanewline |
723 \isacommand{lemma}\isamarkupfalse% |
723 \isacommand{lemma}\isamarkupfalse% |
724 \ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}{\isadigit{0}}\ {\isacharplus}\ n\ {\isacharequal}\ {\isacharparenleft}n\ {\isasymColon}\ nat{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse% |
724 \ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}{\isadigit{0}}\ {\isacharplus}\ n\ {\isacharequal}\ {\isacharparenleft}n\ {\isasymColon}\ nat{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse% |
725 \ simp% |
725 \ simp% |
726 \endisataginvisible |
726 \endisataginvisible |
727 {\isafoldinvisible}% |
727 {\isafoldinvisible}% |
728 % |
728 % |
729 \isadeliminvisible |
729 \isadeliminvisible |
782 \verb|type 'a eq = {eq : 'a -> 'a -> bool};|\newline% |
782 \verb|type 'a eq = {eq : 'a -> 'a -> bool};|\newline% |
783 \verb|fun eq (A_:'a eq) = #eq A_;|\newline% |
783 \verb|fun eq (A_:'a eq) = #eq A_;|\newline% |
784 \newline% |
784 \newline% |
785 \verb|fun eqop A_ a b = eq A_ a b;|\newline% |
785 \verb|fun eqop A_ a b = eq A_ a b;|\newline% |
786 \newline% |
786 \newline% |
787 \verb|fun member A_ x (y :: ys) = eqop A_ x y orelse member A_ x ys|\newline% |
787 \verb|fun member A_ x [] = false|\newline% |
788 \verb| |\verb,|,\verb| member A_ x [] = false;|\newline% |
788 \verb| |\verb,|,\verb| member A_ x (y :: ys) = eqop A_ x y orelse member A_ x ys;|\newline% |
789 \newline% |
789 \newline% |
790 \verb|fun collect_duplicates A_ xs ys (z :: zs) =|\newline% |
790 \verb|fun collect_duplicates A_ xs ys [] = xs|\newline% |
791 \verb| (if member A_ z xs|\newline% |
791 \verb| |\verb,|,\verb| collect_duplicates A_ xs ys (z :: zs) =|\newline% |
792 \verb| then (if member A_ z ys then collect_duplicates A_ xs ys zs|\newline% |
792 \verb| (if member A_ z xs|\newline% |
793 \verb| else collect_duplicates A_ xs (z :: ys) zs)|\newline% |
793 \verb| then (if member A_ z ys then collect_duplicates A_ xs ys zs|\newline% |
794 \verb| else collect_duplicates A_ (z :: xs) (z :: ys) zs)|\newline% |
794 \verb| else collect_duplicates A_ xs (z :: ys) zs)|\newline% |
795 \verb| |\verb,|,\verb| collect_duplicates A_ xs ys [] = xs;|\newline% |
795 \verb| else collect_duplicates A_ (z :: xs) (z :: ys) zs);|\newline% |
796 \newline% |
796 \newline% |
797 \verb|end; (*struct Example*)|% |
797 \verb|end; (*struct Example*)|% |
798 \end{isamarkuptext}% |
798 \end{isamarkuptext}% |
799 \isamarkuptrue% |
799 \isamarkuptrue% |
800 % |
800 % |
833 \isacommand{instantiation}\isamarkupfalse% |
833 \isacommand{instantiation}\isamarkupfalse% |
834 \ {\isachardoublequoteopen}{\isacharasterisk}{\isachardoublequoteclose}\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}order{\isacharcomma}\ order{\isacharparenright}\ order\isanewline |
834 \ {\isachardoublequoteopen}{\isacharasterisk}{\isachardoublequoteclose}\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}order{\isacharcomma}\ order{\isacharparenright}\ order\isanewline |
835 \isakeyword{begin}\isanewline |
835 \isakeyword{begin}\isanewline |
836 \isanewline |
836 \isanewline |
837 \isacommand{definition}\isamarkupfalse% |
837 \isacommand{definition}\isamarkupfalse% |
838 \ {\isacharbrackleft}code\ func\ del{\isacharbrackright}{\isacharcolon}\isanewline |
838 \ {\isacharbrackleft}code\ del{\isacharbrackright}{\isacharcolon}\isanewline |
839 \ \ {\isachardoublequoteopen}x\ {\isasymle}\ y\ {\isasymlongleftrightarrow}\ fst\ x\ {\isacharless}\ fst\ y\ {\isasymor}\ fst\ x\ {\isacharequal}\ fst\ y\ {\isasymand}\ snd\ x\ {\isasymle}\ snd\ y{\isachardoublequoteclose}\isanewline |
839 \ \ {\isachardoublequoteopen}x\ {\isasymle}\ y\ {\isasymlongleftrightarrow}\ fst\ x\ {\isacharless}\ fst\ y\ {\isasymor}\ fst\ x\ {\isacharequal}\ fst\ y\ {\isasymand}\ snd\ x\ {\isasymle}\ snd\ y{\isachardoublequoteclose}\isanewline |
840 \isanewline |
840 \isanewline |
841 \isacommand{definition}\isamarkupfalse% |
841 \isacommand{definition}\isamarkupfalse% |
842 \ {\isacharbrackleft}code\ func\ del{\isacharbrackright}{\isacharcolon}\isanewline |
842 \ {\isacharbrackleft}code\ del{\isacharbrackright}{\isacharcolon}\isanewline |
843 \ \ {\isachardoublequoteopen}x\ {\isacharless}\ y\ {\isasymlongleftrightarrow}\ fst\ x\ {\isacharless}\ fst\ y\ {\isasymor}\ fst\ x\ {\isacharequal}\ fst\ y\ {\isasymand}\ snd\ x\ {\isacharless}\ snd\ y{\isachardoublequoteclose}\isanewline |
843 \ \ {\isachardoublequoteopen}x\ {\isacharless}\ y\ {\isasymlongleftrightarrow}\ fst\ x\ {\isacharless}\ fst\ y\ {\isasymor}\ fst\ x\ {\isacharequal}\ fst\ y\ {\isasymand}\ snd\ x\ {\isacharless}\ snd\ y{\isachardoublequoteclose}\isanewline |
844 \isanewline |
844 \isanewline |
845 \isacommand{instance}\isamarkupfalse% |
845 \isacommand{instance}\isamarkupfalse% |
846 \ \isacommand{proof}\isamarkupfalse% |
846 \ \isacommand{proof}\isamarkupfalse% |
847 \isanewline |
847 \isanewline |
850 \isanewline |
850 \isanewline |
851 \isacommand{end}\isamarkupfalse% |
851 \isacommand{end}\isamarkupfalse% |
852 \isanewline |
852 \isanewline |
853 \isanewline |
853 \isanewline |
854 \isacommand{lemma}\isamarkupfalse% |
854 \isacommand{lemma}\isamarkupfalse% |
855 \ order{\isacharunderscore}prod\ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\isanewline |
855 \ order{\isacharunderscore}prod\ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\isanewline |
856 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}order{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isacharless}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
856 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}order{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isacharless}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
857 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isacharless}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
857 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isacharless}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
858 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}order{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isasymle}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
858 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}order{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isasymle}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
859 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isasymle}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
859 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isasymle}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
860 \ \ \isacommand{by}\isamarkupfalse% |
860 \ \ \isacommand{by}\isamarkupfalse% |
882 % |
882 % |
883 \endisadelimquoteme |
883 \endisadelimquoteme |
884 % |
884 % |
885 \isatagquoteme |
885 \isatagquoteme |
886 \isacommand{lemma}\isamarkupfalse% |
886 \isacommand{lemma}\isamarkupfalse% |
887 \ order{\isacharunderscore}prod{\isacharunderscore}code\ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\isanewline |
887 \ order{\isacharunderscore}prod{\isacharunderscore}code\ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\isanewline |
888 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}{\isacharbraceleft}order{\isacharcomma}\ eq{\isacharbraceright}{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isacharless}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
888 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}{\isacharbraceleft}order{\isacharcomma}\ eq{\isacharbraceright}{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isacharless}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
889 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isacharless}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
889 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isacharless}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
890 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}{\isacharbraceleft}order{\isacharcomma}\ eq{\isacharbraceright}{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isasymle}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
890 \ \ {\isachardoublequoteopen}{\isacharparenleft}x{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}a{\isasymColon}{\isacharbraceleft}order{\isacharcomma}\ eq{\isacharbraceright}{\isacharcomma}\ y{\isadigit{1}}\ {\isasymColon}\ {\isacharprime}b{\isasymColon}order{\isacharparenright}\ {\isasymle}\ {\isacharparenleft}x{\isadigit{2}}{\isacharcomma}\ y{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
891 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isasymle}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
891 \ \ \ \ \ x{\isadigit{1}}\ {\isacharless}\ x{\isadigit{2}}\ {\isasymor}\ x{\isadigit{1}}\ {\isacharequal}\ x{\isadigit{2}}\ {\isasymand}\ y{\isadigit{1}}\ {\isasymle}\ y{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
892 \ \ \isacommand{by}\isamarkupfalse% |
892 \ \ \isacommand{by}\isamarkupfalse% |
1005 % |
1005 % |
1006 \endisadelimquoteme |
1006 \endisadelimquoteme |
1007 % |
1007 % |
1008 \isatagquoteme |
1008 \isatagquoteme |
1009 \isacommand{lemma}\isamarkupfalse% |
1009 \isacommand{lemma}\isamarkupfalse% |
1010 \ monotype{\isacharunderscore}eq{\isacharunderscore}list{\isacharunderscore}all{\isadigit{2}}\ {\isacharbrackleft}code\ func{\isacharbrackright}{\isacharcolon}\isanewline |
1010 \ monotype{\isacharunderscore}eq{\isacharunderscore}list{\isacharunderscore}all{\isadigit{2}}\ {\isacharbrackleft}code{\isacharbrackright}{\isacharcolon}\isanewline |
1011 \ \ {\isachardoublequoteopen}eq{\isacharunderscore}class{\isachardot}eq\ {\isacharparenleft}Mono\ tyco{\isadigit{1}}\ typargs{\isadigit{1}}{\isacharparenright}\ {\isacharparenleft}Mono\ tyco{\isadigit{2}}\ typargs{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
1011 \ \ {\isachardoublequoteopen}eq{\isacharunderscore}class{\isachardot}eq\ {\isacharparenleft}Mono\ tyco{\isadigit{1}}\ typargs{\isadigit{1}}{\isacharparenright}\ {\isacharparenleft}Mono\ tyco{\isadigit{2}}\ typargs{\isadigit{2}}{\isacharparenright}\ {\isasymlongleftrightarrow}\isanewline |
1012 \ \ \ \ \ eq{\isacharunderscore}class{\isachardot}eq\ tyco{\isadigit{1}}\ tyco{\isadigit{2}}\ {\isasymand}\ list{\isacharunderscore}all{\isadigit{2}}\ eq{\isacharunderscore}class{\isachardot}eq\ typargs{\isadigit{1}}\ typargs{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
1012 \ \ \ \ \ eq{\isacharunderscore}class{\isachardot}eq\ tyco{\isadigit{1}}\ tyco{\isadigit{2}}\ {\isasymand}\ list{\isacharunderscore}all{\isadigit{2}}\ eq{\isacharunderscore}class{\isachardot}eq\ typargs{\isadigit{1}}\ typargs{\isadigit{2}}{\isachardoublequoteclose}\isanewline |
1013 \ \ \isacommand{by}\isamarkupfalse% |
1013 \ \ \isacommand{by}\isamarkupfalse% |
1014 \ {\isacharparenleft}simp\ add{\isacharcolon}\ eq\ list{\isacharunderscore}all{\isadigit{2}}{\isacharunderscore}eq\ {\isacharbrackleft}symmetric{\isacharbrackright}{\isacharparenright}% |
1014 \ {\isacharparenleft}simp\ add{\isacharcolon}\ eq\ list{\isacharunderscore}all{\isadigit{2}}{\isacharunderscore}eq\ {\isacharbrackleft}symmetric{\isacharbrackright}{\isacharparenright}% |
1015 \endisatagquoteme |
1015 \endisatagquoteme |
1036 \verb|structure Example = |\newline% |
1036 \verb|structure Example = |\newline% |
1037 \verb|struct|\newline% |
1037 \verb|struct|\newline% |
1038 \newline% |
1038 \newline% |
1039 \verb|datatype nat = Suc of nat |\verb,|,\verb| Zero_nat;|\newline% |
1039 \verb|datatype nat = Suc of nat |\verb,|,\verb| Zero_nat;|\newline% |
1040 \newline% |
1040 \newline% |
1041 \verb|fun null (x :: xs) = false|\newline% |
1041 \verb|fun null [] = true|\newline% |
1042 \verb| |\verb,|,\verb| null [] = true;|\newline% |
1042 \verb| |\verb,|,\verb| null (x :: xs) = false;|\newline% |
1043 \newline% |
1043 \newline% |
1044 \verb|fun eq_nat (Suc a) Zero_nat = false|\newline% |
1044 \verb|fun eq_nat (Suc a) Zero_nat = false|\newline% |
1045 \verb| |\verb,|,\verb| eq_nat Zero_nat (Suc a) = false|\newline% |
1045 \verb| |\verb,|,\verb| eq_nat Zero_nat (Suc a) = false|\newline% |
1046 \verb| |\verb,|,\verb| eq_nat (Suc nat) (Suc nat') = eq_nat nat nat'|\newline% |
1046 \verb| |\verb,|,\verb| eq_nat (Suc nat) (Suc nat') = eq_nat nat nat'|\newline% |
1047 \verb| |\verb,|,\verb| eq_nat Zero_nat Zero_nat = true;|\newline% |
1047 \verb| |\verb,|,\verb| eq_nat Zero_nat Zero_nat = true;|\newline% |