| name | char-utf8-thm |
| version | 1.0 |
| description | char-utf8-thm |
| author | Joe Hurd <joe@gilith.com> |
| license | MIT |
| provenance | HOL Light theory extracted on 2011-03-15 |
| show | Data.Bool |
⊦ Parser.isParser Data.Char.UTF8.decoder.parse
⊦ Parser.destParser Data.Char.UTF8.decoder = Data.Char.UTF8.decoder.parse
⊦ Parser.parse Data.Char.UTF8.decoder =
Parser.Stream.case Data.Option.none Data.Option.none
Data.Char.UTF8.decoder.parse
⊦ T
⊦ Data.Char.UTF8.decoder = Parser.mkParser Data.Char.UTF8.decoder.parse
⊦ ∀x. Parser.Stream.isSuffix x x
⊦ let = λf x. f x
⊦ ∀t. (λx. t x) = t
⊦ (∀) = λP. P = λx. T
⊦ ∀x. x = x ⇔ T
⊦ (⇒) = λp q. p ∧ q ⇔ p
⊦ ∀t. (t ⇔ T) ∨ (t ⇔ F)
⊦ ∀P x. P x ⇒ P ((select) P)
⊦ ∀f y. (λx. f x) y = f y
⊦ ∀x y. Parser.Stream.isProperSuffix x y ⇒ Parser.Stream.isSuffix x y
⊦ (∧) = λp q. (λf. f p q) = λf. f T T
⊦ (∃) = λP. ∀q. (∀x. P x ⇒ q) ⇒ q
⊦ ∀f g. f = g ⇔ ∀x. f x = g x
⊦ (∨) = λp q. ∀r. (p ⇒ r) ⇒ (q ⇒ r) ⇒ r
⊦ ∀PAIR'. ∃fn. ∀a0 a1. fn (Data.Pair., a0 a1) = PAIR' a0 a1
⊦ ∀t1 t2. (if T then t1 else t2) = t1 ∧ (if F then t1 else t2) = t2
⊦ (∀a. Parser.mkParser (Parser.destParser a) = a) ∧
∀r. Parser.isParser r ⇔ Parser.destParser (Parser.mkParser r) = r
⊦ ∀x.
x = Parser.Stream.error ∨ x = Parser.Stream.eof ∨
∃a0 a1. x = Parser.Stream.stream a0 a1
⊦ (∀b f. Data.Option.case b f Data.Option.none = b) ∧
∀b f a. Data.Option.case b f (Data.Option.some a) = f a
⊦ ∀p s.
Parser.parse p s = Data.Option.none ∨
∃b s'.
Parser.parse p s = Data.Option.some (Data.Pair., b s') ∧
Parser.Stream.isProperSuffix s' s
⊦ ∀p.
Parser.isParser p ⇔
∀x xs.
Data.Option.case T
(λ(Data.Pair., y xs'). Parser.Stream.isSuffix xs' xs) (p x xs)
⊦ (∀p. Parser.parse p Parser.Stream.error = Data.Option.none) ∧
(∀p. Parser.parse p Parser.Stream.eof = Data.Option.none) ∧
∀p a s.
Parser.parse p (Parser.Stream.stream a s) = Parser.destParser p a s
⊦ ∀t. (T ⇒ t ⇔ t) ∧ (t ⇒ T ⇔ T) ∧ (F ⇒ t ⇔ T) ∧ (t ⇒ t ⇔ T) ∧ (t ⇒ F ⇔ ¬t)
⊦ (∀e b f. Parser.Stream.case e b f Parser.Stream.error = e) ∧
(∀e b f. Parser.Stream.case e b f Parser.Stream.eof = b) ∧
∀e b f a s. Parser.Stream.case e b f (Parser.Stream.stream a s) = f a s
⊦ ∀b0 s.
Data.Char.UTF8.decoder.parse b0 s =
(if Data.Byte.bit b0
(Number.Numeral.bit1
(Number.Numeral.bit1 (Number.Numeral.bit1 Number.Numeral.zero)))
then (if Data.Byte.bit b0
(Number.Numeral.bit0
(Number.Numeral.bit1 (Number.Numeral.bit1 Number.Numeral.zero)))
then (if Data.Byte.bit b0
(Number.Numeral.bit1
(Number.Numeral.bit0
(Number.Numeral.bit1 Number.Numeral.zero)))
then (if Data.Byte.bit b0
(Number.Numeral.bit0
(Number.Numeral.bit0
(Number.Numeral.bit1 Number.Numeral.zero)))
then (if Data.Byte.bit b0
(Number.Numeral.bit1 (Number.Numeral.bit1 Number.Numeral.zero))
then Data.Option.none
else Parser.parse
(Parser.partialMap (Data.Char.UTF8.decoder.decode3 b0)
Data.Char.UTF8.parseThreeContinuationBytes) s)
else Parser.parse
(Parser.partialMap (Data.Char.UTF8.decoder.decode2 b0)
Data.Char.UTF8.parseTwoContinuationBytes) s)
else Parser.parse
(Parser.partialMap (Data.Char.UTF8.decoder.decode1 b0)
Data.Char.UTF8.parseContinuationByte) s) else Data.Option.none)
else let
(λpl.
let
(λpos.
let (λch. Data.Option.some (Data.Pair., ch s))
(Data.Char.mkChar (Data.Pair., pl pos)))
(Data.Char.mkPosition
(Data.Word16.fromBytes
(Data.Byte.fromNatural Number.Numeral.zero) b0)))
(Data.Char.mkPlane (Data.Byte.fromNatural Number.Numeral.zero)))