text:
Wednesday, February 1, 2017

January 2017 Reading Stats plus Audiobook Recommendations

In July last year, I started doing a monthly summary of my reading, which I then posted on my Litsy account. I've decided to start sharing it here too.

I spent over two weeks in New Zealand last month, which is reflected in the number of authors from that country.

There was a side trip to Australia during that time as well, which adds up to many hours in airplanes. I had expected I would have listened to more than eleven audiobooks, because that's how I prefer to pass the time when flying, but I guess it's because some of these were really long: I listened to 118 hours worth of audiobooks in January.

If you are looking for an outstanding audiobook, I gave 5 stars to three of them this month:
Evicted: Poverty and Profit in the American City (Matthew Desmond) - [Narrated by Scott Aiello; 11h 27m]
I first heard about this about a year ago from Michael Kindness on the Books on the Nightstand podcast and have been wanting to read it ever since. It's such an important, eye-opening book, and so full of heart. Please read it! I guarantee you will not feel the same way about poverty afterwards.
The Hidden Life of Trees: What They Feel, How They Communicate: Discoveries from a Secret World (Peter Wohlleben) - [Narrated by Mike Grady; 7h 33m; translation from German]
Quirky and fascinating. Scientific fact and fanciful musings. Some of the new research about how trees communicate with each other was also in Hope Larson's fabulous memoir, Lab Girl, one of my favourite audiobooks of 2016.
Claire DeWitt and the Bohemian Highway (Sara Gran) - [Narrated by Carol Monda; 9 h]
"With each day that passed something ugly was growing in me. I watched it grow. I fed it cocaine. I loved it and held onto it, kept it alive."
Gritty hipster noir set in San Francisco that's more about the deeply-troubled bisexual detective than the solving of her cases. Claire strives to help every underdog except herself, disregarding her own safety and wellbeing. Start with book 1, Claire DeWitt and the City of the Dead, then this. Then pray that Gran will write a third in the series.

More picks (four stars):
The Three-Body Problem (Cixin Liu) - [Narrated by Luke Daniels; 13h 26 m; translation from Chinese by Ken Liu]
At about the 3-hour mark, I considered abandoning this when I got a little bored. Then I got swept up in its epic scope. Wow. Harsh lives in mid-20th century China and folks who think maybe it would be a good idea for aliens to wipe out human civilization. Thought-provoking science fiction. The Remembrance of Earth's Past trilogy, Book 1.
The Reader (Traci Chee) - [Narrated by Kim Mai Guest; 12h 31m]
Fantasy adventure in a world where nobody reads. Except there is one magical book. Three storylines. Strong roles for women, including pirates and assassins. Love that the young people reject roles laid out for them and choose their own paths. Entertaining! Sea of Ink and Gold, Book 1.
Becoming Fluent: How Cognitive Science Can Help Adults Learn a Foreign Language (Richard Roberts and Roger Kreuz) - [Narrated by PJ Ochlan; 5h 34m]
I love learning languages and am currently refreshing my knowledge of Slovak. This excellent audiobook has reinforced what I already know works for me: a) learn spoken and written at the same time; b) short, daily time blocks of learning; c) practice remembering and using vocabulary while handling daily objects instead of labelling everything in the house. What I need to add: more visuals of people speaking the language. A cool thing I learned about was the McGurk effect. Watch this video and see how your brain does interesting things when sight and sound don't add up: Seeing Is Believing.
SPQR: A History of Ancient Rome (Mary Beard) - [Narrated by Phyllida Nash; 18h 30m]
"Many of our most fundamental assumptions about power, citizenship, political violence, empire, luxury and beauty have been formed and tested in dialogue with the Romans and their writing"
"The only genre of mainstream Roman literature that can claim an origin outside of the elite is the animal fable."
"A crucial aspect of any organized community is its ability to structure time. [...] The modern western calendar remains a direct descendant of this early Roman version, as the names we give our months show."
"Adoption in Rome had never been principally a measure for a childless couple to create a family. If anyone just wanted a baby, they could easily find one on a rubbish dump."
An engaging, often surprising, thousand-year chunk of Roman history. Beard makes many connections between ancient history and our modern era, like: "Then, as now, the easiest tactic for a government trying to reduce the pension bill was to raise the pension age."
Born to Run (Bruce Springsteen) - [Narrated by the author; 18h 16m]
"People don't come to rock shows to learn something, they come to be reminded of something they already know and feel deep down in their gut: that when the world is at its best, when we are at our best, when life feels fullest, then 1+1=3. It's the essential equation of love, art, rock 'n roll, and rock 'n roll bands."
I considered bailing on this early on because I was annoyed by Springsteen's overuse of cliche. For example, his father is such a misanthrope that he has no friends, so he "pours his heart out" to his teenaged son, because Bruce is "the only game in town." I'm glad that I stayed with it, however, because he's had an amazing life. I was particularly interested in what he shared about his own and his father's struggles with mental illness.
"My dad would explain to me that love songs on the radio were part of a government plot to get you to marry and pay taxes."
On Trails (Robert Moor) - [Narrated by Jason Grasl; 10h 38m]
"On wild land, wild thoughts can flourish. There, we can feel all the ragged edges of what we do not know and we can make room for other living things to live differently. We must learn to infuse this sense of the wild back into the human landscape. For instance, to see even the trees in our backyards as wild things, and to reframe our understanding of the wilderness so that it can contain us within it."
Environmental journalism, contemplative and wide-ranging. Understanding how humans interact with landscape and how social organization relies on physical ways to connect, from ancient pathways to contemporary long-distance hiking to Internet networks. Fascinating.

Hidden Figures Young Readers' Edition (Margot Lee Shetterly) - [Narrated by Bahni Turpin; 4h 11m]
Stories of African American women who have worked in aeronautical sciences since the 50s. Inspiring and enlightening. Suitable for the whole family, if you are planning a car trip.

Friday, January 27, 2017

2016: My Year in Books

Goodreads did this My Year in Books thing that's pretty cool.

To my faithful blog followers, I apologize for going completely silent here. I've been overwhelmed by unfinished drafts of book posts and I have been considering whether or not to stop blogging entirely. Since May of 2016, I've been spending most of my internet time on Litsy, a social media app for readers. Litsy has been satisfying my need to share quotes, comments and reviews. I really enjoy all of the interaction with other readers. I would be delighted to have you find me there (@Lindy).

What I miss about this blog is being able to quickly look back on my thoughts about previous books that I've read. Within the Litsy app, it can be done, but it requires a lot of scrolling to go back more than a month to find older posts. I'm not sure that I miss it enough to resume writing separate reviews here, but I might highlight my favourites at regular intervals.

Thank you again for following me at Lindy Reads and Reviews over the years. I started this project back in 2008 and have reviewed over 1,000 titles here. I'm not quite ready to say goodbye yet.

Saturday, July 23, 2016

Book Bingo Summer Reading Project 2016

The idea of Book Bingo is to have fun and expand your reading horizons. Michael Kindness and Ann Kingman of the Books on the Nightstand podcast created online bingo cards with all kinds of categories. If you want to play, go here: BOTNS and refresh the screen to get a new card. I decided to play two cards simultaneously, and started at the end of May. Card #1 is now complete - YAY! - with details below. There are 25 books, so I'll go row by row and make my descriptions brief.

Published the year you were born: The Leopard by Giuseppe Tomasi di Lampedusa, audiobook narrated by David Horovitch. English translation by Archibald Colquhoun published in 1960.
     - Unification of Italy in the 19th century, as experienced by a Sicilian prince. Tipping point of cultural and political change. Atmospheric with period details. Understated, elegant prose. Only book on my card that I would not have even known about if not for bingo-related research. It was a rewarding experience.

An academic/campus novel: Yabo by Alexis de Veaux.
     - Layered. Poetic. Mythic. Interwoven lives of two people existing across centuries, from the middle passage to colonial times to present day USA. Black women, lesbians, and a fabulous intersex character named Jules. So good! Parts are set at university in Buffalo, NY, where Zen has an affair with her professor, a Jamaican woman.

Published in 2015: You Too Can Have a Body Like Mine by Alexandra Kleeman, audiobook narrated by Kelly Pruner.
     - This satire of consumer culture is like a cross between Margaret Atwood's The Heart Goes Last and the Welcome to Nightvale podcast. Wonderful, weird, smart, funny. I remember bailing on this last year after a couple of pages because I wasn't in the right mood. So glad that I gave it another chance!

Recommended in a BOTNS episode: The Road to Little Dribbling: Adventures of an American in Britain by Bill Bryson, audiobook narrated by Nathan Osgood.
     - In episode 369, Ann said she had fun with this. So did I. Travel. Amusing trivia. Cranky humour. It's Bill Bryson, how can you go wrong?

Young Adult novel: Saving Montgomery Sole by Mariko Tamaki.
     - Monty is an endearing 16-year-old coping with mean girls and rude boys, making mistakes and finding forgiveness. Her parents are caring and in the forefront (rare in YA) and her parents are also lesbians (rare in any novel). I liked this a lot.

A novella: Trouble Is My Business by Raymond Chandler, audiobook narrated by Elliott Gould (who is perfect for this).
     - "I felt terrible. I felt like an amputated leg." Chandler's hard-boiled style cracks me up. "'...he should be there in 20 minutes.' 'Ok, that just gives me time to drink my dinner.'"

About a subject that challenges you: We Love You, Charlie Freeman by Kaitlyn Greening.
     - Wow. Thought-provoking and compelling. A Black family agrees to be studied while they raise a chimpanzee as a member of their family. Eugenics. Racism. Well-observed interpersonal dynamics. This one has zing and sting!

By any Booktopia* author: Silver Sparrow by Tayari Jones, audiobook narrated by Heather Alicia Simms and Rosalyn Coleman Williams.
     - "My father was a bigamist." One father, two mothers, two sisters. Audio switches to a different narrator when the storytelling switches between the two sisters at the midpoint. Black lives. Bittersweet and satisfying.
*Booktopia events are like mini writers festivals hosted by Michael and Ann at various bookstores over the past few years. BOTNS podcast listeners know about them; I attended one in Bellingham, Washington in 2013 and wrote about it here.

Hated by someone you know: The Vegetarian by Han Kang, translation from Korean by Deborah Smith.
     - Poetic. Surreal. Disturbing. Haunting. A short novel about transformation and other heady things. International Man Booker prizewinner. Some people I know through the books social media app, Litsy, hated it, as did reviewer Tim Parks in The New York Review. Loved isn't the right word for how I felt, but it had a strong impact on me. Spent days processing it after it was done.

Speculative fiction: ODY-C Vol. 1 Off to Far Ithicaa by Matt Fraction, Christian Ward etc.
     - I like the idea of this gender-swapped science fiction retelling of Homer's Odyssey better than its execution. Shades of Paul Pope's 100% and Fiona Staple's planet Sextillion from Saga. Prefer Gareth Hinds' graphic novel rendition of the Odyssey.

Humour or satire: Juliet Takes a Breath by Gabby Rivera
     - Gender pronouns. Radical queers. Racism. Intersectionality. Polyamory. So many issues, and yet this is a bubbly affirmation about finding one's truth. Delightful.

With an animal on the cover: Some New Kind of Slaughter, or, Lost in the Flood (and How We Found Home Again): Diluvian Myths from Around the World by Marvin Mann and A David Lewis
     - "Stories have the power to guide us through the dangers of the world to a fuller understanding of our place in it." Interwoven flood tales in graphic novel format. Powerful.

Free square in the middle: Kay's Lucky Coin Variety by Ann Y K Choi
     - Poignant coming-of-age, balancing traditional expectations of immigrant parents, long hours working in family's convenience store in dicey Toronto neighbourhood, and desire to assert independent identity. Well done. With "lucky" in the title, I had to use this for my free middle square!

Revolves around a holiday: From the Cutting Room of Barney Kettle by Kate De Goldi
     - I'd planned to use this for the 'Gifted to you' category - it's from my dear friend Claire in Auckland - but it turns out that this quirky tale of a New Zealand boy obsessed with filmmaking begins and ends with Christmas holidays one year apart. Took a while to draw me in, but things fell beautifully and cogently into place. The final 30 pages are outstanding and I cried at the end. So worthwhile!

With a mythological creature on the cover: Sorcerer to the Crown by Zen Cho, audiobook narrated by Jenny Sterlin.
     - Battling for women's rights... to perform magic in an alternate England. Excellent historical fantasy with people of colour as main characters.

Gifted to you: Public Library and Other Stories by Ali Smith.
     - Passionate about books and reading. Loops together unrelated thoughts into creative, profound fiction. Humane. Genius wordsmith. Ali Smith never fails to astound me. My friend Kathy ordered this direct from the UK in order to give it to me at Christmas six months ago. Somehow it got lost in my piles of books until now. So happy that book bingo made me go looking!

With a protagonist/narrator over the age of 50: Gourmet Rhapsody by Muriel Barbery, translation from French by Alison Anderson, audiobook narrated by Norman Dietz and five others; I love it when audio productions do this, especially when the narrative switches between points of view (including, here, a cat).
     - This short novel about a despicable restaurant critic longing for just the right taste before he dies is all about food. Since I've used a different book for that square, I'll  count it here. If there was a square for "made you salivate while reading" this would be perfect.

Recommended by a librarian or bookseller: The Regional Office Is Under Attack! by Manuel Gonzales, audiobook narrated by four different narrators as the perspective switches around; all are good and Natasha Soudek is my fave.
     - It's girls with superpowers trained as assassins, or not that but a secret organization battling evil, or not that exactly but fireballs of love and revenge, or maybe it's not that but something else entirely. Wild. Genre-bending. Loved it. Liberty Hardy from All the Books podcast recommended this.

With food as the theme: Love, Loss and What We Ate by Padma Lakshmi, audiobook narrated by author.
     - Memoir. Immigrant/international fashion model/celebrity chef/former wife of Salman Rushdie. Cooking has helped Lakshmi cope with hard times and she includes recipes. I'd like to try making her kumquat chutney when the fruit is in season.

A literary magazine or journal: Geist, Fall 2015.
     - This issue has an excerpt from Ivan Coyote's latest: Tomboy Survival Guide. It wasn't hard to get my hands on something for this category, since we have stacks of Geist, Eighteen Bridges and Room Magazine around the house.

Poetry collection: Shift by Kelly Shepherd.
     - Humble things: animals, trees, rubber tires, manual labour, even in the oil camps of Fort McMurray - all are transformed by grace in these compassionate, intimate poems. So lovely. "close to a fire, we no longer / see the night sky; we / are seated around a star."

A dark, upsetting, or sad book: The Lightkeepers by Abby Geni, audiobook narrated by Xe Sands.
     - As melancholy as can be (in the best possible way). Elegiac. Atmospheric. Nature, red in tooth and claw. A wildlife photographer mourns her mother during a year on an island bird sanctuary. Human behaviour is as interesting as that of any other creature.

With a blue cover: Sistering by Jennifer Quist.
     - (Trust me, the cover in person looks more blue than the image above.) Dark comedy. Chapters alternate between five sisters' points of view. Lots of domestic drama in my hometown, Edmonton. At one point, a sister was doing something that made me want to put my hands in front of my eyes so I didn't have to witness it, like I was watching a movie, saying no no no no no!

Sports-related: Night Work: The Sawchuk Poems by Randall Maggs.
     - Powerful and compassionate narrative verse captures soul of mid-20th century hockey and glimpses into psyche of one goalie. Terry Sawchuk takes stitches to his mouth without anaesthetic in order to stay in the game; hit in the shoulder by a 120 mph slapshot, he stands up and keeps playing; blocks all but 3 of 108 shots in back-to-back games (losing both) then is too tired to lift his hand to smoke; gets traded and traded again; plays for two decades. I felt something change inside me as a result of reading this book. That was unexpected, because I'm not a hockey fan.

Manga: Planetes, Vol 1, by Makoto Yukimura, translated by Tokyopop.
     - The opening scene in this character-based manga takes place on July 13, 2068, my 108th birthday! Three garbage collectors working in space. Traditional right-to-left Japanese comic format. Solid writing and appealing art.

Thank you for reading this very long post! I hope you will return for bingo card #2.

Tuesday, June 28, 2016

Best Fiction So Far in 2016

I've read 150 books so far this year. In an earlier post, I compiled my top 10 audiobooks, so this list is just for non-audio, narrowing things down even further by only including adult fiction. Here's a baker's dozen of favourites.

Overall Hands-Down Favourite:

At Hawthorn Time by Melissa Harrison [2015] - A cross between lyric nature writing and fiction. Storytelling that circles back to the opening scene via multiple points of view; broad cast of characters whose lives connect tangentially; references to myth within a realistic setting; close attention to the natural world; changes to a landscape through human activity over time. Beautiful prose.

Best Canadian Fiction Combining Elements of Music, Historical Fiction and Contemporary Realism (tie). I'd like to read more in this category, please:

Under the Visible Life by Kim Echlin [2015] - Alternating storylines. Women's lives in Afghanistan, Pakistan, Canada and USA. Mixed ethnicity. Female friendship. Opportunities taken/not taken. Jazz. "I was not lonely with Coltrane and Tyner inside me. I thought, 'This music is what marriage could be, playing solos at the same time and ending up together.'"

Do Not Say We Have Nothing by Madeleine Thein [2016] - "Don't ever try to be only a single thing, an unbroken human being." Three generations of individuals in China's tumultuous 20th century. Eloquent. Classical music. Tragedy. Survival.

Best Lesbian Novel (tie):

One Hundred Days of Rain by Carellin Brooks [2015] - Brief chapters chart inner and outer weather over the period of a messy lesbian break-up. Atmospheric. Made me glad I don't live in Vancouver.

Yabo by Alexis De Veaux [2015] - Layered. Poetic. Mythic. Interwoven lives of two people existing across centuries, from the Middle Passage to colonial times to contemporary USA and Jamaica. Black women, lesbians, shapeshifters, and one fascinating intersex character named Jules.

Best Historical Fiction (3-way tie). All three of these expanded my view of women's lives in other places and times:

Mrs. Engels by Gavin McCrea [2015] - Real historical figures: Karl Marx and Frederick Engels. Colourful first-person voice of Lizzie Burns, an illiterate Irish woman who grew up working in the nineteenth century mills of Manchester and became the common-law wife of Engels. Complex lives and a rich historical setting.

The Cosmopolitans by Sarah Schulman [2016] - It's a retelling of Honore de Balzac's Cousin Bette, set in 1950s New York City. I tried Cousin Bette and bailed  at the midway point, but that didn't stop me from diving into Schulman's latest novel. I love everything she writes. "Bette liked a novel whose insights into the human mind were not predictable and yet, upon revelation, were stunningly and obviously true." I like that kind of book too. A masterful novel just like this one.

Girl Waits with Gun by Amy Stewart [2015] - A small dispute with an unsavoury businessman escalates into a campaign of terror against a trio of unconventional sisters in 1914 rural New Jersey. Based on historical fact. Danger. Mystery. Comedy.

Best Contemporary Fiction (tie):

The Mare by Mary Gaitskill [2015] - A novel about people, not horses. Brief chapters, quick pace. Narrative alternates between Ginger, an Anglo alcoholic in upstate New York, and Velveteen, 11-year-old Brooklynite with a Dominican single mother. Everyone is negotiating emotional minefields.

The Portable Veblen by Elizabeth Mckenzie [2016] - Adorable! Lessons about being true to yourself. Warmth, wackiness and squirrels.

Best Speculative Fiction (tie). Both are blends of fantasy and near-future science fiction, with elements of environmental catastrophe. Both also happen to be steeped in queer sensibilities:

All the Birds in the Sky by Charlie Jane Anders [2016] - A couple of misfits take different paths as they grow up - will it take magic or technology to save the world? Ethics and responsibility. Exuberant. Whimsical. Hopeful. Refreshing.

The Gracekeepers by Kirsty Logan [2015] - Folkloric. Evocative. Quietly enchanting. A drowned world with most living on water and few on islands. A travelling circus. A self-imposed solitary existence. Forgiveness.

Best Short Story Collection:

American Housewife by Helen Ellis [2016] - Hilarious! Short stories interspersed with other short pieces; reminded me a bit of Rebecca Makkai but Ellis has her own sly style. The things her housewives get up to, you would not believe!

Wednesday, June 22, 2016

10 Best Audiobooks So Far in 2016

Out of the 48 audiobooks I've read so far this year, here are 10 of my favourites.

Overall Favourite:
Lab Girl by Hope Jahren [2016] - Loved this so much. SO MUCH! Natural science research, mental health, friendship. Clever comparisons between plant and human behaviours. "People are like plants, they grow towards the light. I chose science because science gave me what I needed - a home as defined in the most literal sense: a safe place to be." Audiobook is narrated by author and her voice catches with emotion at times. So many layers of wonderful, I could gush about it for a long time.

Best Nonfiction:
Far From the Tree: Parents, Children and the Search for Identity by Andrew Solomon [2012] - Important. Relationships between parents and offspring who are different from each other, i.e. down's syndrome, deaf, gay, prodigies, mentally ill, criminals, or transgender. It's long and it's fascinating and it has won awards. I listened to it and then also read it in print. Narrated by the author.

Best Memoir:
A Year of Yes: How to Dance It Out, Stand in the Sun and Be Your Own Person by Shonda Rhimes [2015] - Ebullient. Warm. Inspirational. Not ever having watched any of the television shows Rhimes created (i.e. Gray's Anatomy), I didn't know what to expect. I was astonished by the power of her story, and the impact is all the greater because the author narrates it herself.

Best Historical Fiction:
Queen of the Night by Alexander Chee [2016] - Enthralling. From the 19th century wild west to the opera stage in Paris, it's an operatic epic starring a woman who uses her wits and talent to survive numerous reversals of fortune. Made me want to hear the music of Puccini, Gounod and Verdi. Narrated by Lisa Flanagan.

Best Speculative Fiction (tie):
The Fireman by Joe Hill [2016] - Thriller. Near future. Dark humour. Plague of human spontaneous combustion. Narrated in the gorgeous voice of Captain Janeway: Kate Mulgrew.
The Regional Office Is Under Attack! by Manuel Gonzales [2016] - It's girls with superpowers trained as assassins, or not that but a secret organization battling evil, or not that exactly but fireballs of love and revenge, or maybe it's not that but something else entirely. Narrated by four excellent performers, including Natasha Soudek.

Best Short Story Collection:
Mothers Tell Your Daughters by Bonnie Jo Campbell [2015] - Rural noir. Gutsy. Gritty. Insightful. Droll. Narrated by the versatile Christina Delaine. Following is an excerpt from 'Daughters of the Animal Kingdom' -
"My students never believe me at first about the love dart, the gypsobelum, that needle-sharp arrow made of calcium or cartilage. A snail or slug will shoot the dart from its body like a hormone-slick porcupine quill to subdue the object of its desire. Sometimes they don't believe me until the quiz, though I've drawn love darts on the board and explained how they can be long enough to pierce a semi-slug's foot, pinning her to the ground. A love dart can take an eye out. In all fifty states, it is against the law for a person to shoot anything resembling a love dart at another person, but there is no such law protecting the daughters of the animal kingdom."

Best Children's Book (tie):
Pax by Sara Pennypacker [2016] - Loyalty, friendship, survival. Alternating storylines between a boy and his pet fox. Cost of war to both humans and animals. Dramatic. Heartbreaking. Narrated by the youthful-sounding Michael Curran-Dorsano.
Echo by Pam Munoz Ryan [2015] - Unique. Enchanting. A magical harmonica links several stories that are otherwise historical realism. Undesirables in Nazi Germany. Orphans in the American Great Depression. Migrant workers and Japanese-Americans in post-Pearl Harbor California. Four talented narrators plus musical recordings combine to make this an outstanding audiobook.

Best Essays:
Bad Feminist by Roxane Gay [2014] - A thought-provoking collection about definitions, human failings, and reconciling contradictions. Narrated by the talented Bahni Turpin.

Thursday, June 16, 2016

Edmonton Book Club Enjoys A Year of Reading Local Authors

Cassie (left) is now deceased. There's a new
Bichon in her place: Thor. Nenette is not so
much of a party dog since this photo, but
still takes a turn in each lap during meetings.
My friend Maureen and I started "Two Bichons Book Club" (because we both have Bichon Frise dogs) in 2009. Up until this year, the only criteria we've had in choosing books for our group has been that they are written by women. In January 2016, we embarked on a special project: A Year of Reading Local. We've been enjoying it very much, and not only because of the Edmonton settings. Some members have commented that they had never read a local author before and had no idea that there was so much talent right here in Edmonton.

January: A Wake for the Dreamland by Laurel Deedrick-Mayne
          Friendship. Self-sacrifice. Closeted gays. Pacifism during wartime. Mental health. A moving story about two very young soldiers and the woman who loves them both. The trio of friends are well-drawn and the many details of daily life during the 1930s and '40s make the setting vivid. Special highlight: the author graciously attended our meeting. That's one of the perks of reading local. It was so interesting to hear about her research and it also deepened our appreciation for this wonderful novel.

February: Rumi and the Red Handbag by Shawna Lemay
          Reflective. Ethereal. Secrets. Through working together, a friendship develops between two women of different ages and backgrounds. Slim in size, but mighty in content. Women were observed hugging this book during our meeting. We took turns reading aloud our favourite parts. Gorgeous prose!

March: The Unfinished Child by Theresa Shea
           Multiple storylines converge in this novel about children with Down syndrome. Changing views about disabilities across decades. Ethical dilemmas. This book provoked so much discussion! Members reported buying copies for friends and colleagues.

April: The Sicilian Wife by Caterina Edwards
          Mystery regarding a double fatality car crash is the hook in opening scene. Multiple timelines and settings. Mafia. Girl striving for independence within traditional Sicilian family. Chauvinism faced by female police officers. Dysfunctional families. Most of us liked this quite a bit but the member who read it in ebook found it hard to follow.

June: Prodigal Daughter: A Journey to Byzantium by Myrna Kostash
           Quest to learn why a Greek saint, known for killing Slavs, is popular with Slavic people. Memoir. Travel. Spiritual journey. I think I was the only member who made it all the way through this. Under 300 pages but dense with history and religion. On the plus side, I flagged many passages for discussion. Bonus: we shared a special Ukrainian meal in honour of the book.

July: Sistering by Jennifer Quist

October: A Profession of Hope: Farming on the Edge of the Grizzly Trail by Jenna Butler

November: Santa Rosa by Wendy McGrath

December: Good to a Fault by Marina Endicott

It has been fun discovering new authors and there are many other titles that we could add to this list. Our project is going so well that we are considering continuing with it next year.

Please look for Two Bichons on Goodreads if you want to see what else we've read over the years.

Sunday, May 1, 2016

At Hawthorn Time by Melissa Harrison

Melissa Harrison's novel At Hawthorn Time has captured my heart. These are some of the reasons:

  • Storytelling that circles back to the original scene via multiple points of view.
  • A broad cast of characters whose lives intersect mostly tangentially.
  • Internal lives that feel real, recognizable.
  • People who pay close attention to the natural world.
  • Documentation of changes to a rural area over time: human activity versus nature.
  • References to myth (the Green Man, Puck) within a contemporary setting.
  • Lyric language. The kind that makes me want to reread and underline and hug the book for being so beautiful.

"As the sun rose slowly over Jack's head a hawthorn in the hedge behind him felt the light on its new green leaves and thought with its green mind about blossom."

"The ash was hung here and there with lilac and green frills [...] and a slate-blue nuthatch decanted itself like a shot cork from a hole."

At Hawthorn Time is both nature writing and fiction. The closest readalikes I can think of are nonfiction: H Is for Hawk (Helen Macdonald) and The Old Ways: A Journey on Foot (Robert MacFarlane) - for engaging, poetic prose that places humans firmly within our natural world. A novel with similar elements of aging, myth, cyclic history, and of humans connecting with landscape is Etta and Otto and Russell and James (Emma Hooper).

I hope this is enough to convince you to read it. You will not regret it.


Content-Type: application/http; msgtype=response

WARC-Type: response

text:
Installing via USB or Netboot

I'm trying to install kfreebsd on a Eeepc via usb or netboot.

The documentation about both processes is wrong or incomplete:
Via usb: There is no "hd-media/boot.img.gz" as says the documentation
[0]. So, there is any way to do it?
Via netbot: Sections 4.5.1 and 4.5.4 [1] seems to be incomplete. After
unpack netboot.tar.gz into /srv/tftp/, I don't know what has to be the
value of "filename" in /etc/dhcp3/dhcpd.conf. So I try each file and
only got some kind of response with "grub2pxe". It says: "Welcome to
GRUB!" and just freeze instead of load installation menu.

Any idea? Thank you in advance.

PS: Sorry for my poor English ;-)

[0] http://www.debian.org/releases/stable/kfreebsd-i386/ch04s03.html.en
[1] http://www.debian.org/releases/stable/kfreebsd-i386/ch04s05.html.en

"I'm a carny. I live for games of chance." - Heroes 4x13

Antoni Villalonga i Noceras
#Bloc# ~> http://friki.CAT
#Jabber# ~> friki@bulmalug.net

Reply to:

warcinfo:
robots: classic
hostname: ip-10-171-10-108.ec2.internal
software: Nutch 1.6 (CC)/CC WarcExport 1.0
isPartOf: CC-MAIN-2017-09
operator: CommonCrawl Admin
description: Wide crawl of the web for February 2017
publisher: CommonCrawl
format: WARC File Format 1.0
conformsTo: http://bibnum.bnf.fr/WARC/WARC_ISO_28500_version1_latestdraft.pdf


text:
Re: so what? Re: Debian development modem

> A lot of the bugs are with a lot of packages that a lot of people don't use
> I have seen.  Perhaps we should consider moving away from versioned dists
> and move to a date-based dist in which all new packages start out in an
> unstable area and after some criteria is met (time for people using it to
> find bugs, any serious bugs being squashed) these packages could be
> considered stable...
There are a lot of people using packages every day that aren't formally
contributing to the testing project.

I have thought a (little) bit about a system along the lines you mention.
We could create a web page for every package in unstable that hasn't gone
into stable yet. When someone has installed a package, they could go to the
page for that package and fill out a form. The package can get into stable
only when certain criteria have been met. The criteria could depend on the
package. For a simple library, having 5 people install and use it (and fill
out the form) might be sufficient. A package with a lot more users might
require more responses, e.g. TeX needs 20 people to fill out the form.
A package which requires configuration (like smail) may not only need
a larger number of people to fill out the form, but a sufficient number
of people with each type of configuration (the form provides a list).

There are two problems with this. First is security. We want all users to
be able to fill out the forms, but how do we keep evil minded people from
ruining the results. Second, is designing a framework that is simple, but
accomplishes the required goals.

If simple is the right way to go, there could simply be a line in the
control file specifying the number of people that need to fill out the form
(with a positive response) before the package is allowed into stable.

There are a number of issues that I have intentionally ignored in this. I
am just throwing this out to see what people think.

Jay Treacy

To UNSUBSCRIBE, email to debian-devel-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

Reply to:


text:
Re: /run vs /var/run

On Friday 23 December 2005 10:48, Gabor Gombas <gombasg@sztaki.hu> wrote:
> On Thu, Dec 22, 2005 at 05:09:02PM +1100, Russell Coker wrote:
> > 368K is an issue on a machine with 8M of RAM, it's an annoyance if you
> > have 16M, beyond about 32M it stops being a problem.
> Yeah, and a new optimization step only takes a few thenth of a second and
> only a few extra KB of memory, so why not add it. And then everyone
> complains that newer gcc versions are far slower than 2.95 was, and some
> people can no more build complex applications due to the extra memory
> requirements. It was just 0.1% bloat every time...

If the changes make things better for people who have machines that are <5
years old then making them slightly worse for people with ancient hardware is
not a big deal IMHO.

Regarding building complex applications, there are lots of decently powerful
machines on the net that you can use for such things.  I've got a machine
with 2*P3-1GHz CPUs, 2*18G 10,000rpm U160 SCSI disks (and a couple more disks
available without cables), and a gig of RAM (might be able to find a second
gig) that I want to donate for such use.  All I need is a place to host it in
Melbourne (or someone who wants to pay postage to somewhere else that it can
be hosted).  It needs an ATX 2.0 PSU, but I'm sure I'll find someone willing
to donate that.  Incidentally it's the most powerful machine I've ever owned
and it's significantly faster in every way than the machines I use for my
regular work.  If it wasn't unreasonably noisy I'd run it at home.

The machine is aimed to be used as part of the nipl.net project (see
http://www.nipl.net for details).  There is an admin team ready to run it and
they want to use Debian.

> > Incidentally if 368K of memory is a problem for you then you should
> > probably stop using Ext3.  Ext2 uses less RAM (and that's RAM for
> > non-pagable data).
> I hope you've already packed the UPS you're sending me. Once I receive
> it, I'll gladly convert my ext3 filesystems to ext2. Until then please
> do not compare apples to oranges.

If you are concerned about what happens when a machine crashes then you should
want to have the commonly written transient files on a tmpfs.  Having a quiet
file system is the best way of surviving a sudden power failure.  Note that
there are many hardware issues related to power failure that ext3 can't fix.
Data journalling can help but not many people use that feature.

http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page

Reply to:


WARC-Truncated: length

text:
DecaPip Daily: 10/06/2015

The DecaPip Daily is my intraday outlook on the best Resistance and Support levels in the Forex market. Click here to see my DecaPip Weekly post.

With today’s DecaPip Daily I have decided to provide some very brief commentary for the Littlefish FX readers to explain what market levels I am looking for and why.

GBPUSD is showing some signs of being medium term Bullish. Therefore I have charted some far away resistance areas which seems the safer play when Cable is in this type of mood.

NZDJPY is very interesting so I thought I would include it in the DecaPip column today. With the Reserve Bank of New Zealand’s long-awaited interest rate announcement ,this pair should have significant movement before and after Wednesday’s event risk.

For more about DecaPip Daily and DecaPip Weekly, click here for a full introduction.

DecaPip Daily: 10/06/2015

  • Resistance 1.5540
  • Support 1.5315

Screen shot 2015-06-09 at 18.34.49 Screen shot 2015-06-09 at 18.46.13

  • Resistance 1 89.50
  • Resistance 2 90.60
  • Support 1 87.90
  • Support 2 86.50

Screen shot 2015-06-09 at 19.13.37 Screen shot 2015-06-09 at 19.14.44

Got any questions about our new DecaPip feature? Contact Nathan at


text:
Walking the Walk- DRAFT DAY!

Posted: August 14, 2011 in Fantasy Football

The league I write about in baseball also runs a 14-team football league that I write about during football season. Today is our. draft, and I will be blogging as it happens. Over the past couple weeks of mocks, I’ve noticed some interesting trends.

Michael Vick is a first round pick. Let someone else do that. I seem to end up with Malcom Floyd in a lot of drafts. He has an excellent QB, and the supposed top target in San Diego, Vincent Jackson can’t stay healthy. I also seem to end up with Marques Colston a lot. 1000 yards and 8 scores in the bank.

For anyone wondering, the football league has a roster of 16 plus two IR spots. We start one QB, two RB, one RB/WR, three WR, one TE, DST and K. There are six bench spots. We keep two per team. My keepers are Aaron Rodgers and Adrian Peterson… I know right? With so many receiver spots, I’ll probably be targeting two good ones early on. I also want to grab an elite TE.

Couple guys I’m taking late as fliers in recent mocks are Jacoby Jones, Ben Tate, Montario Hardesty… I really like James Jones in Green Bay, and see some upside for Reggie Bush. With my starting QB in place, I’ll probably wait until the later-mid rounds and grab a guy like with immense upside, but low value (*cough* Tebow *cough*). I also do like Kevin Kolb this year, but passers are overvalued in this league, so he will probably go too early.

The draft is at 5:15 EST.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


text:
A Limerick by Google Scribe

I was issued a challenge this morning. It came from Dr. Wicked, the man who brought us Write or Die — one of my favorite writing devices to help me get over self-inflicted writer’s block. If you like to write but get in your own way, please check it out.

The challenge was to use Google Scribe to write a story. I decided to write a limerick instead. Now I believe it’s safe to say that not even Google can help me be a better poet.

All in “bold” are contributions made by Google Scribe.

A Limerick by Google Scribe and Littlest Martha

There was once a man from nantucket coffee table.
It was not a well-known example of where people live but this man did.
His name was John Todd.
The following content has been identified by the YouTube community as being potentially offensive.

I’m not even sure how to end this. Maybe I should apologize.

Uh, sorry.


text:
Vancouver's Community-Driven Concert Calendar

  Bookmark and Share

Event Archive - Current Swell, Critical Element, Rogerthat

Fri. June 5th 2009 Richard's On Richards (No Minors)
$12 + service charge
Tickets at: Zulu Records, Ticketweb
Presented by: The Georgia Straight / The Peak, bfd presents...

No articles have been linked to this profile

Current Swell

Roots rock from the westcoast of canada. more info
[Upload Show Photos]  //   [Add Video]  //   [Add Review]  //   [Upload Poster]


text:
Views: [wrap][no wrap]   [headers]  [forward]
Messages in this thread
SubjectRe: Intel P6 vs P7 system call performance
On Mon, Dec 09, 2002 at 11:46:47AM -0800, you [H. Peter Anvin] wrote:
> SYSCALL is AMD. SYSENTER is Intel, and is likely to be significantly

Now that Linus has killed the dragon and everybody seems happy with the
shiny new SYSENTER code, let just add one more stupid question to this
thread: has anyone made benchmarks on SYSCALL/SYSENTER/INT80 on Athlon? Is
SYSCALL worth doing separately for Athlon (and perhaps Hammer/32-bit mode)?

-- v --
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 13:31    [W:0.247 / U:15.420 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site


text:
Archive for the 'video' Category

LFLFC Revisited – January 21, 2015 – 1:30 PM – C 210

CLC Presentation   LFLFC Revisited   When: January 21, 2015 Time: 1:30 PM Where: C 210 (2nd Floor Cobb)   Please join us on Wednesday January 21st, when Karma Ngodup (Tibetan Language) and Michael Berger (CLC) will review ways to use the Berkeley Language Center’s Library of Foreign Language Film Clips (LFLFC): starting with registering […]

LFLFC Revisited

March 6, 2013 @ 1:30 PM in C 210 (2nd Floor Cobb)   Michael Berger will review ways to use the Berkeley Language Center’s Library of Foreign Language Film Clips: from registering and logging on, to searching, and choosing clips to distribute to your students.   Refreshments

An Intro to iMovie

Wednesday, February 20th @ 12:30 PM in Cobb 211   Join the CSL’s Rod Edwards when he talks about basic video editing, using Apple’s most recent version of iMovie.   Refreshments

CSL Presentation – “Raising Cultural Awareness through Videos” and “YouTube in the Advanced Language Classroom”

February 13, 2012 @ 12:30PM in Cobb 210 (Cobb 2nd Floor)   Veronica Vegna and Ana Lima of Romance Languages will show the work they presented at the November 2011 ACTFL Conference: “Raising Cultural Awareness through Videos” (Vegna) and “YouTube in the Advanced Language Classroom” (Lima).   Veronica and Ana will also report on other presentations they […]

Using iMovie

Where: CSL Room: Cobb 210 Date: April 13, 2011 Time: 1:30 pm Tami Wysocki-Niimi will hold a demo on the basics of video editing using iMovie ’09. In this hour-long session Tami will cover importing video, basic video editing, subtitling, and options for exporting your edited video. (Please note: This presentation was originally scheduled for […]

YouTube Tip

For teachers who use YouTube videos in class or send the links of YouTube videos to students here is a tip that might make accessing specific portions of longer clips easier. This was published in the NYTimes today (2/10). When you copy the URL for the clip just add #t=MmSs to the end of the […]

Announcing Video Tutorial on the Use of the CSL’s Digital Camcorders

We are glad to announce a new video tutorial on the use of the CSL’s digital camcorders. The tutorial is accessible through the CSL’s web site. To view the tutorial go to: Before using a CSL camera teachers and students will be required to view this tutorial.

Panel Discussion about the Uses of Student Video Projects in the Foreign Language Class

Where: CSL Room: Cobb 201 Date: Thursday, October 29, 2009 Time: 2:30 pm The Center for the Study of Languages invites you to attend a panel discussion about the uses of student video projects in the foreign language class. The panelists are teachers of language from several departments at the University of Chicago: Jason Grunebaum […]

New Camcorder Demo and Training for Language Teachers

Where: CSL Room: Cobb 210 Date: November 4, 2009 Time: 2:30 p.m. The Center for the Study of Languages will demo recently purchased Sanyo digital camcorders. These video cameras replace the older Canon and JVC cameras, and like those will be used for pedagogical materials development projects and student class projects. On Wednesday, November 4, […]

Podcasts, Blogs, and more

Keep an eye on the development of various podcasts (audio and video), blogs, and more for use in language learning. has a nice listing of some podcasts. Also open iTunes on your computer and do a search for your languages in Podcasts at the iTunes store as well as new iTunesU offerings.

EthnicTV Network on the internet

I saw a post about this website recently: The premier Russian TV videos site, available in broadband, is on the Ethnic TV Network at: Superb, full-screen videos. Thousands of taped programs available in the archive. Thsi is a commercial site. Cost: $10 for 20 hours a month, $20 for 50 hours a month, $40 […]

DishNetwork in the CSL

Since June, the CSL has had DishNetwork satellite dishes ready to receive foreign language programming. We tested the system with German, Polish, and Russian television during the summer courses. We’ll be adding more programming in Autumn quarter. If you have an interest in programming we aren’t currently offering, talk to your language teacher, language coordinator, […]


text:
Bare Knuckle Pickups - Supermassive 90 Neck

By Bare Knuckle Pickups

$ 115.00 $ 130.00

Take a classic P90 design; add a totally modern edge with extra output and a richer tone and you arrive at the ultra progressive Supermassive 90.

The Supermassive 90 is designed for the modern rock guitarist wanting the fat, raw tone of a P90 with a strong voice and more output capable of really driving an amp and complex FX combinations.

Powered by custom size Alnico V magnets and with hand-wound coils of 43 AWG wire, the Supermassive 90 can handle huge amounts of preamp gain without ever sounding thin or losing definition. From light crunch through to colossal fuzz tones, low notes stay sharp and focused with massive bottom end while mids and highs are solid and punchy with the wide frequency response that only a single coil can give.

Even though the Supermassive 90 is designed for progressive applications the voicing will also be perfect for traditional blues and rock players looking for scorching, unadulterated soapbar tone too.

Ludlow Configuration:

  • Neck Position
  • Black Cover
  • Dog Ear Style

Neck DC:

9.5KΩ *
Alnico V

*all DC resistances are approximate

Share this


text:
Tag Archives: math

The essence of metastrategy

A recent post on Less Wrong, Levels of Action, reminded me of a game I created whose dynamics I wanted to explore. I still have not explored the dynamics to a great level of depth, but I thought it would be interesting to the nerdy community that reads my blog.

The idea came after playing Castle Wars 2. In that game you try to build your castle as tall as possible while keeping your opponents castle as short as possible. The basic game dynamic is an action/meta-action trade off: (oversimplifying) you can play a card to gain 10 bricks, or you can play a card to gain one brick per turn for the rest of the game. I was surprised by the amount of subtlety derived from such a simple dynamic, and I recommend the game to anyone wanting to kill an hour. It’s not the best game ever, but it’s not as trivial as it at first seems.

I wondered what would happen if I removed the cards, the weapons, the defense from that game and replaced them with more levels of this same dynamic. Here’s what I came up with.

You can play it with a chessboard and poker chips (my old game design standby). You don’t need 6 of the rows of the board. Each player plays on a side of the board, and has eight squares which we will label, from left to right, 1 to 8. Each square can have up to eight chips in it. The goal of the game is to get eight chips in the eighth square. Here is how play proceeds:

On your turn, place a single chip in any of your squares. Your opponent does the same. Before each turn, “cancel out” any chips that both players have on corresponding squares. That is, if you have 4 chips on the 5th square, and your opponent has 5 chips on the 5th square, remove 4 chips from both, so that you have none and your opponent has one. Then (still before your turn) duplicate each square to the next higher position and truncate down to 8. So before this action if your eight squares had these values:

0 0 1 4 5 2 0 3

Then after this action, the state of your board will be:

0 0 1 5 8 7 2 3

Another way to think about it is that you slide a copy of your board one position to the right and add (then truncate).

Then place your new chip, and your opponent takes his turn. That’s it. The first player to eight in the eighth square wins.

Despite this game’s simplicity, I have been unable to devise a good strategy for it. The strategy for the game seems to revolve around estimating the length of the game. If you know how many turns the game will last, it is fairly easy to determine how to play optimally. But knowing how long the game will last is not so easy to determine.

Try it out, think about it. Let me know if you discover anything.

Like this post?
Flattr this

I’m a student of the University of Colorado again. I’ve gone back to finish my bachelor’s in mathematics, which essentially involves fulfilling a bunch of core requirements. I’m going to start the discussion by mixing my experience of one class (religions of south Asia) with a concept from another class (connectedness from topology).

Last spring I took my (now ex-)’:girlfriend on a trip to Hawaii. While we were there, we attended a weekend immersive class on Sanskrit. The class was very “new-agey” — we chanted, meditated, in addition to learning Devanagari (the Sanskrit/Hindi alphabet) and something about Indian religion. The ideas combined with the approach fascinated and inspired me. I have never been much of a religious person; the religious ideas I had heard of always sounded a bit naive and silly. But this new approach gave me a glimpse of another way of looking at the world: the words of the Bhagavad Gita played with the gods, using them half as entities, half as concepts. The philosophical ideas, language, and religion we studied were clearly inseparable, all connected and synthesized into a single world view. Further, this world view seemed to incorporate my objections to the naivety of western world views — emphasizing the duality in all things, focusing not so much on right and wrong but on purpose and spirit, using the malleability and metaphor of truth.

My curiosity whetted, I enrolled in a class about Hinduism at the university. So far it has been a disappointment. What drew me to these ideas in the first place was the connectedness and duality — the yin and yang, so to speak — I perceived in the world view. And we have started by drawing thick lines categorizing the different approaches to divinity. An especially potent event in bringing to my attention my disappointment with the class occurred during our discussion of Bhakti. The professor began to describe the philosophy of Bhakti: that connecting with the divine is about love and devotion, that the details of ritual are not as important as a true spiritual devotion to god. Immediately after this description, the professor wrote on the board BHAKTI RITUALS. Um, teacher, did you not feel that just now? How did you build your immunity to cognitive dissonance?

We have been categorizing, deconstructing, analyzing this beautiful philosophy as if engineers. After the class I suspect I will know many facts, but have no understanding. If I were to talk to a yogi, he will consider me no closer to understanding his spirituality than any other American out of the hat. This is disappointing, since I don’t consider myself to have learned something until I understand it. We have a Hindu temple here in Boulder; I hope to find a way to study there and use the class as a supplement.

But why I am really writing this post is to help me to grip a vague sense I felt as I was processing after the BHAKTI RITUALS class. I am in a topology class this semester, and we are learning set-theoretic point-set topology. The constructivist in me winces every few minutes, lamenting the non-computability of everything we are discussing. I think the same cognitive orientation is fueling my dissatisfaction with the Indian religions class and my taste for constructivism. Classical mathematics seeks to separate the world into true and false, existence and nonexistence, equal and inequal. The inclusion of the law of excluded middle as obvious is evidence of this, as is the surprise felt by the mathematical world over Gödel’s incompleteness theorem. “What? We can’t eventually separate everything into two categories?!”

If you ask a set theorist whether ℕ = ℚ, they will probably say they are not equal (although have equal cardinalities). If you ask a type theorist whether ℕ = ℚ they will say “huh?”. The question cannot be answered, for we must consider what it means to treat 1 : ℕ as a ℚ, and we don’t know how to do that — not without a function that shows how. Indeed, in constructivism we have to be careful when talking about real numbers, since the set of observations matters, i.e. it matters how we look at them. And for any reasonable construction of the reals, their connectedness falls out of the constructivism of the theory: we cannot separate them into two categories in any way. A set theorist can, and has to define himself into a more realistic world where he can’t using the mechanism of topology.

Mathematicians are probably getting upset at me or thinking I’m an idiot. This isn’t a mathematical post, it’s philosophical, thus my fuzzy intuitive discussions. If you have the desire to leave an emphatic corrective comment at this point, maybe take a step back and try to make out the landscape with me. I don’t consider any of this true, I’m just trying to get a feel for the philosophically general idea of connectedness, outside of a particular formal system. I have the impression that we can think of the world — the real one or the mathematical one — this way and it might lead to a more accurate, if less “clear-cut”, way of thinking.

The pure untyped lambda calculus is connected in the Scott topology. This fact has fascinated me since I heard of it, trivial though it might be. We are used to adding traditional totally disconnected types to the lambda calculus and pretending bottoms don’t exist. I have been curious about what it would look like if we embraced this connectedness and extended lambda calculus with connected concepts. They may play more nicely in a connected system. I still have not made any concrete progress on this idea, but it appeals to me as potentially beautiful and powerful. Maybe we are computing in an awkward way without realizing it.

Did you like this post? Accelerate the flow of Karma :-) Flattr this

Searchable Data Types

A few years ago, Martín Escardó wrote an article about a seemingly-impossible program that can exhaustively search the uncountably infinite "Cantor space" (infinite streams of bits). He then showed that spaces that can be thus searched form a monad (which I threw onto hackage), and wrote a paper about the mathematical foundations which is seemingly impossible to understand.

Anyway, I thought I would give a different perspective on what is going on here. This is a more operational account, however some of the underlying topology might peek out for a few seconds. I’m no topologist, so it will be brief and possibly incorrect.

Let’s start with a simpler infinite space to search. The lazy naturals, or the one-point compactification of the naturals:

data Nat = Zero | Succ Nat
    deriving (Eq,Ord,Show)
infinity = Succ infinity

Let’s partially instantiate Num just so we have something to play with.

instance Num Nat where
    Zero   + y = y
    Succ x + y = Succ (x + y)
    Zero   * y = Zero
    Succ x * y = y + (x * y)
    fromInteger 0 = Zero
    fromInteger n = Succ (fromInteger (n-1))

We wish to construct this function:

search :: (Nat -> Bool) -> Maybe Nat

Which returns a Nat satisfying the criterion if there is one, otherwise Nothing. We assume that the given criterion is total, that is, it always returns, even if it is given infinity. We’re not trying to solve the halting problem. :-)

Let’s try to write this in direct style:

search f | f Zero    = Just Zero
         | otherwise = Succ <$> search (f . Succ)

That is, if the predicate worked for Zero, then Zero is our guy. Otherwise, see if there is an x such that f (Succ x) matches the predicate, and if so, return Succ x. Make sense?

And it seems to work.

ghci> search (\x -> x + 1 == 2)
Just (Succ Zero)
ghci> search (\x -> x*x == 16)
Just (Succ (Succ (Succ (Succ Zero))))

Er, almost.

ghci> search (\x -> x*x == 15)
(infinite loop)

We want it to return Nothing in this last case. It’s no surprise that it didn’t — there is no condition under which search is capable of returning Nothing, that definition would pass if Maybe were defined data Maybe a = Just a.

It is not at all clear that it is even possible to get what we want. But one of Escardó’s insights showed that it is: make a variant of search that is allowed to lie.

-- lyingSearch f returns a Nat n such that f n, but if there is none, then
-- it returns a Nat anyway.
lyingSearch :: (Nat -> Bool) -> Nat
lyingSearch f | f Zero = Zero
              | otherwise = Succ (lyingSearch (f . Succ))

And then we can define our regular search in terms of it:

search' f | f possibleMatch = Just possibleMatch
          | otherwise       = Nothing
    possibleMatch = lyingSearch f

Let’s try.

ghci> search' (\x -> x*x == 16)   -- as before
Just (Succ (Succ (Succ (Succ Zero))))
ghci> search' (\x -> x*x == 15)

Woah! How the heck did it know that? Let’s see what happened.

let f = \x -> x*x == 15
lyingSearch f
0*0 /= 15
Succ (lyingSearch (f . Succ))
1*1 /= 15
Succ (Succ (lyingSearch (f . Succ . Succ)))
2*2 /= 15

That condition is never going to pass, so lyingSearch going to keep taking the Succ branch forever, thus returning infinity. Inspection of the definition of * reveals that infinity * infinity = infinity, and infinity differs from 15 once you peel off 15 Succs, thus f infinity = False.

With this example in mind, the correctness of search' is fairly apparent. Exercise for the readers who are smarter than me: prove it formally.

Since a proper Maybe-returning search is trivial to construct given one of these lying functions, the question becomes: for which data types can we implement a lying search function? It is a challenging but approachable exercise to show that it can be done for every recursive polynomial type, and I recommend it to anyone interested in the subject.

Hint: begin with a Search data type:

newtype Search a = S ((a -> Bool) -> a)

Implement its Functor instance, and then implement the following combinators:

searchUnit :: Search ()
searchEither :: Search a -> Search b -> Search (Either a b)
searchPair :: Search a -> Search b -> Search (a,b)
newtype Nu f = Roll { unroll :: f (Nu f) }
searchNu :: (forall a. Search a -> Search (f a)) -> Search (Nu f)

More Hint: is searchPair giving you trouble? To construct (a,b), first find a such that there exists a y that makes (a,y) match the predicate. Then construct b using your newly found a.

The aforementioned Cantor space is a recursive polynomial type, so we already have it’s search function.

type Cantor = Nu ((,) Bool)
searchCantor = searchNu (searchPair searchBool)

ghci> take 30 . show $ searchCantor (not . fst . unroll . snd . unroll)

We can’t expect to construct a reasonable Search Integer. We could encode in the bits of an Integer the execution trace of a Turing machine, as in the proof of the undecidability of the Post correspondence problem. We could write a total function validTrace :: Integer -> Bool that returns True if and only if the given integer represents a valid trace that ends in a halting state. And we could also write a function initialState :: Integer -> MachineState that extracts the first state of the machine. Then the function \machine -> searchInteger (\x -> initialState x == machine && validTrace x) would solve the halting problem.

The reason this argument doesn’t work for Nat is because the validTrace function would loop on infinity, thus violating the precondition that our predicates must be total.

I hear the following question begging to be explored next: are there any searchable types that are not recursive polynomials?

Did you like this post? Flattr this

One true way

This post is a follow-up to my recent post programs are made of ideas. I received a lot of interesting comments and criticism on this philosophical exposition. But there is one in particular that caused me to deeply consider whether my argument made sense. It starts with this excerpt from the post:

Why constrain ourselves by forcing a fundamental idea? Must there really be a One True Way which forms a basis for everything else to be defined?

Surely the set of all the ideas we are capable of having forms a fundamental basis in which everything else can be defined. Or more concretely, it is presumptuous to think that our brains are so great as to not be constrained by some underlying system. We may not see the definitions of our ideas, but if our ideas can be said to exist at all, they have to have some expression in terms of something, right?

It is another thing entirely to wish to communicate that basis to a computer. Logicians will be quick to intuit that we would not be able to fully understand any system which forms the basis for our own thoughts (however, this intuition will be difficult to formalize unless our thoughts obey first order logic). And I’m pretty confident in saying that it isn’t first order logic, it isn’t lambda calculus, and it (still) isn’t actions on digital state machine1.

A perhaps clearer way of saying what I was trying to say is this: let the system in which we communicate our ideas be our slave, not our master. Think first, then decide which words will lead to the clearest explanation. We as software engineers, mathematicians, and even speakers of natural language have a tendency to give in to Sapir and Whorf. While we may not be capable of freeing our thoughts from our language2, we may be caving too easily. I felt a breath of fresh air when I noticed and cut the ropes tying me to lambda calculus and functional thinking.

It is a beautiful thing that most of these systems are Turing complete. I have never read the Church-Turing thesis as “C is Turing complete, so you might as well use C for all your programming tasks”. I read it almost the opposite way: “choose whatever language you want, because I can always write an interpreter for your language in my language”. Isn’t it great that we are able to choose between the uneasy handwaving of Perl and the frustrating precision of Agda?

I have always seen a programming language as a single core system for which ideas must be tailored. In other words, as a master. A current project of mine is to devise software development software that embraces the plurality of these systems: a way to tie together all these different methods of expression so that they can benefit each other. Let the language camps remain polarized, but let the computer do the arguing.

1 You might ask, “But what if we consider the brain to be a big digital state machine?” That is beside the point. By the time our consciousness gets hold of our thoughts, the mechanism used to implement them is long abstracted away. (Or perhaps not — maybe these thoughts are the result of a highly abstracted digital state machine, and with a different sort of brain we would have vastly different sorts of thoughts. That even seems likely. Hmm, food for… digital state machine operations.)

2 Nor may it be desirable — Bertrand Russell admired Giuseppe Peano for the clarity in which he could express thoughts using the then-novel idea of formal logic.

Did you like this post? Prove it! Flattr this

Programs are made of ideas

quietfanatic The fundamental unit of a computer program is not a function; it’s an action. CPUs don’t do lambda calculus; they follow procedures.

I saw this on twitter a couple days ago and responded with a jerk of my knee, only to commence a discussion1 in which I failed to accurately express my objection. So here is a full treatment.

First I would like to disclaim that I am not attacking quietfanatic in any way. His quote merely provides a convenient means to discuss a widespread pattern of thinking.

Before we start talking about fundamental units of X, it’s probably a good idea to get clear about what we mean by X (where X = computer program). Here are some of the possible definitions I can think of:

  1. A computer program is a pattern of memory intended to be read by a CPU — machine code.
  2. A computer program is an abstract specification for the behavior of the CPU when fed (to-be-determined) machine code.
  3. A computer program is the idea of its behavior. To illuminate what I mean by this, think of Firefox. What idea did you have just then? Was it of an abstract specification? A series of bits? I doubt it. You probably pictured a window browsing the internet or something like that. I’m talking about that kind of idea.
  4. A computer program is a state of a physical system. If it is not in a block of hard disk or ram somewhere, it cannot be considered to exist.

The difference between these is the level of abstraction at which they are defined. But importantly, they are all defined at some level of abstraction — which means that they are all just ideas. Perhaps (4) is not, depending on how concretely you see the world.

Here are some of the ways to think of how a program is run:

  1. The specification of the program is interpreted by some rules, resulting in some changes to physical things.
  2. The CPU deconstructs memory into a series of discrete instructions, which it then “performs” one after another.
  3. The computer is a system in which the states of some physical devices are coupled to a system of interacting voltages, some of which encode a program.

Again, they differ at the level of abstraction at which they are defined.

The way I read quietfanatic’s quote is talking about level (2) of the program and level (2) of the CPU. To me it says “CPUs perform instructions, so our abstract specifications of computer programs should be (ultimately) in terms of instructions”. With that phrasing there seems to be a wide logical gap between the two clauses. Why does the language we use for abstract specification have to correspond to one particular abstract conception of how a CPU works?

By permuting my list of interpretations, I can construct many plausible quotes that follow the same logic. “The fundamental unit of a computer program is a rule, since the program is ultimately interpreted as rules” or “the fundamental unit of a computer program is a voltage, since voltages are ultimately what drive the devices.”

But my objection is larger than this fallacy. To me, and I presume to most software developers, programs are made of ideas. When thinking about programming languages, we are looking for a way to express our ideas in a way that the computer can approximate them. Our ideas form the central theme, not the mechanisms that approximate them.

What is the fundamental unit of a number? How about of a web page? A shape? A set? A cursor?

All these things are ideas, each of which has many different lights under which it can be viewed, each of which may give a different answer about a “fundamental unit”. But ultimately ideas are not defined in terms of anything — we use definitions to grasp how our ideas connect to each other. Some might say that the fundamental unit of mathematics is the set, but when I think about a triangle, I’m sure not thinking about sets.

I am unable to see how computer programs are any different. Why constrain ourselves by forcing a fundamental idea? Must there really be a one true way which forms a basis for everything else to be defined? In the historical development of mathematics, our ideas have had a shifting fluid foundation, each generation bringing a new way to think about the same things. Currently the evolution of programming languages is serving as our shifting foundation. Let’s use our full vocabulary of ideas to express programs, and try not to limit our concepts’ true breadth and beauty by telescoping in on what they mean in terms of a fixed basis.

This article is reflecting a change in thought that I am going through right now. After a lot of time being committed to the lambda calculus, finding ways to construct the naturals out of some pretty-looking set of primitives, devising ways to abolish imperative thinking and embrace functional thinking, I realized that I was lost in a world of details. Everything I did and thought was coupled to the fundamental system I was creating.

It is dawning on me that the fundamental system is merely a means to express my ideas, and the true beauty is in the ideas themselves. My denotationalism fades as I perceive that most of my mental structures are intrinsic. They are not defined in terms of anything and they have no denotation other than themselves. There are ways to model those ideas, but I am suddenly being careful not to confuse the model with the idea itself.

1 To the extent that a series of tweets can be considered a discussion.

Did you like this post? Show, don’t tell Flattr this

Associative Alpha Blending

I recently revamped my graphics-drawingcombinators module to have a handsome denotational semantics. I may write a post going into full detail later, but the executive summary is that Image a = R2 → (Color, a). Due to TCM, I get semantics for Image’s Functor instance from this, and if Color is a monoid I get the semantics for the Applicative and Monoid instances as well. OpenGL combines colors by alpha blending, so I happily defined my monoid instance as alpha blending:

 mempty = Color 0 0 0 0
 mappend c@(Color _ _ _ a) c' = a*c + (1-a)*c'

It doesn’t take a genius to see that this violates two of the three monoid laws (the only one it satisfies is left unit: mempty `mappend` x = x). This is embarrassing. My new rigorous denotational semantics has a pretty awesome flaw.

To make this right, let’s redefine Color not as something which is drawn, but as a transformation on alpha-free colors. I do this because functions make great monoids: composition is always associative and identity is always a unit. But it’s not just any function, it’s an alpha blending function. So we say that f is a “Color” if there exists constants a and x such that f(c) = a x + (1-a) c, which I will write as f = [a; x]. Here a is a scalar and x is another alpha-free color like c. We would really like it if the composition of two Colors were also a Color. Let’s try:

f(g(c)) = [fa;fx]([ga;gx](c))
        = fa fx + (1 - fa) ([ga;gx](c))
        = fa fx + (1 - fa) (ga gx + (1 - ga) c)
        = fa fx + (1 - fa) ga gx + (1 - fa) (1 - ga) c
        = fa fx + (1 - fa) ga gx + (1 - fa - ga + fa ga) c
        = (fa fx + (1 - fa) ga gx) + (1 - (fa + ga - fa ga)) c

It looks like the “alpha” of our composition is (fa + ga – fa ga). Let’s call this a’. Now we have to get the left side of the addition into the form a’ r for some r. Let’s just hack it: multiply and divide1 by a’.

        = a' (fa fx + (1 - fa) ga gx) / a' + (1 - a') c

And then we can read off the answer:

[fa;fx] . [ga;gx] = [a' ; (fa fx + (1 - fa) ga gx) / a']
   where a' = fa + ga - fa ga

For the identity, we need:

a x + (1 - a) c = c

Which is satisfied for a = 0 with x = anything, so we can use [0,0].

Because we derived this from composition and identity, the laws must hold. The mathematically untrusting may wish to check this.

And there you have it: my new Color monoid which actually satisfies the laws. This is the way to compose alpha-blended colors — it reflects what happens if you draw one after the other, blending as you go. This is the math that pre-blends any segment of that sequence.

I should have known that OpenGL’s colors were transformations all along, since the color of an object that you see can depend on the color you used to clear the screen.

1 But what if (fa + ga – fa ga) = 0? Fortunately, the only place this happens when these variables are between 0 and 1 is fa = ga = 0, which means both f and g are the identity color.

Maximum entropy and negative probability

I have recently become fascinated with the concept of maximum entropy distributions, and went back and read Dan Piponi’s post on negative probabilities, and link surfing from there. Something sparked and I wondered what kind of connection there is between the two. A little experimenting in Mathematica later and I’m on to something curious.

First, a little background. E.T. Jaynes argues (so I have heard, I have not read the original) that if you have a set of constraints on a set of random variables and you would like a probability distribution over those variables, you should choose the distribution that has the most information entropy, as this is the “least biased” distribution.

The entropy of a distribution is defined as: H = -\sum_i{p_i \log{p_i}}.

I am using Dan’s example, and I will quickly recapitulate the situation. You have a machine that produces boxes of ordered pairs of bits. It is possible to look at only one bit of the pair at a time, say each bit is in its own little box. You do an experiment where you look at all the first bits of the boxes, and it always comes out 1. You do a second experiment where you look at the second bit of the boxes, and it, too always comes out 1.

Now, most reasonable people would draw the conclusion that the machine only produces boxes containing “1,1”. However, if we wholeheartedly believe in Jaynes’s principle, we have to look deeper before drawing a conclusion like that.

The 4 probabilities we are interested in correspond to “0,0”, “0,1”, “1,0”, “1,1”. I will write them as 4-vectors in that order. So an equal chance of getting any combination is written as 1/4 <1,1,1,1>.

For the distribution <a,b,c,d>, our constraints are: a+b+c+d = 1 (claiming our basis is complete), c+d = 1 (the first bit is always 1), b+d = 1 (the second bit is always 1).

The “reasonable” distribution is <0,0,0,1>, which indeed satisfies these constraints. The entropy of this distribution 0 (taking x log x = 0 when x = 0) — of course, there is no uncertainty here. But are there more distributions which satisfy the constraints?

Well, if you require all the probabilities to be positive, then no, that is the maximal entropy one, because it is the only one that satisfies the constraints. But let’s be open-minded and lift that requirement.

We have to talk about what the entropy of a negative probability is, because log isn’t defined there. The real part is perfectly well defined, and the imaginary part is multi-valued with period 2π. I’m not experienced enough with this stuff to make the right decision, so I’m blindly taking the real part for now and pretending the imaginary part is 0, since there’s really no reasonable “magnitude” it could be.

Whew, okay, almost to the fun stuff. We have four variables and three constraints, so we have only 1 degree of freedom, which is a lot easier to analyze than 4. We can express the distribution with only that one degree d as:

<d-1, 1-d, 1-d, d>

And here is a plot of the real part of the entropy as a function of d:

It achieves a maximum at d = 1/2, the distribution <-1/2, 1/2, 1/2, 1/2>, the same one Dan gave. In some sense, after observing that the first box is always 1 and, separately, that the second box is always 1, it is too biased to conclude that the output is always “1,1”.

I would like to patch up the “real part” hack in this argument. But more so, these exotic probability theories aren’t really doing it for me. I would like to understand what kinds of systems give rise to them (and how that means you must interpret probability). My current line of questioning: is the assumption that probabilities are always greater than 0 connected to the assumption that objects have an intensional identity?

I would love to hear comments about this!

Recursive Types in IΞ

In the last IΞ post, I introduced the calculus and sketched the construction of some standard mathematical objects. In this post, I will dive a little deeper and construct of all the positive recursive types. The proof will be in an informal style (in particular, omitting the H constraints), but I have little doubt that the proof will go through.

Only a superficial familiarity with IΞ is needed to understand this proof; I adopt a set-theoretic style notation, so the proof should be approachable. Here’s a quick refresher of the primitives of IΞ.

  • Membership is application, so when I write x \in A, this is translated into IΞ as A x. Thus sets, unary predicates, and types are all the same thing.
  • Because membership and application are identified, universal quantification and the subset relation are also. \Xi A B means “A is a subset of B”, or “x in A implies x in B”. In particular, the pattern \Xi A (\lambda a. P a) can be interpreted as “for every a in A, P a”.
  • L is the set of all sets (whose existence does not lead to a contradiction in this system!). I will give its definition at the end of the article.
  • Other symbols have their usual interpretation, and I’ll include an appendix which gives them all precise definitions at the end.

Definition: A function F : L \mapsto L is called monotone if A \subseteq B \Rightarrow F A \subseteq F B.

Intuitively, the monotone functions correspond roughly to the functors in Haskell; they use their parameter in a positive way (appear to the left of an even number of arrows).

Definition: The type recursion combinator μ is defined as: x \in \mu F = \forall P\!\in\!L.\, F P \subseteq P \Rightarrow x \in P.

We are allowed to define things simply by giving a condition for membership like this. Formally, this definition starts out: \mu = \lambda F. \lambda x. \Xi L (\lambda P. \dots)

This definition intuitively says, x is in μ F if x is in every type closed under F. We will see that this definition corresponds to a type recursion combinator.

Lemma 1: If F is monotone, then F (\mu F) \subseteq \mu F.

Proof. Given x \in F (\mu F); show x \in \mu F. Expanding the definition of μ above:

Given P \in L, F P \subseteq P; show x \in P.

Observe \mu F \subseteq P: Suppose y \in \mu F, show y \in P. Since y \in \mu F, we have \forall P'\!\in\!L.\, F P' \subseteq P' \Rightarrow y \in P' by definition of μ. Letting P' = P, we have F P \subseteq P from above, so y \in P.

Therefore, x \in F (\mu F) \subseteq F P \subseteq P (by the monotonicity of F and \mu F \subseteq P). QED.

Now for the easy direction:

Lemma 2: If F is monotone, then \mu F \subseteq F (\mu F).

Proof. Given x \in \mu F; show x \in F (\mu F).

By the definition of μ, we have \forall P\!\in\!L.\, F P \subseteq P \Rightarrow x \in P. Let P = F (\mu F). We have F P = F (F (\mu F)) \subseteq F (\mu F) =  P by monotonicity of F and Lemma 1, therefore x \in P = F (\mu F). QED.

Which leads us to the recursion equation.

Theorem: If F is monotone, \mu F = F (\mu F). (Proof trivial by the two lemmas)

I’m using set equality here, i.e. mutual containment, which is probably a bit weaker than Leibniz equality. It is obvious from the definition that this fixed point is minimal.

Monotonicity is easy to prove for any of the standard positive types (products, coproducts, functions). So we can model a good variety of Haskell data types already; however these are standard inductive (least fixed point) types, no infinite structures allowed. I’m still working on the encoding and analogous proofs for ν (greatest fixed point), which is closer to Haskell.

Hopefully I’ll be able to port many libraries (maybe after a few totality annotations) without having to worry about partiality. But there are more pressing matters, such as finishing my interactive proof assistant for IΞ.

  • \text{True} = \Xi H H, the True proposition.
  • K x y = x, the constant function.
  • U = K \text{True}, the set of all objects.
  • (f \circ g) x = f (g x), function composition.
  • (a \mapsto b) f = \Xi a (b \circ f), the set of functions from a to b.
  • L = U \mapsto H, the set of all sets.
  • a \Rightarrow b = \Xi (Ka) (Kb), implication.
  • \Lambda f x = \Xi L (\lambda t. f t x), universal quantification of types (like forall in Haskell)
  • a \times b = \Lambda (\lambda r. (a \mapsto b \mapsto r) \mapsto r), product type.
  • a \oplus b = \Lambda (\lambda r. (a \mapsto r) \mapsto (b \mapsto r) \mapsto r), coproduct type.

Some Constructions in IΞ

Over the past couple months, I have been attempting to find a language to use as a core calculus for Dana, as anyone who follows this blog knows. I have been slowly converging on IΞ for its elegance and simplicity. It turns out to be very powerful, capable of modeling many structures while avoiding many of the paradoxes typically involved with those structures. In this post, I give an exposition of IΞ and construct some common structures.

The main idea is to use lambda calculus for all of our symbol manipulation needs, adding a constant Ξ for quantification. “Types” are unary predicates, so membership is application. For example, “Nat 0” is a proposition saying that 0 has type Nat (where 0 and Nat are given previous definitions somewhere).

ΞXY means “forall x, if X x, then Y x”, or, if you think of predicates as sets, simply “X is a subset of Y”. So if we have types Nat and Bool, we can say that f has type Nat → Bool with “ΞNat(\x. Bool (f x))”, read “forall x in Nat, f x is in Bool”. Very direct, is it not?

System I

Interpreting these meanings directly, we arrive at Curry’s System I, whose rules follow. A proposition (sequent) has the form “Γ |- X”, which has the interpretation “assuming Γ, X is provable”.

Γ |- X   ⇐  X ∈ Γ
Γ |- Y   ⇐  Γ |- X  ;  X is βη convertible with Y
Γ |- YZ  ⇐  Γ |- XZ  ;  Γ |- ΞXY
Γ |- ΞXY ⇐  Γ,Xa |- Ya  ;  a does not occur free in X,Y,Γ

I have stated the rules as “to prove X, you need to prove Y”, because that’s kinda how my brain works. Take a moment to internalize them. They are obvious given the above intuitions, and shouldn’t be hard to read.

On top of this, we can build propositional calculus. Define “K = \x. \y. x”, and write “X ⇒ Y” as shorthand for “Ξ(KX)(KY)”. This system has the properties you would expect of a simple propositional calculus.

Sadly, this system is inconsistent. We can prove any proposition X:

  Let Y = (\x. x x ⇒ X) (\x. x x ⇒ X)
  Observe that Y = Y ⇒ X.
  [1] Y |- Y
  [2] Y |- Y ⇒ X
  [3] Y |- X      -- modus ponens on [1],[2]
  [4] |- Y ⇒ X
  [5] |- Y
  [6] |- X        -- modus ponens on [4],[5]

Martin Bunder had a brilliant idea to block this paradox, and also many others, which brings us to the object of my infatuation:

System IΞ

The crucial step above was [3]-[4], where we abstracted over the infinite proposition “((… ⇒ X) ⇒ X) ⇒ X”. The way we will block this is to only allow abstraction over finite propositions. Introduce a new symbol, H, such that HX means “X is a finite proposition” (or simply “X is a proposition”). We will derive finiteness from the finiteness of proofs: to prove HX, we first have to prove H of each component of X. Our system becomes (the new additions are in bold):

Γ |- X      ⇐  X ∈ Γ
Γ |- Y      ⇐  Γ |- X  ;  X is βη convertible with Y
Γ |- YZ     ⇐  Γ |- XZ  ;  Γ |- ΞXY
Γ |- ΞXY    ⇐  Γ |- H(Xa)  ;  Γ,Xa |- Ya     ;  a does not occur free in X,Y,Γ
Γ |- H(ΞXY) ⇐  Γ |- H(Xa)  ;  Γ,Xa |- H(Ya)  ;  a does not occur free in X,Y,Γ
Γ |- H(HX)

The final rule is an axiom, simply saying that “X is a proposition” is always a proposition.

Constructing the Naturals

Now I will embark on constructing the type of naturals. Since types are predicates, I also need to come up with a representation for naturals. It turns out that it doesn’t matter what representation I use, as long as it has zero and a 1-1 successor function. For the sake of discussion, let’s use the Church encoding.

  0 = \f. \x. x
  S n = \f. \x. f (n f x)

So a natural is an iteration function. For example, the number 3 iterates a function 3 times on its argument: 3 f x = f (f (f x)).

Coming up with a way to classify all of these, but not any others (such as infinity f x = f (f (f (f (f ...))))), was quite a challenge. You might try to classify these function on the property that they are an iteration function, but any sensible method of doing that ends up including infinity. I began thinking that IΞ was not strong enough, and looking for ways to enrich it by adding more axioms.

Fortunately, no new axioms are necessary! The encoding is obvious in retrospect. What is the first thing a mathematician thinks when you talk about the naturals: induction! Let’s define a natural as any object which you can do induction (with 0 and S) over.

To make this readable, we need to introduce a few more symbols:

    f . g = \x. f (g x)   -- composition
    A → B = \f. ΞA(B . f)   -- the type of functions from A to B
    True = ΞHH    -- the true proposition
    U = K True    -- the type of all objects (mnemonic: universe)
    L = U → H  -- the type of predicates/types

Now, for the naturals:

    Nat x = ΞL(\p. p 0  ⇒  ΞU(\n. p n ⇒ p (S n))  ⇒  p x)

Reading this in English: “x is a Natural if, for all predicates p, if p 0, and p n implies p (S n), then p x”. In other words, x is a natural if you can do induction up to it.

Exercise: prove |- Nat 0 and |- (Nat → Nat) S. Note that this can be done independent of our definitions of 0 and S.

More Inductive Constructions

Using this scheme, we can construct all sorts of things. For example, equality:

    Eq x y = ΞL(\p. p x ⇒ p y)

    nil = \n. \c. n
    cons x xs = \n. \c. c x xs
    List a x = ΞL(\p. p nil  ⇒  ΞU(\ys. p ys ⇒ Ξa(\y. p (cons y ys)))  ⇒  p x)

There is a classic paradox involving the inductive type Set = Set → H, which is definable using this scheme:

    Set x = ΞL(\p. Ξ(p → H)p ⇒ p x)

However, as I tried to prove the inconsistency, I was blocked by the H rules. This gives me hope.

Coinductive Constructions

It is also possible to construct coinductive types. Here are the “conaturals”, the naturals with infinity. We can’t use the constructor definition anymore; coinductive types are all about projections. So the conaturals have only one projection, onto a disjunction. So to eliminate a conatural n, you pass it what to do if n = 0, and what to do with n’ if n = S n’. For example, to check if a conatural is zero, you can use n True (K False).

   CoNat x = ΞL(\p. Ξp(\y. y True p) ⇒ p x)

In English: x is a conatural if for all predicates p, if p y implies y True p, then p x. y True p can be interpreted as y = 0 or y = S n and p n.

Isn’t IΞ cool? Simple, obvious, but powerful enough to model a wide class of data (and codata). The thing I like best about it is that it is untyped at its core. Functions are just pure lambda calculus functions that we are “later” proving properties about. Type erasure comes for free (well, sortof: encoding dependent types into this system will end up passing types as parameters at runtime, even though they are never used).

Future Concerns

Bunder proved his version of IΞ consistent and complete. But the rules I gave, and that I have been using, are not his, and in fact are more powerful than his. This makes it possible that my rules are inconsistent. My system can prove LL, while his cannot. This worries me, because LL in the typical interpretation means “Type : Type”, which gives rise to the Burali-Forti paradox. However, even though I was able to encode the infrastructure for Russell’s paradox, I was unable to complete the proof because of the H rules. Maybe the same thing will happen?

I’m spending a bit of time trying to understand the Burali-Forti paradox that gives rise to the inconsistency in Girard’s System U, so that I can try to carry it out in IΞ. If IΞ does turn out to be inconsistent, I am not worried. A few universe restrictions here and there (i.e. leave U unspecified, rather than defining as K T) should do the trick, at the expense of some convenience and beauty.

Also, since I intend to compile Haskell to IΞ, I need to talk about partiality somehow (eg. prove that if a function terminates, it has this type). This has been giving me trouble, but in a good way. I found that I don’t really understand how bottoms behave, and how to talk about them without implying their semantics. I’m confident there is a way, though, maybe after adding a few axioms as a compromise. But I need to think hard and understand bottoms better, so I know what ought to be true, before I try to prove them or add them as axioms.

Might as well face it, I’m addicted to logic

I’m trying really hard not to become a logician. Like my obsession with FRP, it would be very interesting and educational. But my FRP fancy came from a desire to make games more easily, and I have since lost interest in that endeavor, studying FRP for its own sake. Now I am trying to change the world with Dana, and getting caught up in the beauty and unity of different logical systems.

This happened when trying to choose a core calculus for Dana. I am now furiously interested in Martin Bunder’s work on combinatory logic (btw, if anybody has a copy of his PhD thesis, “a one axiom set theory based on combinatory logic”, please let me know). System IΞ — or rather, systems nearby it — strike me as amazingly beautiful. It is based on an untyped lambda calculus, in which you can prove things about untyped functions (which is a way of endowing them with types). For example, to say that f has type A → B, you say:

Ξ A (B ∘ f)

In English: for all x in A, f x is in B.

However, the core logic really isn’t that important; I’ve only been focusing on it because it’s interesting. In fact, a cool thing about Dana is that there is very little dependency between its parts. But I would really like to start making something rather than researching. How come math is so fascinating?

Anyway, I am not sure that IΞ is strong enough. Assuming a “big enough” universe, I’ve been able to construct an equality predicate (the construction is essentially “the smallest reflexive relation”). But I have had little success in constructing any inductive types, such as the naturals. That’s why I want to read Bunder’s thesis — to get ideas.

Not just system IΞ, but logic in general, is fascinating me. Large cardinals in set theory, universe levels in CIC, and related “stratification” ideas abound and unify to create some intuitive notion of truth. In some sense, truth is the strongest consistent such unverse — however there is provably no such thing. In what system should we then work? Is it essential that picking a system of axioms in which to work will always be a part of mathematics? How do you consolidate results which assume different axioms?

That is actually my current goal for Dana’s core. I think the core calculus will be very weak, and you add axioms as you need more (in line with a quote from Dr. Scott himself: “If you want more you have to assume more”). Such axioms will have the same pattern as e.g. the IO monad in Haskell; your assumptions bubble their way to the top. However, it’s a much richer system than “IO or not IO”; you know exactly what you are assuming to run any piece of code. If there is a top level “user OS”, its assumptions will be vast (or maybe there’s some clever way to incrementally add them?).

Anyway, if the itch to make something irritates me so, I can assume I have a strong core logic — whatever it is — and start building things at a higher level. It’s emotionally difficult for me to do so, because I like to feel like I am on a strong foundation (isn’t that the whole point of Dana, after all?).


text:
Labyrinth of Fire (Island of Fog, Book 2)

€ 4,40
epub eBook
Sofort lieferbar (Download)
November 2009

Hal Franklin and his friends have made it safely into Miss Simone's world. As shapeshifters, some of them are looking forward to meeting their alternate kind. But others dread the prospect.
Dewey, for instance, quickly feels the pressure of being a centaur. Meanwhile, Lauren and Hal are quaking in their shoes. The village in the north is under constant attack from harpies and dragons, and these vicious creatures must somehow be reasoned with and persuaded not to plunder and steal, and most importantly, not to eat humans! The trouble is, neither harpies nor dragons are interested in negotiating.
Hal and his friends join forces to deal with these serious issues. They end up in the heart of dragon country, down in the Labyrinth of Fire beneath an oozing volcano. Somehow they must make the dragons see the error of their ways. Their quest forces them to question the extent of their shapeshifting abilities... and this leads to a shocking discovery that is likely to start a war.
Book 2 of the Island of Fog series.

EAN: 9781497787070
Untertitel: ebook Ausgabe. Empfohlen ab 13 Jahre. Sprache: Englisch.
Verlag: Unearthly Tales
Erscheinungsdatum: November 2009
Format: epub eBook
Kopierschutz: Keiner
Es gibt zu diesem Artikel noch keine Bewertungen.Kundenbewertung schreiben