forked from oysteikt/sf1-template
555 lines
16 KiB
Coq
555 lines
16 KiB
Coq
Set Warnings "-notation-overridden,-parsing".
|
|
From Stdlib Require Export String.
|
|
From LF Require Import Basics.
|
|
|
|
Parameter MISSING: Type.
|
|
|
|
Module Check.
|
|
|
|
Ltac check_type A B :=
|
|
match type of A with
|
|
| context[MISSING] => idtac "Missing:" A
|
|
| ?T => first [unify T B; idtac "Type: ok" | idtac "Type: wrong - should be (" B ")"]
|
|
end.
|
|
|
|
Ltac print_manual_grade A :=
|
|
match eval compute in A with
|
|
| Some (_ ?S ?C) =>
|
|
idtac "Score:" S;
|
|
match eval compute in C with
|
|
| ""%string => idtac "Comment: None"
|
|
| _ => idtac "Comment:" C
|
|
end
|
|
| None =>
|
|
idtac "Score: Ungraded";
|
|
idtac "Comment: None"
|
|
end.
|
|
|
|
End Check.
|
|
|
|
From LF Require Import Basics.
|
|
Import Check.
|
|
|
|
Goal True.
|
|
|
|
idtac "------------------- nandb --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> test_nandb4".
|
|
idtac "Possible points: 1".
|
|
check_type @test_nandb4 ((@eq bool (nandb true true) false)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_nandb4.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- andb3 --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> test_andb34".
|
|
idtac "Possible points: 1".
|
|
check_type @test_andb34 ((@eq bool (andb3 true true false) false)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_andb34.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- factorial --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> test_factorial2".
|
|
idtac "Possible points: 1".
|
|
check_type @test_factorial2 ((@eq nat (factorial 5) (Nat.mul 10 12))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_factorial2.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- ltb --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> test_ltb3".
|
|
idtac "Possible points: 1".
|
|
check_type @test_ltb3 ((@eq bool (ltb 4 2) false)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_ltb3.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- plus_id_exercise --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> plus_id_exercise".
|
|
idtac "Possible points: 1".
|
|
check_type @plus_id_exercise (
|
|
(forall (n m o : nat) (_ : @eq nat n m) (_ : @eq nat m o),
|
|
@eq nat (Nat.add n m) (Nat.add m o))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions plus_id_exercise.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- mult_n_1 --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> mult_n_1".
|
|
idtac "Possible points: 1".
|
|
check_type @mult_n_1 ((forall p : nat, @eq nat (Nat.mul p 1) p)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions mult_n_1.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- andb_true_elim2 --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> andb_true_elim2".
|
|
idtac "Possible points: 2".
|
|
check_type @andb_true_elim2 (
|
|
(forall (b c : bool) (_ : @eq bool (andb b c) true), @eq bool c true)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions andb_true_elim2.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- zero_nbeq_plus_1 --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> zero_nbeq_plus_1".
|
|
idtac "Possible points: 1".
|
|
check_type @zero_nbeq_plus_1 ((forall n : nat, @eq bool (eqb 0 (Nat.add n 1)) false)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions zero_nbeq_plus_1.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- identity_fn_applied_twice --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> identity_fn_applied_twice".
|
|
idtac "Possible points: 1".
|
|
check_type @identity_fn_applied_twice (
|
|
(forall (f : forall _ : bool, bool) (_ : forall x : bool, @eq bool (f x) x)
|
|
(b : bool),
|
|
@eq bool (f (f b)) b)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions identity_fn_applied_twice.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- negation_fn_applied_twice --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> Manually graded: negation_fn_applied_twice".
|
|
idtac "Possible points: 1".
|
|
print_manual_grade manual_grade_for_negation_fn_applied_twice.
|
|
idtac " ".
|
|
|
|
idtac "------------------- letter_comparison --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.letter_comparison_Eq".
|
|
idtac "Possible points: 1".
|
|
check_type @LateDays.letter_comparison_Eq (
|
|
(forall l : LateDays.letter,
|
|
@eq LateDays.comparison (LateDays.letter_comparison l l) LateDays.Eq)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.letter_comparison_Eq.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- grade_comparison --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.test_grade_comparison1".
|
|
idtac "Possible points: 0.5".
|
|
check_type @LateDays.test_grade_comparison1 (
|
|
(@eq LateDays.comparison
|
|
(LateDays.grade_comparison (LateDays.Grade LateDays.A LateDays.Minus)
|
|
(LateDays.Grade LateDays.B LateDays.Plus))
|
|
LateDays.Gt)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.test_grade_comparison1.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.test_grade_comparison2".
|
|
idtac "Possible points: 0.5".
|
|
check_type @LateDays.test_grade_comparison2 (
|
|
(@eq LateDays.comparison
|
|
(LateDays.grade_comparison (LateDays.Grade LateDays.A LateDays.Minus)
|
|
(LateDays.Grade LateDays.A LateDays.Plus))
|
|
LateDays.Lt)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.test_grade_comparison2.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.test_grade_comparison3".
|
|
idtac "Possible points: 0.5".
|
|
check_type @LateDays.test_grade_comparison3 (
|
|
(@eq LateDays.comparison
|
|
(LateDays.grade_comparison (LateDays.Grade LateDays.F LateDays.Plus)
|
|
(LateDays.Grade LateDays.F LateDays.Plus))
|
|
LateDays.Eq)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.test_grade_comparison3.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.test_grade_comparison4".
|
|
idtac "Possible points: 0.5".
|
|
check_type @LateDays.test_grade_comparison4 (
|
|
(@eq LateDays.comparison
|
|
(LateDays.grade_comparison (LateDays.Grade LateDays.B LateDays.Minus)
|
|
(LateDays.Grade LateDays.C LateDays.Plus))
|
|
LateDays.Gt)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.test_grade_comparison4.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- lower_letter_lowers --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_letter_lowers".
|
|
idtac "Possible points: 2".
|
|
check_type @LateDays.lower_letter_lowers (
|
|
(forall (l : LateDays.letter)
|
|
(_ : @eq LateDays.comparison (LateDays.letter_comparison LateDays.F l)
|
|
LateDays.Lt),
|
|
@eq LateDays.comparison
|
|
(LateDays.letter_comparison (LateDays.lower_letter l) l) LateDays.Lt)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_letter_lowers.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- lower_grade --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_A_Plus".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_A_Plus (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.A LateDays.Plus))
|
|
(LateDays.Grade LateDays.A LateDays.Natural))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_A_Plus.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_A_Natural".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_A_Natural (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.A LateDays.Natural))
|
|
(LateDays.Grade LateDays.A LateDays.Minus))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_A_Natural.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_A_Minus".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_A_Minus (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.A LateDays.Minus))
|
|
(LateDays.Grade LateDays.B LateDays.Plus))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_A_Minus.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_B_Plus".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_B_Plus (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.B LateDays.Plus))
|
|
(LateDays.Grade LateDays.B LateDays.Natural))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_B_Plus.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_F_Natural".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_F_Natural (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.F LateDays.Natural))
|
|
(LateDays.Grade LateDays.F LateDays.Minus))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_F_Natural.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_twice".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_twice (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.B LateDays.Minus)))
|
|
(LateDays.Grade LateDays.C LateDays.Natural))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_twice.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_thrice".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_thrice (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade
|
|
(LateDays.lower_grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.B LateDays.Minus))))
|
|
(LateDays.Grade LateDays.C LateDays.Minus))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_thrice.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_F_Minus".
|
|
idtac "Possible points: 0.25".
|
|
check_type @LateDays.lower_grade_F_Minus (
|
|
(@eq LateDays.grade
|
|
(LateDays.lower_grade (LateDays.Grade LateDays.F LateDays.Minus))
|
|
(LateDays.Grade LateDays.F LateDays.Minus))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_F_Minus.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- lower_grade_lowers --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.lower_grade_lowers".
|
|
idtac "Possible points: 3".
|
|
check_type @LateDays.lower_grade_lowers (
|
|
(forall (g : LateDays.grade)
|
|
(_ : @eq LateDays.comparison
|
|
(LateDays.grade_comparison
|
|
(LateDays.Grade LateDays.F LateDays.Minus) g)
|
|
LateDays.Lt),
|
|
@eq LateDays.comparison
|
|
(LateDays.grade_comparison (LateDays.lower_grade g) g) LateDays.Lt)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.lower_grade_lowers.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- no_penalty_for_mostly_on_time --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.no_penalty_for_mostly_on_time".
|
|
idtac "Possible points: 2".
|
|
check_type @LateDays.no_penalty_for_mostly_on_time (
|
|
(forall (late_days : nat) (g : LateDays.grade)
|
|
(_ : @eq bool (ltb late_days 9) true),
|
|
@eq LateDays.grade (LateDays.apply_late_policy late_days g) g)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.no_penalty_for_mostly_on_time.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- graded_lowered_once --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> LateDays.grade_lowered_once".
|
|
idtac "Possible points: 2".
|
|
check_type @LateDays.grade_lowered_once (
|
|
(forall (late_days : nat) (g : LateDays.grade)
|
|
(_ : @eq bool (ltb late_days 9) false)
|
|
(_ : @eq bool (ltb late_days 17) true),
|
|
@eq LateDays.grade (LateDays.apply_late_policy late_days g)
|
|
(LateDays.lower_grade g))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions LateDays.grade_lowered_once.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "------------------- binary --------------------".
|
|
idtac " ".
|
|
|
|
idtac "#> test_bin_incr1".
|
|
idtac "Possible points: 0.5".
|
|
check_type @test_bin_incr1 ((@eq bin (incr (B1 Z)) (B0 (B1 Z)))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_bin_incr1.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> test_bin_incr2".
|
|
idtac "Possible points: 0.5".
|
|
check_type @test_bin_incr2 ((@eq bin (incr (B0 (B1 Z))) (B1 (B1 Z)))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_bin_incr2.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> test_bin_incr3".
|
|
idtac "Possible points: 0.5".
|
|
check_type @test_bin_incr3 ((@eq bin (incr (B1 (B1 Z))) (B0 (B0 (B1 Z))))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_bin_incr3.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> test_bin_incr4".
|
|
idtac "Possible points: 0.5".
|
|
check_type @test_bin_incr4 ((@eq nat (bin_to_nat (B0 (B1 Z))) 2)).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_bin_incr4.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> test_bin_incr5".
|
|
idtac "Possible points: 0.5".
|
|
check_type @test_bin_incr5 (
|
|
(@eq nat (bin_to_nat (incr (B1 Z))) (Nat.add 1 (bin_to_nat (B1 Z))))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_bin_incr5.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac "#> test_bin_incr6".
|
|
idtac "Possible points: 0.5".
|
|
check_type @test_bin_incr6 (
|
|
(@eq nat (bin_to_nat (incr (incr (B1 Z)))) (Nat.add 2 (bin_to_nat (B1 Z))))).
|
|
idtac "Assumptions:".
|
|
Abort.
|
|
Print Assumptions test_bin_incr6.
|
|
Goal True.
|
|
idtac " ".
|
|
|
|
idtac " ".
|
|
|
|
idtac "Max points - standard: 28".
|
|
idtac "Max points - advanced: 28".
|
|
idtac "".
|
|
idtac "Allowed Axioms:".
|
|
idtac "functional_extensionality".
|
|
idtac "FunctionalExtensionality.functional_extensionality_dep".
|
|
idtac "plus_le".
|
|
idtac "le_trans".
|
|
idtac "le_plus_l".
|
|
idtac "add_le_cases".
|
|
idtac "Sn_le_Sm__n_le_m".
|
|
idtac "O_le_n".
|
|
idtac "".
|
|
idtac "".
|
|
idtac "********** Summary **********".
|
|
idtac "".
|
|
idtac "Below is a summary of the automatically graded exercises that are incomplete.".
|
|
idtac "".
|
|
idtac "The output for each exercise can be any of the following:".
|
|
idtac " - 'Closed under the global context', if it is complete".
|
|
idtac " - 'MANUAL', if it is manually graded".
|
|
idtac " - A list of pending axioms, containing unproven assumptions. In this case".
|
|
idtac " the exercise is considered complete, if the axioms are all allowed.".
|
|
idtac "".
|
|
idtac "********** Standard **********".
|
|
idtac "---------- test_nandb4 ---------".
|
|
Print Assumptions test_nandb4.
|
|
idtac "---------- test_andb34 ---------".
|
|
Print Assumptions test_andb34.
|
|
idtac "---------- test_factorial2 ---------".
|
|
Print Assumptions test_factorial2.
|
|
idtac "---------- test_ltb3 ---------".
|
|
Print Assumptions test_ltb3.
|
|
idtac "---------- plus_id_exercise ---------".
|
|
Print Assumptions plus_id_exercise.
|
|
idtac "---------- mult_n_1 ---------".
|
|
Print Assumptions mult_n_1.
|
|
idtac "---------- andb_true_elim2 ---------".
|
|
Print Assumptions andb_true_elim2.
|
|
idtac "---------- zero_nbeq_plus_1 ---------".
|
|
Print Assumptions zero_nbeq_plus_1.
|
|
idtac "---------- identity_fn_applied_twice ---------".
|
|
Print Assumptions identity_fn_applied_twice.
|
|
idtac "---------- negation_fn_applied_twice ---------".
|
|
idtac "MANUAL".
|
|
idtac "---------- LateDays.letter_comparison_Eq ---------".
|
|
Print Assumptions LateDays.letter_comparison_Eq.
|
|
idtac "---------- LateDays.test_grade_comparison1 ---------".
|
|
Print Assumptions LateDays.test_grade_comparison1.
|
|
idtac "---------- LateDays.test_grade_comparison2 ---------".
|
|
Print Assumptions LateDays.test_grade_comparison2.
|
|
idtac "---------- LateDays.test_grade_comparison3 ---------".
|
|
Print Assumptions LateDays.test_grade_comparison3.
|
|
idtac "---------- LateDays.test_grade_comparison4 ---------".
|
|
Print Assumptions LateDays.test_grade_comparison4.
|
|
idtac "---------- LateDays.lower_letter_lowers ---------".
|
|
Print Assumptions LateDays.lower_letter_lowers.
|
|
idtac "---------- LateDays.lower_grade_A_Plus ---------".
|
|
Print Assumptions LateDays.lower_grade_A_Plus.
|
|
idtac "---------- LateDays.lower_grade_A_Natural ---------".
|
|
Print Assumptions LateDays.lower_grade_A_Natural.
|
|
idtac "---------- LateDays.lower_grade_A_Minus ---------".
|
|
Print Assumptions LateDays.lower_grade_A_Minus.
|
|
idtac "---------- LateDays.lower_grade_B_Plus ---------".
|
|
Print Assumptions LateDays.lower_grade_B_Plus.
|
|
idtac "---------- LateDays.lower_grade_F_Natural ---------".
|
|
Print Assumptions LateDays.lower_grade_F_Natural.
|
|
idtac "---------- LateDays.lower_grade_twice ---------".
|
|
Print Assumptions LateDays.lower_grade_twice.
|
|
idtac "---------- LateDays.lower_grade_thrice ---------".
|
|
Print Assumptions LateDays.lower_grade_thrice.
|
|
idtac "---------- LateDays.lower_grade_F_Minus ---------".
|
|
Print Assumptions LateDays.lower_grade_F_Minus.
|
|
idtac "---------- LateDays.lower_grade_lowers ---------".
|
|
Print Assumptions LateDays.lower_grade_lowers.
|
|
idtac "---------- LateDays.no_penalty_for_mostly_on_time ---------".
|
|
Print Assumptions LateDays.no_penalty_for_mostly_on_time.
|
|
idtac "---------- LateDays.grade_lowered_once ---------".
|
|
Print Assumptions LateDays.grade_lowered_once.
|
|
idtac "---------- test_bin_incr1 ---------".
|
|
Print Assumptions test_bin_incr1.
|
|
idtac "---------- test_bin_incr2 ---------".
|
|
Print Assumptions test_bin_incr2.
|
|
idtac "---------- test_bin_incr3 ---------".
|
|
Print Assumptions test_bin_incr3.
|
|
idtac "---------- test_bin_incr4 ---------".
|
|
Print Assumptions test_bin_incr4.
|
|
idtac "---------- test_bin_incr5 ---------".
|
|
Print Assumptions test_bin_incr5.
|
|
idtac "---------- test_bin_incr6 ---------".
|
|
Print Assumptions test_bin_incr6.
|
|
idtac "".
|
|
idtac "********** Advanced **********".
|
|
Abort.
|
|
|
|
(* 2026-01-07 13:18 *)
|
|
|
|
(* 2026-01-07 13:18 *)
|