]> matita.cs.unibo.it Git - helm.git/commitdiff
html documentation generation implemented
authorEnrico Tassi <enrico.tassi@inria.fr>
Sat, 18 Oct 2008 18:45:06 +0000 (18:45 +0000)
committerEnrico Tassi <enrico.tassi@inria.fr>
Sat, 18 Oct 2008 18:45:06 +0000 (18:45 +0000)
helm/software/matita/contribs/didactic/Makefile
helm/software/matita/contribs/didactic/induction.ma

index 68f956a2409243d025d36a4aa4b12b771d8d4499..f2aefca04a2ce8d9e10e9fea6d92e928116507ee 100644 (file)
@@ -17,3 +17,5 @@ depend.opt:
 exercise-%: %
        cp $< $@
        perl -ne 'undef $$/;s/\(\*BEGIN.*?END\*\)/.../msg;print' -i $@
+       (echo '<?xml version="1.0" encoding="UTF-8"?><html><head></meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css">pre, code { font-family: Sans; font-size: 1em; background-color:#efee79; } pre { margin-right: 5em;}</style></head><body>'; awk 'BEGIN { p = 0; } /DOCEND/ { p = 0; } { if (p == 1) print $$0; } /DOCBEGIN/ { p = 1;}' < $< | markdown; echo '</body></html>') > $@.html
+
index a4864b6efbc35b85852ae5baad8908edc8256f79..3b6d66519b22820cbb72f49430da32d1b3bce1b6 100644 (file)
@@ -19,7 +19,7 @@
 
    * compilare il questionario in fondo al file
    
-   * salvare il file (menu 'File ▹ Save as ...') nella directory (cartella)
+   * salvare il file (menu `File ▹ Save as ...`) nella directory (cartella)
      /public/ con nome linguaggi_Account1.ma, ad esempio Mario Rossi, il cui
      account è mrossi deve salvare il file in /public/linguaggi_mrossi.ma
 *)
@@ -31,28 +31,28 @@ Come scrivere i simboli
 
 Per inserire i simboli matematici è necessario digitare il loro nome
 e poi premere CTRL-L. In generale i nomi dei simboli sono della forma
-'\nome', ad esempio '\equiv'. Alcuni simboli molto frequenti hanno
-dei sinonimi più comodi da digitare, per esemio  ha sia il nome
-'\Rightarrow' sia '=>'.
+`\nome`, ad esempio `\equiv`. Alcuni simboli molto frequenti hanno
+dei sinonimi più comodi da digitare, per esemio `⇒` ha sia il nome
+`\Rightarrow` sia `=>`.
 
 Segue un elenco dei simboli più comuni e i loro nomi separati da virgola,
 Se sono necessari dei simboli non riportati di seguito si può visualizzare
-l'intera lista dal menù a tendina 'View ▹ TeX/UTF8 table'.
+l'intera lista dal menù a tendina `View ▹ TeX/UTF8 table`.
  
-* → : \to, ->
-* ⇒ : \Rightarrow, =>
-* ℕ : \naturals
-* ≝ : \def, :=
-* ≡ : \equiv
-* ∀ : \forall
+* `→` : `\to`, `->`
+* `⇒` : `\Rightarrow`, `=>`
+* `ℕ` : `\naturals`
+* `≝` : `\def`, `:=`
+* `≡` : `\equiv`
+* `∀` : `\forall`
 
-La sintassi '∀v.P' significa "per tutti i 'v' vale 'P'".
+La sintassi `∀v.P` significa "per tutti i `v` vale `P`".
 
-La sintassi 'F → G' dove 'F' e 'G' sono proposizioni nel metalinguaggio
-significa "'F' implica 'G'". Attenzione, il simbolo '⇒' (usato a lezione)
+La sintassi `F → G` dove `F` e `G` sono proposizioni nel metalinguaggio
+significa "`F` implica `G`". Attenzione, il simbolo `⇒` (usato a lezione)
 non ha lo stesso significato in Matita.
 
-La sintassi 'ℕ → ℕ' è il tipo delle funzioni che preso un numero naturale
+La sintassi `ℕ → ℕ` è il tipo delle funzioni che preso un numero naturale
 restituiscono un numero naturale. 
 
 La sintassi di Matita
@@ -65,53 +65,53 @@ di programmazione.
 
 * applicazione
 
-  Se 'f' è una funzione che si aspetta due argomenti, l'applucazione di 'f'
-  agli argomenti 'x' e 'y' si scrive '(f x y)' e non 'f(x,y)'. Le parentesi
+  Se `f` è una funzione che si aspetta due argomenti, l'applucazione di `f`
+  agli argomenti `x` e `y` si scrive `(f x y)` e non `f(x,y)`. Le parentesi
   possono essere omesse se il senso è chiaro dal contesto. In particolare
   vengono omesse quando l'applicazione è argomento di un operatore binario.
-  Esempio: 'f x y + f y x' si legge '(f x y) + (f y x)'.  
+  Esempio: `f x y + f y x` si legge `(f x y) + (f y x)`.  
  
 * minimo e massimo
 
-  Le funzioni 'min' e 'max' non fanno eccezione, per calcolare il 
-  massimo tra 'x' e 'y' si scrive '(max x y)' e non 'max{x,y}'
+  Le funzioni `min` e `max` non fanno eccezione, per calcolare il 
+  massimo tra `x` e `y` si scrive `(max x y)` e non `max{x,y}`
 
 * Le funzioni definite per ricorsione strutturale utilizzano il costrutto 
-  'let rec' (ricorsione) e il costrutto 'match' (analisi per casi).
+  `let rec` (ricorsione) e il costrutto `match` (analisi per casi).
 
   Ad esempio la funzione count definita a lezione come
   
-     count ⊤ ≝ 1
-     count (F1 ∧ F2) ≝ 1 + count F1 + count F2 
-     ...
+        count ⊤ ≝ 1
+        count (F1 ∧ F2) ≝ 1 + count F1 + count F2 
+        ...
      
   la si esprime come
   
-     let rec count F on F ≝ 
-       match F with 
-       [ ⊤ ⇒ 1 
-       | F1 ∧ F2 ⇒ 1 + count F1 + count F2 
-       ...
-       ].
+        let rec count F on F ≝ 
+          match F with 
+          [ ⊤ ⇒ 1 
+          | F1 ∧ F2 ⇒ 1 + count F1 + count F2 
+          ...
+          ].
        
 * Per dare la definizione ricorsiva (di un linguaggio) si usa una sintassi 
   simile a BNF. Per esempio per definire 
   
-    <A> ::= <A> "+" <A> | <A> "*" <A> | "0" | "1"
+        <A> ::= <A> "+" <A> | <A> "*" <A> | "0" | "1"
     
   si usa il seguente comando
   
-    inductive A : Type ≝
-    | Plus : A → A → A    
-    | Times : A → A → A   
-    | Zero : A
-    | One : A
-    .
+        inductive A : Type ≝
+        | Plus : A → A → A    
+        | Times : A → A → A   
+        | Zero : A
+        | One : A
+        .
      
-La ratio è che 'Plus' prende due argomenti di tipo A per darmi un A,
-mentre 'Zero' non prende nessun argomento per darmi un A. Al posto di usare
-operatori infissi (0 + 0) la definizione crea operatori prefissi (funzioni).
-Quindi (0+0) si scriverà come (Plus Zero Zero).
+La ratio è che `Plus` prende due argomenti di tipo `A` per darmi un `A`,
+mentre `Zero` non prende nessun argomento per darmi un `A`. Al posto di usare
+operatori infissi `(0 + 0)` la definizione crea operatori prefissi (funzioni).
+Quindi `(0+0)` si scriverà come `(Plus Zero Zero)`.
 
 DOCEND*)
 
@@ -144,8 +144,8 @@ inductive Formula : Type ≝
 (* Esercizio 2 
    ===========
 
-   Data la funzione di valutazione per gli atomi 'v', definire la 
-   funzione 'sem' per una generica formula 'F' che vi associa la semantica
+   Data la funzione di valutazione per gli atomi `v`, definire la 
+   funzione `sem` per una generica formula `F` che vi associa la semantica
    (o denotazione) 
 *)
 let rec sem (v: nat → nat) (F: Formula) on F ≝
@@ -171,16 +171,16 @@ let rec sem (v: nat → nat) (F: Formula) on F ≝
 
    if e then risultato1 else risultato2
    
-   Questa notazione permette di valutare l'espressione 'e'. Se questa
-   è vera restituisce 'risultato1', altrimenti restituisce 'risultato2'.
+   Questa notazione permette di valutare l'espressione `e`. Se questa
+   è vera restituisce `risultato1`, altrimenti restituisce `risultato2`.
    
-   Un esempio di espressione è 'eqb n m', che confronta i due numeri naturali
-   'n' ed 'm'
+   Un esempio di espressione è `eqb n m`, che confronta i due numeri naturali
+   `n` ed `m`
    
    * [[ formula ]]_v
    
-   Questa notazione utilizza la funzione 'sem' precedentemente definita, in 
-   particolare '[[ f ]]_v' è una abbreviazione per 'sem v f'.
+   Questa notazione utilizza la funzione `sem` precedentemente definita, in 
+   particolare `[[ f ]]_v` è una abbreviazione per `sem v f`.
 
 
    ATTENZIONE
@@ -201,24 +201,24 @@ interpretation "Semantic of Formula" 'semantics v a = (sem v a).
 (* Test 1
    ======
    
-   Viene fornita una funzione di valutazione di esempio chiamata 'v1101'
+   Viene fornita una funzione di valutazione di esempio chiamata `v1101`
    Tale funzione associa agli atomi 0, 1 e 3 un valore pari a 1,
    invece a 2,4,5,6... un valore pari a 0. 
    
-   Viene fornita una formula di esempio chiamata 'esempio1' che rappresenta
+   Viene fornita una formula di esempio chiamata `esempio1` che rappresenta
    la formula 
     
        D => (C ∨ (B ∧ A))
        
    Dove A è rappresentato con l'atomo 0, B con l'atomo 1, ...
    
-   Tale formula è valida per la funzione di valutazione 'v1101'
+   Tale formula è valida per la funzione di valutazione `v1101`
    
-   Il comando 'eval normalize [[ esempio1 ]]_v1101' permette di calcolare
-   la funzione 'sem' che avete appena definito. Tale funzione deve 
+   Il comando `eval normalize [[ esempio1 ]]_v1101` permette di calcolare
+   la funzione `sem` che avete appena definito. Tale funzione deve 
    computare a 1 (verrà mostrata una finestra col risultato).
    Se così non fosse significa che avete commesso un errore nella 
-   definizione di 'sem' e prima di continuare è necessario che la sistemiate.   
+   definizione di `sem` e prima di continuare è necessario che la sistemiate.   
 *)
 definition v1101 ≝ λx.
       if eqb x 0 then 1  (* Atom 0 ↦ 1 *)
@@ -236,8 +236,8 @@ eval normalize on [[ esempio1 ]]_v1101.
 (* Esercizio 3
    ===========
    
-   Definire la funzione di sostituzione di una formula 'G' al posto
-   degli atomi uguali a 'x' in una formula 'F'
+   Definire la funzione di sostituzione di una formula `G` al posto
+   degli atomi uguali a `x` in una formula `F`
 *)
 let rec subst (x:nat) (G: Formula) (F: Formula) on F ≝
  match F with
@@ -262,14 +262,14 @@ let rec subst (x:nat) (G: Formula) (F: Formula) on F ≝
 
   * F [ G / x ]
   
-  Questa notazione utilizza la funzione 'subst' appena definita, in particolare
-  la scrittura 'F [ G /x ]' è una abbreviazione per 'subst x G F'
+  Questa notazione utilizza la funzione `subst` appena definita, in particolare
+  la scrittura `F [ G /x ]` è una abbreviazione per `subst x G F`
   
   * F ≡ G
   
-  Questa notazione è una abbreviazione per '∀v.[[ f ]]_v = [[ g ]]_v'
-  Asserisce che for ogni funzione di valutazione 'v', la semantica di 'f'
-  in 'v' è uguale alla semantica di 'g' in 'v'.
+  Questa notazione è una abbreviazione per `∀v.[[ f ]]_v = [[ g ]]_v`
+  Asserisce che for ogni funzione di valutazione `v`, la semantica di `f`
+  in `v` è uguale alla semantica di `g` in `v`.
 
 
   ATTENZIONE
@@ -295,17 +295,17 @@ L'ultimo esercizio richiede di scrivere una dimostrazione. Tale dimostrazione
 deve essere scritta utilizzando il linguaggio di dimostrazione di Matita.
 Tale linguaggio è composto dai seguenti comandi:
 
-* 'assume nome : tipo'
-* 'suppose P (nome)'
-* 'by induction hypothesis we know P (name)'
-* 'we procede by induction on x to prove Q'
-* 'we procede by cases on x to prove Q'
-* 'case name'
-* 'the thesis becomes P' 
-* 'by name we proved P (name)'
-* 'conclude (P) = (Q) by name'
-* '= (P) by name'
-* 'done'
+* `assume nome : tipo`
+* `suppose P (nome)`
+* `by induction hypothesis we know P (name)`
+* `we procede by induction on x to prove Q`
+* `we procede by cases on x to prove Q`
+* `case name`
+* `the thesis becomes P` 
+* `by name we proved P (name)`
+* `conclude (P) = (Q) by name`
+* `= (P) by name`
+* `done`
       
 DOCEND*)